TCP/IP詳解學習筆記(13)-TCP堅持定時器,TCP保活定時器

                TCP/IP詳解學習筆記(13)-TCP堅持定時器,TCP保活定時器

TCP一共有四個主要的定時器,前面已經講到了一個--超時定時器--是TCP裏面最複雜的一個,另外的三個是:

1.         堅持定時器

2.         保活定時器

3.         2MSL定時器

其中堅持定時器用於防止通告窗口爲0以後雙方互相等待死鎖的情況;而保活定時器則用於處理半開放連接

1.堅持定時器

堅持定時器的原理是簡單的,當TCP服務器收到了客戶端的0滑動窗口報文的時候,就啓動一個定時器來計時,並在定時器溢出的時候向向客戶端查詢窗口是否已經增大,如果得到非零的窗口就重新開始發送數據,如果得到0窗口就再開一個新的定時器準備下一次查詢。通過觀察可以得知,TCP的堅持定時器使用124816……64秒這樣的普通指數退避序列來作爲每一次的溢出時間。

糊塗窗口綜合症

TCP的窗口協議,會引起一種通常叫做糊塗窗口綜合症的問題,具體表現爲,當客戶端通告一個小的非零窗口時,服務器立刻發送小數據給客戶端並充滿其緩衝區,一來二去就會讓網絡中充滿小TCP數據報,從而影響網絡利用率。對於發送方和接收端的這種糊塗行爲。TCP給出了一些建議(或者是規定)。

1.         接收方不通告小窗口。通常的算法是接收方不通告一個比當前窗口大的窗口(可以爲0),
除非窗口可以增加一個報文段大小(也就是將要接收的MSS)或者可以增加接收方緩存空間
的一半,不論實際有多少。

2.         發送方避免出現糊塗窗口綜合症的措施是隻有以下條件之一滿足時才發送數據: ( a )
以發送一個滿長度的報文段; ( b )可以發送至少是接收方通告窗口大小一半的報文段; ( c )可以
發送任何數據並且不希望接收ACK(也就是說,我們沒有還未被確認的數據)或者該連接上
不能使用Nagle算法。

ok,現在我們回憶一下,可以發現TCP的很多規定都是爲了在一次傳送中發送儘量多的數據,例如捎帶ACK數據報文的策略,Nagle算法,重傳時發送包含原數據報文的策略,等等。

2.保活定時器

保活定時器更加的簡單,還記得FTP或者Http服務器都有Sesstion Time機制麼?因爲TCP是面向連接的,所以就會出現只連接不傳送數據的半開放連接,服務器當然要檢測到這種連接並且在某些情況下釋放這種連接,這就是保活定時器的作用。其時限根據服務器的實現不同而不通。另外要提到的是,當其中一端如果崩潰並重新啓動的情況下,如果收到該端前生的保活探察,則要發送一個RST數據報文幫助另一端結束連接。


發佈了50 篇原創文章 · 獲贊 79 · 訪問量 24萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章