Linux下TCP連線斷開後不釋放的解決辦法

2021-10-13 07:41:49 字數 768 閱讀 8365

問題:在開發測試時發現斷開與伺服器端口後再次連線時拒絕連線。

分析:伺服器上檢視埠占用情況,假設埠為8888。

netstat -anp |grep 8888
發現埠8888埠顯示被占用(ip為本機ip確定是上次連線)且狀態為established,然而實際上連線已經斷開,但是服務端沒有斷開連線,檢視tcp的keepalive配置。

sysctl -a |grep keepalive
發現為預設的配置

net.ipv4.tcp_keepalive_time = 7200

net.ipv4.tcp_keepalive_probes = 9

net.ipv4.tcp_keepalive_intvl = 75

預設情況下在連線空閒7200秒即2個小時後才會傳送keepalive探測包來確認連線情況。

解決:通過修改keepalive配置為合適的值(如改為200秒)可以快速釋放埠連線。

臨時修改,通過echo設定tcp_keepalive_time。

echo "200" >  /proc/sys/net/ipv4/tcp_keepalive_time
net.ipv4.tcp_keepalive_time = 200
然後執行命令使修改後的配置生效

sysctl -p

Linux下TCP連線斷開後不釋放的解決辦法

netstat anp grep 8080發現埠8080埠顯示被占用 ip為本機ip確定是上次連線 且狀態為established,然而實際上連線已經斷開,但是服務端沒有斷開連線,檢視tcp的keepalive配置。sysctl a grep keepalive發現為預設的配置 net.ipv4.t...

Tcp 斷開連線

tcp協議規定,對於已經建立的連線,網路雙方要進行四次握手才能成功斷開連線,如果缺少了其中某個步驟,將會使連線處於假死狀態,連線本身占用的資源不會被釋放。網路伺服器程式要同時管理大量連線,所以很有必要保證無用連線完全斷開,否則大量僵死的連線會浪費許多伺服器資源。在眾多tcp狀態中,最值得注意的狀態有...

TCP連線和斷開連線

4.4 tcp資料報結構 帶陰影的幾個字段需要重點說明一下 1 序號 seq sequence number 序號佔32位,用來標識從計算機a傳送到計算機b的資料報的序號,計算機傳送資料時對此進行標記。2 確認號 ack acknowledge number 確認號佔32位,客戶端和伺服器端都可以傳...