TCP的超時與重傳

2021-08-01 23:53:23 字數 2467 閱讀 8994

超時重傳是tcp協議保證資料可靠性的乙個重要機制,其原理是在傳送某乙個資料之後就開啟乙個計時器,在一定時間內如果沒有得到傳送的資料報的ack報文,那麼就重新傳送資料,直到傳送成功為止。

超時間隔長度的設計是超時/重傳機制的核心部分,顯然,超時間隔必須大於tcp連線的往返時延(rtt),即從乙個報文段發出到收到其確認時。超時時間過長會造成網路利用率不高,過短會造成多次重傳,使得網路阻塞。

2.1 估計rtt

2.2 設定和管理重傳超時間隔

假設已經得到estimatedrtt和devrtt值,tcp超時間隔應該怎麼設定?很顯然,超時間隔應該大於等於estimatedrtt,否則將造成不必要的重傳。但是超時間隔也不應該比estimatedrtt大太多,否則當報文段丟失時,tcp不能很快地重傳報文段,從而將給上層應用帶來很大的資料傳輸時延。因此,要求將超時間隔設定為estimatedrtt加上一定餘量。當samplertt值波動大時,這個餘量應該大些,反之,則小。一般使用下面的公式去更新:

timeoutinterval (rto) = estimatedrtt+4*devrtt

超時觸發重傳的乙個問題是超時週期可能相對較長,那麼當乙個報文段丟失時,這種長超時週期迫使傳送方等待很長時間才重傳丟失的分組,因而增加了端到端的時延。故如果在發生資料丟包的情況下,如果tcp傳送方接收到對相同資料的3個冗餘的ack,它就認為跟在這個已被確認過3次的報文段之後的報文段已經丟失。一旦收到3個冗餘的ack,tcp就執行快速重傳,即在其定時器過期之前重傳該報文段。

4.1 流量控制與擁塞控制

流量控制是乙個速度匹配服務,即傳送方的傳送速率與接收方應用程式的讀速率的匹配。而擁塞控制是因ip網路的擁塞而遏制傳送方的速率。tcp通過讓傳送方維護乙個接收視窗(rcvwindow)的變數來提供流量控制,即接收視窗告訴傳送方,該接收方還有多少可用的快取空間。

這裡需要注意的是,當接收方的接收視窗為0時,即接收快取已經存滿,傳送方繼續傳送確認報文,最後接收方快取將開始清空,並且確認報文裡將包含乙個非0的rcvwindow值。

tcp擁塞控制機制讓連線的每一段都記錄乙個額外的變數,即擁塞視窗(congwin),它對乙個tcp傳送方能向網路傳送流量的速率進行了限制。

4.2 擁塞控制演算法

4.2.1 加性增,乘性減

4.2.1 慢啟動

tcp傳送方在初始階段不是線性增加其傳送速率,而是以指數速度增加,每過乙個rtt將congwin值翻倍。tcp傳送方繼續以指數速度增加其傳送速率,直到發生乙個丟包事件為止,此時congwin將被降為一半,然後線性增長。

何時結束指數增長?

1. 如果存在乙個由超時指示的丟包事件(擁塞),tcp傳送方將擁塞視窗(cwnd)設為1並重新開始慢啟動過程。並且它將第二個狀態變數的值ssthresh (慢啟動閾值)設定為cwnd/2,即當檢測到擁塞時將ssthresh設定為擁塞視窗值的1/2;

2. 當cwnd的值等於ssthresh時,結束慢啟動並且tcp轉移到擁塞避免模式。

3. 如果檢測到3個冗餘的ack,tcp執行快速重傳,並進入快速恢復狀態。

快速恢復演算法:

當收到第3個重複的ack時,將ssthresh設定為當前擁塞視窗cwnd的一半。重傳丟失的報文段。設定cwnd為ssthresh加上3倍報文段的大小。

每次收到另乙個重複的ack,cwnd增加1個報文段大小並傳送1個分組

當下乙個確認新資料的ack到達時,設定cwnd為ssthresh。

下圖中tcp reno演算法就綜合了快速恢復演算法。當丟包事件發生時(收到3個重複的ack),擁塞視窗的值為12mss,那麼cwnd設定為3+12/2=9mss,結束慢啟動階段,進入擁塞避免階段,線性增長cwnd。

另外注意的兩點:

1. 當給定連線返回icmp差錯時,tcp會忽略icmp的差錯並堅持重傳。

2. 當tcp超時並重傳是,它不一定要重傳同樣的報文段,相反,tcp允許進行重新分組而傳送乙個較大的報文段,這樣有助於提高效能。

TCP超時與重傳

對每個連線,tcp管理4個不同的定時器。1.重傳定時器適用於當希望收到另一端的確認。2.堅持 persist 定時器使視窗大小資訊保持不斷流動,即使另一端關閉了其接收視窗。3.保活 keepalive 定時器可檢測到乙個空閒連線的另一端何時崩潰或重啟。4.2msl定時器測量乙個連線處於time wa...

TCP的超時與重傳

原理 client server傳送某個資料以後就開啟乙個計時器,在一定時間內如果沒有得到傳送資料報的ack報文,那麼就重新傳送資料,知道傳送成功為止 超時和重傳要做到的幾點 擁塞視窗記做cwnd,慢啟動門限記做ssthresh 1.rtt 發包往返時間測量 首先tcp必須測量在傳送乙個帶有特別序號...

TCP的超時與重傳

tcp提供可靠的傳輸層,使用的方法就是確認從另一端收到資料,但資料和確認可能會丟失,在傳送時設定乙個定時器解決了此問題,如果當定時器溢位時還沒有收到確認就衝傳資料。對於現實而言,關鍵在於超時和重傳的策略,如何限制超時間隔和重傳頻率。對於每個連線,tcp管理4個不同的定時器 1.重傳定時器,使用於當希...