La couche de transport : TCP et UDP

Les protocoles TCP et UDP constituent la couche transport (à la fois dans le modèle historique internet et le modèle OSI). Le protocole UDP correspond surtout à des connexions locales et de faible volume, quand le protocole TCP correspond le plus souvent aux liaisons longue distance ou aux forts volumes de données.

À priori, le premier rôle de la couche de transport est de découper le message en paquets plus petits pour pouvoir l'expédier sur le réseau en respactant les contraintes matérielles. mais il y a d'autres rôles : l'utilisation des ports en est un.

Notion de port

Les protocoles UDP et TCP, en tant que protocole liés à la couche de transport, ajoutent un élément important à la communication en plus de l'adresse IP de destination. Ils indiquent un numéro de port de destination et un numéro de port source. Ces numéros, qui sont des entiers sur 4 octets (un peu plus de 65000 possibles donc) ont un double usage :

  • Le port de destination indique quel est le service qui sera utilisé sur la machine de destination. Ces numéros de ports sur un serveur sont définis par l'administrateur du serveur (on parle de port d'écoute du service). Ils peuvent en théorie être arbitraire, mais le plus souvent, ils respectent un standard. Par exemple, un serveur web écoute normalement sur le port 80 (communications HTTP) et sur le port 443 pour les communications sécurisées (communications HTTPS). On peut parfaitement imaginer que le port 909 est utilisé par un serveur web pour ses communications. Il faut noter qu'un même serveur peut héberger plusieurs services.
  • Le numéro de port source permet à la machine source de déterminer le programme qui est à l'origine de la demande (on peut imaginer que plusieurs programmes sur la même machine font des requêtes web en même temps. C'est particulièrement le cas sur un smartphone). Il est aussi utilisé dans le cadre du NAT pour déterminer la machine qui est à l'origine de la demande qui a subi un NAT.

Le protocole UDP

En dehors de l'ajout du numéro de port, le protocole UDP ne fait pratiquement aucune autre opération. Les données applicatives seront encapsulées dans le paquet UDP grâce à un en-tête qui contient entre autre la longueur du paquet, les numéros de port source et destination, puis les données.

C'est ce paquet UDP qui sera ensuite transmis à la couche IP. Il sera encapsulé dans le datagramme IP qui lui même sera encapsulé dans la trame ETHERNET.

UDP est un protocole très basique, en ce sens qu'il ne propose aucune correction d'erreur de transmission. De plus, si deux paquets sont émis, il n'y a aucune garantie sur l'ordre d'arrivée.

Le protocole TCP

Le protocole TCP outre l'ajout du numéro de port, assure le contrôle de l'intégrité du transport de la façon suivante :

  • Lorsqu'un client veut se connecter à un serveur en mode TCP, une connection est établie grâce à un protocole en trois temps appelé le Three Way Handshake. Sans rentrer dans les détails, le client propose une synchronisation au serveur, qui lui propose sa synchronisation, et le client renvoit son accord. À partir de ce moment, la connexion est établie.
  • Les informations obtenues à la connexion permettent de numéroter les paquets et de garantir qu'ils seront réassemblés dans le bon ordre.
  • Les paquets étant numérotés, si un paquet n'est pas réceptionné, un re-expédition du paquet sera demandée.

En plus du rôle de découpage des paquets et d'attribution de ports, le protocole TCP assure la reconstruction des paquets et contrôle les erreurs de transmission. Pour cela, il établit une connexion, qui est une convention entre le client et le serveur. On dit que le protocole TCP est un protocole connecté alors que le protocole UDP est un protocole déconnecté.

Conclusion

À retenir
  • La couche de transport ajoute un numéro de port au message qui correspond au service utilisé.
  • Le protocole UDP est déconnecté, et essentiellement destiné à la transmission de messages courts, plutôt sur des réseaux locaux (exemple: le DNS)
  • Le protocole TCP est connecté. Il établit une connexion entre le client et le serveur qui permet d'assurer l'intégrité de la transmission et garantit que les paquets seront réassemblés dans le bon ordre.