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給出了一些建議(或者是規定)。 spa

  1. 接收方不通告小窗口。一般的算法是接收方不通告一個比當前窗口大的窗口(能夠爲0),
    除非窗口能夠增長一個報文段大小(也就是將要接收的MSS)或者能夠增長接收方緩存空間
    的一半,不論實際有多少。
  2. 發送方避免出現糊塗窗口綜合症的措施是隻有如下條件之一知足時才發送數據: ( a )可
    以發送一個滿長度的報文段; ( b )能夠發送至少是接收方通告窗口大小一半的報文段; ( c )能夠
    發送任何數據而且不但願接收ACK(也就是說,咱們沒有還未被確認的數據)或者該鏈接上
    不能使用Nagle算法。

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

2.保活定時器

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

相關文章
相關標籤/搜索