• Blog
  • Qu’est-ce que TCP et comment fonctionne TCP ?

Qu’est-ce que TCP et comment fonctionne TCP ?

Oct 19, 2023

Quel est le protocole TCP ?

TCP est utilisé pour la communication entre les appareils sur le réseau. Il signifie Transmission Control Protocol. Il est utilisé pour créer une connexion entre le client et le serveur. Il fonctionne en divisant les données en petits paquets qui peuvent être transférés via l’activité réseau.

Le contrôle de connexion de TCP comprend trois poignées de main et quatre vagues.

Le segment est une fonction de routage de navigation pour l’ensemble du protocole TCP/IP. Le segment de paquet fait référence aux paquets de données IP dans le réseau de protocole TCP/IP, qui utilisent la navigation par route, interrogent chaque segment de route réseau, l’adresse IP, le protocole d’échange, et ainsi de suite.

  • SYN: Synchroniser les numéros de séquence
  • ACK: Champ d’acquittement significatif
  • Seq: Numéro de séquence
  • Numéro d’accusé de réception

Processus de poignée de main à trois voies

Poignée de main

L’une des caractéristiques essentielles de TCP est l’orientation de la connexion. Par conséquent, avant d’envoyer des données, les deux parties doivent passer par une poignée de main pour s’assurer que la transmission des données est sans erreur avant que les deux parties puissent établir la connexion avec succès.

La première poignée de main

Le client envoie le segment 1 au serveur, où le drapeau SYN indique qu’il s’agit d’un segment de demande de connexion. De plus, son champ Numéro de séquence (abrégé en seq dans la figure) est réglé sur le numéro de séquence initial x (Numéro de séquence initial, ISN), et les deux parties de la connexion TCP peuvent sélectionner aléatoirement le numéro de séquence initial.

Après avoir envoyé le segment 1, le client entre dans l’état SYN-SENT et attend la confirmation du serveur.

La deuxième poignée de main

Après avoir reçu la demande de connexion du client, le serveur envoie le segment 2 au client en tant que réponse.

Le drapeau ACK est défini sur 1, indiquant qu’il répond au client, et son champ de numéro d’accusé de réception (Numéro d’accusé de réception, abrégé en minuscules ack) entrera en vigueur.

La valeur de ce champ est x + 1, qui est le numéro de séquence du segment reçu du client plus un, ce qui représente le numéro de séquence des données que le serveur s’attend à recevoir du client la prochaine fois.

De plus, le drapeau SYN du segment 2 est également défini sur 1, ce qui signifie que c’est aussi un segment utilisé pour initier une connexion, et le numéro de séquence seq est défini sur le numéro de séquence initial du serveur y.

Après avoir envoyé le segment 2, le serveur passe à l’état SYN-RECEIVED.

La troisième poignée de main

Après avoir reçu le segment 2, le client envoie le segment 3 au serveur, et son drapeau ACK est 1, ce qui signifie qu’il répond au serveur, confirmant que le champ de numéro de séquence ack est y + 1, et le champ de numéro de séquence seq est x + 1. Après l’envoi de ce segment, les deux parties entrent dans l’état ÉTABLI, ce qui indique que la connexion a été établie.

the third handshake

Évaluation de l’état de connexion en fonction de l’état d’affichage du client et du serveur.

  • Le client et le serveur appartiennent à l’état fermé, indiquant qu’il n’y a pas de relation de connexion.
  • Le client envoie une demande, le client ouvre l’état d’envoi (SYN-sent), et le serveur ouvre l’état d’écoute (Listen);
  • Lorsque le serveur reçoit la demande du client, il passe à l’état de réponse (SYN-recvd);
  • Lorsque le client reçoit la réponse du serveur, le client passe à l’état de connexion stable (Établi) et envoie simultanément le deuxième paquet de données.
  • Lorsque le serveur reçoit la deuxième donnée du client, le serveur passe à un état de connexion stable (Établi).
  • Après que les deux parties ont établi une connexion stable, il est temps de commencer la communication régulière des données.

Comment fonctionnent les trois poignées de main ?

Le handshake à trois voies permet aux deux parties de confirmer les capacités d’envoi et de réception d’eux-mêmes et de l’autre partie en tant que processus:

