TCP et UDP sont deux protocoles de communication de la couche Transport (couche 4 du modèle OSI et couche 3 du modèle TCP/IP).
L’unité de donnée de cette couche est appelée segment (pour TCP) et datagramme (pour UDP).
I. Le protocole TCP
I.1 Description
Le protocole TCP (Transmission Control Protocol) est un protocole de transport qui est dit orienté connexion, fiable, acquitté. Il est conçu pour les applications qui ont une exigence sur la fiabilité et sensible aux pertes de données.
Exemples : http, smtp, etc.
I.2 Format d’un segment TCP

- Port source (Source Port Address) sur 16bits : numéro de port du processus qui envoie le segment TCP.
- Port destination (Destination Port Address) sur 16bits : numéro de port du processus qui reçoit le segment TCP.
- Numéro de séquence (Sequence Number) sur 32bits : identifie la position du segment sur les données.
- Numéro d’acquittement (Acknowledge Number) sur 32bits : le numéro du prochain segment que le destinataire s’attend à recevoir.
- Taille de l’entête (HLEN) sur 4bits : indique la taille de l’entête en groupe de 4 octets. C’est-à-dire, si l’entête est de 20 octets (longueur minimale de l’entête TCP) alors ce champ aura comme valeur 5 (car 4 x 5 = 20) et si l’entête est de 60 octets (longueur maximale de l’entête TCP), alors ce champ aura comme valeur 15 (car 4 x 15 = 60). Donc on peut dire que cette valeur est comprise entre 5 et 15.
- Reserved sur 6 bits : réservés pour une utilisation future.
- Champ de contrôle (flags) sur 6 bits : ce sont des flags pour l’établissement et la terminaison de connexion, le contrôle de flux… Ils sont au nombre de 6, chacun codé sur 1bit :
- SYN : ce flag activé permet de synchroniser les numéros de séquence et initier une connexion ;
- FIN : ce flag activé permet de mettre fin à une connexion ;
- ACK : ce flag activé permet d’acquitter une transmission et indiquer que le champ Acknowledge Number est valide ;
- RST : ce flag activé permet de refuser une connexion sur un port fermé, de fermer brusquement une connexion en cours et de terminer une connexion inactive (à cause d’un timeout).
- PSH : ce flag activé permet de dire au récepteur de délivrer les données sans attendre le remplissage des tampons ;
- URG : ce flag activé permet d’indiquer l’urgence d’un segment et que le champ Urgent Pointer est valide ;
- Taille de la fenêtre (Window Size) sur 16 bits : fenêtre de réception déterminée par le destinataire.
- La somme de contrôle (Checksum) sur 16 bits : ce champ est utilisé pour le contrôle d’erreurs. Il est obligatoire pour TCP.
- Urgent Pointer sur 16 bits : il est conjointement utilisé avec le flag URG pour le transfert de données prioritaires. Il est valide seulement si le flag URG est activé. Ce champ contient le numéro de séquence du dernier octet urgent.
- Options and Padding (avec une taille variable) : les options sont constituées du type d’option (1 bit), de la taille des options (1 bit) et des données optionnelles (taille variable). Le Padding (taille variable) consiste, si le champ Options n’est pas un multiple de 32 bits, à ajouter assez de zéros (0) pour le compléter afin d’avoir un multiple de 32 bits.
I.3 TCP, orienté connexion
Il y a établissement de connexion, dans les réseaux qui utilisent le protocole TCP, avant d’entamer un échange entre deux entités du réseau et puis une fois l’échange terminé la connexion sera fermée. L’établissement et la fermeture de connexion est assuré par le champ flag qui se trouvent dans l’entête du paquet TCP.
I.3.1 Principe d’établissement de connexion

- Le client envoie un segment SYN (segment dont le flag SYN est activé)
- Il choisit aléatoirement sont ISN(Initial Sequence Number) x
- Le serveur répond par un segment dont les flags SYN et ACK sont activés
- Le SYN contient son propre ISN y
- Il acquitte le segment SYN du client avec comme numéro de séquence x+1
- Le client acquitte le SYN du serveur avec un segment ACK contenant comme numéro de séquence y+1
Ce processus d’établissement de connexion est appelé three-way handshake.
I.3.2 Principe de fermeture de connexion

La terminaison normale d’une connexion se fait à 4 temps. :
- L’émetteur désirant fermer la connexion envoie un segment FIN contenant comme numéro de séquence x’
- Le récepteur acquitte ce segment (x’+1) et envoie à son tour un segment FIN pour terminer lui aussi la connexion avec un numéro de segment y’
- L’émetteur acquitte le segment FIN du récepteur (y’+1)
I.3.3 Remarques
- Il existe une ouverture de connexion dite croisée. Dans ce cas, il y a envoi simultané de SYN et de SYN/ACK dans les deux sens :

