TCP超時與重傳

2021-07-30 07:33:25 字數 2172 閱讀 3144

對每個連線, tcp管理4個不同的定時器。

1.重傳定時器適用於當希望收到另一端的確認。

2.堅持(persist)定時器使視窗大小資訊保持不斷流動,即使另一端關閉了其接收視窗。

3.保活(keepalive)定時器可檢測到乙個空閒連線的另一端何時崩潰或重啟。

4.2msl定時器測量乙個連線處於time_wait狀態的時間。

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

超時時間的計算是超時的核心部分,tcp要求這個演算法能大致估計出當前的網路狀況,雖然這確實很困難。要求精確的原因有兩個:(1)定時太久會造成網路利用率不高。(2)定時太短會造成多次重傳,使得網路阻塞。所以,書中給出了一套經驗公式,和其他的保證計時器準確的措施。

計時器的使用

乙個連線中,有且僅有乙個測量定時器被使用。也就是說,如果tcp連續發出3組資料,只有一組資料會被測量。

ack資料報不會被測量,原因很簡單,沒有ack的ack回應可以供結束定時器測量。

rtt(往返時間):指傳送端傳送tcp報文段開始到接收到對方的確定所使用的時間. 

rto(超時重傳時間):傳送端傳送tcp報文段後,在rto時間內沒有收到對方確定,即重傳該報文段.

擁塞避免演算法是一種處理丟失分組的方法。

該演算法假定由於分組受到損壞引起的丟失是非常少的,因此分組丟失意味著網路擁塞。

有兩種分組丟失的指示:超時 和 重複的ack。

擁塞避免演算法和慢啟動演算法對每個連線維持兩個變數: 擁塞視窗( cwnd ) 和 慢啟動門限( ssthresh )

演算法工作過程:

(1)對乙個給定的連線,初始化cwnd為1個報文段, ssthresh為65535個位元組.

(2)tcp輸出例程的輸出不能超過cwnd和接收方通告視窗的大小.擁塞避免是傳送方使用的流量控制,而通告視窗則是接收方進行的流量控制.前者是傳送方感受到的網路擁塞的估計,後者則與接收方在該連線上的可用快取大小有關.

(3)當擁塞發生時(超時或收到重複確認),ssthresh被設定為當前視窗大小的一半(cwnd和接收方通告視窗大小的最小值,但最少為2個報文段). 

【此外,如果是超時引起了擁塞,則cwnd被設定為1個報文段(這就是慢啟動).】

(4)當新的資料被對方確認時,就增加cwnd,但增加的方法依賴於我們是否正在進行慢啟動或擁塞避免.如果cwnd <= ssthresh,則正在進行慢啟動,否則正在進行擁塞避免. 

慢啟動一直持續到我們回到當擁塞發生時所處位置的半時候才停止,然後轉為執行擁塞避免。

cwnd增加方式:

慢啟動初始cwnd為1,每收到乙個確定就加1.成指數增長. 

擁塞避免演算法在每個rtt內增加 1/cwnd 個報文,成線性增長. 

慢啟動根據收到的ack次數增加cwnd,而擁塞避免演算法在乙個rtt不管收有多少ack也只增加一次.

如果收到3個重複ack,可認為該報文段已經丟失,此時無需等待超時定時器溢位,直接重傳丟失的包,這就叫【快速重傳演算法】.而接下來執行的不是慢啟動而是擁塞避免演算法,這就叫【快速恢復演算法】.

快重傳配合使用快恢復演算法,有以下兩個要點:

①當傳送方連續收到三個重複確認時,就執行「乘法減小」演算法,把ssthresh門限減半。但是接下去並不執行慢啟動演算法。

②考慮到如果網路出現擁塞的話就不會收到好幾個重複的確認,所以傳送方現在認為網路可能沒有出現擁塞。所以此時不執行慢啟動演算法,而是將cwnd設定為ssthresh的大小,然後執行擁塞避免演算法。

(1)源站抑制的icmp將擁塞視窗cwnd置為1個報文段,並發起慢啟動,慢啟動門限ssthresh不變,視窗將開啟直至開放了所有的通路(受視窗大小和往返時間的限制)或者發生了擁塞;

(2)主機不可達或網路不可達的icmp將被忽略,繼續傳送直至超時。 

(但是tcp會保留下icmp的錯誤並且通知使用者)

tcp為了提高自己的效率,允許再重新傳輸的時候,只要傳輸包含重傳資料報文的報文就可以,而不用只重傳需要傳輸的報文。

比如,第二個報文段需要重傳,它可以跟第三個報文段的資料重組成乙個較大的報文段然後傳送。

TCP 超時重傳

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

tcp超時重傳

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

TCP的超時與重傳

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