Mystères clés de Connexions TCP de courtier en paquets réseau: démystifié le besoin de triple poignée de main

Configuration de la connexion TCP
Lorsque nous naviguons sur le Web, envoyons un e-mail ou jouons à un jeu en ligne, nous ne pensons souvent pas à la connexion réseau complexe derrière. Cependant, ce sont ces étapes apparemment petites qui assurent une communication stable entre nous et le serveur. L'une des étapes les plus importantes est la configuration de la connexion TCP, et le cœur de ceci est la poignée de main à trois.

Cet article discutera du principe, du processus et de l'importance de la poignée de main à trois en détail. Étape par étape, nous expliquerons pourquoi la poignée de main à trois est nécessaire, comment elle garantit la stabilité et la fiabilité des connexions, et à quel point il est important pour le transfert de données. Avec une compréhension plus approfondie de la poignée de main à trois, nous acquerrons une meilleure compréhension des mécanismes sous-jacents de la communication du réseau et une vision plus claire de la fiabilité des connexions TCP.

Processus de poignée de main à trois voies TCP et transitions d'état
TCP est un protocole de transport axé sur la connexion, qui nécessite l'établissement de connexion avant transmission de données. Ce processus d'établissement de connexion se fait par une poignée de main à trois.

 TCP à trois voies

Examinons de plus près les paquets TCP qui sont envoyés dans chaque connexion.

Initialement, le client et le serveur sont fermés. Tout d'abord, le serveur écoute activement sur un port et est dans l'état d'écoute, ce qui signifie que le serveur doit être démarré. Ensuite, le client est prêt à commencer à accéder à la page Web. Il doit établir une connexion avec le serveur. Le format du premier paquet de connexion est le suivant:

 Paquet de synchronisation

