Điểm:2

What is reducing the MSS by 42?

lá cờ jp

I am running multiple VMs in Azure. VMs are running in a subnet with NSG. NICs do not use NSGs, we do not use accelerated networking.

I notice that when a VM talks to another VM of the same subnet using TCP, the MSS value in the SYN packets is reduced by 42. That means if I send a TCP SYN with MSS=876 to another VM of the same network, the other VM will capture a TCP SYN with MSS=834:

Client:

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

Server:

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

We are using multiple NVAs, and our SYN packets travel through multiple hops, and we actually see the MSS being reduced multiple times, we originally measured a reduction by 84, we also measured a reduction of 138 in some cases (indeed not a multiple of 42), that means we reduce by more than 10% the efficiency of our network.

I have spent some time looking at how various network appliances play with the MSS. In most cases, the MSS is set to a fix amount, by being either clamped to a static value or to the path MTU. PaloAlto will use an "adjustment" that is relative to the MTU of a network interface, which is a fixed value. Arista will let you put a ceiling value on ingress or egress traffic, again absolute values. Some firewall vendors like PaloAlto, will reduce the MSS in case of DoS attack and SYN cookies is activated, but the MSS will be one of 8 possible values in that case.

I believe this MSS -= 42 mechanism breaks TCP: if client supports jumbo frames and send an MSS of 8860, server in Azure receives 8876, itself it replies 1330, but the client receives 1246, the client will agree that packets should have 1246 bytes payload, while the server will send 1330 bytes payload.

The biggest issue is that we have cases where traffic works "by chance". The clamping is not done properly on the express route side, yet because of this -42 here and there the MSS gets actually reduced to a value that "fits", until there is some slight change in the way packets are routed, and you discover all of a sudden that there was a misconfiguration somewhere.

Any idea how to explain this reduction? I believe this behavior is not documented anywhere.


EDIT

Just reading RFC879

The MSS can be used completely independently in each direction of data flow. The result may be quite different maximum sizes in the two directions.

So it looks legit as per RFC. Still, a weird behavior.

Massimo avatar
lá cờ ng
Điều này đủ hấp dẫn tôi để thực sự kiểm tra nó bằng cách tạo một VNet mới và nhiều máy ảo khác nhau với các HĐH Windows khác nhau (2012R2, 2016, 2019) và WireShark. Cùng VNet, cùng mạng con, giao tiếp trực tiếp, không định tuyến, không tường lửa. Tôi có thể xác nhận rằng điều này thực sự xảy ra. Một máy ảo gửi SYN với MSS 1460 và máy ảo kia nhận SYN với MSS 1418. Máy ảo thứ hai trả lời gửi ACK với MSS 1460 và máy ảo đầu tiên nhận ACK với MSS 1418.
Massimo avatar
lá cờ ng
Mạng Azure nổi tiếng là khá... *đặc biệt*. Nếu bạn muốn một cú sốc thực sự, hãy xem bảng ARP trên Azure VM.
lá cờ cn
`Tôi tin rằng cơ chế MSS -= 42 này phá vỡ TCP`. Tôi không. Nhưng điều này sẽ dễ dàng kiểm tra và cung cấp dữ liệu thực tế.
Ken W MSFT avatar
lá cờ gb
Điều này có thể giúp https://docs.microsoft.com/en-us/azure/virtual-network/virtual-network-tcpip-performance-tuning#tcp-mss-window-scaling-and-pmtud
Điểm:4
lá cờ in

Trái ngược với mạng vật lý, mạng SDN tiêu thụ thêm "byte" cho các tiêu đề đóng gói (GRE). Các IP hiển thị là CA (địa chỉ khách hàng), nhưng cũng có PA (địa chỉ nhà cung cấp) yêu cầu định tuyến trong nhà cung cấp đám mây. Do đó, bạn sẽ thấy ít MSS khả dụng hơn, vì nhà cung cấp đám mây áp dụng kẹp TCP bổ sung trong cơ sở hạ tầng để thực hiện định tuyến phụ trợ.

Giải thích CA-PA (siêu V SDN)

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

frigo avatar
lá cờ jp
cảm ơn. Đối với các gói đã khớp, tại sao phải kẹp đi kẹp lại? Và đối với các gói không phù hợp, tại sao việc giảm 42 lại giúp ích? Tôi nghĩ rằng việc giảm 42 này là một giải pháp thay thế cho MTU (1500) không chính xác - có thể đặt MSS thành 1418 là điều mà SDN ưu tiên, trong trường hợp đó, nên đặt thành 1418 nếu cần và không hơn không kém.
frigo avatar
lá cờ jp
Tôi chấp nhận câu trả lời này vì nó trả lời câu hỏi "cái gì", nhưng tôi vẫn tin rằng nó bị hỏng.
lá cờ fr
Nó có thể là: 20 byte tiêu đề IPv4, 8 byte tiêu đề GRE (4 byte bắt buộc + 4 byte tùy chọn với tổng kiểm tra), 14 byte tiêu đề ethernet bên trong => đưa ra chính xác 42 byte.

Đăng câu trả lời

Hầu hết mọi người không hiểu rằng việc đặt nhiều câu hỏi sẽ mở ra cơ hội học hỏi và cải thiện mối quan hệ giữa các cá nhân. Ví dụ, trong các nghiên cứu của Alison, mặc dù mọi người có thể nhớ chính xác có bao nhiêu câu hỏi đã được đặt ra trong các cuộc trò chuyện của họ, nhưng họ không trực giác nhận ra mối liên hệ giữa câu hỏi và sự yêu thích. Qua bốn nghiên cứu, trong đó những người tham gia tự tham gia vào các cuộc trò chuyện hoặc đọc bản ghi lại các cuộc trò chuyện của người khác, mọi người có xu hướng không nhận ra rằng việc đặt câu hỏi sẽ ảnh hưởng—hoặc đã ảnh hưởng—mức độ thân thiện giữa những người đối thoại.