O segmento tcp é apenas um conceito, é diferente com o desfragmentação ip
quando você envia dados que são maiores que ip mtu, eles são colocados em um pacote ip, mas a camada ip então acha que o pacote ip é muito longo para transmitir, então ele irá dividir pacotes grandes em vários pedaços, cada um deles tem o mesmo Identificador, mas com um deslocamento e um comprimento de dados diferentes. o lado da recepção é responsável por coletar todas as peças, depois de receber todas as peças, ele irá reunir todas as partes em um pacote ip inteiro e empurrá-lo para a camada superior do protocolo.
mas a camada tcp tem um comportamento diferente. quando você envia um dado que é grande o suficiente, a camada tcp não coloca os dados em um pacote tcp, então os divide em pedaços (mas o ip faz), recupera uma parte dos dados brutos em um pacote tcp e então empurra o dado. tcp packet to ip layer, o comprimento do pacote tcp é determinado por mss, depois ele recuperará outra parte dos dados restantes em outro pacote tcp e repetirá o processo até que todos os dados sejam transmitidos.
se tcp não usa mss, é horrível. suponha que você envie um dado que é maior que mss, ele será colocado em apenas um pacote tcp (os dados não são divididos em pequenos pedaços devido a mss não usados), o pacote tcp é maior que o ip mtu, então o ip irá dividir o tcp pacote em pedaços. o pacote tcp irá retransmitir se qualquer uma das partes for perdida, perder tempo e largura de banda
ps: tcp_mss = ip_mtu - tcp_header