TCP一共有四個主要的定時(shí)器,前面已經(jīng)講到了一個--超時(shí)定時(shí)器--是TCP里面最復(fù)雜的一個,,另外的三個是:
- 堅(jiān)持定時(shí)器
- ?;疃〞r(shí)器
- 2MSL定時(shí)器
其中堅(jiān)持定時(shí)器用于防止通告窗口為0以后雙方互相等待死鎖的情況;而?;疃〞r(shí)器則用于處理半開放連接
1.堅(jiān)持定時(shí)器
堅(jiān)持定時(shí)器的原理是簡單的,,當(dāng)TCP服務(wù)器收到了客戶端的0滑動窗口報(bào)文的時(shí)候,就啟動一個定時(shí)器來計(jì)時(shí),,并在定時(shí)器溢出的時(shí)候向向客戶端查詢窗口是否已經(jīng)增大,,如果得到非零的窗口就重新開始發(fā)送數(shù)據(jù),如果得到0窗口就再開一個新的定時(shí)器準(zhǔn)備下一次查詢,。通過觀察可以得知,,TCP的堅(jiān)持定時(shí)器使用1,,2,4,,8,,16……64秒這樣的普通指數(shù)退避序列來作為每一次的溢出時(shí)間。
糊涂窗口綜合癥
TCP的窗口協(xié)議,,會引起一種通常叫做糊涂窗口綜合癥的問題,,具體表現(xiàn)為,當(dāng)客戶端通告一個小的非零窗口時(shí),,服務(wù)器立刻發(fā)送小數(shù)據(jù)給客戶端并充滿其緩沖區(qū),,一來二去就會讓網(wǎng)絡(luò)中充滿小TCP數(shù)據(jù)報(bào),從而影響網(wǎng)絡(luò)利用率,。對于發(fā)送方和接收端的這種糊涂行為,。TCP給出了一些建議(或者是規(guī)定)。
- 接收方不通告小窗口,。通常的算法是接收方不通告一個比當(dāng)前窗口大的窗口(可以為0),,
除非窗口可以增加一個報(bào)文段大小(也就是將要接收的MSS)或者可以增加接收方緩存空間 的一半,,不論實(shí)際有多少,。
- 發(fā)送方避免出現(xiàn)糊涂窗口綜合癥的措施是只有以下條件之一滿足時(shí)才發(fā)送數(shù)據(jù): ( a )可
以發(fā)送一個滿長度的報(bào)文段; ( b )可以發(fā)送至少是接收方通告窗口大小一半的報(bào)文段,; ( c )可以 發(fā)送任何數(shù)據(jù)并且不希望接收ACK(也就是說,,我們沒有還未被確認(rèn)的數(shù)據(jù))或者該連接上 不能使用Nagle算法。
ok,,現(xiàn)在我們回憶一下,,可以發(fā)現(xiàn)TCP的很多規(guī)定都是為了在一次傳送中發(fā)送盡量多的數(shù)據(jù),例如捎帶ACK數(shù)據(jù)報(bào)文的策略,,Nagle算法,,重傳時(shí)發(fā)送包含原數(shù)據(jù)報(bào)文的策略,等等,。
2.?;疃〞r(shí)器
保活定時(shí)器更加的簡單,,還記得FTP或者Http服務(wù)器都有Sesstion Time機(jī)制么,?因?yàn)門CP是面向連接的,所以就會出現(xiàn)只連接不傳送數(shù)據(jù)的“半開放連接”,,服務(wù)器當(dāng)然要檢測到這種連接并且在某些情況下釋放這種連接,,這就是保活定時(shí)器的作用。其時(shí)限根據(jù)服務(wù)器的實(shí)現(xiàn)不同而不通,。另外要提到的是,當(dāng)其中一端如果崩潰并重新啟動的情況下,,如果收到該端“前生”的?;钐讲欤瑒t要發(fā)送一個RST數(shù)據(jù)報(bào)文幫助另一端結(jié)束連接,。
|