我们平时很少用Windows Server上网,这个问题不容易被发现,但是有时候Windows Server 2012以上与Windows 2008版本互联时,会发生网络传输很慢的情况。
遇到服务器与远程服务的 TCP 连接缓慢问题,需要检查 Windows 显式拥塞通知 (ECN) 的状态。这是个常见问题。
显式拥塞通知(ECN) 是对 Internet 协议 (IP) 和RFC 3168中定义的传输控制协议 (TCP) 的扩展。 ECN 允许在不丢包的情况下端到端通知网络拥塞。ECN是一个可选特性,只有在两个端点都支持并且愿意使用的情况下才使用;只有在底层网络支持时才有效。Windows Server 2008 和 Windows Vista 之后的 Windows 版本支持 TCP 的 ECN,但默认禁用,从 Windows Server 2012 开始,ECN 默认启用。
如果在一台服务器主机(一般是windows 2012以上版本)上启用了 ECN,但下游设备不支持 ECN,则出站 tcp 连接可能需要几秒钟(看起来 Windows 在两次传输失败后关闭 ECN 标志,然后设备确认数据包)。
要检查 ECN 状态,请在命令提示符处输入以下内容:
netsh interface tcp show global
C:\Users\Evan>netsh interface tcp show global
Querying active state...
TCP Global Parameters
----------------------------------------------
Receive-Side Scaling State : enabled
Receive Window Auto-Tuning Level : normal
Add-On Congestion Control Provider : default
ECN Capability : enabled <<现在是启用状态
RFC 1323 Timestamps : disabled
Initial RTO : 1000
Receive Segment Coalescing State : enabled
Non Sack Rtt Resiliency : disabled
Max SYN Retransmissions : 4
Fast Open : enabled
Fast Open Fallback : enabled
HyStart : enabled
Proportional Rate Reduction : enabled
Pacing Profile : off
如果启用了 ECN 功能,但想禁用它,在命令提示符处输入以下内容(使用管理员权限):
netsh interface tcp set global ecncapability=disabled
C:\Users\Evan>netsh interface tcp show global
Querying active state...
TCP Global Parameters
----------------------------------------------
Receive-Side Scaling State : enabled
Receive Window Auto-Tuning Level : normal
Add-On Congestion Control Provider : default
ECN Capability : disabled <<已经显示禁用
RFC 1323 Timestamps : disabled
Initial RTO : 1000
Receive Segment Coalescing State : enabled
Non Sack Rtt Resiliency : disabled
Max SYN Retransmissions : 4
Fast Open : enabled
Fast Open Fallback : enabled
HyStart : enabled
Proportional Rate Reduction : enabled
Pacing Profile : off
更改是即时生效的,不需要重新启动系统或重新启动后设置仍然保持。