Aller au contenu principal

3. Functional Specification - Part 1 (Spécification fonctionnelle - Partie 1)

Cette section contient la spécification technique de base de TCP : format d'en-tête, terminologie et mécanismes de numérotation de séquence.


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

Les segments TCP (TCP segments) sont envoyés sous forme de datagrammes Internet (internet datagrams). L'en-tête du protocole Internet contient plusieurs champs d'information, y compris les adresses des hôtes source et destination [2]. Un en-tête TCP suit l'en-tête Internet, fournissant des informations spécifiques au protocole TCP. Cette division permet l'existence de protocoles de niveau hôte autres que TCP.

Format d'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 | |U|A|P|R|S|F| |
| Offset| Reserved |R|C|S|S|Y|I| Window |
| | |G|K|H|T|N|N| |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Checksum | Urgent Pointer |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Options | Padding |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| data |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

Format d'en-tête TCP

Note : Un trait de graduation représente une position de bit

Descriptions des champs

Source Port (Port source) : 16 bits

Le numéro de port source.

Objectif : Identifie le processus émetteur sur l'hôte émetteur.

Destination Port (Port de destination) : 16 bits

Le numéro de port de destination.

Objectif : Identifie le processus récepteur sur l'hôte récepteur.

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 SYN est présent). Si SYN est présent, 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.

Points clés :

  • Chaque octet de données a un numéro de séquence unique
  • Les segments SYN utilisent l'ISN, les données commencent à ISN+1
  • Espace de numéros de séquence : 0 à 2³² - 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'émetteur du segment s'attend à recevoir. Une fois qu'une connexion est établie, ceci est toujours envoyé.

