公司内网是通过nat实现的,目前有同事反映其电脑可以正常访问其他网站,但不是能访问公司网站。公司的其他人员访问公司网站又正常。首先以为是公司网关的问题,看了下网关的规则里,没有屏蔽该机与公司网站相关的内容。公司内网的网络结构是:client源地址转换NAT网站 。通过查看server上的信息发现,server有时会对client的syn包无响应。

解决方法:通过网络搜索,发现了如下的链接。

http://www.spinics.net/lists/linux-net/msg17197.html

其提示如下

1I've seen this. It happens only with NAT in the middle and OS X
2clients. It is cured by (1) setting tcp_timestamps off in Linux or (2)
3turning off rfc1323 on the Mac.
4sudo sysctl -w net.inet.tcp.rfc1323=0

通过测试发现可以通过以下方法解决:

1、在服务端(网站所在主机)解决

1sysctl -w net.ipv4.tcp_timestamps=0
23sudo sysctl -w net.inet.tcp.rfc1323=0

2、客户端解决

经网上查找发现,nat环境下出现该问题的机器多为win7系统。在win7的注册表中有Tcp1323Opts这个选项,会导致其在发包时加入时间戳,经过nat之后,如果前面相同的端口被使用 过,且时间戳大于这个链接发出的syn中的时间戳,就会导致在服务器上忽略掉这个syn。表现为用户无法正常完成tcp3次握手。

客户端解决的方法为修改注册表,将Tcp1323Opts设置为0 。

参考页面:

rfc1323

http://www.faqs.org/rfcs/rfc1323.html

Tcp1323Opts

http://technet.microsoft.com/en-us/library/cc938205.aspx