Le protocole TCP
Le standard a été défini par la RFC 793 en 1981. Il se situe dans la couche Transport du modèle OSI (niveau 4).
Il permet :
- un transport fiable des données,
- un multiplexage de plusieurs communications simultanées entre 2 machines,
- un contrôle de flux afin de prévenir les congestions,
- de les gérer si elles se produisent.
En plus de la détection d'erreur, il est capable de les corriger en organisant la retransmission des segments défectueux ou manquants.
Regardons maintenant comment ces fonctionnalités sont implémentées.
En-tête TCP
Les données transportées par le protocole TCP sont précédées par un entête dans chaque segment.
La taille minimale de l'entête est de 20 octets (sans options) et au maximum 60 octets. Sa longueur nous est donnée par le champs « Header Length » qui est le nombre de mots de 32 bits de l'entête.
L'entête doit être un multiple de mots de 32 bits, même avec les options (l'option « padding » est faite pour cela).
En-tête TCP |
Multiplexage
Les champs « Port Source » et « Port Destination » permettent de spécifier le canal entre les 2 machines et permet plusieurs sessions entre ces 2 machines (multiplexage).
Dans la RFC 793, il est mentionné que le couple « Adresse IP – Port » sur une machine, est appelé « socket ».
Le service est full-duplex, c'est à dire qu'il peut y avoir un transfert de données dans les 2 sens, indépendamment de l'autre sens.
Séquencement des données
Chaque octet des données à transmettre est numéroté. Codé sur 32 bits, Le numéro de séquence (SEQ) indique la position du premier octet de donnée du segment dans le flux.
Il permet aussi de déterminer les segments dupliqués et de réordonner les données pour la couche supérieure (IP ne garantit pas de transfert ordonné).
Lorsque le drapeau SYN est activé lors de l'établissement de la connexion, le numéro de séquence initial est appelé « ISN » (Initial Sequence Number). Par mesure de sécurité, il ne peut être le chiffre zéro (0), mais il est plutôt déterminé de façon aléatoire.
Le numéro d'acquittement (ACK) permet d'indiquer à l'émetteur le prochain numéro de séquence attendu, pour les numéros inférieurs, il indique ainsi qu'il a bien reçu les données.
Dans le cas contraire, les données manquantes seront retransmises.
On peut voir ici le transfert de données et son acquittement sur le logiciel d'analyse réseau de Comoe Networks.
Exemple de progression du numéro de séquence et de son acquittement |
Contrôle de flux
Dans le cadre du contrôle de flux, le destinataire des données indique à l'émetteur le nombre d'octet maximum qu'il est prêt à accepter, encore appelée fenêtre de réception.
Le champ « Window » permet de définir cette valeur, le drapeau « ACK » doit être positionné pour que ce champ soit valide.
L'émetteur ne peut alors pas envoyer plus de données que cette valeur sans recevoir d'acquittement.
Cette fenêtre peut changer au cours de la session, ce qui permet aux deux hôtes de pouvoir s'adapter au contexte du ou des réseau(x) utilisé(s).
On peut le voir ici avec la variation de la fenêtre de l'hôte 10.247.96.133 (en rouge).
Variation de la fenêtre au cours de la connexion |
Drapeaux
Il y a actuellement 8 drapeaux (« flags ») définis dans l'entête TCP, nous les verrons en détail au fil de notre exploration.
Mais voici une brève présentation :
- CWR (congestion Window Reduced) : l'émetteur a réduit son taux d'emission,
- ECE (Explicit Congestion Echo) : Réponse à un message de congestion ECN (Explicit Congestion Notification),
- URG (Urgent Pointer) : Le champ « Urgent Pointer » est valide. Rarement utilisé,
- ACK : Le champ « Acknowledgement Number » est valide,
- PSH (Push) : les données de ce segment devrait être envoyées immédiatement à la couche suppérieure,
- RST (Reset) : l'émetteur de ce drapeau clôt la connection et n'accepte plus de données,
- SYN (Synchronisation) : Synchronise les numéros de séquence et l'envoi de certaines options,
- FIN : l'émetteur de ce drapeau indique qu'il n'a plus de données à envoyer.
Autres
Le champ « Urgent Pointer » dont la valeur doit être ajoutée au champ « Sequence Number », indique la fin de la zone de données urgentes dans le segment. Cette zone doit être traitée en priorité par la couche supérieure.
Afin d'augmenter la fiabilité et la détection d'erreur, un checksum internet est utilisé. Il couvre l'en-tête TCP et les données transportées, ainsi que quelques champs de l'en-tête IP (les 2 adresses en particulier et le numéro de protocole tcp).
Fin de cette introduction, à suivre la gestion des connexions.
Aucun commentaire:
Enregistrer un commentaire