问题描述:
1、用户的服务器是2012 64位,测试telnet www.106008.com 80需要很长时间,抓包发现发送了syn包后有三次重传,之后就可以连上了,而去连其他网站(如t.cn)就可以很快的连上。
2、这边使用2008的系统可以很快连上,但是用测试账号重新开了一台2012 64位的机子,问题复现。
解决过程:
在客户机器上抓包,检查为何连接需要10秒时间建立
从网络包可以明显看到服务器前2个SYN网络包没有得到对端的响应(第一次重传3秒,第二次重传6秒),但是第3个SYN包立刻得到响应。这种表现我们很怀疑是否是SYN包自身的某些Option或者配置导致,检查后果然发现前2个SYN包邮ECN标志位,第3个成功的SYN包没有。进一步研究我们发现:
该问题的原因是由于Windows 2012 引入的新功能ECN(Explicit Congestion Notification)导致。ECN功能是根据RFC规定来减少网络包重传的机器,但是由于国内某些ISP封杀此类的SYN包,导致目标机器无法收到带有ECN标志的SYN包,Windows机器在发送2次ECN包没有得到响应后(第一次重传3秒,第二次重传6秒),会采用没有ECN标志位的SYN包,后续可以连接成功。
netsh int tcp set global ecncapability=disabled
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。