UDP : à quoi correspond le User Datagram Protocol ?
La communication entre les systèmes de réseaux domestiques et d’entreprises locaux, et les réseaux publics, comme Internet, repose par défaut sur la suite des protocoles Internet. Le composant le plus célèbre de cette pile de protocoles est incontestablement l’Internet Protocol (IP), qui est non seulement responsable de l’adressage et de la fragmentation des paquets de données, mais qui définit également la façon dont sont décrites les informations sur la source et la destination. La transmission des données est toutefois habituellement assurée par le protocole de transport orienté connexion TCP (« Transmission Control Protocol »), ce qui explique pourquoi les réseaux sont souvent qualifiés de réseaux TCP/IP. Si le TCP garantit une sécurité, il s’accompagne également d’un retard de la transmission. C’est pourquoi David Patrick Reed a présenté en 1980 son concept de User Datagram Protocol (UDP) comme une alternative plus simple et plus rapide au protocole standard.
L’UDP, qu’est-ce que c’est ?
Le User Datagram Protocol, abrégé en UDP, est un protocole permettant l’envoi sans connexion de datagrammes dans des réseaux basés sur le protocole IP. Afin d’atteindre les services souhaités sur les hôtes de destination, le protocole utilise des ports qui constituent un élément essentiel de l’entête UDP. À l’instar de nombreux autres protocoles de réseau, l’UDP fait partie de la suite des protocoles Internet. Il intervient au niveau de la couche transport et joue ainsi le rôle d’intermédiaire entre la couche réseau et la couche application.
Le protocole UDP constitue une alternative directe au très répandu TCP, les deux protocoles se distinguant en particulier sur un point : tandis que la transmission via TCP a lieu uniquement après un handshaking en trois temps obligatoire (authentification mutuelle de l’expéditeur et du destinataire comprenant l’établissement de la connexion), l’UDP renonce à de telles procédures afin de maintenir la durée de la transmission à un minimum.
En utilisant le User Datagram Protocol, une application peut donc envoyer très rapidement des informations, étant donné qu’aucune connexion au destinataire n’est établie et qu’aucune réponse ne doit être attendue. En revanche, il n’y a aucune garantie que les paquets arrivent entiers et dans le même ordre que celui dans lequel ils ont été envoyés. Par ailleurs, le protocole n’offre aucune protection contre les manipulations ou accès de tiers. Les paquets erronés peuvent toutefois être identifiés à l’aide d’une somme de contrôle facultative (obligatoire avec IPv6).
L’UDP (User Datagram Protocol) est un protocole sans connexion de la suite des protocoles Internet qui travaille au niveau de la couche transport et qui a été défini en 1980 dans la RFC (Request for Comments) 768. En tant qu’alternative au TCP fonctionnant de façon plus simple et quasiment sans retard, l’UDP est utilisé pour la transmission rapide de paquets de données dans des réseaux IP. Les domaines d’application typiques de l’UDP sont donc les requêtes DNS, les connexions VPN et le streaming audio et vidéo.
Aperçu des propriétés de l’UDP
Afin de comprendre dans le détail comment la transmission des paquets est effectuée avec ce protocole, il est judicieux de se pencher plus précisément sur les caractéristiques du User Datagram Protocol déjà mentionnées.
- L’UDP est sans connexion : le transport des données via le protocole UDP se démarque par le fait qu’il a lieu sans connexion existante entre l’expéditeur et le destinataire. Les paquets concernés sont ensuite envoyés à l’adresse IP privilégiée en indiquant le port de destination, sans que l’ordinateur auquel cette adresse est attribuée n’ait à envoyer une réponse. Si des paquets doivent être renvoyés à l’expéditeur, l’entête UDP peut également contenir le port source.
- Ports utilisés par l’UDP : à l’instar du TCP, l’UDP a recours à des ports afin de remettre les paquets aux bons protocoles ultérieurs ou aux applications souhaitées sur le système de destination. Comme le modèle éprouvé, les ports sont définis à l’aide d’une numérotation, dont les numéros compris entre 0 et 1023 sont attribués à des services fixes.
- L’UDP permet une communication rapide, sans délai : ce protocole de transport est adapté à une transmission rapide des données, car il n’établit pas de connexion. Ceci résulte également du fait que la perte de paquets individuels impacte uniquement la qualité de la transmission. En cas de connexion TCP, il est en revanche procédé automatiquement à une nouvelle demande des paquets perdus, ce qui bloque l’intégralité du processus de transmission.
- L’UDP n’offre aucune garantie quant à la sécurité et à l’authenticité des données : le fait de renoncer à l’authentification mutuelle de l’expéditeur et du destinataire permet au protocole UDP d’assurer une vitesse de transmission exceptionnelle. Toutefois, le protocole ne peut garantir l’intégrité et la sécurité des paquets de données. L’ordre dans lequel les paquets ont été envoyés n’est pas non plus garanti. C’est pourquoi les services faisant appel à l'UDP doivent mettre à disposition des mesures de correction et de protection propres.
La principale propriété du User Datagram Protocol est sa capacité à transporter les paquets de données sans connexion établie. Les avantages résultant de cette transmission en termes de vitesse sont contrebalancés par une forte vulnérabilité face aux manipulations, une perte de paquets non corrigée et un classement arbitraire des paquets. De ce fait, les applications UDP doivent pouvoir travailler correctement avec des paquets de données manquants et non classés et/ou inclure des mécanismes de correction et de sécurité propres.
Comment l’entête UDP est-il structuré ?
Comme c’est souvent le cas pour les protocoles, les paquets UDP sont composés d’un entête, également appelée « header », et des données utiles à proprement parler. L’entête UDP contient ici toutes les informations nécessaires à la transmission des données avec un protocole de transport, et à l’identification d’un paquet UDP en tant que tel. La structure est divisée en deux blocs de 32 bits avec quatre champs de données distincts et se présente comme suit :
Bits 0 à 15 | Bits 16 à 31 | |
---|---|---|
zero | Port source | Port de destination |
32 | Longueur | Somme de contrôle |
Les 16 premiers bits de l’entête renvoient au port source par lequel le paquet de données concerné est envoyé. Le destinataire a besoin de cette information pour pouvoir répondre au paquet. Comme l’UDP est sans connexion et ne prévoit en principe aucun échange entre l’expéditeur et le destinataire, ce champ est facultatif. C’est pourquoi la valeur est généralement définie sur « 0 » à cet endroit.
Dans le champ suivant, le port de destination, et donc le service contrôlé, est renseigné. Contrairement au port source, cette information est obligatoire puisque, dans le cas contraire, le datagramme ne pourrait pas être attribué correctement.
Le principe suivant est applicable aux champs de port : s’il s’agit d’une application côté client, le numéro de port attribué est éphémère. Si le port est attribué à un processus de serveur, le numéro de port fait normalement partie des « ports connus » (ports standardisés).
La longueur du datagramme est définie dans le champ Longueur. Elle comprend la longueur de l’entête (8 octets) et la longueur des données utiles (en théorie maximum : 65 535 octets). En cas d’utilisation de IPv4, la limite effective pour les données utiles est de 65 507 octets – après déduction des entêtes IP et UDP. Dans IPv6, des paquets dépassant le maximum (« jumbograms ») sont par ailleurs possibles. D'après la RFC 2675, la valeur du champ Longueur est dans ce cas définie sur « 0 ».
La fin de l’entête UDP est constituée par la somme de contrôle qui sert à identifier les erreurs lors de la transmission. De cette façon, les manipulations des données transmises peuvent être identifiées, mais les paquets correspondants sont rejetés sans nouvelle demande. Pour calculer la somme, on utilise des parties
- de l’entête UDP,
- des données utiles
- et du pseudo entête (contient les informations de l’entête IP)
La somme de contrôle est facultative en IPv4, mais elle est toutefois utilisée par défaut par la plupart des applications. En l’absence de somme de contrôle, ce champ prend également la valeur « 0 ». Si l’UDP est utilisé en association avec IPv6, la somme de contrôle est obligatoire.
Par quelles applications l’UDP est-il utilisé ?
Du fait de sa structure minimaliste et de l’absence de mécanismes visant à garantir une transmission complète et réussie, le User Datagram Protocol n’est pas utilisé comme protocole de transport universel. Au départ, il a plutôt été conçu pour les applications ne nécessitant pas (encore) de service de transmission fiable. Par conséquent, le domaine d’application de l’UDP est plutôt limité, mais souligne son énorme valeur comme le prouvent les classes d’applications suivantes pour UDP :
- les applications « best effort delivery » (livraison des données best effort) : le scénario d’utilisation classique de l’UDP porte sur les applications basées sur une « livraison des données best effort ». Une transmission peu fiable des informations suffit aux programmes utilisant le User Datagram Protocol comme service « best effort », car ils renouvellent régulièrement les informations quoi qu’il arrive. On peut citer comme exemple les applications qui transmettent les valeurs mesurées ou qui exécutent toujours les mêmes tâches.
- les applications légères : la faible surcharge de ce protocole de transport offre une aide optimale aux applications construites de façon extrêmement simple. En association avec une absence d’établissement de connexion, ces programmes profitent d’une performance particulièrement élevée dans le cadre du traitement et de la transmission de paquets de données dans les réseaux.
- les applications disposant de mécanismes propres pour une transmission fiable : l’UDP peut également s’avérer intéressant pour les applications qui dépendent d’un échange d’informations fiable, mais disposent de mécanismes propres pour répondre aux paquets. L’avantage de tels services est qu’ils ne sont pas tenus à des modèles fixes pour garantir l’intégrité et l’exactitude des paquets de données envoyés. Ils peuvent décider de façon autonome comment et quand réagir à des informations manquantes ou classées de façon arbitraire.
- les applications multicast : tandis que les protocoles de transport fiables comme le TCP sont limités à l’utilisation d’une communication de bout en bout, le protocole UDP supporte également les connexions IP multicast. Si une application doit pouvoir envoyer simultanément des paquets IP de façon rapide et efficace à de nombreux destinataires, l’UDP constitue une base adaptée.
- applications en temps réel (real-time applications) : pour finir, l’UDP est également adapté comme protocole de transport pour les services travaillant avec des exigences temps réel – par exemple le streaming audio ou vidéo. Ces derniers doivent pouvoir gérer de façon autonome l’envoi, la réception et la diffusion de flux de données, ce qui est parfaitement possible avec la transmission UDP sans connexion.
Aujourd’hui, les applications en temps réel utilisent toutefois principalement le Real-time Transport Protocol (RTP) basé sur l’UDP et capable de constater la perte de paquets, contrairement au protocole sur lequel il s’appuie. La dernière spécification du RTP peut être trouvée dans la RFC 3550.