如何檢查重傳定時器是否在linux tcp內核中運行?linux內核TCP重傳定時器
1
A
回答
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%,您將看到僅由於超時而導致的重傳。
1
它肯定會運行,否則它不是TCP的實現。請參閱RFC。
有人會想到,現在有人已經注意到系統的一部分沒有工作。
至於調整 - 參看下/proc/sys/net/ipv4
相關問題
- 1. 降低linux內核定時器頻率
- 2. 更改Linux內核定時器
- 3. 其中是tcp_delack_min linux tcp內核參數?
- 4. C - Linux - 內核模塊 - TCP標頭
- 5. Linux內核TCP套接字修改
- 6. Linux內核中的TCP/IP堆棧
- 7. 定時Linux內核啓動時優化
- 8. 從tcp擁塞控制訪問TCP頭Linux內核模塊
- 9. Linux內核文件重啓
- 10. 內核定時器的例子在Linux中的實現(在內核2.6.32中)
- 11. Linux內核 - 從用戶空間停止正在運行的內核定時器
- 12. Linux內核編譯器FriendlyARM
- 13. TCP內核實現
- 14. 最小穩定Linux內核
- 15. 自定義Linux內核
- 16. disable_local_irq和內核定時器
- 17. 瞭解Linux內核中的TCP內存管理
- 18. 如何在linux內核模塊中添加RTC定時器
- 19. Linux內核定時器子系統:精度與分辨率
- 20. 如何在linux內核中實現精確的定時器
- 21. 如何在Linux內核中查找掛起的定時器
- 22. 如何確定tcp的重傳計時器的alpha值
- 23. Linux內核add_timer
- 24. linux內核模塊內存檢查器
- 25. 通過VMware傳遞linux內核選項
- 26. 當軟重啓Linux內核掛起在「解壓Linux ...完成,引導內核」
- 27. TCP和重傳
- 28. Linux內核多核問題
- 29. Linux內核如何實現重入?
- 30. 有關重寫Linux內核宏
你的意思是計時器無法運行?我不知道 – 2013-02-08 16:27:17
不,我不是那個意思。 TCP中有幾個定時器。重傳計時器是其中之一,也許是最常用的計時器之一,當存在未完成的數據包時,應該運行此計時器。但是,如果一個突發的第一個數據包正在發送並且沒有出現,這個定時器沒有運行,它將在數據包發送後立即設置。我有興趣瞭解內核中的任何特定標誌,以顯示計時器是否正在運行。謝謝。 – Timir 2013-02-10 09:22:32