我正在Azure运行多个am。VMs在NSG子网中运行。NIC不使用NSG,我们不使用加速网络。
我注意到,当VM使用TCP与同一子网的另一个VM对话时,SYN数据包中的MSS值将减少42。这意味着,如果我向同一网络的另一个VM发送带有MSS=876的TCP,则另一个VM将捕获具有MSS=834的TCP:
客户端:
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,将MSS设置为固定数量。PaloAlto将使用相对于网络接口的MTU的“调整”,这是一个固定的值。Arista将允许您在入口或出口流量上设置上限值,也就是绝对值。一些防火墙供应商,如PaloAlto,将在DoS攻击和SYN被激活时减少MSS,但MSS将是这种情况下的8种可能值之一。
我认为这种MSS -= 42机制破坏了TCP:如果客户端支持大帧并发送MSS为8860,则Azure中的服务器将收到8876,它本身也会回复1330,但客户机会同意数据包应该有1246字节的有效负载,而服务器将发送1330字节的有效负载。
最大的问题是,我们有“偶然”的交通情况。在快速路一侧没有正确地进行夹紧,但是由于这-42,MSS实际上被简化为一个“适合”的值,直到数据包被路由的方式发生了一些微小的变化,您突然发现在某个地方出现了一个错误配置。
知道怎么解释这个减价吗?我相信这种行为在任何地方都没有记录。
编辑
只是读RFC879
MSS可以在数据流的各个方向上完全独立地使用。结果可能是两个方向上的最大尺寸有很大的不同。
所以按照RFC的说法它看起来是合法的。不过,一种奇怪的行为。
发布于 2021-09-03 10:59:57
与物理网络不同,SDN网络为封装头(GRE)消耗额外的“字节”。可见的in是CA(客户地址),但也有PA(提供者地址)需要在云提供商中路由。因此,您将看到更少的MSS可用,因为云提供商将额外的TCP夹紧在下面,以实现后端路由。
https://serverfault.com/questions/1076459
复制相似问题