Windows Server 2012系统的ECS实例开启ECN功能后,访问外部网站较慢或者出现TCP连接重传问题,如何处理?

本文介绍在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连接重传。TCP重传(打码后)

问题原因

ECS实例上开启了ECN功能导致该问题,具体说明如下:

当ECS实例启用了ECN功能后访问外部网站时,会向网站服务端发送带有ECN位的数据包,但在传输过程中,如果中间链路的某个设备不支持ECN功能会直接丢弃带有ECN位的数据包,从而导致该问题发生。

说明

ECN的作用主要是在网络出现拥塞时通知TCP的传输层,减少TCP连接中被丢弃的数据包数量,达到避免重传、减少等待时间、减少网络抖动的效果。但是有些网络设备的配置规则不能与ECN兼容,例如打印机、路由器。这些设备会将ECN数据包视为非法数据包并丢弃,导致网络出现问题。

解决方案

您需要在ECS实例上关闭ECN功能,具体操作如下:

  1. 远程连接Windows实例。

    具体操作,请参见连接方式概述

  2. 打开CMD命令提示符。

    1. 单击桌面左下角开始图标图标,然后单击搜索图标图标。

    2. 在搜索框输入cmd单击命令提示符

    3. 单击命令提示符

      进入管理员:命令提示符界面。进入命令提示符

  3. 执行如下命令,查看TCP全局参数信息。

    netsh interface tcp show global

    回显信息如下,ECN 功能参数的值为enabled,则说明您的ECS实例操作系统中已开启了ECN功能。

  4. 执行如下命令,关闭ECN功能。

    netsh interface tcp set global ecncapability=disabled 
    关闭ECN
  5. 执行如下命令,查看TCP全局参数的信息,确认ECN 功能disabled

    netsh interface tcp show global

    回显信息如下,ECN 功能参数的值为disabled,则说明您的ECS实例操作系统中已关闭了ECN功能。 ECN功能关闭

  6. 重新访问外部网站。