关于部分win7用户不能访问校园Wlan问题处理情况
针对部分windows 7 用户不能打开cmcc-edu portal页面的问题。2月23,24日进行了在芜湖进行旅客多种测试抓包。根据抓包结果,已定位出原因。
一、抓包情况:
对XP、正版windows 7,盗版windows 7 进行测试。XP和正版windows 7
打开edu portal页面未发现异常,而使用盗版windows 7系统进行测试时,在业务忙时有时候能够打开,业务忙时基本上不能打开。对比这几种系统的tcp syn包:
(1)正版windows7的包
Transmission Control Protocol, Src Port: 22801 (22801), Dst Port: http-alt (8080), Seq: 0, Len: 0
Source port: 22801 (22801)
Destination port: http-alt (8080)
Stream index: 1201
Sequence number: 0 (relative sequence number)
Header length: 32 bytes
Flags: 0x02 (SYN)
Checksum: 0xdae1 [validation disabled]
Options: (12 bytes)
Maximum segment size: 1380 bytes
NOP
Window scale: 2 (multiply by 4)
NOP
NOP
TCP SACK Permitted Option: True
(2)XP 系统发出的tcp syn包
Transmission Control Protocol, Src Port: ridgeway1 (2776), Dst Port: http-alt (8080), Seq: 0, Len: 0
Source port: ridgeway1 (2776)
Destination port: http-alt (8080)
Stream index: 6
Sequence number: 0 (relative sequence number)
Header length: 44 bytes
Flags: 0x02 (SYN)
Checksum: 0x6242 [validation disabled]
Options: (24 bytes)
Maximum segment size: 1460 bytes
NOP
Window scale: 3 (multiply by 8)
NOP
NOP
Timestamps: TSval 0, TSecr 0
NOP
NOP
TCP SACK Permitted Option: True
(3)盗版win7 的tcp syn包
Transmission Control Protocol, Src Port: 60598 (60598), Dst Port: http-alt (8080), Seq: 0, Len: 0
Source port: 60598 (60598)
Destination port: http-alt (8080)
Stream index: 2678
Sequence number: 0 (relative sequence number)
Header length: 40 bytes
Flags: 0x02 (SYN)
Checksum: 0x612e [validation disabled]
Options: (20 bytes)
Maximum segment size: 1380 bytes
NOP
Window scale: 2 (multiply by 4)
TCP SACK Permitted Option: True
Timestamps: TSval 285688, TSecr 0
从portal侧抓包发现,portal服务器对正版win7 和xp系统的tcp syn包都返回ACK包,但对盗版win7 发出的tcp syn包有时候响应,有时候不响应。不响应时,终端与portal服务器之间的tcp连接无法正常建立,导致页面不能打开。
对比三种数据包,就在时间戳上有差异,盗版win7发出的tcp syn包带有时间戳,因此怀疑时间戳问题导致的故障。
二:问题分析
针对带有时间戳的tcp syn包不响应的问题,查阅了相关资料。在网上中查到(
http://www.spinics.net/lists/linux-net/msg17195.html)相关内容,和我们遇到的非常相似,后来查到rfc1323中有相关内容。测试了下,已经解决了问题。产生问题的原因是 部分win7系统中的注册表中有Tcp1323Opts这个选项,会导致其在发包时加入时间戳,经过nat之后,如果前面相同的端口被使用过,且时间戳大于这个链接发出的syn中的时间戳,服务器上就会忽略掉这个syn,不返会syn-ack消息,表现为用户无法正常完成tcp3次握手,从而不能打开portal页面。在业务闲时,如果用户nat的端口没有被使用过时,就可以正常打开;业务忙时,nat端口重复使用的频率高,很难分到没有被使用的端口,从而产生这种问题。
目前看有两种方法解决:
(1) 是在服务器上修改变量
Sysctl –w net.ipv4.tcp_timestamps=0
但我们在联创测试的portal上更改后,测试发现没有作用,portal服务器红帽子linux系统,已经请联创公司定位原因。
(2)修改客户端的注册表Tcp1323Opts设置为0。
三、测试结果
到芜湖高校现场对终端修改后,目前修改了3台客户终端注册表,问题均得到解决。目前建议通过引导客户修改注册表来解决该问题,由联创公司尽快制定修改方案,选择业务闲时对服务器进行修改。