Windows Server 2016 服务器 telnet远程设备,需要等9秒多才能连上,ping 正常,网上找各种原因,尝试了反向域名解析的方法,还是无效。
后来通过抓包发现:
第一次,发送等待3秒,失败;第二次发送等待6秒,失败,第三次成功。
查询官方文档,因为windows server 2016中的ECN功能默认是开启的,ECN利用了TCP/IP中未使用的字段来支持功能,目的是为了减少网络拥堵,但网络中间的各种设备可能不支持,并把该字段不为0的包丢弃。
telnet的时候第一次发送带ECN标志的SYN包,3秒后未收到响应,接着发第二次,6秒后未收到相应,第三次会采用不带ECN的SYN包,即可成功,所以导致telnet需要9秒多才可以连上。
解决办法很简单,管理员模式运行CMD,执行 netsh int tcp set global ecncapability=disabled 关闭此功能即可。
=======================================================================================================
在Windows server 2016系统下,默认打开了ECN功能。ECN的作用主要是在网络出现拥塞的时候通知TCP,减少TCP连接中被丢弃的数据包数量,以避免重传、减少等待时间,网络堵塞时提高整体的传输速度,尤其是网络抖动。但是也有一些网络设备的实现和配置规则不能很好的与ECN兼容。可能会将ECN交换包视为非法,丢弃已设置ECN的数据包,导致网络延迟问题。此时可以通过关闭ECN功能尝试解决。如何关闭ECN功能呢?
1.打开“运行”,输入cmd,点击“确定”
2.在命令行界面输入netsh interface tcp show global按回车可以查看信息,enabled说明功能是启用状态
3.输入netsh int tcp set global ecn=disable,按回车即可关闭ECN功能
4.此时输入netsh interface tcp show global按回车可以查看ECN功能已处于关闭状态