- De même, il y a fermeture de connexion dite croisée :

I.4 TCP, fiabilité
TCP est un protocole dit fiable.
En effet, le protocole offre la possibilité de détecter et de retransmettre les paquets qui sont perdus et/ou corrompus.
I.5 TCP, avec acquittement
Chaque segment reçu sans erreur doit être acquitté par le destinataire. Cela permet de connaitre ceux qui sont perdus pour une retransmission.
Le numéro d’acquittement est le numéro de séquence du prochain octet attendu dans le flux. Lorsqu’un numéro de séquence est reçu, tous les octets avant ce numéro sont supposés avoir été bien reçus.
Les acquittements sont des accusés de réception.

I.6 Les services de TCP
Le protocole TCP assure :
- Un service orienté connexion :
—–Voir la partie TCP, orienté connexion en haut—–
- Une communication processus à processus :
Chaque processus est attribué un numéro de port qu’il utilise pour transférer les données.

Les services basés sur TCP et leurs ports :

- Une transmission en mode flux (Stream) :
Les données sont présentées comme une suite ininterrompue d’octets :

Les octets sont tous numérotés et le numéro du premier octet est aléatoire et compris entre 0 et 232 – 1. Tout le reste suit ce numéro.
Exemple : si le premier octet est numéroté par 10, le 100ème octet aura le numéro 109.
Les octets sont regroupés dans des Segments.

Les segments aussi sont numérotés. Ce numéro est appelé numéro de séquence et représente la position du segment dans l’ensemble de données à transmettre.
Cette numérotation se passe comme suit :
—–> Le numéro de séquence du premier segment ISN est un nombre aléatoire.
—–> Le numéro de tout autre segment est égal au numéro de séquence du précédent segment + la taille de données transportée par ce précédent segment.
- Multiplexage/démultiplexage :
Le multiplexage consiste à faire transiter les données de plusieurs processus applications sur une même couche IP.
Le démultiplexage consiste à séparer les données de plusieurs processus applications qui arrivent sur une même couche IP.
- Communication en mode full-duplex :
Cela consiste à émettre et recevoir en même temps. Ce mode implique que chaque entité de son côté doit être capable de traiter les données entrantes et sortantes.
I.7 Encapsulation TCP
Les données des couches hautes sont découpées en segments contenant les données à transmettre : c’est la segmentation.
Sur chaque segment, un entête TCP est ajouté avant d’être transmis à la couche IP : c’est l’encapsulation.

II. Le protocole UDP
II.1 Description
Le protocole UDP (User Datagram Protocol) est un protocole de transport simple offrant un adressage de niveau transport (comme TCP). Il est conçu pour les applications sans exigences fortes en termes de fiabilité ou que la réémission des paquets perdus n’est pas désirée.
Exemples : vidéo streaming, multimédia, etc.
II.2 Objectifs et caractéristiques
Le protocole UDP fournit un service de transport qui n’offre pas les garanties de TCP pour les applications qui n’en ont pas besoin ou les applications qui ne fonctionnent pas bien avec les traitements TCP.
Il est caractérisé d’être simple (voir le RFC 768) et rapide (il ne fait pratiquement aucun traitements sur les données applicatives).
II.3 Opérations UDP
Le protocole UDP assure le transport de bout en bout des données des couches hautes.
Ces données sont encapsulées dans la partie données des messages UDP. L’encapsulation consiste à UDP d’ajouter un entête port source et port destination.
Ensuite ces données obtenues après encapsulation sont transmises à la couche IP pour encapsulation de niveau réseau.
II.4 Format d’un Datagramme UDP
Le format du datagramme UDP illustre la simplicité du protocole :

- Port source (16 bits) : numéro de port de l’émetteur
- Port destination (16 bits) : numéro de port du récepteur
- Longueur (16 bits) : longueur du datagramme (entête + données)
- Checksum (16 bits) : champ optionnel de checksum sur l’ensemble du paquet et un champ pseudo-entête.
- mécanisme de protection contre les erreurs ;
- calculé sur le datagramme original et un pseudo

- Données : données des couches hautes encapsulées.
II.5 Les applications communes d’UDP

III. Tableau comparatif des protocoles TCP et UDP
Le Protocole TCP | Le Protocole UDP |
Acquittement des données | Pas d’acquittement des données |
Détection de pertes et retransmission | Pas de détection de pertes et de retransmission |
Contrôle de flux | Pas de contrôle de flux |
Détection de l’ordre d’arrivée des données | Pas de détection de l’ordre d’arrivée des données |
Fiable | Non fiable |
Non rapide | Rapide |
Ne supporte pas le multicast | Supporte le multicast |
Pas simple | Simple |