(21)TCP的超時和重傳

2022-08-17 05:18:14 字數 2011 閱讀 2543

一、簡介

tcp提供可靠的傳輸層。使用的方法之一是確認從另一端收到的資料,但資料和確認都有可能會丟失。tcp通過設定定時器和重傳策略來解決這種問題。

tftp客戶使用udp時限了乙個簡單的超時和重傳機制:5秒作為定時器值,每隔5秒進行重傳;另外,向乙個不存在的主機主機傳送arp,當tcp試圖建立連線的時候,在每個重傳之間使用乙個較長的時延來重傳syn。

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

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

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

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

(4)2msl定時器測量乙個連線處於time_wait狀態的時間。

二、往返時間測量

tcp超時和重傳重最重要的就是對乙個給定連線的往返時間(rtt)的測量。由於路由器和網路流量均會變化,因此tcp應該跟蹤這些變化並相應地改變超時時間。首先tcp必須測量在傳送乙個帶有特別序號地位元組和接收到包含該位元組地確認之間的rtt。

三、擁塞避免演算法

擁塞避免演算法是一種處理丟失分組的方法。該演算法假定由於分組受到損壞引起的丟失是非常少的(遠小於1%),因此分組丟失就意味著在源主機和目的主機之間的某處網路上發生了阻塞。

有兩種分組丟失的指示:發生超時和收到重複的確認。

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

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

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

(3) 當擁塞發生時,ssthresh被設定為當前視窗大小的一半(cwnd和接收方通告視窗大小的最小值,但最小為2個報文段)。此外,如果是超時引起了擁塞,則cwnd被設定為1個報文段。

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

擁塞避免演算法要求每次接收到乙個確認時將cwnd增加1/cwnd。與慢啟動的指數增加比起來,這是一種加性增長。我們希望在乙個往返時間內最多為cwnd增加1個報文段,然而慢啟動將根據這個往返時間中所收到的確認的個數增加cwnd。

四、快速重傳和快速恢復演算法

如果我們一連串收到3個或以上的重複ack,就非常可能是乙個報文段丟失了。於是我們就重傳丟失的資料報文段,而無需等待超時定時器溢位。這就是快速重傳演算法。接下來執行的不是慢啟動而是擁塞避免演算法,這就是快速恢復演算法。

這個演算法通常按如下過程實現:

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

(2)每次收到另乙個重複的ack時,cwnd增加1個報文段大小並傳送乙個1個分組,如果新的cwnd允許傳送。

(3)當下乙個確認新資料的ack到達時,設定cwnd為ssthresh,這個ack應該是在進行重傳後的乙個往返時間內對步驟1中重傳的確認。另外,這個ack也應該是對丟失的分組和收到的第乙個重複的ack之間的所有中間報文段的確認。

五、icmp差錯

tcp如何處理乙個給定的連線返回的icmp差錯。tcp能夠遇到的最常見的icmp差錯就是源站抑制、主機不可達和網路不可達。

(1)乙個接收到的源站抑制引起擁塞視窗cwnd被置為1個報文段大小來發起慢啟動,但是慢啟動門限ssthresh沒有變化,所以視窗將開啟直到它開放了所有的通路或者發生了擁塞。

(2)乙個接收到的主機不可達或網路不可達實際都被忽略,因為這兩個差錯都被認為是短暫現象。tcp試圖傳送引起該差錯的資料,儘管最終有可能會超時。

六、重新分組

當tcp超時並重傳時,它並不一定要重傳同樣的報文段,相反,tcp允許進行重新分組而傳送乙個較大的報文段。在協議中這是允許的,因為tcp是使用位元組序號而不是報文段序號來進行識別它所要傳送的資料和進行確認。 

TCP 超時重傳

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

tcp超時重傳

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

TCP 的超時重傳

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