UDP

Ce billet date de plusieurs années, ses informations peuvent être devenues obsolètes.

Ce billet fait partie d'une série en 10 volets : #1, #2, #3, #4, #5, #6, #7, #8, #9 et #10.

Notes de lecture de Building Blocks of UDP.

UDP a été ajouté à la suite des protocoles Internet en août 1980, au moment du split des spécifications TCP et IP en deux RFC distinctes.

UDP was actually "designed" in 30 minutes on a blackboard when we decided pull the original TCP protocol apart into TCP and IP […]

Les mots "datagramme" et "paquet" sont souvent utilisés de façon interchangeable, mais il y a quelques nuances. Si le terme "paquet" s'applique à tout bloc de données formaté, le terme "datagramme" s'applique aux paquets livrés par l'intermédiaire d'un service peu fiable (aucune garantie de livraison, aucune notification de défaillance).

La couche IP située une couche en dessous des protocoles TCP et UDP a pour tâche principale de livrer des datagrammes d'une source vers une destination. Les messages sont encapsulés dans un paquet IP qui identifie les adresses source et destination, ainsi qu'un certain nombre d'autres paramètres de routage.

Le protocole UDP utilise sa propre structure de paquets et ajoute quatre champs supplémentaires : le port source, le port de destination, la longueur du paquet et la somme de contrôle (checksum). Les champs port source et checksum sont optionnels dans les datagrammes UDP.

Lorsqu'un paquet est livré par IP, son destinataire peut extraire le paquet UDP, identifier l'application cible par le port de destination et livrer le message.

Caractéristiques d'UDP :

  • aucune garantie de livraison des messages
  • aucune garantie d'ordre de livraison (pas de numéros de séquence de paquets, pas de head-of-line blocking, etc.)
  • pas de suivi de l'état de la connexion (pas de three-way handshake, etc.)
  • pas de contrôle de congestion

UDP et NAT

La spécification NAT a été introduite en 1994 (RFC 1631) en tant que solution provisoire pour résoudre le problème d'épuisement des adresses IPv4, mais :

Unfortunately, as it often happens, there is nothing more permanent than a temporary solution.

Et NAT pose plusieurs problèmes avec UDP.

Pour livrer les datagrammes, un NAT doit maintenir une table de routage dont les entrées dépendent de l'état des connexions. Or UDP n'a aucun suivi de l'état de la connexion : impossible de savoir quand commence et se termine une connexion. En conséquence les entrées de routage UDP dans un NAT ont une durée de vie et expirent après un certain temps.

Un autre problème est qu'une machine derrière un routeur NAT ne connaît pas son adresse IP publique. Et même en la connaissant, un paquet UDP arrivant sur l'IP publique d'un NAT doit pouvoir identifier la machine destinataire sur le réseau interne !

Pour contourner ces problèmes entre l'UDP et les NAT, diverses techniques de traversée peuvent être utilisées dont :

Avant TCP Après TLS

Tag Kemar Joint