1 | initial version |
The TCP MSS value is advertised to the peer, it is not negotiated.
When the MSS is not adjusted along the path by an intermediate device, this will result in both sides using the same maximum size for segments. That's because the host that sends the smallest MSS is not capable of sending larger segments and the host receiving the smallest MSS will adjust to the MSS it received.
When the MSS does get adjusted by an intermediate device, then things can go wrong if there is asymmetric routing and the two paths have a different MTU (or tunneling overhead). This is because the MSS being received will be used to send data over the other link. You can solve this by making sure the MSS gets adjusted to the lowest value in both paths of the traffic.
Here is an example of things going wrong with asymmetric routing and MSS adjustments: