TCP保活定時器

2022-08-16 00:36:13 字數 920 閱讀 4346

tcp有keepalive功能,它和http的keepalive功能目的不一樣。tcp伺服器希望知道客戶端是否崩潰、重新啟動或者中間路由不通。保活定時器就提供這種功能。

在進一步介紹tcp的保活定時器前,先了解乙個概念:長連線和短連線。(tcp是長連線)

長連線:建立乙個連線,多個請求復用這個連線,最後再關閉連線。

短連線:建立乙個連線,傳輸乙個請求,然後關閉連線。

當伺服器傳送探測報文時,客戶端可能處於4種不同的情況:仍然正常執行、已經崩潰、已經崩潰並重啟了、

由於中間鏈路問題不可達。在不同的情況下,伺服器會得到不一樣的反饋。

(1) 客戶主機依然正常執行,並且從伺服器端可達

客戶端的tcp響應正常,從而伺服器端知道對方是正常的。保活定時器會在兩小時(7200s)以後繼續觸發。

(2) 客戶主機已經崩潰,並且關閉或者正在重新啟動

客戶端的tcp沒有響應,伺服器沒有收到對探測包的響應,此後每隔75s傳送探測報文,一共傳送9次。

socket函式會返回-1,errno設定為etimedout,表示連線超時。

(3) 客戶主機已經崩潰,並且重新啟動了

客戶端的tcp傳送rst,伺服器端收到後關閉此連線。

socket函式會返回-1,errno設定為econnreset,表示連線被對端復位了。

(4) 客戶主機依然正常執行,但是從伺服器不可達

雙方的反應和第二種是一樣的,因為伺服器不能區分對端異常與中間鏈路異常。

socket函式會返回-1,errno設定為ehostunreach,表示對端不可達。

在連線空閒兩小時後,在乙個連線上主動傳送乙個探查分組來完成保活功。主要是為伺服器應用程式提供的。

保活定時器預設設定是每隔兩小時傳送一次報文,每次重發10次,每次75秒超時。

(23)TCP的保活定時器

一 簡介 對於運輸層是否應該存在保活定時器的討論一直都有,一些專家覺得這應該有應用層自行維護。如果乙個給定的連線在2小時內沒有任何動作,那麼伺服器就向客戶傳送乙個探查報文段。客戶主機必須處於以下4個狀態之一。1 客戶主機依然正常執行,並從伺服器可達。客戶的tcp響應正常,而伺服器也知道對方的正常工作...

C 定時器保活機制引起的記憶體洩露問題

c 中有三種定時器,system.windows.forms中的定時器和system.timers.timer的工作方式是完全一樣的,所以,這裡我們僅討論system.timers.timer和system.threading.timer 先來看乙個例子 class program static v...

TCP的定時器

在tcp協議中有的時候需要定期或者按照某個演算法對某個事件進行觸發,那麼這個時候,tcp協議是使用定時器進行實現的。在tcp中,會有四種定時器 這四個定時器都有各自的具體作用。tcp是可靠的,因此,它對於發出去的資訊,沒有得到正常ack反饋的,都會啟動乙個重傳機制。這個重傳機制使用乙個重傳定時器,當...