本文介绍在Windows Server 2012系统的ECS实例开启ECN(Explicit Congestion Notification)功能后,出现访问外部网站变慢或者TCP连接重传问题的问题描述、问题原因和解决方案。
问题描述
在Windows Server 2012系统的ECS实例上使用浏览器访问外部网站时,出现访问速度较慢或者TCP连接重传的问题。
TCP连接重传问题可以通过抓包工具(例如Wireshark)进行核实,如图所示,在抓包结果的同一个TCP序列号(Sequence Number)和确认号(Acknowledgment Number)的Info信息中,出现“TCP Retransmission”信息即为TCP连接重传。
问题原因
ECS实例上开启了ECN功能导致该问题,具体说明如下:
当ECS实例启用了ECN功能后访问外部网站时,会向网站服务端发送带有ECN位的数据包,但在传输过程中,如果中间链路的某个设备不支持ECN功能会直接丢弃带有ECN位的数据包,从而导致该问题发生。
ECN的作用主要是在网络出现拥塞时通知TCP的传输层,减少TCP连接中被丢弃的数据包数量,达到避免重传、减少等待时间、减少网络抖动的效果。但是有些网络设备的配置规则不能与ECN兼容,例如打印机、路由器。这些设备会将ECN数据包视为非法数据包并丢弃,导致网络出现问题。
解决方案
您需要在ECS实例上关闭ECN功能,具体操作如下:
远程连接Windows实例。
具体操作,请参见连接方式概述。
打开CMD命令提示符。
单击桌面左下角图标,然后单击图标。
在搜索框输入
cmd
。单击命令提示符。
进入管理员:命令提示符界面。
执行如下命令,查看TCP全局参数信息。
netsh interface tcp show global
回显信息如下,ECN 功能参数的值为enabled,则说明您的ECS实例操作系统中已开启了ECN功能。
执行如下命令,关闭ECN功能。
netsh interface tcp set global ecncapability=disabled
执行如下命令,查看TCP全局参数的信息,确认ECN 功能为disabled。
netsh interface tcp show global
回显信息如下,ECN 功能参数的值为disabled,则说明您的ECS实例操作系统中已关闭了ECN功能。
重新访问外部网站。