CA-PA 解释 (hyper-V SDN)

CA-PA 解释 (hyper-V SDN)

我在 Azure 中运行多个虚拟机。虚拟机在具有 NSG 的子网中运行。NIC 不使用 NSG,我们不使用加速网络。

我注意到,当一个虚拟机使用 TCP 与同一子网中的另一个虚拟机通信时,SYN 数据包中的 MSS 值会减少 42。这意味着,如果我向同一网络的另一个虚拟机发送 MSS=876 的 TCP SYN,则另一个虚拟机将捕获 MSS=834 的 TCP SYN:

客户:

18:49:27.526527 IP 10.56.142.25.49614 > 10.56.142.108.ssh: Flags [S], seq 3092614737, win 17520, options [mss 876,sackOK,TS val 2936204423 ecr 0,nop,wscale 7], length 0
18:49:27.528398 IP 10.56.142.108.ssh > 10.56.142.25.49614: Flags [S.], seq 1710658781, ack 3092614738, win 28960, options [mss 1418,sackOK,TS val 390195731 ecr 2936204423,nop,wscale 7], length 0
18:49:27.528430 IP 10.56.142.25.49614 > 10.56.142.108.ssh: Flags [.], ack 1, win 137, options [nop,nop,TS val 2936204425 ecr 390195731], length 0

服务器:

18:49:27.527362 IP 10.56.142.25.49614 > 10.56.142.108.ssh: Flags [S], seq 3092614737, win 17520, options [mss 834,sackOK,TS val 2936204423 ecr 0,nop,wscale 7], length 0
18:49:27.527682 IP 10.56.142.108.ssh > 10.56.142.25.49614: Flags [S.], seq 1710658781, ack 3092614738, win 28960, options [mss 1460,sackOK,TS val 390195731 ecr 2936204423,nop,wscale 7], length 0
18:49:27.529167 IP 10.56.142.25.49614 > 10.56.142.108.ssh: Flags [.], ack 1, win 137, options [nop,nop,TS val 2936204425 ecr 390195731], length 0

我们正在使用多个 NVA,并且我们的 SYN 数据包经过多跳,我们实际上看到 MSS 减少了多倍,我们最初测量到减少了 84,在某些情况下我们还测量到减少了 138(实际上不是 42 的倍数),这意味着我们的网络效率降低了 10% 以上。

我花了一些时间研究各种网络设备如何使用 MSS。在大多数情况下,MSS 被设置为固定量,要么被限制为静态值,要么被限制为路径 MTU。PaloAlto 将使用相对于网络接口的 MTU 的“调整”,这是一个固定值。Arista 将允许您对入口或出口流量设置上限值,同样是绝对值。一些防火墙供应商(如 PaloAlto)会在发生 DoS 攻击并激活 SYN cookies 时降低 MSS,但在这种情况下 MSS 将是 8 个可能值之一。

我相信这个 MSS -= 42 机制会破坏 TCP:如果客户端支持巨型帧并发送 8860 的 MSS,则 Azure 中的服务器会收到 8876,它本身会回复 1330,但客户端会收到 1246,则客户端会同意数据包应该有 1246 字节的有效负载,而服务器将发送 1330 字节的有效负载。

最大的问题是,我们遇到过流量“偶然”工作的情况。快速路由端的钳制没有正确完成,但由于这里或那里的 -42,MSS 实际上被降低到“适合”的值,直到数据包路由方式发生轻微变化,您才突然发现某处存在配置错误。

知道如何解释这种减少吗?我相信这种行为没有在任何地方记录。


编辑

只是阅读RFC879

MSS 可以在数据流的每个方向上完全独立使用。结果可能是两个方向上的最大大小完全不同。

因此,根据 RFC,它看起来是合法的。不过,这是一种奇怪的行为。

答案1

与物理网络相反,SDN 网络会为封装报头 (GRE) 消耗额外的“字节”。可见的 IP 是 CA(客户地址),但也有需要在云提供商中进行路由的 PA(提供商地址)。因此,您将看到可用的 MSS 更少,因为云提供商在基础设施中应用了额外的 TCP 限制以实现后端路由。

CA-PA 解释 (hyper-V SDN)

https://docs.microsoft.com/en-us/windows-server/networking/sdn/technologies/hyper-v-network-virtualization/hyperv-network-virtualization-technical-details-windows-server

相关内容