La couche transport TCP/IP
Transmission Control Protocol (TCP)
TCP, ou Transmission Control Protocol, est l'un des deux principaux protocoles opérant au niveau de la couche de transport du modèle TCP/IP, l'autre étant UDP (User Datagram Protocol). TCP joue un rôle essentiel dans la transmission fiable des données entre deux hôtes sur un réseau, en s'assurant que l'information envoyée par l'émetteur parvienne correctement au destinataire, dans le bon ordre et sans erreurs.
Le fonctionnement de TCP repose sur le découpage des données en paquets appelés segments. Chaque segment est numéroté et assorti d'un checksum, une valeur calculée permettant de vérifier l'intégrité des données à l'arrivée. Ces segments sont ensuite enveloppés dans une enveloppe TCP, contenant toutes les informations nécessaires à la gestion de la connexion, puis placés à l'intérieur d'une enveloppe IP (Internet Protocol). Cette dernière contient les adresses IP de l'expéditeur et du destinataire, assurant ainsi que le segment parvienne à la bonne machine sur le réseau. Ainsi, le bloc que TCP transmet à IP est constitué d'une entête TCP détaillée et des données issues de la couche application.
TCP se distingue par sa nature orientée connexion, ce qui signifie qu'il établit une session fiable entre deux machines avant tout échange de données. Contrairement à UDP, étant connectionless et minimaliste, TCP assure la fiabilité, la correction d'erreurs et le contrôle de flux, tout en garantissant que les données sont livrées exactement comme elles ont été envoyées. Pour ce faire, TCP utilise un mécanisme appelé handshake en trois phases, ou three-way handshake, qui initialise et synchronise les numéros de séquence entre les deux hôtes.
Lorsqu'une machine A souhaite établir une connexion, elle envoie un segment avec le drapeau SYN (Synchronize sequence numbers) pour indiquer le début d'une session et proposer des numéros de séquence. La machine B répond alors avec un segment où les drapeaux SYN et ACK (Acknowledgement) sont positionnés, confirmant la réception et synchronisant ses propres numéros de séquence. La machine A termine le processus en envoyant un dernier segment avec le flag ACK, marquant la fin de l'établissement de la connexion. Une fois ce handshake terminé, les données peuvent circuler en toute fiabilité entre les deux hôtes.
TCP utilise également un mécanisme de confirmation positive avec retransmission (Positive Acknowledgement with Re-transmission, PAR) pour garantir l'intégrité des données. Chaque segment envoyé doit être confirmé par le destinataire : si la confirmation n'arrive pas dans un délai imparti, le segment est automatiquement retransmis. Ce processus assure que tous les paquets perdus ou corrompus sont renvoyés jusqu'à ce que leur réception correcte soit confirmée.
Enfin, TCP prévoit également la fermeture de la connexion de manière fiable grâce à une procédure similaire en trois étapes, utilisant le drapeau FIN (Finish). Le FIN indique que l'émetteur n'a plus de données à envoyer. Le destinataire accuse réception et, après que toutes les données restantes ont été traitées, la connexion est complètement terminée. Cette approche garantit que toutes les données sont transmises correctement et que la session est fermée de façon ordonnée, sans risque de perte d'informations ou de corruption.
En résumé, TCP constitue la pierre angulaire de la couche transport du modèle TCP/IP, combinant découpage des données, numérotation des segments, contrôle d'intégrité, gestion de la connexion et mécanismes de fiabilité pour assurer un transfert de données robuste et précis, parfaitement adapté aux applications nécessitant une communication fiable et ordonnée, comme le web, le courrier électronique et le transfert de fichiers.
Les différents champs de l'entête TCP
L'entête d'un segment TCP se compose de plusieurs champs essentiels, chacun ayant une fonction spécifique pour assurer la transmission fiable, ordonnée et sécurisée des données entre deux machines. Ces champs sont soigneusement définis afin de permettre au protocole TCP de gérer les connexions, de détecter les erreurs, d'indiquer la priorité et de synchroniser les flux de données :
| Champ | Taille | Description | |
|---|---|---|---|
| Source Port | 16 bits | Ce champ identifie le port de l'émetteur, c'est-à-dire l'application ou le processus envoyant le segment sur la machine source. Il permet au destinataire de savoir à quel service ou application renvoyer les éventuelles réponses. | |
| Destination Port | 16 bits | Ce champ indique le port de réception, correspondant à l'application ou au service sur l'ordinateur destinataire. Grâce à cette information, TCP peut diriger le segment vers la bonne application sur la machine de destination. | |
| Sequence Number | 32 bits | Ce nombre sert à numéroter les octets du flux de données, de manière à identifier précisément la position du premier octet de données d'un segment donné dans l'ensemble du flot de données initialement envoyé. Cela permet de reconstituer l'ordre correct des données, même si certains segments arrivent dans le désordre. | |
| Acknowledgment Number | 32 bits | Ce champ est utilisé pour accuser réception des données reçues. Il contient le numéro du prochain octet attendu par le destinataire et joue un rôle clé dans le mécanisme de confirmation positive avec retransmission (PAR), garantissant que toutes les données sont bien reçues. | |
| Offset (Data Offset) | 32 bits | Ce champ indique le déplacement en mots de 32 bits entre le début de l'entête et le début des données applicatives. Il permet au protocole de savoir où commence réellement la partie « données » du segment. La valeur par défaut est généralement 5, ce qui correspond à un en-tête TCP de 20 octets sans options supplémentaires. | |
| Flags (drapeaux de contrôle) | Variable | Ces bits spéciaux régulent le comportement de la connexion TCP et signalent des informations importantes : | |
| Bits | Description | ||
| URG (Urgent Pointer) | Indique que certaines données contenues dans le segment sont urgentes et doivent être traitées immédiatement par la couche application. | ||
| ACK (Acknowledgment Field) | Active le champ d'accusé de réception pour signaler que le segment contient un numéro de séquence valide à confirmer. | ||
| PSH (Push Flag) | Force la transmission immédiate des données à la couche application, évitant qu'elles ne soient mises en mémoire tampon. | ||
| RST (Reset Flag) | Utilisé pour forcer la fermeture d'une connexion en cas d'erreur critique ou irrécupérable, réinitialisant le flux de données. | ||
| SYN (Synchronize Flag) | Sert à synchroniser le démarrage d'une connexion lors du three-way handshake, permettant aux deux hôtes d'échanger leurs numéros de séquence initiaux. | ||
| FIN (Finish Flag) | Indique que l'émetteur n'a plus de données à envoyer et souhaite terminer la connexion de manière ordonnée. | ||
| Window | 16 bits | Ce champ annonce la taille de la fenêtre, c'est-à-dire la quantité maximale de données que le destinataire peut accepter sans envoyer d'accusé de réception. Il permet un contrôle de flux efficace, garantissant que le serveur ou client récepteur n'est pas saturé. | |
| Checksum | 16 bits | Ce champ contient un code de contrôle d'erreur, calculé comme le « complément à un » du total des mots de 16 bits de l'en-tête et des données. Il permet de détecter toute corruption de segment pendant le transport sur le réseau. | |
| Urgent Pointer | 16 bits | Si le drapeau URG est activé, ce champ indique la position finale des données urgentes dans le segment, permettant à l'application de traiter rapidement les informations prioritaires. | |
| Options | Longueur variable | Ce champ est utilisé pour ajouter des fonctionnalités supplémentaires à TCP. La principale option est le MSS (Maximum Segment Size), qui spécifie la taille maximale des données qu'un segment peut contenir, afin d'optimiser la fragmentation et la transmission. | |
| Padding | Longueur variable | Le champ de bourrage, ou padding, est généralement rempli de zéros pour garantir que l'en-tête TCP est aligné sur un multiple de 32 bits. Cela facilite le traitement des segments par les routeurs et systèmes récepteurs, améliorant l'efficacité et la compatibilité matérielle. | |
Chaque champ de l'entête TCP joue un rôle crucial pour que la communication soit fiable, ordonnée et efficace, en permettant de gérer les connexions, de contrôler le flux, d'assurer l'intégrité des données et de gérer la priorité des informations transmises entre deux machines sur un réseau TCP/IP.