Mécanisme d'accusé de réception cumulatif :

  • Un numéro d'accusé de réception X indique que tous les octets jusqu'à X (mais n'incluant pas X) ont été reçus
  • X lui-même n'est pas inclus

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

Le nombre de mots de 32 bits dans l'en-tête TCP. Cela indique où les données commencent. L'en-tête TCP (même celui incluant des options) est d'une longueur multiple intégrale de 32 bits.

Formule de calcul :

Longueur d'en-tête (octets) = Data Offset × 4
Valeur minimale : 5 (20 octets)
Valeur maximale : 15 (60 octets)

Reserved (Réservé) : 6 bits

Réservé pour une utilisation future. DOIT être zéro (MUST).

Control Bits (Bits de contrôle) : 6 bits (de gauche à droite)

DrapeauNom completSignification
URGUrgentLe champ pointeur d'urgence est valide
ACKAcknowledgmentLe champ d'accusé de réception est valide
PSHPushFonction Push
RSTResetRéinitialiser la connexion
SYNSynchronizeSynchroniser les numéros de séquence
FINFinishPas de données supplémentaires de l'émetteur

Combinaisons de drapeaux :

SYN = 1 : Requête d'établissement de connexion
SYN + ACK = 1 : Réponse d'établissement de connexion
FIN = 1 : Requête de terminaison de connexion
RST = 1 : Terminaison anormale de la connexion
PSH = 1 : Pousser immédiatement les données vers la couche application
URG = 1 : Données urgentes présentes

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'émetteur de ce segment est prêt à accepter.

Contrôle de flux :

  • Taille de fenêtre = 0 : Arrêter l'envoi de données
  • Taille de fenêtre > 0 : Peut envoyer jusqu'à la taille de fenêtre en octets
  • Fenêtre maximale : 65 535 octets (peut être étendue avec l'option de mise à l'échelle de fenêtre)

Exemple :

ACK = 1000, Window = 5000
→ Peut recevoir des données avec des numéros de séquence 1000-4999 (5000 octets)

Checksum (Somme de contrôle) : 16 bits

Le champ de somme de contrôle est le complément à un sur 16 bits de la somme en complément à un de tous les mots de 16 bits dans l'en-tête et le texte. Si un segment contient un nombre impair d'octets d'en-tête et de texte à vérifier, le dernier octet est rempli à droite avec des zéros pour former un mot de 16 bits à des fins de somme de contrôle. Le remplissage n'est pas transmis dans le segment. Lors du calcul de la somme de contrôle, le champ de somme de contrôle lui-même est remplacé par des zéros.

En-tête pseudo (Pseudo Header) :

La somme de contrôle couvre également un en-tête pseudo de 96 bits préfixé conceptuellement à l'en-tête TCP. Cet en-tête pseudo contient l'adresse source, l'adresse de destination, le protocole et la longueur TCP. Cela fournit à TCP une protection contre les segments mal acheminés.

+--------+--------+--------+--------+
| Source Address |
+--------+--------+--------+--------+
| Destination Address |
+--------+--------+--------+--------+
| zero | PTCL | TCP Length |
+--------+--------+--------+--------+

PTCL = 6 (numéro de protocole TCP)
TCP Length = longueur d'en-tête TCP + longueur de données (en octets)

Étapes de calcul de la somme de contrôle :

def calculate_tcp_checksum(pseudo_header, tcp_header, data):
# 1. Définir le champ de somme de contrôle à 0
# 2. Combiner en-tête pseudo, en-tête TCP et données
# 3. Additionner en tant que mots de 16 bits
# 4. Ajouter la retenue aux 16 bits inférieurs
# 5. Prendre le complément à un
pass

Urgent Pointer (Pointeur d'urgence) : 16 bits

Ce champ communique la valeur actuelle du pointeur d'urgence en tant que décalage positif à partir du numéro de séquence dans ce segment. Le pointeur d'urgence pointe vers le numéro de séquence de l'octet suivant les données urgentes. Ce champ n'est interprété que dans les segments avec le bit de contrôle URG activé.

Cas d'utilisation :

  • Signaux d'interruption Ctrl+C
  • Commandes d'interruption Telnet
  • Informations de contrôle nécessitant un traitement prioritaire

Exemple :

SEG.SEQ = 1000
URG Pointer = 10
→ Les données urgentes se terminent au numéro de séquence 1010
→ Les numéros de séquence 1000-1009 sont des données urgentes

Options : variable

Les options peuvent occuper de l'espace à la fin de l'en-tête TCP et sont d'une longueur multiple de 8 bits. Toutes les options sont incluses dans la somme de contrôle. Une option peut commencer sur n'importe quelle limite d'octet. Il existe deux formats pour les options :

Cas 1 : Un seul octet d'option-kind Cas 2 : Un octet d'option-kind, un octet d'option-length et les octets de données d'option réels

L'option-length compte les deux octets d'option-kind et d'option-length ainsi que les octets de données d'option.

Important : TCP DOIT implémenter toutes les options (MUST).

Options actuellement définies

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

Détails des options

1. End of Option List (Fin de la liste d'options)

+--------+
|00000000|
+--------+
Kind=0
  • Ce code d'option indique la fin de la liste d'options
  • Cela peut ne pas coïncider avec la fin de l'en-tête TCP selon le champ Data Offset
  • Utilisé à la fin de toutes les options, pas de chaque option
  • Nécessaire uniquement si la fin des options ne coïncide pas autrement avec la fin de l'en-tête TCP

2. No-Operation (Aucune opération)

+--------+
|00000001|
+--------+
Kind=1
  • Ce code d'option PEUT être utilisé entre les options (MAY)
  • Par exemple, pour aligner le début d'une option suivante sur une limite de mot
  • Il n'y a aucune garantie que les émetteurs utiliseront cette option
  • Les récepteurs DOIVENT être préparés à traiter les options qui ne commencent pas sur une limite de mot (MUST)

3. Maximum Segment Size (Taille maximale de segment)

+--------+--------+---------+--------+
|00000010|00000100| max seg size |
+--------+--------+---------+--------+
Kind=2 Length=4

Maximum Segment Size Option Data : 16 bits

  • Si cette option est présente, elle communique la taille maximale du segment de réception au TCP qui envoie ce segment
  • Ce champ DOIT uniquement être envoyé dans la requête de connexion initiale (MUST) (c'est-à-dire dans les segments avec le bit de contrôle SYN activé)
  • Si cette option n'est pas utilisée, toute taille de segment est autorisée

Notes MSS :

  • MSS par défaut = 536 octets (défaut Internet)
  • MSS Ethernet commun = 1460 octets (1500 - 20 en-tête IP - 20 en-tête TCP)
  • MSS fait référence uniquement à la partie données, excluant les en-têtes TCP/IP

Padding (Remplissage) : variable

Le remplissage d'en-tête TCP est utilisé pour s'assurer que l'en-tête TCP se termine et que les données commencent sur une limite de 32 bits. Le remplissage est composé de zéros.


3.2. Terminology (Terminologie)

Avant de pouvoir discuter du fonctionnement de TCP, nous devons introduire une terminologie détaillée. La maintenance d'une connexion TCP nécessite de mémoriser plusieurs variables. Nous concevons ces variables comme étant stockées dans un enregistrement de connexion appelé Bloc de contrôle de transmission (Transmission Control Block, TCB).

Variables stockées dans le TCB

Parmi les variables stockées dans le TCB, on trouve :

  • Les numéros de socket locaux et distants
  • La sécurité et la priorité de la connexion
  • Des pointeurs vers les tampons d'envoi et de réception de l'utilisateur
  • Des pointeurs vers la file de retransmission et vers le segment actuel
  • Plusieurs variables relatives aux numéros de séquence d'envoi et de réception

Variables de séquence d'envoi (Send Sequence Variables)

VariableNom completDescription
SND.UNASend UnacknowledgedEnvoi non accusé (numéro de séquence non accusé le plus ancien)
SND.NXTSend NextEnvoi suivant (prochain numéro de séquence à envoyer)
SND.WNDSend WindowFenêtre d'envoi
SND.UPSend Urgent PointerPointeur d'urgence d'envoi
SND.WL1Segment Sequence NumberNuméro de séquence de segment utilisé pour la dernière mise à jour de fenêtre
SND.WL2Segment Acknowledgment NumberNuméro d'accusé de réception de segment utilisé pour la dernière mise à jour de fenêtre
ISSInitial Send Sequence NumberNuméro de séquence d'envoi initial

Variables de séquence de réception (Receive Sequence Variables)

VariableNom completDescription
RCV.NXTReceive NextRéception suivante (prochain numéro de séquence attendu)
RCV.WNDReceive WindowFenêtre de réception
RCV.UPReceive Urgent PointerPointeur d'urgence de réception
IRSInitial Receive Sequence NumberNuméro de séquence de réception initial

Diagrammes d'espace de séquence

Espace de séquence d'envoi (Send Sequence Space)

                 1         2          3          4
----------|----------|----------|----------
SND.UNA SND.NXT SND.UNA
+SND.WND

1 - anciens numéros de séquence qui ont été accusés
2 - numéros de séquence de données non accusées
3 - numéros de séquence autorisés pour la nouvelle transmission de données
4 - futurs numéros de séquence qui ne sont pas encore autorisés

Fenêtre d'envoi : La partie de l'espace de séquence étiquetée 3 dans le diagramme

Espace de séquence de réception (Receive Sequence Space)

                     1          2          3
----------|----------|----------
RCV.NXT RCV.NXT
+RCV.WND

1 - anciens numéros de séquence qui ont été accusés
2 - numéros de séquence autorisés pour la nouvelle réception
3 - futurs numéros de séquence qui ne sont pas encore autorisés

Fenêtre de réception : La partie de l'espace de séquence étiquetée 2 dans le diagramme

Variables de segment actuel (Current Segment Variables)

Ces variables sont dérivées des champs du segment actuel :

VariableDescription
SEG.SEQNuméro de séquence de segment
SEG.ACKNuméro d'accusé de réception de segment
SEG.LENLongueur de segment
SEG.WNDFenêtre de segment
SEG.UPPointeur d'urgence de segment
SEG.PRCValeur de priorité de segment

États de connexion (Connection States)

Une connexion progresse à travers une série d'états au cours de sa durée de vie. Les états sont : LISTEN, SYN-SENT, SYN-RECEIVED, ESTABLISHED, FIN-WAIT-1, FIN-WAIT-2, CLOSE-WAIT, CLOSING, LAST-ACK, TIME-WAIT, et l'état fictif CLOSED.

Descriptions des états

ÉtatDescription
LISTENReprésente l'attente d'une demande de connexion de tout TCP distant et port
SYN-SENTReprésente l'attente d'une demande de connexion correspondante après avoir envoyé une demande de connexion
SYN-RECEIVEDReprésente l'attente d'un accusé de réception de demande de connexion de confirmation après avoir à la fois reçu et envoyé une demande de connexion
ESTABLISHEDReprésente une connexion ouverte, les données reçues peuvent être livrées à l'utilisateur. L'état normal pour la phase de transfert de données de la connexion
FIN-WAIT-1Représente l'attente d'une demande de terminaison de connexion du TCP distant, ou un accusé de réception de la demande de terminaison de connexion précédemment envoyée
FIN-WAIT-2Représente l'attente d'une demande de terminaison de connexion du TCP distant
CLOSE-WAITReprésente l'attente d'une demande de terminaison de connexion de l'utilisateur local
CLOSINGReprésente l'attente d'un accusé de réception de demande de terminaison de connexion du TCP distant
LAST-ACKReprésente l'attente d'un accusé de réception de la demande de terminaison de connexion précédemment envoyée au TCP distant (qui inclut un accusé de réception de sa demande de terminaison de connexion)
TIME-WAITReprésente l'attente d'un temps suffisant pour être sûr que le TCP distant a reçu l'accusé de réception de sa demande de terminaison de connexion
CLOSEDReprésente aucun état de connexion du tout (état fictif, car il représente l'état lorsqu'aucun TCB n'existe)

Diagramme d'état de connexion TCP

                            +---------+ ---------\      active OPEN
| CLOSED | \ -----------
+---------+<---------\ \ create TCB
| ^ \ \ snd SYN
passive OPEN | | CLOSE \ \
------------ | | ---------- \ \
create TCB | | delete TCB \ \
V | \ \
+---------+ CLOSE | \
| LISTEN | ---------- | |
+---------+ delete TCB | |
rcv SYN | | SEND | |
----------- | | ------- | V
+---------+ snd SYN,ACK / \ snd SYN +---------+
| |<----------------- ------------------>| |
| SYN | rcv SYN | SYN |
| RCVD |<-----------------------------------------------| SENT |
| | snd ACK | |
| |------------------ -------------------| |
+---------+ rcv ACK of SYN \ / rcv SYN,ACK +---------+
| -------------- | | -----------
| x | | snd ACK
| V V
| CLOSE +---------+
| ------- | ESTAB |
| snd FIN +---------+
| CLOSE | | rcv FIN
V ------- | | -------
+---------+ snd FIN / \ snd ACK +---------+
| FIN |<----------------- ------------------>| CLOSE |
| WAIT-1 |------------------ | WAIT |
+---------+ rcv FIN \ +---------+
| rcv ACK of FIN ------- | CLOSE |
| -------------- snd ACK | ------- |
V x V snd FIN V
+---------+ +---------+ +---------+
|FINWAIT-2| | CLOSING | | LAST-ACK|
+---------+ +---------+ +---------+
| rcv ACK of FIN | rcv ACK of FIN |
| rcv FIN -------------- | Timeout=2MSL -------------- |
| ------- x V ------------ x V
\ snd ACK +---------+delete TCB +---------+
------------------------>|TIME WAIT|------------------>| CLOSED |
+---------+ +---------+

Diagramme d'état de connexion TCP

Événements et transitions d'état

Une connexion TCP progresse d'un état à un autre en réponse à des événements. Les événements incluent :

  • Appels utilisateur : OPEN, SEND, RECEIVE, CLOSE, ABORT, STATUS
  • Segments entrants : En particulier ceux contenant les drapeaux SYN, ACK, RST et FIN
  • Dépassements de délai : Dépassement de délai de retransmission, dépassement de délai TIME-WAIT, etc.

Note : Le diagramme d'état n'est qu'un résumé et ne peut pas être considéré comme la spécification complète. Il illustre uniquement les changements d'état, avec leurs événements déclencheurs et actions résultantes, mais n'indique ni les conditions d'erreur ni les actions qui ne sont pas associées à des changements d'état.


3.3. Sequence Numbers (Numéros de séquence)

Concepts de base

Une notion fondamentale dans la conception de TCP est que chaque octet de données envoyé sur une connexion TCP a un numéro de séquence. Puisque chaque octet est séquencé, chacun d'eux peut être accusé. Le mécanisme d'accusé de réception employé est cumulatif (cumulative) de sorte qu'un accusé de réception du numéro de séquence X indique que tous les octets jusqu'à X (mais n'incluant pas X) ont été reçus.

Ce mécanisme permet une détection directe des doublons en présence de retransmission. La numérotation des octets dans un segment est telle que le premier octet de données immédiatement après l'en-tête est le plus bas numéroté, et les octets suivants sont numérotés consécutivement.

Espace de numéros de séquence

Fait clé : L'espace réel des numéros de séquence est fini, bien que très grand. Cet espace va de 0 à 2³² - 1.

Arithmétique modulaire (Modulo Arithmetic) : Puisque l'espace est fini, toute l'arithmétique traitant des numéros de séquence DOIT être effectuée modulo 2³² (MUST). Cette arithmétique non signée préserve la relation des numéros de séquence lorsqu'ils bouclent de 2³² - 1 à 0 à nouveau. Il y a quelques subtilités à l'arithmétique modulaire informatique, donc un grand soin DEVRAIT être pris dans la programmation de la comparaison de telles valeurs (SHOULD).

Convention de notation :

  • Le symbole =< signifie "inférieur ou égal" (modulo 2³²)

Comparaisons de numéros de séquence

Les comparaisons typiques de numéros de séquence que TCP doit effectuer incluent :

  1. Déterminer qu'un accusé de réception fait référence à un numéro de séquence envoyé mais pas encore accusé
  2. Déterminer que tous les numéros de séquence occupés par un segment ont été accusés (par exemple, pour retirer le segment d'une file de retransmission)
  3. Déterminer qu'un segment entrant contient des numéros de séquence qui sont attendus (c'est-à-dire que le segment "chevauche" la fenêtre de réception)

Traitement des numéros de séquence d'envoi

En réponse à l'envoi de données, le TCP recevra des accusés de réception. Les comparaisons suivantes sont nécessaires pour traiter les accusés de réception :

SND.UNA = numéro de séquence non accusé le plus ancien
SND.NXT = prochain numéro de séquence à envoyer
SEG.ACK = accusé de réception du TCP récepteur (prochain numéro de séquence attendu par le TCP récepteur)
SEG.SEQ = premier numéro de séquence d'un segment
SEG.LEN = le nombre d'octets occupés par les données dans le segment (comptant SYN et FIN)
SEG.SEQ+SEG.LEN-1 = dernier numéro de séquence d'un segment

ACK acceptable (Acceptable ACK) :

Un nouvel accusé de réception (appelé "ACK acceptable") est un pour lequel l'inégalité ci-dessous est valable :

SND.UNA < SEG.ACK ≤ SND.NXT

Un segment dans la file de retransmission est entièrement accusé si la somme de son numéro de séquence et de sa longueur est inférieure ou égale à la valeur d'accusé de réception dans le segment entrant.

Exemple :

SND.UNA = 1000 (le plus ancien non accusé)
SND.NXT = 2000 (prochain à envoyer)

Reçoit SEG.ACK = 1500
Vérifie : 1000 < 1500 ≤ 2000 ✓ (acceptable)

Reçoit SEG.ACK = 2500
Vérifie : 1000 < 2500 ≤ 2000 ✗ (non acceptable, accuse des données non envoyées)

Traitement des numéros de séquence de réception

Lors de la réception de données, les comparaisons suivantes sont nécessaires :

RCV.NXT = prochain numéro de séquence attendu sur un segment entrant,
et est le bord gauche ou inférieur de la fenêtre de réception

RCV.NXT+RCV.WND-1 = dernier numéro de séquence attendu sur un segment entrant,
et est le bord droit ou supérieur de la fenêtre de réception

SEG.SEQ = premier numéro de séquence occupé par le segment entrant
SEG.SEQ+SEG.LEN-1 = dernier numéro de séquence occupé par le segment entrant

Test d'acceptabilité des segments

Un segment est jugé acceptable seulement s'il se trouve dans la fenêtre. Le test dépend de la longueur du segment et de la taille de la fenêtre :

Longueur de segmentTaille de fenêtreTest d'acceptabilité
00SEG.SEQ = RCV.NXT
0>0RCV.NXT ≤ SEG.SEQ < RCV.NXT+RCV.WND
>00non acceptable
>0>0RCV.NXT ≤ SEG.SEQ < RCV.NXT+RCV.WND
ou
RCV.NXT ≤ SEG.SEQ+SEG.LEN-1 < RCV.NXT+RCV.WND

Explication :

  • Le premier test pour les segments de longueur nulle peut être considéré comme un test d'un segment fantôme qui commence à SEG.SEQ et n'occupe pas d'espace de séquence
  • Si RCV.WND est nul, aucune donnée n'est acceptable, mais les segments qui n'occupent pas d'espace sont acceptables

Exemple de code pratique :

def is_segment_acceptable(seg_seq, seg_len, rcv_nxt, rcv_wnd):
"""Vérifier si le segment est acceptable"""
if seg_len == 0:
if rcv_wnd == 0:
return seg_seq == rcv_nxt
else:
return rcv_nxt <= seg_seq < rcv_nxt + rcv_wnd
else: # seg_len > 0
if rcv_wnd == 0:
return False
else:
# Soit le début soit la fin du segment est dans la fenêtre
start_in_window = rcv_nxt <= seg_seq < rcv_nxt + rcv_wnd
end_in_window = rcv_nxt <= seg_seq + seg_len - 1 < rcv_nxt + rcv_wnd
return start_in_window or end_in_window

Sélection du numéro de séquence initial (ISN)

Le choix du numéro de séquence initial (ISN) est crucial. Le TCP DOIT utiliser un générateur d'ISN piloté par horloge pour éviter que les anciens segments de connexion ne soient confondus avec une partie d'une nouvelle connexion (MUST).

Recommandations de génération d'ISN :

  • L'ISN DEVRAIT être incrémenté de 1 toutes les 4 microsecondes (SHOULD)
  • L'ISN a une période d'environ 4,55 heures
  • L'ISN pour les nouvelles connexions DEVRAIT être différent de l'ISN des anciennes connexions (SHOULD)

Considérations de sécurité :

  • Les implémentations modernes DEVRAIENT utiliser des algorithmes de génération d'ISN plus sécurisés (SHOULD) (RFC 6528)
  • Prévenir les attaques de prédiction de numéro de séquence

Résumé des concepts clés

Structure d'en-tête TCP

  • En-tête fixe de 20 octets : Contient tous les champs essentiels
  • Options de longueur variable : Jusqu'à 40 octets
  • La somme de contrôle couvre l'en-tête pseudo : Fournit une détection d'erreur supplémentaire

Mécanisme de numéros de séquence

  • Numérotation par octet : Chaque octet de données a un numéro de séquence unique
  • Accusé de réception cumulatif : Le numéro d'accusé de réception indique que tous les octets en dessous sont reçus
  • Arithmétique modulo 2³² : L'espace de numéros de séquence est circulaire

États de connexion

  • 11 états : De CLOSED à ESTABLISHED et retour à CLOSED
  • Piloté par événements : Les appels utilisateur, les arrivées de segments, les dépassements de délai déclenchent des transitions d'état
  • Poignée de main à trois voies : SYN → SYN-ACK → ACK
  • Fermeture à quatre voies : FIN → ACK → FIN → ACK

Variables TCB

  • Variables d'envoi : SND.UNA, SND.NXT, SND.WND, etc.
  • Variables de réception : RCV.NXT, RCV.WND, etc.
  • Gestion de fenêtre : Cœur du contrôle de flux

Section suivante : 3.4-3.9 Connection Management & Event Processing (Gestion de connexion et traitement d'événements) - Spécifications détaillées pour l'établissement de connexion, la fermeture, la communication de données et le traitement d'événements