Sommaire [masquer]
1 Présentation du protocole
2 Description du protocole
2.1 Structure d'un segment TCP
2.2 Connexion en 3 temps
2.3 Fin d'une connexion
2.3.1 Méthode canonique
2.3.2 Méthode abrupte
2.4 Numéro de séquence & d'acquittement
2.4.1 Numéro de séquence
2.4.2 Numéro d'acquittement
2.4.3 Exemple
3 Exemple de protocoles utilisant TCP
Présentation du protocole
TCP (Transfert Control Protocol) est un protocole de niveau 4 sur le modèle OSI. Il dispose de davantage d'informations dans son entête qu'UDP, afin de prévenir les éventuelles erreurs lors l'acheminement du paquet sur le réseau. Ce protocole est caractérisé par un échange en trois temps avant toute échange de données utiles quelconques. Par conséquent, c'est un protocole plus fiable que UDP.
Description du protocole
Structure d'un segment TCP
Port source : Numéro de port de l'application source.
Port destination : Numéro de port de l'application distante.
Numéro de séquence : Attribut un numéro pour chaque segment envoyé sur le réseau (nos deux hôtes ont chacun leur propre numéro de séquence).
Numéro d'acquittement : Identifie le dernier octet du segment reçu, il s'accompagne d'un ACK.
Taille entête : Indique le nombre de mots de 4 octets dont est constitué l'entête.
Réservé : Champ réservé pour un usage futur.
Code : Modifie le comportement du segment TCP.
Fenêtre : Elle permet de contrôler flux de données.
Somme de contrôle : Détecte les erreurs issu du segment en utilisant un calcul de checksum.
Pointeur de données urgentes : Ce champ n'est pris en compte seulement si l'option URG est activée. Il indique via un offset, l'endroit où se trouve les données urgentes à transmettre.
Options : Paramétrage du segment TCP, ce champ est actif dès que la valeur l'offset est supérieure à 5.
Remplissage : Remplit l'entête si nécessaire, de manière à obtenir un multiple de 32.
Données : Charge utile du segment.
Connexion en 3 temps
Contrairement à UDP qui utilise le mode non connecté, TCP lui, emploie le mode connecté. Ce mode établit en quelque sorte, un circuit virtuel entre l'hôte émetteur et l'hôte récepteur, de manière à obtenir des échanges de données bidirectionnelles fiables. TCP se caractérise donc par une QoS (Qualité de Service) élevée.
Voyons l'établissement d'une connexion avec le mode connecté.
Dans un premier temps, l'hôte A qui souhaite établir une connexion avec l'hôte B, envoie un paquet contenant un SYN, pour tenter de se synchroniser avec l'hôte récepteur (Hôte B).
L'hôte B reçoit la requête, il envoie à l'hôte A un acquittement pour confirmer qu'il a bien reçu le message précédent, et un SYN pour qu'il se synchronise à son tour.
L'hôte A, une fois qu'il a reçu le message, envoie à l'hôte B un accusé de réception (ACK).
Remarque : Cette connexion réussit le plus souvent, néanmoins, il arrive que la connexion en trois temps échoue pour diverses raisons, en voici quelques unes listées ci-dessous.
- L'hôte B (qui peut être un serveur par exemple) reçoit trop de requêtes et ne peut satisfaire toutes les demandes.
- Congestion du réseau.
- Mauvaise connexion d'un des hôtes.
Fin d'une connexion
Méthode canonique
L'hôte A qui veut mettre fin à la connexion, envoie un segment contenant le drapeau FIN.
L'hôte B ayant reçu le message, confirme la réception du segment en envoyant un ACK accompagné d'un FIN.
L'hôte A, "confirme la confirmation" en lui envoyant un ACK à son tour.
Ce dernier message conclue la communication.
Remarque : Tant que le récepteur n'a pas encore émis le segment contenant ACK + FIN et que le récepteur ne l'a pas encore reçu, les échanges de données peuvent encore s'effectuer.
Méthode abrupte
La méthode abrupte est utilisée quand un des deux hôtes veut arrêter brutalement la connexion pour une raison X.
L'hôte qui veut stopper net à la connexion envoie simplement un segment contenant le drapeau RST.
Il est à noter que dans ce cas de figure, si les deux hôtes avaient encore des données à échanger, ces données non envoyées sont tout bonnement détruite par réception du RST.
Numéro de séquence & d'acquittement
Numéro de séquence
Le numéro de séquence permet d'attribuer une valeur numérique de 32 bits non signée, pour permettre d'identifier le segment, et par la suite mettre les segments reçus par l'hôte récepteur dans l'ordre.
Lors de la connexion en trois temps, un numéro de départ de séquence (appelé aussi ISN pour Initial Sequence Number) est choisi entre les deux hôtes de manière arbitraire. Et ce pour parer les éventuelles attaques de numéro de séquence.
Ensuite, le protocole TCP se charge d'incrémenter ce numéro à chaque fois qu'un segment est émis. Quand ce numéro atteint la dernière valeur possible, à savoir 2^32 - 1 soit
(4 294 967 295), il revient à 0.
Numéro d'acquittement
Le numéro d'acquittement indique [le dernier octet reçu par l'hôte récepteur + 1] ce qui correspond donc au prochain octet que recevra le récepteur. On peut ainsi dire que le numéro d'acquittement correspond au numéro de séquence du récepteur. C'est un numéro de 32 bits non signés. Le numéro d'acquittement doit être accompagné du drapeau ACK.
Exemple
Chaque segment TCP possède un numéro de séquence, un numéro d'acquittement et une taille des données envoyées.
Lorsque l'hôte A envoie des données à B, il indique le numéro qui identifie le segment accompagné de la taille des données. De plus il contient un numéro d'acquittement (avec le drapeau ACK qui l'accompagne bien évidemment), pour confirmer la réception d'un segment précédemment envoyé par l'hôte B.
Ce mécanisme peut être compliqué à le simuler mentalement dans votre tête, mais il n'en est rien. Si vous remarquez dans le tout premier envoi de données effectué par l'hôte A, le SeqNum = 250 et la taille des données est de 10 octets. Ensuite dans le 2ème envoi de données fait par l'hôte B, le segment comporte un numéro d'acquittement égal à 260, c'est en fait le SeqNum + Données du segment précédemment cité. On remarquera par la même occasion que AckNum du tout premier segment équivaut à 1500, ce qui correspond avec le SeqNum du 2ème segment qui égal lui aussi à 1500.
Exemple de protocoles utilisant TCP