2017-09-06 61 views
0

我試圖通過設置tcp_fin_timeout詳細here減少連接處於TIME_WAIT狀態的時間量:無法減少TIME_WAIT

root:~# sysctl -w net.ipv4.tcp_fin_timeout=30 
net.ipv4.tcp_fin_timeout = 30 

但是,此設置似乎並不影響什麼。當我查看機器的netstat時,連接仍然等待默認的60秒:

root:~# watch netstat -nato 
tcp  0  0 127.0.0.1:34185   127.0.0.1:11209   TIME_WAIT timewait (59.14/0/0) 
tcp  0  0 127.0.0.1:34190   127.0.0.1:11209   TIME_WAIT timewait (59.14/0/0) 

有什麼我失蹤了嗎?該機器正在運行Ubuntu 14.04.1。

回答

0

你的鏈接是城市神話。的net.ipv4.tcp_fin_timeout實際功能是as follows

這指定多少秒等待最終的FIN數據包之前插座被強制關閉。這嚴格違反了TCP規範,但需要防止拒絕服務攻擊。在Linux 2.2中,默認值爲180.

這與TIME_WAIT沒有任何關係。它在FIN_WAIT_1中爲套接字建立一個超時,之後連接被重置(完全繞過TIME_WAIT)。如上所述,這是一種DOS措施,不應出現在正確編寫的客戶端 - 服務器應用程序中。您不想將其設置得如此之低以至於無法重置普通連接:您將丟失數據。實際上,你根本不想擺弄它。

減少TIME_WAIT狀態的正確方法是here