TCP (Transmission Control Protocol) est le principal
protocole réseau utilisé par les connexion Internet. C'est un protocole de
transport au même titre que l'UDP sauf qu'il travaille en mode
connecté. Les données transmises sont donc vérifiées. Dans le modèle
TCP/IP, il est entre la couche de transport (généralement IP) et la couche
application.
IP définit l'adresse de destination, TCP découpe
les données à transmettre en segments dont la taille maximum dépend du type
de transfert (Maximum Transmission
Unit: 1500 en réseau Ethernet et PPPoA, 1492 en
PPPoE). C'est
également lui qui va reconstruire les données dans l'ordre à l'arrivée. Pour
différencier le type de données transmises (couche application), TCP transmet
également le numéro de port associé: HTTP - 80,
FTP - 20 et 21, SMTP - 25,
POP3 - 110, ... Le numéro varie de 0 à 65535. Liste
des ports réseaux.
Toutes les communications en TCP sont régies par des
accusés de
réception (acknowledge) des données transmises (mode connecté). Si cet
accusé n'est pas reçu dans un temps imparti, les données sont retransmises.
Un checksum (une somme de contrôle) permet lui de vérifier si les données transmises sont
correctes. Les données ne sont pas forcément réceptionnées suivant l'ordre d'émission. L'envoi de données sur Internet par exemple
n'utilise pas le chemin le plus court mais bien le moins encombré et celui-ci
peut varier durant la période de transmission. Ce protocole
recrée l'ensemble des données à la réception suivant le numéro d'ordre
repris dans chaque trame.
Le principe de transfert est le suivant:
L'émetteur envoie un segment SYN (Synchronisation) au réceptionneur
(typiquement un serveur Internet lors de la demande d'information).
Le réceptionneur renvoie un message SYN / ACK de confirmation
L'émetteur confirme par un accusé de réception (ACK). Début du transfert effectif des données.
L'émetteur envoie son numéro d'ordre dans le champ "Numéro
d'ordre".
le réceptionneur utilise son propre numéro initial dans numéro d'ordre
et renvoie dans le numéro d'acknowledge celui de l'émetteur incrémenté
de 1 (+1).
l'émetteur confirme par un acknowledge avec un numéro d'ordre
incrémenté de 1 et un numéro d'acknowledge égal au numéro d'ordre reçu
incrémenté de 1. et ainsi de suite jusqu'à la transmission complète.
0
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
Port Source (16 bits)
Port de destination (16 bits)
Numéro d'ordre
Numéro d'acknowledge
Taille de l'en-tête
réservé
URG
ACK
PSH
RST
SYN
FIN
Fenêtre
Somme de contrôle (checksum)
Pointeur de données urgentes
Options
Remplissage
Données
Port source est le port de départ, il varie de 0 à 65535 en
décimal ($0000 à $FFFF en hexadécimal). Il est spécifique à
l'application
Port de destination est le port de réception de 0 à 65535 en
décimal, généralement identique au port source
Numéro d'ordre est le numéro du segment (paquet de donnée) sur
32 bits. Sa
signification varie néanmoins avec ACK, FIN, ... ci-dessous
Numéro d'acknowledge (32 bits) définit le numéro d'ordre du
prochain paquet attendu.
Taille de l'entête (4 bits): définit le nombre de mots de 32 bits
dans l'en-tête du message permettant de définir où commencent les
données.
Réservé (6 bits): non utilisé actuellement
URG (1 bit), 1 si le paquet est urgent
ACK (1 bit), 1 si le paquet est un accusé de réception (acknowledge)
PSH (1 bit), 1 indique au réceptionneur de transmettre les
données directement à l'application sans passer par un tampon mémoire.
RST (Reset, 1 bit): 1 pour réinitialiser la connexion.
SYN: demande d'établissement de connexion
FIN: 1 pour interrompre la connexion
Fenêtre (16 bits): correspond au nombre de bytes (octets) que le
réceptionneur est capable de recevoir sans accusé de réception. Le nombre
total d'une transmission est donc 64 (port source + port destination +
numéro d'ordre) + valeur de la fenêtre.
Checksum (16 bits): somme de contrôle de l'en-tête TCP et
données + un extrait de l'en-tête IP sur 12 bytes (IP source + IP
destination + MB + type + longueur)
Pointeur de données urgentes (16 bits): indique le numéro du
paquet à partir des quelles les données sont urgentes lorsque le drapeau
URG ci-dessus est mis à 1. A partir de ce numéro, les données sont
directement transmises à l'application sans passer par le tampon.
Options (taille variable, chaque nouvelle option débute par un
octets)
Bourrage: permet d'ajuster la taille des options à un multiple de
32 bits.