Pour nous connecter à Internet, nous pouvons ra­pi­de­ment établir une connexion entre le routeur et l’or­di­na­teur ou un appareil mobile, soit par le biais d’un câble soit sans fil. Aucune autre étape n’est né­ces­saire. La connexion au réseau est au­to­ma­tique, tout comme le lien à toute adresse Web in­di­vi­duelle né­ces­saire à la réception et l’envoi de données. Un ensemble de pro­to­coles divers, également désigné suite de pro­to­coles Internet, s’en assure. L’un des pro­to­coles les plus im­por­tants et les plus anciens est le Trans­mis­sion 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 (Trans­mis­sion Control Protocol) ?

Trans­mis­sion Control Protocol, soit TCP ou protocole TCP, est un accord normalisé de trans­mis­sion des données entre dif­fé­rents abonnés à un réseau in­for­ma­tique. L’histoire de ce protocole remonte à l’année 1973, date à laquelle Robert E. Kahn et Vinton G. Cerf, deux in­for­ma­ti­ciens, en ont publié une première version dans le cadre de leur travail de recherche. Il fallut attendre huit ans de plus avant la nor­ma­li­sa­tion de TCP dans la RFC 793. Depuis, bien que le noyau du protocole soit resté inchangé, il a subi un large éventail d’amé­lio­ra­tions et d’ex­ten­sions. La version actuelle décrite dans la RFC 7323 date de 2014.

L’état de dé­ve­lop­pe­ment actuel du protocole TCP permet d’établir un lien de trans­mis­sion de données bi­la­té­rale entre deux terminaux d’un même réseau in­for­ma­tique. Toute éven­tuelle perte de données est au­to­ma­ti­que­ment détectée et so­lu­tion­née, c’est pourquoi ce protocole est considéré comme fiable. Dans la suite de pro­to­coles Internet, le TCP forme, avec l’UDP et le SCTP, le groupe de pro­to­coles de transport, intégrés à la couche transport de l’ar­chi­tec­ture 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 pro­to­coles TCP/IP au sens de la suite de pro­to­coles Internet.

Comment fonc­tion­nent les con­nexions au protocole TCP ?

TCP permet la trans­mis­sion bi­la­té­rale d’in­for­ma­tions. Les systèmes in­for­ma­tiques qui com­mu­ni­quent via le TCP peuvent ainsi envoyer et recevoir si­mul­ta­né­ment des données, comme lors d’un appel té­lé­pho­nique. Les unités de trans­mis­sion de base, sur les­quelles repose le protocole, sont des segments (paquets) pouvant contenir des in­for­ma­tions de commande en plus de leurs données utiles et sont limités à un volume de 1 500 octets. L’ac­ti­va­tion et la dé­sac­ti­va­tion de con­nexions de bout-en-bout, ainsi que la trans­mis­sion de données même, sont prises en charge par le logiciel TCP dans la pile de pro­to­coles réseau du système d’ex­ploi­ta­tion utilisé.

Le logiciel TCP est commandé par dif­fé­rentes ap­pli­ca­tions réseau, telles que les na­vi­ga­teurs Web ou serveurs par le biais d’in­ter­faces spé­ci­fiques. Pour ce faire, chaque connexion doit toujours être iden­ti­fiée par deux points (client et serveur) clai­re­ment définis. Le rôle du client et le rôle du serveur n’ont aucune im­por­tance. L’important est que le logiciel TCP dispose, pour chacun de ces points, d’une paire ordonnée com­pre­nant une adresse IP et un port (également appelée « Couple » ou « Socket »).

La poignée de main en trois temps (« 3-Way Handshake ») : fonc­tion­ne­ment 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 trans­mis­sion de données. Tandis que la première sert d’iden­ti­fiant, le second permet d’affecter les con­nexions aux ap­pli­ca­tions client et serveur concrètes par le biais du système d’ex­ploi­ta­tion.

Conseil

Pour mieux com­prendre le lien entre TCP et IP, consultez notre article dédié aux pro­to­coles TCP/IP.

Le dé­rou­le­ment concret de la procédure de connexion via le protocole TCP est le suivant :

  1. Dans un premier temps, le client sou­hai­tant établir la connexion au serveur envoie un paquet ou segment SYN (de l’anglais syn­chro­nize = « syn­chro­ni­ser ») portant un numéro sé­quen­tiel aléatoire in­di­vi­duel. Ce numéro garantit la trans­mis­sion intégrale et dans le bon ordre (sans doublons) des données.
  2. Lorsque le serveur reçoit le segment, il approuve la connexion en renvoyant un paquet SYN-ACK (de l’anglais ack­now­led­ge­ment = « con­fir­ma­tion »), ainsi que le numéro sé­quen­tiel du client augmenté de 1. Il transmet également aux clients son propre numéro sé­quen­tiel.
  3. 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é­quen­tiel du serveur augmenté de 1. Si­mul­ta­né­ment, il peut trans­mettre ses premières données au serveur.

