TCP 的超時重傳

2021-04-13 01:48:01 字數 1200 閱讀 6889

tcp 的超時重傳

版權申明

一直以來都是看 《tcp/ip 協議》這本書來理解 tcp 的一些概念,但發現講解的不是很清晰(或者是翻譯質量的問題)。最近讀tanenbaum 的 《計算機網路第4版》,驚喜的發現這本書對 tcp 的一些概念做了非常清晰易懂的講解,心頭的一些疑問得到了解答。現整理一下我的理解,以加深記憶。

¨重傳定時器:tcp 必須維護乙個重傳定時器,以進行超時重傳

¨問題:如何設定超時時間間隔 rto?

時間間隔太短則可能導致大量不必要的重傳;太長則導致效能下降;

¨tcp 採用了乙個高度動態的演算法,來不斷的調整時間間隔,這個演算法就是 jacobson 1988 演算法

在此演算法中, tcp

需要維護幾個變數:

1 )、rtt:對往返時間的當前最佳估計值

當乙個資料段被傳送出去後,tcp

啟動定時器,如果在定時器過期之前確認資料段回來的話,則 tcp 測量一下這次確認所花的時間 m,然後根據如下公式更新 rtt。

rtt = artt + (1-a)m

其中 a

是平滑因子,典型的值是 7/8

這個公式的意思就是說,舊的 rtt

占有 7/8 的權重,新的往返時間占有 1/8 的權重

2 )、d:平滑的平均偏差

有了 rtt

, 如何選擇 rto 仍然需要考量,

它的計算公式是:

d    = ad + (1-a)|rtt-m|

¨rto 的計算公式: rto = rtt + 4d

這個演算法簡單高效,

¨karn 演算法:

jacobson 演算法只用於處理正常的情況,但是當發生重傳後,如果收到乙個確認,這時候就不用這個演算法來調整 rto 值了。因為你無法判斷這個確認是針對第一次傳輸,還是後來的重傳。在這種情況下,採用 karn 演算法來調整 rto 的值

。karn 演算法很簡單:

1)、 對於發生重傳的資料段,在收到確認後,不更新 rtt

2)、在重傳的時候,rto 是倍增的,直到達到最大值的限制。如果重傳超過一定的次數,tcp 連線會斷開

3)、在重傳並收到確認後,如果下一次的資料段沒有發生重傳(即一次性收到確認),則又恢復 jacobson 演算法

¨linux 中對應的超時重傳的實現**:

待續

TCP 超時重傳

tcp是一種可靠的協議,在網路互動的過程中,由於tcp報文是封裝在ip協議中的,ip協議的無連線特性導致其可能在互動的過程中丟失,在這種情況下,tcp協議如何保障其傳輸的可靠性呢?t c p通過在傳送資料報文時設定乙個超時定時器來解決這種問題,如果在定時器溢位時還沒有收到來自對端對傳送報文的確認,它...

tcp超時重傳

重傳定時器 tcp 必須維護乙個重傳定時器,以進行超時重傳 問題 如何設定超時時間間隔 rto?時間間隔太短則可能導致大量不必要的重傳 太長則導致效能下降 tcp 採用了乙個高度動態的演算法,來不斷的調整時間間隔,這個演算法就是 jacobson 1988 演算法 在此演算法中,tcp 需要維護幾個...

TCP超時重傳機制

2008 06 23 11 00 tcp協議在能夠傳送資料之前就建立起了 連線 要實現這個連線,啟動tcp連線的那一方首先將傳送乙個syn資料報。這只是乙個不包含資料的資料報,然後,開啟syn標記。如果另一方同時在它收到syn標記的埠通話,它將發回乙個syn ack syn和ack標誌位都被開啟,並...