2013-02-08 95 views
1

如何檢查重傳定時器是否在linux tcp內核中運行?linux內核TCP重傳定時器

+0

你的意思是計時器無法運行?我不知道 – 2013-02-08 16:27:17

+0

不,我不是那個意思。 TCP中有幾個定時器。重傳計時器是其中之一,也許是最常用的計時器之一,當存在未完成的數據包時,應該運行此計時器。但是,如果一個突發的第一個數據包正在發送並且沒有出現,這個定時器沒有運行,它將在數據包發送後立即設置。我有興趣瞭解內核中的任何特定標誌,以顯示計時器是否正在運行。謝謝。 – Timir 2013-02-10 09:22:32

回答

1

配置參數我解決了這個問題,我想我應該分享的解決方案。簡而言之,當收到ACK時,通過調用inet_csk_clear_xmit_timer關閉重傳定時器。 icsk_pending是inet_connection_sock結構中的一個標誌。當接收到最早的未完成數據的ACK並因此關閉重傳計時器時,該標誌未被設置。從Linux 3.7內核

static inline void inet_csk_clear_xmit_timer(struct sock *sk, const int what) 
{ 
     struct inet_connection_sock *icsk = inet_csk(sk); 

     **if (what == ICSK_TIME_RETRANS || what == ICSK_TIME_PROBE0) { 
       icsk->icsk_pending = 0;** 
#ifdef INET_CSK_CLEAR_TIMERS 
       sk_stop_timer(sk, &icsk->icsk_retransmit_timer); 
#endif 
     } else if (what == ICSK_TIME_DACK) { 
       icsk->icsk_ack.blocked = icsk->icsk_ack.pending = 0; 
#ifdef INET_CSK_CLEAR_TIMERS 
       sk_stop_timer(sk, &icsk->icsk_delack_timer); 
#endif 
     } 
#ifdef INET_CSK_DEBUG 
     else { 
       pr_debug("%s", inet_csk_timer_bug_msg); 
     } 
#endif 
} 
3

您可以設置兩個主機:發送者和接收者。建立兩者之間的連接併發送一些流量,例如傳輸大文件。雙方嗅探交通。

雖然流量發送設置防火牆規則來刪除一些數據包,here's是隨機中斷的例子X%:

# for randomly dropping 10% of incoming packets: 
iptables -A INPUT -m statistic --mode random \ 
     --probability 0.1 -j DROP 

清理:

# for the incoming packets: 
iptables -D INPUT -m statistic --mode random \ 
     --probability 0.1 -j DROP 

如果你看看你捕捉您應該看到發件人多次發送數據包以克服掉落的數據包。這表明重傳正在工作。

如果您將丟包率提高到100%,您將看到僅由於超時而導致的重傳。

+0

謝謝。我有興趣檢查重傳計時器是否在內核級別運行,任何特定的標誌(例如在interconnect_sock結構中)。 – Timir 2013-02-10 09:25:17

+0

* inet_connection_sock – Timir 2013-02-10 09:34:24

+0

愛統計模塊 – 2015-03-26 19:43:42

1

它肯定會運行,否則它不是TCP的實現。請參閱RFC。

有人會想到,現在有人已經注意到系統的一部分沒有工作。

至於調整 - 參看下/proc/sys/net/ipv4

+0

TCP中有幾個定時器。重傳計時器是其中之一,也許是最常用的計時器之一,當存在未完成的數據包時,應該運行此計時器。但是,如果一個突發的第一個數據包正在發送並且沒有出現,這個定時器沒有運行,它將在數據包發送後立即設置。我有興趣瞭解內核中的任何特定標誌,以顯示計時器是否正在運行。 – Timir 2013-02-10 10:47:30

+0

定時器必須運行 - 它是TCP協議的一部分。 – 2013-02-10 10:49:40

+0

當然,但如果沒有未完成的數據包,重傳計時器不會運行。 – Timir 2013-02-10 10:55:01