Possibilités de SYN des tcp entrantes

Cela pourrait être une question TCP générale.

Puis-je recevoir le package TCP SYN sur une connection établie OU une connection dans l'état TIME_WAIT?

Est-ce possible?

Un SYN reçu sur une connection TCP ESTABLISHED ne devrait pas se produire. Il pourrait s'agir d'un package retardé, qu'il serait prudent de déposer silencieusement.

Il est possible de finir avec le server dans l'état ESTABLISHED et le client en état CLOSED si la connection est perdue et est expirée sur le client et non sur le server, ou si le client est redémarré. La tentative d'ouvrir une nouvelle connection dans ce scénario entraînerait la réception d'un package SYN dans l'état ESTABLISHED . Le résultat souhaité est que l'ancienne connection est fermée et une nouvelle est ouverte.

La façon dont ce résultat souhaité est atteint est la suivante:

  • Le client envoie un SYN pour créer une nouvelle connection.
  • Le server envoie un ACK pour la connection ESTABLISHED .
  • Le client répond à l' ACK avec un package RST provoquant la connection ESTABLISHED .
  • Le client retransmet le package SYN pour créer une nouvelle connection.

Un package SYN reçu dans l'état TIME_WAIT peut se produire après que le server a fermé la connection, et le client ouvre une nouvelle connection avec les mêmes numéros de port. Cela entraînera l'ouverture d'une nouvelle connection.

Ni … SYN n'est utilisé que lorsque la connection est configurée pour la première fois (la poignée de main à trois voies) ou lorsque le package est détruit.

En gros:

SYN (I want to start a connection) -> ACK/SYN (OK, I want to start a connection too) -> ACK (acknowledged connection, ready for data)

Les stream de conversation avec les packages ACK envoyés par les deux hôtes ont indiqué qu'ils recevaient les packages des uns et des autres.

À la fin, FIN est envoyé au server et TIME_WAIT est défini sur le socket. Lorsque le server répond avec un package FIN , le socket est diffusé.