修改windows、linux、aix等系統TCP/IP 參數

關閉TCP/IP連接的四個過程

那麼雙方關閉這個TCP連接共需要四個packet

      Client --->  FIN  --->  Server 

      Client <---  ACK  <---  Server 

 這時候Client端處於FIN_WAIT_2狀態;而Server 程序處於CLOSE_WAIT狀態。

      Client <---  FIN  <---  Server 

這時Server 發送FINClientServer 就置爲LAST_ACK狀態。

       Client --->  ACK  --->  Server 

Client迴應了ACK,那麼Server 的套接字纔會真正置爲CLOSED狀態。

Server 程序處於CLOSE_WAIT狀態,而不是LAST_ACK狀態,說明還沒有發FINClient,那麼可能是在關閉連接之前還有許多數據要發送或者其他事要做,導致沒有發這個FIN packet

通常來說,一個CLOSE_WAIT會維持至少2個小時的時間。如果有個流氓特地寫了個程序,給你造成一堆的CLOSE_WAIT,消耗

你的資源,那麼通常是等不到釋放那一刻,系統就已經解決崩潰了。

只能通過修改一下TCP/IP的參數,來縮短這個時間:修改tcp_keepalive_*系列參數有助於解決這個問題。


 

在不同的操作系統上,修改TCP/IP參數的方法略有不同,現在對Windows 2000/NT、RISC6000/AIX、HP-UNIX、SUN Solaris以及SCO OpenServer平臺下的修改方法逐一進行說明:

1)在Windows NT平臺上, 我們利用regedit來修改系統註冊表,修改HKEY_LOCAL_MACHINE\CurrentControlSet\Services\Tcpip\Parameters下的以下三個參數:
KeepAliveInterval,設置其值爲1000
KeepAliveTime,設置其值爲300000(單位爲毫秒,300000代表5分鐘)
TcpMaxDataRetransmissions,設置其值爲5

3)在Linux平臺上修改系統的參數,系統默認超時時間的是7200秒,也就是2小時,這個太大了,對於我們這樣的負荷來說,於是修改如下幾個參數:

sysctl -w net.ipv4.tcp_keepalive_time=30
sysctl -w net.ipv4.tcp_keepalive_probes=2
sysctl -w net.ipv4.tcp_keepalive_intvl=2
 

4)在RISC6000/AIX平臺上, 用no命令修改如下參數:
tcp_keepidle保持TCP/IP連接的時間,單位爲0.5秒,缺省值爲14,400,即兩個小時,我們可將它設爲5分鐘;
tcp_keepinittcp連接初始timeout值,單位爲0.5秒,缺省值爲150,我們可將它設爲50;
tcp_keepintvl連接間隔,單位爲0.5秒,缺省值爲150,我們可將它設爲50;
我們也可以修改/etc/rc.net文件,
/usr/sbin/no -o tcp_keepidle=240
/usr/sbin/no -o tcp_keepinit=50
/usr/sbin/no -o tcp_keepintvl=50
注意:直接使用命令行修改,在機器重啓後,會失效;修改rc.net文件,可以做到永久生效。

5)在HP平臺上,
對於HP-UNIX V10.20及其在此之前的版本,用/usr/contrib/bin nettune命令來修改有關參數;
對於HP-UNIX V10.30及其以上版本,用/usr/bin/ndd命令來修改有關參數。

6)在SUN Solaris平臺上,
用ndd -set /dev/tcptcp_keepalive_interval NNN命令來修改有關參數,tcp_keepalive_interval的單位爲毫秒,缺省值爲7200000毫秒,即2個小時。

7)在SCO OpenServer平臺上,
tcp_keepalive 和 tcp_keepidle 相同,其原先默認值爲 7200 秒,可設爲 600秒。tcp_keepintvl 其原先默認值爲 75 秒,可設爲15秒。均以"秒"爲單位。
運行命令 ifconfig 命令修改:
/etc/inconfig tcp_keepidle
/etc/inconfig tcp_keepintvl

  通常,操作系統的TCP/IP參數的缺省設置是2個小時(常見的操作系統平臺如:Windows 2000/NT以及AIX,HP-UX,Sun Solaris,Linux等,缺省設定均爲2個小時),即發送KeepAlive探測包的時間是2小時,所以需要2個小時的時間它纔會獲知網絡連接已經斷開,因此當有需要的時候我們可以通過配置TCP/IP KeepAlive參數來提高TCP/IP的響應速度。

參考文件:http://haka.sharera.com/blog/BlogTopic/32309.htm

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章