Aller au contenu principal

3. Spécification fonctionnelle (Functional Specification)

Ce chapitre décrit la spécification fonctionnelle de TCP, y compris le format d'en-tête, les définitions d'options, la gestion des numéros de séquence, la gestion des connexions et les mécanismes de transmission de données.

3.1. Format d'en-tête (Header Format)

Les segments TCP sont envoyés sous forme de datagrammes internet. L'en-tête du protocole Internet (Internet Protocol, IP) contient plusieurs champs d'information, notamment les adresses des hôtes source et destination. Un en-tête TCP suit les en-têtes IP, fournissant des informations spécifiques à TCP.

Structure de l'en-tête TCP

 0                   1                   2                   3
0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Source Port | Destination Port |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Sequence Number |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Acknowledgment Number |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Data | |C|E|U|A|P|R|S|F| |
| Offset| Rsrvd |W|C|R|C|S|S|Y|I| Window |
| | |R|E|G|K|H|T|N|N| |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Checksum | Urgent Pointer |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| [Options] |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| |
/ Data /
/ /
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

Descriptions des champs

Source Port (Port source) : 16 bits

  • Le numéro de port source

Destination Port (Port de destination) : 16 bits

  • Le numéro de port de destination

Sequence Number (Numéro de séquence) : 32 bits

  • Le numéro de séquence du premier octet de données dans ce segment (sauf lorsque le drapeau SYN est activé)
  • Si SYN est activé, le numéro de séquence est le numéro de séquence initial (Initial Sequence Number, ISN) et le premier octet de données est ISN+1

Acknowledgment Number (Numéro d'accusé de réception) : 32 bits

  • Si le bit de contrôle ACK est activé, ce champ contient la valeur du prochain numéro de séquence que l'expéditeur du segment s'attend à recevoir
  • Une fois qu'une connexion est établie, ce champ est toujours envoyé

Data Offset (Décalage de données) : 4 bits

  • Le nombre de mots de 32 bits dans l'en-tête TCP
  • Indique où commencent les données
  • L'en-tête TCP (même celui incluant des options) a une longueur qui est un multiple entier de 32 bits

Reserved (Réservé) : 4 bits

  • Un ensemble de bits de contrôle réservés pour une utilisation future
  • Doit (must) être zéro dans les segments générés
  • Doit (must) être ignoré dans les segments reçus si les fonctionnalités futures correspondantes ne sont pas implémentées par l'hôte émetteur ou récepteur

Control Bits (Bits de contrôle) : Les bits de contrôle sont également connus sous le nom de « drapeaux (Flags) ». L'attribution est gérée par l'IANA à partir du registre « TCP Header Flags ». Les bits de contrôle actuellement attribués sont CWR, ECE, URG, ACK, PSH, RST, SYN et FIN.

  • CWR (Congestion Window Reduced, fenêtre de congestion réduite) : 1 bit

    • Voir RFC 3168
  • ECE (ECN-Echo, écho ECN) : 1 bit

    • Voir RFC 3168
  • URG (Urgent, urgent) : 1 bit

    • Le champ de pointeur urgent est significatif
  • ACK (Acknowledgment, accusé de réception) : 1 bit

    • Le champ d'accusé de réception est significatif
  • PSH (Push, poussée) : 1 bit

    • Fonction de poussée
  • RST (Reset, réinitialisation) : 1 bit

    • Réinitialiser la connexion
  • SYN (Synchronize, synchroniser) : 1 bit

    • Synchroniser les numéros de séquence
  • FIN (Finish, terminer) : 1 bit

    • Plus de données de l'expéditeur

Window (Fenêtre) : 16 bits

  • Le nombre d'octets de données commençant par celui indiqué dans le champ d'accusé de réception que l'expéditeur de ce segment est prêt à accepter
  • La valeur est décalée lorsque l'extension de mise à l'échelle de fenêtre est utilisée
  • La taille de la fenêtre doit (MUST-1) être traitée comme un nombre non signé, sinon les grandes tailles de fenêtre apparaîtront comme des fenêtres négatives et TCP ne fonctionnera pas

Checksum (Somme de contrôle) : 16 bits

  • Le complément à un sur 16 bits de la somme du complément à un de tous les mots de 16 bits dans l'en-tête et le texte
  • La somme de contrôle TCP n'est jamais optionnelle
  • L'expéditeur doit (MUST-2) la générer et le récepteur doit (MUST-3) la vérifier

Urgent Pointer (Pointeur urgent) : 16 bits

  • Communique la valeur actuelle du pointeur urgent comme un décalage positif par rapport au numéro de séquence dans ce segment
  • Le pointeur urgent pointe vers le numéro de séquence de l'octet suivant les données urgentes
  • Ce champ ne doit être interprété que dans les segments avec le bit de contrôle URG activé

Options : Longueur variable

  • Les options peuvent occuper de l'espace à la fin de l'en-tête TCP et ont une longueur multiple de 8 bits
  • Toutes les options sont incluses dans la somme de contrôle

Note : Ce chapitre est très étendu. La spécification fonctionnelle complète comprend les définitions d'options, l'aperçu de la terminologie, la gestion des numéros de séquence, l'établissement de connexion, la fermeture de connexion, la segmentation, la communication de données, les interfaces et le traitement des événements. Veuillez vous référer au chapitre 3 complet de la RFC 9293 pour tous les détails.


3.2. Options obligatoires

Les implémentations TCP doivent (MUST-4) prendre en charge les options suivantes :

KindLengthSignification
0-Fin de la liste d'options (End of Option List)
1-Pas d'opération (No-Operation)
24Taille maximale de segment (Maximum Segment Size)

3.3. États de connexion

Une connexion TCP progresse à travers une série d'états pendant sa durée de vie :

  • CLOSED - Représente aucun état de connexion du tout
  • LISTEN - En attente d'une demande de connexion de n'importe quel TCP distant et port
  • SYN-SENT - En attente d'une demande de connexion correspondante après avoir envoyé une demande de connexion
  • SYN-RECEIVED - En attente d'un accusé de réception confirmant la demande de connexion après avoir à la fois reçu et envoyé une demande de connexion
  • ESTABLISHED - Représente une connexion ouverte, les données reçues peuvent être livrées à l'utilisateur
  • FIN-WAIT-1 - En attente d'une demande de terminaison de connexion du TCP distant, ou d'un accusé de réception de la demande de terminaison de connexion précédemment envoyée
  • FIN-WAIT-2 - En attente d'une demande de terminaison de connexion du TCP distant
  • CLOSE-WAIT - En attente d'une demande de terminaison de connexion de l'utilisateur local
  • CLOSING - En attente d'un accusé de réception de demande de terminaison de connexion du TCP distant
  • LAST-ACK - En attente d'un accusé de réception de la demande de terminaison de connexion précédemment envoyée au TCP distant
  • TIME-WAIT - En attente qu'un temps suffisant se soit écoulé pour être sûr que le TCP distant a reçu l'accusé de réception de sa demande de terminaison de connexion

Pour le contenu complet du chapitre 3, veuillez vous référer au document officiel RFC 9293, qui comprend des informations détaillées sur :

  • Les définitions et le traitement des options
  • Les mécanismes de numéro de séquence
  • La poignée de main en trois étapes pour l'établissement de connexion
  • La poignée de main en quatre étapes pour la fermeture de connexion
  • La segmentation et le réassemblage des données
  • Le contrôle de flux et le contrôle de congestion
  • Les mécanismes de retransmission
  • Les spécifications d'interface utilisateur
  • La logique de traitement des événements