TCP Socket 連接有「KeepAlive」功能嗎?
簡介
建立 TCP 連線涉及在雙方上設定套接字雙方。正常情況下,這些套接字會無限期地保持開啟。然而,可能會出現一端關閉連接而不通知另一端的情況。為了解決這個問題,TCP 採用了一種稱為 Keep-Alive 的機制。
TCP Keep-Alive 過程
TCP Keep-Alive 基於三個可設定參數進行操作:
-
p:發送ACK 封包以檢查連線狀態之前的時間(預設為7200)。
-
tcp_keepalive_probes:ACK 偵測數量在終止連線之前發送(預設 9)。
-
tcp_keepalive_intvl:傳送 ACK 探測之間的時間間隔(預設 75)。
流程的工作原理如下:
- 在 tcp_keepalive_time 的空閒時間後,發送者發送 ACK 封包。
- 如果接收者回覆 ACK,則流程重設並返回步驟 1。
- 如果沒有收到回應,發送方等待 tcp_keepalive_intvl 秒並重複步驟 2。
- 如果發送 tcp_keepalive_probes ACK 沒有回應,則使用 RST 封包終止連線。
陷阱
-
2 小時預設:由於預設tcp_keepalive_time 為2 小時,過時的連線可能會持續很長時間
-
Keep-Alive 可選性:Keep-Alive 對於TCP 實作來說不是強制性的。某些設備可能不支援它,可能會導致問題。
更改 TCP 逾時
如有必要,您可以修改您的 TCP 保持活動設定係統。具體方法取決於您的作業系統:
-
Linux:在 /proc 中設定值或使用 sysctl。
-
Mac OS X :使用 sysctl 設定值或修改 /etc/sysctl.conf。
-
Windows:調整登錄中的設定。
結論
TCP 連線具有維持活動機制,可以偵測並終止過時的連線。預設情況下,Keep-Alive 處於啟用狀態,並設定為在 2 小時 11 分鐘不活動後終止連接,但可以根據特定要求自訂這些設定。
以上是TCP Keep-Alive 如何防止失效連線?的詳細內容。更多資訊請關注PHP中文網其他相關文章!