1. 程式人生 > >TCP/IP學習筆記(13)-TCP堅持定時器,TCP保活定時器

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

TCP一共有四個主要的定時器,前面已經講到了一個--超時定時器--是TCP裡面最複雜的一個,另外的三個是:         1.    堅持定時器         2.    保活定時器         3.    2MSL定時器 其中堅持定時器用於防止通告視窗為0以後雙方互相等待死鎖的情況;而保活定時器則用於處理半開放連線。 1.堅持定時器         堅持定時器的原理是簡單的,當TCP伺服器收到了客戶端的0滑動視窗報文的時候,就啟動一個定時器來計時,並在定時器溢位的時候向向客戶端查詢視窗是否已經增大,如果得到非零的視窗就重新開始傳送資料,如果得到0視窗就再開一個新的定時器準備下一次查詢。通過觀察可以得知,TCP的堅持定時器使用1,2,4,8,16……64秒這樣的普通指數退避序列來作為每一次的溢位時間。     糊塗視窗綜合症     TCP的視窗協議,會引起一種通常叫做糊塗視窗綜合症的問題,具體表現為,當客戶端通告一個小的非零視窗時,伺服器立刻傳送小資料給客戶端並充滿其緩衝區,一來二去就會讓網路中充滿小TCP資料報,從而影響網路利用率。對於傳送方和接收端的這種糊塗行為。TCP給出了一些建議(或者是規定)。                   1.接收方不通告小視窗。通常的演算法是接收方不通告一個比當前視窗大的視窗(可以為0),除非視窗可以增加一個報文段大小(也就是將要接收的MSS)或者可以增加接收方快取空間
的一半,不論實際有多少。                   2.傳送方避免出現糊塗視窗綜合症的措施是隻有以下條件之一滿足時才傳送資料: ( a )可以傳送一個滿長度的報文段; ( b )可以傳送至少是接收方通告視窗大小一半的報文段; ( c )可以傳送任何資料並且不希望接收ACK(也就是說,我們沒有還未被確認的資料)或者該連線上不能使用Nagle演算法。         ok,現在我們回憶一下,可以發現TCP的很多規定都是為了在一次傳送中傳送儘量多的資料,例如捎帶ACK資料報文的策略,Nagle演算法,重傳時傳送包含原資料報文的策略,等等。  2.保活定時器         保活定時器更加的簡單,還記得FTP或者Http伺服器都有Sesstion Time機制麼?因為TCP是面向連線的,所以就會出現只連線不傳送資料的“半開放連線”,伺服器當然要檢測到這種連線並且在某些情況下釋放這種連線,這就是保活定時器的作用。其時限根據伺服器的實現不同而不通。另外要提到的是,當其中一端如果崩潰並重新啟動的情況下,如果收到該端“前生”的保活探察,則要傳送一個RST資料報文幫助另一端結束連線。 參考部落格:http://blog.csdn.net/goodboy1881/article/details/758034