5

when a TCP client initiates a TCP connection with a remote TCP server, it will announce its MSS in the TCP option.

I'm at a loss how TCP knows the path MSS value. This value is specific to the path between the client and the server, and generally speaking, path MTU detection can be used to get the value, but that will be before TCP SYN packet is sent and will cause some delay.

So, in practice, how does TCP get the MSS values for a certain path?

1 Answer 1

4

TCP must make an initial guess at the MSS, which will be the MTU of the local interface through which the SYN is about to be sent, minus the appropriate constant to account for the IP header.

Thereafter it may learn a smaller MSS value through one of the following means:

  • A smaller MSS announced by the other peer
  • path MTU detection (ICMP packet-too-big messages)

Once it learns such a reduced value, it can cache it for a while and use it as the initial MSS for future connections to the same remote address.

2
  • is Path MTU symmetric or not?
    – misteryes
    May 22, 2013 at 1:51
  • Not necessarily, because the traffic might follow a different route in each direction, and the 2 paths might have different MTUs. However, I'm not 100% sure, but I think TCP makes the assumption that it is symmetric (i.e. it negociates to the lowest value). Making that assumption won't do any harm.
    – Celada
    May 22, 2013 at 2:27

You must log in to answer this question.

Not the answer you're looking for? Browse other questions tagged .