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
SYNpara criar uma nova conexão. - O servidor envia um
ACKpara a conexãoESTABLISHED. - O cliente responde ao
ACKcom um pacoteRST, fazendo com que a conexãoESTABLISHEDdesapareça. - O cliente retransmite
SYNpacket 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.