Windows 10,出站 TCP 始终处于 ECN(显式拥塞通知)CE(经历拥塞)代码点上

Windows 10,出站 TCP 始终处于 ECN(显式拥塞通知)CE(经历拥塞)代码点上

最近我在进行一些随机数据包捕获时发现了一些有趣的事情。几年前,我启用了 Windows 的 ECN 功能,当时它还在 Windows 8 上。当 Windows 10 可用时,我对其进行了更新,因此我不确定它是否默认启用。

无论如何,我完全支持 ECN,这是一个很好的功能,但我在 wireshark 中发现了一些奇怪的事情:几乎所有的出站 TCP SYN 都标有 CE(0x03): Windows 屏幕截图

同一台计算机在 Linux 中启用了 ECN,显示正常行为(0x01 或 0x02): Linux 截图

这是个 bug 还是功能?他们只是想对每个人都好,所以他们用一个超慢启动 tcp 来标记它?我确定我的电脑没有拥塞...

编辑:一些措辞

答案1

这不是一个错误,这是 ECN 在 TCP 端点之间的工作方式。

主机 A 发送设置了 ECN 和 CWR 标志的 SYN,让主机 B 知道它想要使用 ECN。如果主机 B 支持 ECN,则应发送设置了 ECN 位的 SYN-ACK。

一旦协商了 ECN,就可以在 IP 标头中设置 ECT 信息,这就是您在 Linux 主机上查看(非 SYN)捕获时所看到的内容。

RFC3168

在 TCP 连接能够使用 ECN 之前,主机 A 会发送一个 ECN-setup SYN 数据包,而主机 B 会发送一个 ECN-setup SYN-ACK 数据包。对于 SYN 数据包,ECN-setup SYN 数据包中的 ECE 和 CWR 的设置被定义为发送方 TCP 具有 ECN-Capable 能力的指示,而不是拥塞指示或对拥塞的响应。

相关内容