La trans­mis­sion via le Trans­mis­sion Control Protocol se fait en trois étapes, d’où son nom le « 3-Way Handshake ».

Note

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éi­ni­tia­li­ser »).

TCP Teardown : fonc­tion­ne­ment de la dé­con­nexion TCP

Les deux par­te­naires de com­mu­ni­ca­tion peuvent dé­sac­ti­ver une connexion TCP établie. La dé­con­nexion uni­la­té­rale est également possible. Cette dernière est con­si­dé­rée comme une connexion semi-fermée : même lorsqu’un abonné a désactivé sa connexion, l’autre partie peut encore lui trans­mettre des données.

Les dif­fé­rentes étapes de la dé­con­nexion bi­la­té­rale (initiée ici par le client pour plus de sim­pli­cité) sont les suivantes :

  1. 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’éta­blis­se­ment de la connexion, il envoie son propre numéro de séquence.
  2. Le serveur confirme la réception du paquet par un segment ACK, contenant le numéro sé­quen­tiel augmenté de 1.
  3. Si, de son côté, le serveur a également terminé la trans­mis­sion de données, il envoie également un paquet FIN, auquel il adjoint son numéro sé­quen­tiel.
  4. C’est alors au tour du client d’envoyer un paquet ACK com­pre­nant son numéro sé­quen­tiel augmenté de 1. La connexion TCP est alors of­fi­ciel­le­ment dé­sac­ti­vée pour le serveur.

Pour la partie ayant envoyé le dernier segment ACK (dans notre cas : le client), la connexion n’est toutefois pas im­mé­dia­te­ment dé­sac­ti­vée. En effet, aucune garantie ne lui a été donnée que le dernier paquet envoyé a bien été reçu. Le par­te­naire de com­mu­ni­ca­tion passe alors en mode d’attente (« état Time-Wait ») jusqu’à écou­le­ment de la période de trans­mis­sion 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 ?

Con­for­mé­ment au protocole, les données es­sen­tielles à l’éta­blis­se­ment d’une connexion et à la trans­mis­sion de données sur la base du Trans­mis­sion Control Protocol se trouvent dans l’en-tête d’un paquet TCP. Ces données d’en-tête (ou in­for­ma­tions de commande) précèdent la charge utile de trans­mis­sion (Payload) et re­pré­sen­tent gé­né­ra­le­ment un volume de 20 octets (160 bits) ; Elles sont suivies d’un maximum de 40 octets (320 bits) d’in­for­ma­tions sup­plé­men­taires en option, ne trouvant pas une ap­pli­ca­tion dans tous les paquets.

Note

Pour la trans­mis­sion de con­fir­ma­tions, messages d’erreur, etc., tels que les messages SYN et FIN (ac­ti­va­tion/dé­sac­ti­va­tion 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 des­crip­tion détaillée de l’en-tête TCP :

Les dif­fé­rents com­po­sants 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’ex­pé­di­teur.

Port Des­ti­na­tion (16 bits) : indique le numéro de port du des­ti­na­taire.

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’ac­ti­va­tion ou de dé­sac­ti­va­tion de la connexion. Il sert également à la va­li­da­tion et au tri (au terme de la trans­mis­sion) des segments.

Numéro d’accusé de réception (32 bits) : ce champ indique le numéro de con­fir­ma­tion attendu par l’ex­pé­di­teur. 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 uti­li­sa­tion ul­té­rieure, jusqu’ici non utilisé. Ce champ doit toujours indiquer la valeur « 0 ».

Flags (6 bits) : Les 6 bits in­di­vi­duels dis­po­nibles au champ Flags per­met­tent d’activer dif­fé­rentes actions TCP visant l’or­ga­ni­sa­tion de la com­mu­ni­ca­tion et de la trans­mis­sion de données. Les Flags suivants peuvent être activés ou dé­sac­ti­vés ici :

  • URG : le Flag « Urgent » signale à l’ap­pli­ca­tion TCP que les données utiles doivent im­mé­dia­te­ment être traitées jusqu’au pointeur Urgent (voir ci-dessous).
  • ACK : Combiné au numéro de con­fir­ma­tion, le Flag ACK accuse réception des paquets TCP. Lorsque le Flag est désactivé, le numéro de con­fir­ma­tion est au­to­ma­ti­que­ment invalidé.
  • PSH : le Flag « Push » garantit qu’un segment TCP soit im­mé­dia­te­ment mis à dis­po­si­tion sans atterrir d’abord dans la mémoire tampon de l’ex­pé­di­teur et du des­ti­na­taire.
  • RST : en cas d’erreur pendant la trans­mis­sion, un paquet TCP portant le Flag RST (« Reset ») permet de réi­ni­tia­li­ser l’ap­pli­ca­tion.
  • SYN : les messages portant un Flag SYN sont la première étape du 3-Way Handshake. Ils initient donc l’ac­ti­va­tion de la connexion.
  • FIN : le Flag « Finish » signale à son vis-à-vis qu’un par­te­naire de com­mu­ni­ca­tion a achevé la trans­mis­sion.

Taille de fenêtre (16 bits) : ce champ indique aux par­te­naires de com­mu­ni­ca­tion le nombre d’octets que l’ex­pé­di­teur est prêt à recevoir.

Total de contrôle (16 bits) : le Trans­mis­sion Control Protocol est doté d’une fonction fiable de détection des erreurs de trans­mis­sion. 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 uni­que­ment 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é­fi­ni­tion 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).

