1. 程式人生 > >Linux系統不響應SYN包的解決辦法

Linux系統不響應SYN包的解決辦法

關於syn為什麼沒有迴應的問題真是鬱悶了好久。
現象就是在客戶端發出syn包的時候,伺服器端對客戶端的syn包不做任何迴應。
在網上逛了逛,終於找到有人也發生了這樣的情況,發生的原因解釋如下:
當客戶端發出的syn包帶有時間戳的情況下,經過NAT轉換後,如果使用的埠被之前使用過,而且時間戳大於本次syn包中的時間戳。系統將會直接丟棄。造成本次連結無法正常完成TCP/IP的3次握手。【該功能和rfc1323有關,後面有連結】
解決的方法很簡單,分為兩種:
在客戶端:關閉rfc1323
在服務端:設定sysctl.conf裡面tcp_timestamps=0也可以只用命令sysctl -w net.ipv4.tcp_timestamps=0

收集到的幾種客戶端的rfc引數位置
Linux:和伺服器端的基本相同
微軟為登錄檔方式,位置為【HKLM\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters\Tcp1323Opts】:
Windows XP:預設值為3
Windows 7 家庭版:預設值為1
Windows 7 旗艦版:沒有找到這個鍵值

關於本文提到的技術解釋:
Tcp1323Opts:http://technet.microsoft.com/en-us/library/cc938205.aspx
RFC1323:http://tools.ietf.org/html/rfc1323
最早看到解決這個問題的文章:http://www.spinics.net/lists/linux-net/msg17195.html