TCP (Transmission Control Protocol) : portrait du protocole de transport
Pour nous connecter à Internet, nous pouvons rapidement établir une connexion entre le routeur et l’ordinateur ou un appareil mobile, soit par le biais d’un câble soit sans fil. Aucune autre étape n’est nécessaire. La connexion au réseau est automatique, tout comme le lien à toute adresse Web individuelle nécessaire à la réception et l’envoi de données. Un ensemble de protocoles divers, également désigné suite de protocoles Internet, s’en assure. L’un des protocoles les plus importants et les plus anciens est le Transmission Control Protocol (TCP). Il détermine la manière dont les appareils connectés au sein d’un réseau échangent leurs données.
Qu’est-ce que le TCP (Transmission Control Protocol) ?
Transmission Control Protocol, soit TCP ou protocole TCP, est un accord normalisé de transmission des données entre différents abonnés à un réseau informatique. L’histoire de ce protocole remonte à l’année 1973, date à laquelle Robert E. Kahn et Vinton G. Cerf, deux informaticiens, en ont publié une première version dans le cadre de leur travail de recherche. Il fallut attendre huit ans de plus avant la normalisation de TCP dans la RFC 793. Depuis, bien que le noyau du protocole soit resté inchangé, il a subi un large éventail d’améliorations et d’extensions. La version actuelle décrite dans la RFC 7323 date de 2014.
L’état de développement actuel du protocole TCP permet d’établir un lien de transmission de données bilatérale entre deux terminaux d’un même réseau informatique. Toute éventuelle perte de données est automatiquement détectée et solutionnée, c’est pourquoi ce protocole est considéré comme fiable. Dans la suite de protocoles Internet, le TCP forme, avec l’UDP et le SCTP, le groupe de protocoles de transport, intégrés à la couche transport de l’architecture de réseau selon le modèle OSI. Dans la mesure où, dans presque tous les cas, le protocole TCP est basé sur le protocole Internet (IP) et que cette connexion forme la base de la majorité des réseaux et services de réseaux publics et locaux, on parle également souvent de pile de protocoles TCP/IP au sens de la suite de protocoles Internet.
Comment fonctionnent les connexions au protocole TCP ?
TCP permet la transmission bilatérale d’informations. Les systèmes informatiques qui communiquent via le TCP peuvent ainsi envoyer et recevoir simultanément des données, comme lors d’un appel téléphonique. Les unités de transmission de base, sur lesquelles repose le protocole, sont des segments (paquets) pouvant contenir des informations de commande en plus de leurs données utiles et sont limités à un volume de 1 500 octets. L’activation et la désactivation de connexions de bout-en-bout, ainsi que la transmission de données même, sont prises en charge par le logiciel TCP dans la pile de protocoles réseau du système d’exploitation utilisé.
Le logiciel TCP est commandé par différentes applications réseau, telles que les navigateurs Web ou serveurs par le biais d’interfaces spécifiques. Pour ce faire, chaque connexion doit toujours être identifiée par deux points (client et serveur) clairement définis. Le rôle du client et le rôle du serveur n’ont aucune importance. L’important est que le logiciel TCP dispose, pour chacun de ces points, d’une paire ordonnée comprenant une adresse IP et un port (également appelée « Couple » ou « Socket »).
La poignée de main en trois temps (« 3-Way Handshake ») : fonctionnement détaillé d’une connexion TCP
Pour établir une connexion TCP valide, les deux points impliqués doivent disposer d’une adresse IP univoque (IPv4 ou IPv6) et du port souhaité, déclaré et validé pour la transmission de données. Tandis que la première sert d’identifiant, le second permet d’affecter les connexions aux applications client et serveur concrètes par le biais du système d’exploitation.
Pour mieux comprendre le lien entre TCP et IP, consultez notre article dédié aux protocoles TCP/IP.
Le déroulement concret de la procédure de connexion via le protocole TCP est le suivant :
- Dans un premier temps, le client souhaitant établir la connexion au serveur envoie un paquet ou segment SYN (de l’anglais synchronize = « synchroniser ») portant un numéro séquentiel aléatoire individuel. Ce numéro garantit la transmission intégrale et dans le bon ordre (sans doublons) des données.
- Lorsque le serveur reçoit le segment, il approuve la connexion en renvoyant un paquet SYN-ACK (de l’anglais acknowledgement = « confirmation »), ainsi que le numéro séquentiel du client augmenté de 1. Il transmet également aux clients son propre numéro séquentiel.
- Pour finir, le client confirme la réception du segment SYN-ACK en envoyant son propre paquet ACK qui, cette fois-ci, contient le numéro séquentiel du serveur augmenté de 1. Simultanément, il peut transmettre ses premières données au serveur.
La transmission via le Transmission Control Protocol se fait en trois étapes, d’où son nom le « 3-Way Handshake ».
Lorsque le port du serveur est fermé ou son accès bloqué, le client reçoit, à la place, un paquet TCP-RST (de l’anglais reset = « réinitialiser »).
TCP Teardown : fonctionnement de la déconnexion TCP
Les deux partenaires de communication peuvent désactiver une connexion TCP établie. La déconnexion unilatérale est également possible. Cette dernière est considérée comme une connexion semi-fermée : même lorsqu’un abonné a désactivé sa connexion, l’autre partie peut encore lui transmettre des données.
Les différentes étapes de la déconnexion bilatérale (initiée ici par le client pour plus de simplicité) sont les suivantes :
- Le client envoie un segment FIN au serveur et lui indique ainsi qu’il ne souhaite plus envoyer de données. Tout comme lors de l’établissement de la connexion, il envoie son propre numéro de séquence.
- Le serveur confirme la réception du paquet par un segment ACK, contenant le numéro séquentiel augmenté de 1.
- Si, de son côté, le serveur a également terminé la transmission de données, il envoie également un paquet FIN, auquel il adjoint son numéro séquentiel.
- C’est alors au tour du client d’envoyer un paquet ACK comprenant son numéro séquentiel augmenté de 1. La connexion TCP est alors officiellement désactivée pour le serveur.
Pour la partie ayant envoyé le dernier segment ACK (dans notre cas : le client), la connexion n’est toutefois pas immédiatement désactivée. En effet, aucune garantie ne lui a été donnée que le dernier paquet envoyé a bien été reçu. Le partenaire de communication passe alors en mode d’attente (« état Time-Wait ») jusqu’à écoulement de la période de transmission maximale du segment ACK et d’un éventuel nouveau segment FIN (soit deux minutes selon la RFC 793).
Comment est formé l’en-tête TCP ?
Conformément au protocole, les données essentielles à l’établissement d’une connexion et à la transmission de données sur la base du Transmission Control Protocol se trouvent dans l’en-tête d’un paquet TCP. Ces données d’en-tête (ou informations de commande) précèdent la charge utile de transmission (Payload) et représentent généralement un volume de 20 octets (160 bits) ; Elles sont suivies d’un maximum de 40 octets (320 bits) d’informations supplémentaires en option, ne trouvant pas une application dans tous les paquets.
Pour la transmission de confirmations, messages d’erreur, etc., tels que les messages SYN et FIN (activation/désactivation de connexion), des segments TCP sans données utiles, c’est-à-dire, en principe, des en-têtes seuls peuvent également être envoyés.
Vous trouverez, ci-après, une description détaillée de l’en-tête TCP :
Les différents composants ou champs de l’en-tête du protocole TCP sont divisés comme suit :
Port Source (16 bits) : indique le numéro de port de l’expéditeur.
Port Destination (16 bits) : indique le numéro de port du destinataire.
Numéro de séquence (32 bits) : au choix, le numéro de séquence indique le premier octet des données utiles jointes ou est envoyé lors de la procédure d’activation ou de désactivation de la connexion. Il sert également à la validation et au tri (au terme de la transmission) des segments.
Numéro d’accusé de réception (32 bits) : ce champ indique le numéro de confirmation attendu par l’expéditeur. Un Flag ACK doit être activé pour assurer sa validité (au champ « Flags »).
Offset (4 bits) : le champ « Offset » indique la longueur de l’en-tête TCP en blocs de 32 bits pour mettre en avant le point de départ des données utiles. Celui-ci peut varier de segment en segment en fonction du champ Options variable.
Réservé (6 bits) : RFC 793, réservé pour utilisation ultérieure, jusqu’ici non utilisé. Ce champ doit toujours indiquer la valeur « 0 ».
Flags (6 bits) : Les 6 bits individuels disponibles au champ Flags permettent d’activer différentes actions TCP visant l’organisation de la communication et de la transmission de données. Les Flags suivants peuvent être activés ou désactivés ici :
- URG : le Flag « Urgent » signale à l’application TCP que les données utiles doivent immédiatement être traitées jusqu’au pointeur Urgent (voir ci-dessous).
- ACK : Combiné au numéro de confirmation, le Flag ACK accuse réception des paquets TCP. Lorsque le Flag est désactivé, le numéro de confirmation est automatiquement invalidé.
- PSH : le Flag « Push » garantit qu’un segment TCP soit immédiatement mis à disposition sans atterrir d’abord dans la mémoire tampon de l’expéditeur et du destinataire.
- RST : en cas d’erreur pendant la transmission, un paquet TCP portant le Flag RST (« Reset ») permet de réinitialiser l’application.
- SYN : les messages portant un Flag SYN sont la première étape du 3-Way Handshake. Ils initient donc l’activation de la connexion.
- FIN : le Flag « Finish » signale à son vis-à-vis qu’un partenaire de communication a achevé la transmission.
Taille de fenêtre (16 bits) : ce champ indique aux partenaires de communication le nombre d’octets que l’expéditeur est prêt à recevoir.
Total de contrôle (16 bits) : le Transmission Control Protocol est doté d’une fonction fiable de détection des erreurs de transmission. Pour ce faire, il utilise la somme de contrôle calculée à partir de l’en-tête, des données utiles et du pseudo-en-tête.
Pointeur d’urgence (16 bits) : le pointeur d’urgence indique la position du premier octet suivant les données utiles à traiter de manière urgente. Ce champ est uniquement valide et pertinent lorsque le Flag URG est activé.
Options (0–320 bits) : le champ Options permet de préparer l’exécution de fonctions TCP ne se trouvant pas dans l’en-tête général, la définition de la longueur de segment maximum par exemple. La longueur des options doit toujours être un multiple de 32 bits. Dans le cas contraire, il faut la compléter de bits nuls (Padding).
Fonctionnement détaillé de la transmission de données via le protocole TCP
Avant la transmission des premières données, l’expéditeur et le destinataire conviennent généralement du volume maximum des segments TCP à expédier (Maximum Segment Size – MSS). Par défaut, chaque segment peut faire jusqu’à 1 500 octets, dont au moins 20 octets doivent être réservés à l’en-tête TCP et 20 autres à l’en-tête IP, laissant 1 460 octets pour les données utiles. Pour définir un volume individuel, il suffit de le préciser dans le champ Options selon la procédure décrite ci-avant. Des ajustements supplémentaires doivent alors être faits pour la partie Données utiles.
Considérant le volume de segment maximum, moins l’en-tête, un paquet TCP peut uniquement transmettre des données de 1,46 kilooctets soit 0,00146 mégaoctets. Pour transmettre des contenus Web, telles que des images de plusieurs centaines de kilooctets à l’aide du protocole TCP, on peut utiliser la segmentation. Avant le transport, les données d’application sont alors divisées en plusieurs blocs de données, numérotées, puis expédiées de manière aléatoire. Le destinataire doit accuser réception de chaque segment et peut remettre les paquets dans l’ordre à l’aide des numéros séquentiels. Il peut ainsi recomposer facilement et dans leur intégralité les données utiles reçues au terme de la transmission TCP.
Lorsque l’expéditeur ne reçoit pas de confirmation pour un segment envoyé, la fonction de Retransmission Timeout (RTO) est activée. Si la période prédéfinie suivant l’envoi d’un paquet s’écoule avant la réception d’une réponse, un nouvel envoi est automatiquement initié. Cette période prédéfinie peut être ajustée de manière dynamique par un algorithme, sur la base de la vitesse de transmission individuelle.
Synthèse des faits les plus importants pour le Transmission Control Protocol
Le protocole TCP marque, depuis près de 50 ans, l’histoire et le développement des réseaux informatiques. Cela est en partie dû à sa bonne compatibilité avec le protocole Internet historique IP, sans oublier les avantages majeurs de TCP par rapport à des alternatives telles que l’UDP et le SCTP. Ses caractéristiques principales peuvent être décrites comme suit :
- Le protocole TCP est un protocole de connexion permettant la communication bilatérale entre deux points selon la procédure du 3-Way Handshake.
- TCP est fiable. En effet, le protocole garantit la transmission de toutes les données dans leur intégralité, ainsi que la possibilité, pour le destinataire, de les remettre dans le bon ordre.
- TCP prévoit l’envoi des données par segments individuels d’un volume maximum de 1 500 octets (en-tête compris).
- TCP est, dans le modèle OSI, intégré à la couche transport (couche 4).
- TCP se base, dans la plupart des cas, sur le protocole Internet (IP). C’est pourquoi, on parle souvent de la pile de protocoles TCP/IP.
- Le volume par défaut de l’en-tête TCP est de 20 octets. Des options supplémentaires pouvant atteindre jusqu’à 40 octets peuvent lui être rajoutées.