Networking

是什麼將 MSS 減少了 42?

  • September 4, 2021

我在 Azure 中執行多個 VM。VM 在具有 NSG 的子網中執行。NIC 不使用 NSG,我們不使用加速網路。

我注意到,當一個 VM 使用 TCP 與同一子網的另一個 VM 通信時,SYN 數據包中的 MSS 值減少了 42。這意味著如果我將 MSS=876 的 TCP SYN 發送到同一網路的另一個 VM,則其他 VM 將擷取 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 cookie 被啟動的情況下降低 MSS,但在這種情況下,MSS 將是 8 個可能值之一。

我相信這個 MSS -= 42 機制會破壞 TCP:如果客戶端支持巨型幀並發送 8860 的 MSS,Azure 中的伺服器收到 8876,它自己回复 1330,但客戶端收到 1246,客戶端會同意數據包應該有 1246 字節有效載荷,而伺服器將發送 1330 字節的有效載荷。

最大的問題是我們遇到了交通“偶然”起作用的情況。快速路由端的箝制沒有正確完成,但是由於這里和那裡的 -42,MSS 實際上被降低到“適合”的值,直到數據包的路由方式發生一些輕微變化,你發現突然發現某處配置錯誤。

知道如何解釋這種減少嗎?我相信這種行為在任何地方都沒有記錄。


編輯

只是閱讀RFC879

MSS 可以在數據流的每個方向上完全獨立地使用。結果可能是兩個方向上的最大尺寸完全不同。

因此,根據 RFC,它看起來是合法的。不過,這是一種奇怪的行為。

與物理網路相反,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

引用自:https://serverfault.com/questions/1076459