Fonc­tion­ne­ment détaillé de la trans­mis­sion de données via le protocole TCP

Avant la trans­mis­sion des premières données, l’ex­pé­di­teur et le des­ti­na­taire con­vien­nent gé­né­ra­le­ment 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 in­di­vi­duel, il suffit de le préciser dans le champ Options selon la procédure décrite ci-avant. Des ajus­te­ments sup­plé­men­taires doivent alors être faits pour la partie Données utiles.

3mds9m7UGVM.jpg Pour afficher cette vidéo, des cookies de tiers sont nécessaires. Vous pouvez consulter et modifier vos paramètres de cookies ici.

Con­si­dé­rant le volume de segment maximum, moins l’en-tête, un paquet TCP peut uni­que­ment trans­mettre des données de 1,46 ki­looc­tets soit 0,00146 mé­gaoc­tets. Pour trans­mettre des contenus Web, telles que des images de plusieurs centaines de ki­looc­tets à l’aide du protocole TCP, on peut utiliser la seg­men­ta­tion. Avant le transport, les données d’ap­pli­ca­tion sont alors divisées en plusieurs blocs de données, nu­mé­ro­tées, puis expédiées de manière aléatoire. Le des­ti­na­taire doit accuser réception de chaque segment et peut remettre les paquets dans l’ordre à l’aide des numéros sé­quen­tiels. Il peut ainsi re­com­po­ser fa­ci­le­ment et dans leur in­té­gra­lité les données utiles reçues au terme de la trans­mis­sion TCP.

Note

Lorsque l’ex­pé­di­teur ne reçoit pas de con­fir­ma­tion pour un segment envoyé, la fonction de Re­trans­mis­sion Timeout (RTO) est activée. Si la période pré­dé­fi­nie suivant l’envoi d’un paquet s’écoule avant la réception d’une réponse, un nouvel envoi est au­to­ma­ti­que­ment initié. Cette période pré­dé­fi­nie peut être ajustée de manière dynamique par un al­go­rithme, sur la base de la vitesse de trans­mis­sion in­di­vi­duelle.

Synthèse des faits les plus im­por­tants pour le Trans­mis­sion Control Protocol

Le protocole TCP marque, depuis près de 50 ans, l’histoire et le dé­ve­lop­pe­ment des réseaux in­for­ma­tiques. Cela est en partie dû à sa bonne com­pa­ti­bi­lité avec le protocole Internet his­to­rique IP, sans oublier les avantages majeurs de TCP par rapport à des al­ter­na­tives telles que l’UDP et le SCTP. Ses ca­rac­té­ris­tiques prin­ci­pales peuvent être décrites comme suit :

  • Le protocole TCP est un protocole de connexion per­met­tant la com­mu­ni­ca­tion bi­la­té­rale entre deux points selon la procédure du 3-Way Handshake.
  • TCP est fiable. En effet, le protocole garantit la trans­mis­sion de toutes les données dans leur in­té­gra­lité, ainsi que la pos­si­bi­lité, pour le des­ti­na­taire, de les remettre dans le bon ordre.
  • TCP prévoit l’envoi des données par segments in­di­vi­duels 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 pro­to­coles TCP/IP.
  • Le volume par défaut de l’en-tête TCP est de 20 octets. Des options sup­plé­men­taires pouvant atteindre jusqu’à 40 octets peuvent lui être rajoutées.
Aller au menu principal