TCP保活定時器

現實中可能存在這麼一種空閒TCP連接:沒有任何數據流通過。也就是說,如果TCP連接的雙方都沒有向對方發送數據,則在兩個TCP模塊之間不交換任何信息,這意味着我們可以啓動一個客戶與服務器建立連接,然後長時間不使用,而連接依然保持。中間的路由器可以崩潰和重啓,電話線可以被掛斷再連接,但只要兩端的主機沒有被重啓,則連接依然保持建立。

然而,許多時候一個服務器希望知道客戶主機是否崩潰並關機或者崩潰又重新啓動,許多實現提供的保活定時器可以提供這種能力。保活並不是TCP規範中的一部分。


保活定時器工作原理:

如果一個給定的連接在2小時內沒有任何動作,那麼服務器就向客戶發送一個探查報文段。客戶主機必須處於以下4個狀態之一:

(1)客戶主機依然正常運行,並從服務器可達。客戶的TCP響應正常,而服務器也知道對方的正常工作的,服務器在2小時內將保活定時器復位。
(2)客戶主機已經崩潰,並且關閉或者正在重新啓動。在任何一種情況下,客戶的TCP都沒有響應,服務器將不能收到對探查的響應,並在75秒後超時,總共發送10個探查,每個間隔75秒。如果服務器沒有收到一個響應,它就認爲客戶主機已經關閉並終止連接。
(3)客戶主機崩潰並已經重新啓動。這是服務器將收到一個對其保活探查的響應,但這個響應是一個RST復位,使得服務器終止這個連接。

(4)客戶主機正常運行,但是從服務器不可達。這與狀態2相同,因爲TCP不能夠區分狀態4與2之間的區別,它所能發現的就是沒有收到探查的響應。

服務器不用關注客戶主機被關閉和重新啓動的情況,當系統被操作員關閉時,所有的應用進程也被終止,這會使客戶的TCP在連接上發出一個FIN。接收到FIN將使服務器的TCP向服務器進程報告文件結束,使服務器可以檢測到這個情況。

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