TCP中有哪些定時器?

每一個鏈接。TCP管理4個不用的定時器算法

  1. 重傳定時器,使用於當但願收到另外一端的確認。
  2. 堅持定時器,使窗口大小信息保持不斷流動,即便另外一端關閉了其接收窗口
  3. 保活定時器,檢測到一個空閒鏈接的另外一端什麼時候崩潰或重啓
  4. 2MSL定時器,測量一個鏈接處於TIME_WAIT狀態的時間

如何處理TCP鏈接中打開窗口的ACK丟失的狀況?

關閉窗口的場景:接收方通告發送方接收的數據窗口爲0,這個時候發送方再也不發送數據;緩存

打開窗口ACK丟失的危害:當接收方通告了一個窗口爲非0的ACK,此ACK因爲某種緣由丟失,此時發送方在永遠的等窗口打開的通知,接收方則永遠的在等新數據的到來,這樣有可能由於等待而形成鏈接關閉。服務器

解決策略:使用堅持定時器,週期性的向接收方查詢,以便發現窗口的變化class

這種週期性的查詢的,從發送方發出的報文段稱爲窗口探查,窗口探查包含一個字節的數據,可是返回窗口爲0的ACK並不對這個字節進行確認效率

什麼是糊塗窗口綜合症?

對於服務器來說,若是處理的速度過於緩慢,他會將通告窗口的值設置的愈來愈小,甚至是小於報文頭,這種狀況下,通訊的效率極其低下,這種狀況稱做糊塗窗口綜合症。定時器

如何避免糊塗窗口綜合症?

  1. 接收方:當窗口增長一個報文段大小(MSS)或者能夠增長接收方緩存空間一半時,才通告窗口大小
  2. 發送方:當能夠發送一個滿長度的報文、發送至少是接收方通告窗口大小的一半的報文或者是能夠發送任何數據而且不但願接收ACK(這種狀況,數據都已經確認了)

Nagle算法中,當報文過小的時候就不發送,這裏的小,能夠看出發送方發送的報文小於報文段大小程序

保活定時器是作什麼用的?

服務器應用程序用來探知客戶主機是否崩潰並啓動,或者崩潰關機等場景。 具體來講客戶主機一定處於如下4中狀態之一:通信

  1. 正常運行。TCP響應正常,服務端知道客戶端工做正常,服務器在兩小時後將保活定時器復位,若是這兩小時之間有應用程序經過這個鏈接通訊,保活定時器在交換數據後的將來兩小時再復位;此時的服務器應用程序不須要感知保活定時器
  2. 客戶主機崩潰,而且關閉或者正在重啓。服務器總共發送10個探查,每一個間隔75秒,若是沒有任何響應,認爲客戶主機關閉並終止鏈接;
  3. 客戶主機崩潰但已經重啓。服務器收到保活探查的響應,但響應回會是個復位,使得服務器終止鏈接;
  4. 客戶主機正常,可是服務不可達。與2相似,只能獲得沒有探查響應

缺點在於:1短暫差錯可能使得一個好的鏈接被釋放;2保活浪費沒必要要的帶寬;數據

附錄

把書讀薄(TCP/IP詳解 卷一 第二十二章 第二十三章)客戶端

相關文章
相關標籤/搜索