La première poignée de main : le client envoie le segment de demande, et rien ne peut être confirmé, tandis que le serveur peut s’assurer que sa capacité de réception et la capacité de transmission de l’autre partie sont standard.

La deuxième poignée de main : Le client peut confirmer que ses capacités d’envoi et de réception sont standard, et que les capacités d’envoi et de réception de l’autre partie sont standard.

Le troisième poignée de main : le serveur peut confirmer que ses capacités d’envoi et de réception sont standard, et que les capacités d’envoi et de réception de l’autre partie sont standard.

Le handshake à trois voies peut permettre aux deux parties de confirmer que les capacités d’envoi et de réception d’eux-mêmes et de l’autre partie sont toutes conformes aux normes afin qu’ils puissent communiquer.

Comment fonctionnent les quatre vagues ?

Établir une connexion nécessite trois poignées de main, et terminer une connexion nécessite quatre vagues.

Le processus détaillé de faire un signe de la main quatre fois.

1. Le client envoie un segment de fermeture de connexion, demandant de fermer la connexion et d’arrêter l’envoi de données. Ensuite, le champ numéro de séquence seq = x (égal au numéro de séquence du dernier octet de toutes les données précédemment envoyées plus un), puis le client passera à l’état FIN-WAIT-1, en attente d’un message d’accusé de réception du serveur.

2. Le serveur reçoit le segment FIN, il renvoie un message de confirmation, ACK = 1, ack = x + 1, et apporte son numéro de séquence seq = y, puis le serveur entre dans l’état CLOSE-WAIT.

3. Le client entre immédiatement dans l’état FIN-WAIT-2 après avoir reçu le segment ACK du serveur et peut toujours recevoir les données seq=z du serveur jusqu’à ce que le segment FIN soit reçu.

4. Ensuite, le serveur a envoyé toutes les données, il enverra un segment FIN au client, puis le serveur entrera dans l’état LAST-ACK, en attendant un segment d’accusé de réception du client.

5. Après que le client reçoit le segment FIN du serveur, il envoie un message ACK au serveur, puis entre dans l’état TIME-WAIT.

6. Le serveur passera immédiatement à l’état CLOSED après avoir reçu le message ACK du client et terminera la connexion à ce moment-là. En général, le serveur passe à l’état CLOSED plus tôt que le client car il n’y a pas de temps d’attente.

four waves

En bref, qu’il s’agisse d’une poignée de main à trois voies ou d’une vague à quatre voies, le protocole TCP doit obtenir une confirmation d’information des deux parties pour établir la connexion ou la déconnexion.

Pourquoi TCP ferme-t-il la connexion quatre fois au lieu de trois ?

Après avoir reçu le segment de paquet FIN du client, le serveur peut encore avoir des données à transmettre. Par conséquent, le serveur ne peut pas fermer la connexion immédiatement. Au lieu de cela, il répondra avec un segment de paquet ACK et peut continuer à envoyer des données.

Le client ne répond pas tant que le serveur n’envoie pas un segment de paquet FIN au client, indiquant que toutes les données sont envoyées. Le serveur demande de fermer la connexion. Par conséquent, un total de quatre vagues sont nécessaires.

Quels problèmes de sécurité se produisent pendant la connexion TCP ?

Dans le processus de poignée de main à trois voies, après que le serveur envoie SYN-ACK, la connexion TCP avant de recevoir l’ACK du client est appelée une connexion semi-ouverte. À ce moment-là, le serveur est dans l’état SYN_RCVD. Lorsqu’un ACK est reçu, le serveur peut passer à l’état ÉTABLI.

L’attaque SYN signifie que le client attaquant forge un grand nombre d’adresses IP inexistantes en peu de temps, envoie continuellement des paquets SYN au serveur, et le serveur répond avec le paquet de confirmation, puis attend la confirmation du client.

Étant donné que l’adresse source n’existe pas, le serveur doit retransmettre en continu jusqu’à ce qu’il atteigne le délai d’expiration. En conséquence, ces paquets SYN falsifiés occuperont la file d’attente non connectée pendant une longue période et les demandes SYN régulières seront rejetées.

Dans les cas graves, cela provoquera des congestions réseau ou même des plantages système. Une attaque SYN est une attaque DoS/DDoS typique. Cliquez pour en savoir plus sur les attaques DoS/DDoS .