TCP Keep-Alive:維護長壽命的套接字連接
簡介
TCP 套接字連線在兩個端點之間提供可靠的通訊通道。與具有明確保持活動機制的 HTTP 連線不同,TCP 套接字本身並未提供此類功能。為了長時間保持持久連接,TCP 實現了一種稱為「保持活動」的機制。
TCP 保持活動過程
TCP 保持活動解決了這種情況連接的一端變得無響應的情況。流程的功能如下:
-
逾時設定:每個作業系統定義三個可設定參數:
-
保活時間: 發送ACK 封包之後的不活動時間。
-
保持活動探測: 在聲明連線失效之前發送的 ACK 探測數量。
-
Keepalive Interval: ACK 探測之間的時間間隔。
-
流程概要:
- 如果連線仍然存在空閒時間達到 Keepalive Time,將發送 ACK 封包。
- 如果遠端回應 ACK,則程序重置並繼續。
- 如果遠端在 Keepalive Probes ACK 探測後沒有回應,連線將透過 RST 封包終止。
預設情況下,這些值為:
- 維持活動時間: 7200 秒(2 小時)
- Keepalive 探針:9
- Keepalive 間隔:75 秒
設定與注意事項
設定與注意事項
- 每個套接字:
Java 目前不支援在套接字層級配置TCP 逾時。
系統範圍:- 作業系統提供了調整這些參數的機制。
- Linux:修改/proc/sys/net/ipv4/tcp_keepalive_time, / proc/sys/net/ipv4/tcp_keepalive_probes 且/proc/sys/net_ip4/p/p/ip .
- Mac OS X: 使用sysctl 設定net.inet.tcp.keepidle, net.inet.tcp.keepcnt 和net.inet.tcp.keepintvl。
Windows: 調整 HKEY_LOCAL_MACHINESystemCurrentControlSetServicesTCPIPParameters 的登錄值。
陷阱:
- 兩小時預設值:預設的維持活動時間可能會允許過時的連線持續很長一段時間。
可選實作:
TCP Keep-Alive 並未普遍實現,某些系統可能會選擇丟棄不包含資料的 ACK 封包。
使用建議:
- 對於需要高度可靠和持久連接的應用程序,減少預設的 Keepalive 時間和探測可能是有益的。
- 配置逾時時,請考慮響應能力和連接穩定性之間的權衡。
- 注意可能阻止 ACK 封包的潛在防火牆或網路設備規則,尤其是在使用非標準逾時值時。
以上是## TCP Keep-Alive 如何維持長壽命的套接字連線?的詳細內容。更多資訊請關注PHP中文網其他相關文章!