2

By definition, The TCP Maximum Segment Size (MSS) is the maximum amount of data that a host is willing to accept in a single TCP/IPv4 datagram. And MSS is one of the parameters which is negotiated during the 3-way handshaking.

According to the definition, it seems they don't need to agree on a value as they can just send the datagrams based on the maximum value the other side is asking for. On the other hand, it makes sense to choose the lower value as it means the side which is asking for the lower MSS is not able to handle harder segments, thus there is no point to send a bigger segment.

So my question is, Technically, do both sides need to agree on an MSS value (the lower value), or each can use their own?

I'm a bit confused as I can see some say the MSS value is negotiated, but they don't have to agree on a value, but some other say they agree on the lower value.

3

And MSS is one of the parameters which is negotiated during the 3-way handshaking.

No, the value is not negotiated, it is simply sent by one or both sides.

Technically, do both sides need to agree on an MSS value (the lower value), or each can use their own?

No, the sides do not need to agree, and each can have its own MSS. What a particular implementation of TCP in an OS may do is off-topic here, and it could be that the authors of an implementation decide to require the lower value on both sides.

What RFC 793, Transmission Control Protocol says:

Maximum Segment Size Option Data: 16 bits

If this option is present, then it communicates the maximum receive segment size at the TCP which sends this segment. This field must only be sent in the initial connection request (i.e., in segments with the SYN control bit set). If this option is not used, any segment size is allowed.

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.