Le protocole de transport orienté connexion (TCP)
On dit que le protocole TCP est orienté connexion parce qu'avant qu'un processus d'application puisse commencer à envoyer des données à un autre, les deux processus doivent d'abord se "serrer la main", c'est-à-dire qu'ils doivent s'envoyer des segments préliminaires pour établir les paramètres du transfert de données qui suivra. Dans le cadre de l'établissement de la connexion TCP, les deux parties de la connexion initialisent de nombreuses variables d'état TCP associées à la connexion TCP. TCP a quelques autres caractéristiques importantes qui méritent d'être mentionnées :
- Traitement orienté flux : TCP traite les données dans un flux. Ce traitement orienté flux signifie que TCP peut accepter des données un octet à la fois plutôt que sous forme de bloc préformaté. TCP formate les données en segments de longueur variable, qu'il transmettra à la couche Internet.
- Remise en séquence : si les données arrivent à destination dans le désordre, le module TCP est capable de remettre en séquence les données pour restaurer l'ordre d'origine.
- Contrôle de flux : a fonction de contrôle de flux de TCP garantit que la transmission de données ne dépassera pas ou ne dépassera pas la capacité de la machine de destination à recevoir les données. Ceci est particulièrement critique dans un environnement diversifié dans lequel il peut y avoir une variation considérable des vitesses de processeur et des tailles de mémoire tampon.
- Priorité et sécurité : Les premières spécifications pour TCP appellent à des niveaux de sécurité et de priorité facultatifs qui peuvent être définis pour les connexions TCP. Cependant, de nombreuses implémentations TCP ne fournissent pas ces fonctionnalités de sécurité et de priorité.
- Fermeture gracieuse : TCP fait autant attention à la fermeture d'une connexion qu'à l'ouverture d'une connexion. La fonction de fermeture gracieuse garantit que tous les segments ont été envoyés et reçus avant la fermeture d'une connexion.
Dans toute discussion sur TCP, si vous entendez l'expression « L'ordinateur A établit une connexion avec l'ordinateur B », cela signifie en réalité que le logiciel TCP de l'ordinateur A a établi une connexion avec le logiciel TCP de l'ordinateur B, qui sont tous deux agissant au nom d'une application locale.
Format de données TCP
Le format de données TCP est illustré dans la figure ci-dessous. La complexité de cette structure révèle la complexité de TCP et les multiples facettes de ses fonctionnalités.
Les champs sont les suivants. Vous aurez une meilleure idée de l'utilisation de ces champs de données après avoir lu la section Connexions TCP :
- Port source (16 bits) : le numéro de port source est le port attribué à l'application sur la machine source.
- Port de destination (16 bits) : le numéro de port de destination est le port attribué à l'application sur la machine de destination.
- Numéro d’ordre (32 bits) : le numéro d’ordre du premier octet de ce segment particulier, sauf si le drapeau SYN est défini sur 1. Si le drapeau SYN est défini sur 1, le champ Numéro d’ordre fournit le numéro d’ordre initial (ISN), qui est utilisé pour synchroniser les numéros d’ordre. Si le drapeau SYN est mis à 1, le numéro d’ordre du premier octet est supérieur de un au numéro qui apparaît dans ce champ (en d'autres termes, ISN + 1).
- Numéro d'accusé de réception (32 bits) : Le numéro d'accusé de réception également appelé numéro d'acquittement correspond au numéro (d'ordre) du prochain segment attendu, et non le numéro du dernier segment reçu.
- Décalage des données (4 bits) : un champ qui indique au logiciel TCP de réception la durée de l'en-tête et, par conséquent, où commencent les données. Le décalage de données est exprimé sous la forme d'un nombre entier de mots de 32 bits.
- Réservé (6 bits) : Réservé pour une utilisation future. Le champ Réservé permet de s'adapter aux futurs développements de TCP et doit être composé uniquement de
- Drapeaux (flags) (6 x 1 bit) : Les drapeaux de contrôle communiquent des informations spéciales sur le segment.
- URG : Une valeur de 1 annonce que le segment est urgent et que le champ Pointeur d’urgence est significatif.
- ACK : Une valeur ACK de 1 annonce que le champ Numéro d'accusé de réception est significatif.
- PSH : une valeur de 1 indique au logiciel TCP de pousser toutes les données envoyées jusqu'à présent à travers le pipeline vers l'application de
- RST : Une valeur de 1 réinitialise la connexion.
- SYN : Une valeur SYN de 1 annonce que les numéros d’ordres seront synchronisés, marquant le début d'une connexion.
- FIN : Une valeur de 1 signifie que l'ordinateur émetteur n'a plus de données à transmettre. Ce drapeau est utilisé pour fermer une connexion.
- Fenêtre (16 bits) : un paramètre utilisé pour le contrôle de flux. La fenêtre définit la plage de numéros de séquence au-delà du dernier numéro de séquence acquitté que la machine émettrice est libre de transmettre sans autre acquittement.
- Somme de contrôle (16 bits) : un champ utilisé pour vérifier l'intégrité du segment. Un ordinateur récepteur effectue un calcul de somme de contrôle basé sur le segment et compare la valeur à la valeur stockée dans ce champ. TCP et UDP incluent un pseudo-en-tête avec des informations d'adressage IP dans le calcul de la somme de contrôle.
- Pointeur d’urgence (16 bits) : pointeur de décalage pointant vers le numéro d’ordre qui marque le début de toute information urgente.
- Options (Taille variable) : Des options diverses
- Remplissage : On remplit l'espace restant après les options avec des zéros pour avoir une longueur multiple de 32 bits
- Données : Les données transmises avec le segment.
TCP a besoin de tous ces champs de données pour gérer, reconnaître et vérifier avec succès les transmissions réseau. La section suivante montre comment le logiciel TCP utilise certains de ces champs pour gérer les tâches d'envoi et de réception de données.
Connexions TCP
Tout dans TCP se passe dans le contexte d'une connexion. TCP envoie et reçoit des données via une connexion, qui doit être demandée, ouverte et fermée selon les règles de TCP.
L'une des raisons pour TCP est de fournir une interface pour que les applications puissent avoir accès au réseau. Cette interface est fournie via les ports TCP et, pour fournir une connexion via les ports, l'interface TCP vers l'application doit être ouverte. TCP prend en charge deux états d’ouverture :
- Ouverture passive : Un processus d'application donné informe TCP qu'il est prêt à recevoir des connexions entrantes via un port TCP. Ainsi, la voie d'accès de TCP à l'application est ouverte en prévision d'une demande de connexion entrante.
- Ouverture active : Une application demande à ce que le protocole TCP établisse une connexion avec un autre ordinateur qui est dans l'état ouverture passive. (En fait, TCP peut également initier une connexion à un ordinateur qui est dans l'état ouverture active, dans le cas où les deux ordinateurs tentent d'ouvrir une connexion en même temps).
Dans une situation typique, une application souhaitant recevoir des connexions, comme un serveur FTP, se place ainsi que son état de port TCP dans un état ouverture passive. Sur l'ordinateur client, l'état TCP du client FTP est très probablement fermé jusqu'à ce qu'un utilisateur initie une connexion du client FTP au serveur FTP, moment auquel l'état du client devient ouverture active. Le logiciel TCP de l'ordinateur qui passe en mode ouverture active (c'est-à-dire le client) initie alors l'échange de messages qui conduit à une connexion.
TCP envoie des segments de longueur variable ; dans un segment, chaque octet de données se voit attribuer un numéro d’ordre. La machine réceptrice doit envoyer un accusé de réception pour chaque octet qu'elle reçoit. La communication TCP est donc un système de transmissions et d'acquittements. Les champs Numéro d’ordre et Numéro d'accusé de réception de l'en-tête TCP fournissent au logiciel TCP communicant des mises à jour régulières sur l'état de la transmission.
Un numéro d’ordre distinct n'est pas codé avec chaque octet individuel. Au lieu de cela, le champ Numéro d’ordre dans l'en-tête donne le numéro d’ordre du premier octet de données dans un segment.
Si le segment se produit au début d'une connexion, le champ Numéro d’ordre contient l'ISN, qui est en fait un de moins que le numéro de séquence du premier octet du segment. (Le premier octet est ISN + 1.)
Si le segment est reçu avec succès, l'ordinateur récepteur utilise le champ Numéro d'accusé de réception pour indiquer à l'ordinateur expéditeur quels octets il a reçu. Le champ Numéro d'accusé de réception dans le message d'accusé de réception sera défini sur le dernier numéro d’ordre reçu + 1. En d'autres termes, le champ Numéro d'accusé de réception définit le numéro d’ordre que l'ordinateur est prêt à recevoir ensuite.
Si un acquittement n'est pas reçu dans le délai spécifié, la machine émettrice retransmet les données en commençant par l'octet suivant le dernier octet acquitté.
Établir une connexion
Pour que le système de séquence/accusé de réception fonctionne, les ordinateurs doivent synchroniser leurs numéros de séquence. En d'autres termes, l'ordinateur B doit savoir quel ISN l'ordinateur A a utilisé pour lancer la séquence. L'ordinateur A doit savoir quel ISN l'ordinateur B utilisera pour commencer la séquence pour toutes les données que l'ordinateur B transmettra.
Cette synchronisation des numéros de séquence est appelée une poignée de main. La poignée de main se produit toujours au début d'une connexion TCP. Les trois étapes d'une poignée de main sont les suivantes :
L'ordinateur A envoie un segment avec:
SYN = 1 ACK = 0 Numéro d’ordre = X (où X est l'ISN de l'ordinateur A)
L'ordinateur en mode ouverture active (Ordinateur A) envoie un segment avec le drapeau SYN mis à 1 et le drapeau ACK mis à 0. SYN est l'abréviation de synchroniser. Ce drapeau, comme décrit précédemment, annonce une tentative d'ouverture de connexion. Ce premier en-tête de segment contient également le numéro d’ordre initial (ISN), qui marque le début des numéros d’ordre pour les données que l'ordinateur A transmettra. Le premier octet transmis à l'ordinateur B aura le numéro d’ordre ISN + 1.
L'ordinateur B reçoit le segment de l'ordinateur A et renvoie un segment avec
SYN = 1 (toujours en phase de synchronisation) ACK = 1 (le champ Numéro d'accusé de réception contiendra une valeur) Numéro d’ordre= Y, où Y est l'ISN de l'ordinateur B Numéro d'accusé de réception = M + 1, où M est le dernier numéro de séquence reçu de l'ordinateur A
L’ordinateur A envoie un segment à l'ordinateur B qui accuse réception de l'ISN de l'ordinateur B :
SYN = 0 ACK = 1 Numéro d’ordre= Numéro d’ordre suivant dans la série (M + 1) Numéro d'accusé de réception = N + 1 (où N est le dernier numéro d’ordre reçu de l'ordinateur B)
Après la poignée de main, la connexion est ouverte et les modules TCP transmettent et reçoivent des données en utilisant le schéma de séquence et d'accusé de réception décrit précédemment.
Contrôle de flux TCP
Le champ Fenêtre dans l'en-tête TCP fournit un mécanisme de contrôle de flux pour la connexion. Le but du champ Fenêtre est de s'assurer que l'ordinateur expéditeur n'envoie pas trop de données trop rapidement, ce qui pourrait conduire à une situation dans laquelle les données sont perdues car l'ordinateur récepteur ne peut pas traiter les segments entrants aussi rapidement que l'ordinateur expéditeur peut les transmettre. La méthode de contrôle de flux utilisée par TCP est appelée méthode de la fenêtre glissante. L'ordinateur de réception utilise le champ Fenêtre (également appelé champ de taille de tampon) pour définir une fenêtre de numéros d’ordre au-delà du dernier numéro d’ordre reconnu que l'ordinateur expéditeur est autorisé à transmettre. L'ordinateur expéditeur ne peut pas transmettre au-delà de cette fenêtre jusqu'à ce qu'il reçoive l'accusé de réception suivant.
Fermeture d'une connexion
Lorsqu'il est temps de fermer la connexion, l'ordinateur A, qui initie la fermeture, place un segment dans la file d'attente avec l'indicateur FIN à 1. L'application entre alors dans l'état fin-attente. Dans l'état fin-attente, le logiciel TCP de l'ordinateur A continue de recevoir des segments et de traiter les segments déjà dans la file d'attente, mais aucune donnée supplémentaire n'est acceptée de l'application.
Lorsque l'ordinateur B reçoit le segment FIN, il renvoie un accusé de réception, envoie les segments restants et informe l'application locale de la réception d'un segment FIN. L'ordinateur B envoie un segment FIN à l'ordinateur A, dont l'ordinateur A accuse réception, et la connexion est fermée.