Resumo

  • Uma conexão TCP é semiaberta quando um lado perde ou descarta seu estado sem que o outro saiba.
  • Se o lado sobrevivente envia dados, o lado sem estado responde com RST e a conexão antiga é abortada.
  • Depois de reiniciar, um SYN novo pode encontrar a história antiga mantida pelo outro lado; o ACK incompatível leva a outro RST.
  • O RST não recupera dados nem recria a conexão: ele remove o estado obsoleto para que uma nova negociação em três vias comece.

Uma conexão sustentada por duas memórias

Cada ponta do TCP guarda números de sequência, confirmações, janelas e uma posição na máquina de estados. A conexão só permanece compartilhada enquanto essas duas histórias forem compatíveis.

RFC 793 e RFC 9293 descrevem como semiaberta a conexão que um lado fechou ou abortou sem avisar o outro, ou que se tornou dessincronizada depois de uma falha ou reinicialização. Isso não é um semifechamento normal. Um FIN encerra deliberadamente uma direção e mantém a outra disponível; a conexão semiaberta resulta de uma divergência acidental de estado.

Quando o sobrevivente envia primeiro

Se B ainda acredita estar em ESTABLISHED e envia dados, A, que reiniciou e está em CLOSED, não encontra uma conexão correspondente. Trata o segmento como pertencente a nenhuma conexão e devolve RST. B aceita o reset e abandona seu estado obsoleto.

O RST não informa quais dados A processou antes da falha nem se uma operação da aplicação terminou. Apenas mostra que A não pode continuar participando da história que B conserva.

Quando o lado esquecido volta a abrir

A pode enviar um SYN novo após reiniciar. B ainda mantém a conexão antiga e vê o SYN fora da janela de recepção associada àquele estado. Responde com um ACK que indica o número de sequência esperado. Como A está dessincronizado, percebe que o ACK não confirma nada de sua nova tentativa e envia RST. B remove o estado antigo, e A pode continuar com uma negociação comum em três vias.

O TCP não combina as histórias. Encerra aquela que já não pode ser compartilhada.

O limite do transporte

O RST torna explícito o conflito de transporte, mas não restaura bytes perdidos, autenticação, sessão ou transações. A recuperação cabe aos protocolos e às aplicações superiores. Esses exemplos também não são uma política obrigatória de keepalive, um fechamento por FIN ou as regras de challenge-ACK do RFC 5961.

Fontes