Um SYN
recebido em uma conexão ESTABLISHED
TCP não deve estar acontecendo. Pode ser um pacote atrasado, que seria seguro descartar silenciosamente.
É possível terminar com o servidor em ESTABLISHED
state e cliente em CLOSED
state se a conexão for perdida e expirar no cliente e não no servidor ou se o cliente for reiniciado. A tentativa de abrir uma nova conexão nesse cenário faria com que um pacote SYN
fosse recebido no estado ESTABLISHED
. O resultado desejado é que a conexão antiga é fechada e uma nova é aberta.
A maneira como esse resultado desejado é alcançado é a seguinte:
- O cliente envia um
SYN
para criar uma nova conexão. - O servidor envia um
ACK
para a conexãoESTABLISHED
. - O cliente responde ao
ACK
com um pacoteRST
, fazendo com que a conexãoESTABLISHED
desapareça. - O cliente retransmite
SYN
packet para criar uma nova conexão.
Um pacote SYN
recebido no estado TIME_WAIT
pode acontecer depois que o servidor fechou a conexão e o cliente abre uma nova conexão com os mesmos números de porta. Isso fará com que uma nova conexão seja aberta.