开发者社区> 问答> 正文

Windows 201264位,测试telnet发现syn包三次重传导致连接延迟

问题描述:

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包,后续可以连接成功。


微软官方方案: http://social.technet.microsoft.com/wiki/contents/articles/20204.how-to-enable-and-disable-explicit-congestion-notification-in-windows.aspx

请在Win 2012的机器上,以管理员身份运行CMD,执行
netsh int tcp set global ecncapability=disabled

展开
收起
云栖徒骇 2016-02-23 14:19:21 9576 0
1 条回答
写回答
取消 提交回答
  • 码农|Coder| Pythonista
    学习了
    2016-02-24 05:56:01
    赞同 展开评论 打赏
问答排行榜
最热
最新

相关电子书

更多
前端自动化测试 立即下载
TAKING WINDOWS 10 KERNEL 立即下载
ECS运维指南之Windows系统诊断 立即下载