Por quanto tempo os fragmentos TCP fragmentados são mantidos no servidor TCP

10

Suponha que um determinado fragmento TCP esteja fragmentado em dois datagramas IP e que o primeiro datagrama chegue ao servidor TCP, mas o segundo datagrama nunca chegue.

Após um certo período de tempo, o servidor TCP envia uma keepalive e determina que o cliente está ativo. O que o servidor TCP faz com esse primeiro datagrama? Será que espera o segundo datagrama chegar ou descarta o primeiro datagrama?

Randomblue
fonte

Respostas:

8

Após o tempo limite da remontagem do fragmento expirar, o fragmento é descartado; a outra extremidade precisaria retransmitir.

Esse tempo limite geralmente é configurável. No Linux, são 30 segundos por padrão e controlados via /proc/sys/net/ipv4/ipfrag_time.

Michael Hampton
fonte
O tempo limite da remontagem do fragmento é excedido em relação ao primeiro fragmento recebido ou o cronômetro é redefinido para cada novo fragmento que chega?
Randomblue
2
Eu acho que você teria que ler o código fonte para responder isso definitivamente.
Michael Hampton
2

Não há resposta definitiva para essa pergunta;

Se você vir este artigo sobre retransmissão adaptativa, verá que o TCP usa o RTT como um fator no cálculo de atrasos apropriados.

Este é um artigo mais detalhado. Essencialmente, não há um valor de tempo limite especial apenas para fragmentação.

Este artigo da Cisco indica que um firewall virtual IOS XR tem um tempo limite padrão de 10 segundos para fragmentos, com seu próprio timer configurável. Estou ligando isso para dizer que sistemas operacionais e dispositivos se comportarão de maneira diferente e se você estiver passando uma conexão por um dispositivo como este, por exemplo, isso pode interferir negativamente na sua conexão.

Seria melhor conectar duas máquinas da mesma configuração com um cruzamento e iniciar o teste a partir daí, se você quisesse testar os efeitos do atraso de fragmentação.

jwbensley
fonte
Obrigado. Você acha que o tempo limite do fragmento no artigo da Cisco é calculado com relação ao primeiro fragmento recebido ou ao último fragmento recebido?
Randomblue
O último fragmento recebido faz mais sentido que o primeiro, mas não sei, fica a critério da Cisco nesse exemplo.
jwbensley