Lorsqu'un client initie une connexion, il génère un numéro de séquence initial aléatoire (client_isn) et le place dans le champ "Numéro de séquence" de l'en-tête TCP. Dans le même temps, le client définit la position Syn Flag sur 1 pour indiquer que le paquet sortant est un paquet SYN. Le client indique qu'il souhaite établir une connexion avec le serveur en envoyant le premier paquet SYN au serveur. Ce paquet ne contient pas de données de couche d'application (c'est-à-dire des données envoyées). À ce stade, le statut du client est marqué comme synSent.

Paquet SYN + ACK

Lorsqu'un serveur reçoit un paquet SYN d'un client, il initialise au hasard son propre numéro de série (Server_isn), puis met ce numéro dans le champ "Numéro de série" de l'en-tête TCP. Ensuite, le serveur entre Client_isn + 1 dans le champ "Numéro de reconnaissance" et définit les bits SYN et ACK à 1. À l'heure actuelle, le serveur est à l'état Syn-RCVD.

Paquet ACK

Une fois que le client reçoit le paquet du serveur, il doit effectuer les optimisations suivantes pour répondre au paquet de réponse final: Tout d'abord, le client définit le bit ACK de l'en-tête TCP du paquet de réponse à 1; Deuxièmement, le client entre dans le champ Value Server_isn + 1 dans le champ "Confirmer la réponse à la réponse"; Enfin, le client envoie le paquet au serveur. Ce paquet peut transporter des données du client vers le serveur. À la fin de ces opérations, le client entrera dans l'État établi.

Une fois que le serveur a reçu le paquet de réponse du client, il passe également à l'état établi.

Comme vous pouvez le voir dans le processus ci-dessus, lors de l'exécution d'une poignée de main à trois, la troisième poignée de main est autorisée à transporter des données, mais les deux premières poignées de main ne le sont pas. C'est une question qui est souvent posée dans les entretiens. Une fois la poignée de main à trois voies terminée, les deux parties entrent dans l'état établi, ce qui indique que la connexion a été établie avec succès, à quel point le client et le serveur peuvent commencer à se envoyer des données.

Pourquoi trois poignées de main? Pas deux fois, quatre fois?
La réponse commune est: "Parce que la poignée de main à trois garantit la possibilité de recevoir et d'envoyer." Cette réponse est correcte, mais ce n'est que la raison de surface, ne présente pas la raison principale. Dans ce qui suit, j'analyserai les raisons de la triple poignée de main de trois aspects pour approfondir notre compréhension de cette question.

La poignée de main à trois voies peut éviter efficacement l'initialisation des connexions historiquement répétées (la raison principale)
La poignée de main à trois garantit que les deux parties ont reçu un numéro de séquence initial fiable.
La poignée de main à trois voies évite de gaspiller des ressources.

Raison 1: Évitez les jointures en double historique
En un mot, la principale raison de la poignée de main à trois est d'éviter la confusion causée par l'ancienne initialisation de connexion en double. Dans un environnement de réseau complexe, la transmission de paquets de données n'est pas toujours envoyée à l'hôte de destination conformément à l'heure spécifiée, et les anciens paquets de données peuvent d'abord arriver à l'hôte de destination en raison de la congestion du réseau et d'autres raisons. Pour éviter cela, TCP utilise une poignée de main à trois pour établir la connexion.

La poignée de main à trois voies évite les connexions en double historiques

Lorsqu'un client envoie de multiples paquets d'établissement de connexion SYN successivement, dans des situations telles que la congestion du réseau, ce qui suit peut se produire:

1- Les anciens paquets SYN arrivent sur le serveur avant les derniers paquets SYN.
2- Le serveur répondra à un paquet SYN + ACK au client après avoir reçu l'ancien paquet SYN.
3- Lorsque le client reçoit le paquet SYN + ACK, il détermine que la connexion est une connexion historique (numéro de séquence expiré ou délai d'attente) en fonction de son propre contexte, puis envoie le premier paquet au serveur pour abandonner la connexion.

Avec une connexion à deux manches, il n'y a aucun moyen de déterminer si la connexion actuelle est une connexion historique. La poignée de main à trois permet au client de déterminer si la connexion actuelle est une connexion historique basée sur le contexte lorsqu'il est prêt à envoyer le troisième paquet:

1- S'il s'agit d'une connexion historique (numéro de séquence expiré ou délai d'attente), le paquet envoyé par la troisième poignée de main est un premier paquet pour interrompre la connexion historique.
2- Si ce n'est pas une connexion historique, le paquet envoyé pour la troisième fois est un paquet ACK, et les deux parties communicantes établissent avec succès la connexion.

Par conséquent, la principale raison pour laquelle TCP utilise la poignée de main à trois est qu'il initialise la connexion pour empêcher les connexions historiques.

Raison 2: pour synchroniser les numéros de séquence initiaux des deux parties
Les deux côtés du protocole TCP doivent maintenir un numéro de séquence, qui est un facteur clé pour assurer une transmission fiable. Les numéros de séquence jouent un rôle important dans les connexions TCP. Ils font ce qui suit:

Le récepteur peut éliminer les données en double et assurer la précision des données.

Le récepteur peut recevoir des paquets dans l'ordre du numéro de séquence pour assurer l'intégrité des données.

● Le numéro de séquence peut identifier le paquet de données reçu par l'autre partie, permettant une transmission de données fiable.

Par conséquent, lors de l'établissement d'une connexion TCP, le client envoie des paquets SYN avec le numéro de séquence initial et oblige le serveur à répondre avec un paquet ACK indiquant une réception réussie du paquet SYN du client. Ensuite, le serveur envoie le paquet SYN avec le numéro de séquence initial au client et attend que le client réponde, une fois pour toutes, pour s'assurer que les numéros de séquence initiaux sont synchronisés de manière fiable.

Synchroniser les numéros de série initiaux des deux parties

Bien qu'une poignée de main à quatre voies soit également possible pour synchroniser de manière fiable les numéros de séquence initiaux des deux parties, les deuxième et troisième étapes peuvent être combinés en une seule étape, ce qui entraîne une poignée de main à trois. Cependant, les deux poignées de main ne peuvent garantir que le numéro de séquence initial d'une partie est reçue avec succès par l'autre partie, mais rien ne garantit que le numéro de séquence initial des deux parties peut être confirmé. Par conséquent, la poignée de main à trois est le meilleur choix à prendre pour assurer la stabilité et la fiabilité des connexions TCP.

Raison 3: Évitez de gaspiller les ressources
S'il n'y a qu'un "deux mains", lorsque la demande du client Syn est bloquée dans le réseau, le client ne peut pas recevoir le paquet ACK envoyé par le serveur, de sorte que le SYN sera ressenti. Cependant, comme il n'y a pas de troisième poignée de main, le serveur ne peut pas déterminer si le client a reçu un accusé de réception ACK pour établir la connexion. Par conséquent, le serveur ne peut établir une connexion de manière proactive qu'après avoir reçu chaque demande SYN. Cela mène à ce qui suit:

Perte de ressources: si la demande SY du client est bloquée, ce qui entraîne une transmission répétée de plusieurs paquets SYN, le serveur établira plusieurs connexions non valides redondantes après avoir reçu la demande. Cela conduit à un gaspillage inutile des ressources du serveur.

Rétention des messages: En raison de l'absence d'une troisième poignée de main, le serveur n'a aucun moyen de savoir si le client a correctement reçu le reconnaissance ACK pour établir la connexion. En conséquence, si les messages sont coincés dans le réseau, le client continuera à envoyer des demandes SYN encore et encore, ce qui fait qu'établir le serveur de nouvelles connexions. Cela augmentera la congestion et le retard du réseau et affectera négativement les performances globales du réseau.

Évitez de gaspiller les ressources

Par conséquent, afin d'assurer la stabilité et la fiabilité de la connexion réseau, TCP utilise la poignée de main à trois pour établir la connexion afin d'éviter la survenue de ces problèmes.

Résumé
LeCourtier de paquets réseauL'établissement de connexion TCP se fait avec une poignée de main à trois. Pendant la poignée de main à trois, le client envoie d'abord un paquet avec l'indicateur SYN au serveur, indiquant qu'il souhaite établir une connexion. Après avoir reçu la demande du client, le serveur répond à un paquet avec des indicateurs SYN et ACK au client, indiquant que la demande de connexion est acceptée et envoie son propre numéro de séquence initial. Enfin, le client répond avec un indicateur ACK au serveur pour indiquer que la connexion a été établie avec succès. Ainsi, les deux parties sont à l'état établi et peuvent commencer à se envoyer des données.

En général, le processus de poignée de main à trois pour l'establishment des connexions TCP est conçu pour garantir la stabilité et la fiabilité des connexions, éviter la confusion et le gaspillage de ressources sur les connexions historiques et s'assurer que les deux parties sont en mesure de recevoir et d'envoyer des données.


Heure du poste: janvier-08-2025