keepalive

keepalive

keepalive,是在TCP中一個可以檢測死連線的機制。

基本介紹

  • 中文名:存活檢測機制
  • 外文名:keepalive
  • 含義:一個可以檢測死連線機制
  • 位置:TCP中
  • 使用方式:根據你的需要設定就行
工作原理,使用方式,

工作原理

keepalive原理很簡單,TCP會在空閒了一定時間後傳送數據給對方:
1.如果主機可達,對方就會回響ACK應答,就認為是存活的。
2.如果可達,但應用程式退出,對方就發FIN應答,傳送TCP撤消連線。
3.如果可達,但應用程式崩潰,對方就發RST訊息。
4.如果對方主機不回響ack, rst,繼續傳送直到逾時,就撤消連線。這個時間就是默認
的二個小時。
uses WinSock2;
procedure TForm1.IdTCPServer1Connect(AThread: TIdPeerThread);
type
TCP_KeepAlive = record
OnOff: Cardinal;
KeepAliveTime: Cardinal;
KeepAliveInterval: Cardinal
end;
var
Val: TCP_KeepAlive;
Ret: DWord;
begin
Val.OnOff:=1;
Val.KeepAliveTime:=6000; //6s
Val.KeepAliveInterval:=6000; //6s
WSAIoctl(AThread.Connection.Socket.Binding.Handle, IOC_IN or IOC_VENDOR or 4,
@Val, SizeOf(Val), nil, 0, @Ret, nil, nil)
end;
--------------------------------------------------------

使用方式

KeepAliveTime 值控制 TCP/IP 嘗試驗證空閒連線是否完好的頻率。如果這段時間內沒有活動,則會傳送保持活動信號。如果網路工作正常,而且接收方是活動的,它就會回響。如果需要對丟失接收方敏感,換句話說,需要更快地發現丟失了接收方,請考慮減小這個值。如果長期不活動的空閒連線出現次數較多,而丟失接收方的情況出現較少,您可能會要提高該值以減少開銷。預設情況下,如果空閒連線 7200000 毫秒(2 小時)內沒有活動,Windows 就傳送保持活動的訊息。通常,1800000 毫秒是首選值,從而一半的已關閉連線會在 30 分鐘內被檢測到。
KeepAliveInterval 值定義了如果未從接收方收到保持活動訊息的回響,TCP/IP 重複傳送保持活動信號的頻率。當連續傳送保持活動信號、但未收到回響的次數超出 TcpMaxDataRetransmissions 的值時,會放棄該連線。如果期望較長的回響時間,您可能需要提高該值以減少開銷。如果需要減少花在驗證接收方是否已丟失上的時間,請考慮減小該值或 TcpMaxDataRetransmissions 值。預設情況下,在未收到回響而重新傳送保持活動的訊息之前,Windows 會等待 1000 毫秒(1 秒)。
KeepAliveTime 根據你的需要設定就行,比如10分鐘,注意要轉換成MS。
XXX代表這個間隔值得大小

相關詞條

熱門詞條

聯絡我們