Entête UDP
par _SebF

1 - Définition du protocole
2 - Structure de l'entête
3 - Définition des différents champs
        3.1 - Port source
        3.2 - Port destination
        3.3 - Longueur
        3.4 - Checksum
4 - Discussion autour de la documentation
5 - Suivi du document

1 - Définition du protocole

Le protocole UDP est basé en couche 4. Il n'ouvre pas de session et n'effectue pas de control d'erreur. Il est alors appelé  "mode non connecté". Il est donc peut fiable, cependant, il permet aux applications d'accéder directement à un service de transmission de Datagrammes rapide.

UDP est utilisé pour transmettre de faibles quantités de données où le coût de la création de connexions et du maintient de transmissions fiables s'avèrent supérieur aux données à émettre. UDP peut également être utilisé pour les applications satisfaisant à un modèle de type "interrogation réponse". La réponse étant utilisée comme un accusé de réception à l'interrogation. On y trouve classiquement Snmp et Dns. UDP est aussi utilisé dans un second cas, tel que la voix sur IP.  L'envoi en temps réel est primordiale, donc si une trame n'arrivait pas, la retransmission serait inutile

Vous trouverez tous les détails du protocole UDP dans la Rfc 768.

2 - Structure de l'entête

Voici la structure de l'entête UDP basé sur 8 octets.

TCPIP IPV6 VOIP VPN IP IPV4

3 - Définition des différents champs

3.1 - Port source

Le champ Port source est codé sur 16 bits et correspond au port relatif à l'application en cours sur la machine source.

3.2 - Port destination

Le champ Port destination est codé sur 16 bits et il correspond au port relatif à l'application en cours sur la machine de destination.

Vous trouverez la liste des ports TCP officialisées par l'IANA, organisation gérant mondialement les adressage IP.

3.3 - Longueur

Le champ Longueur est codé sur 16 bits et il représente la taille de l'entête et des données. Sont unité est l'octet et sa valeur maximale est 64 Koctets (216).

3.4 - Checksum

Le champ Checksum est codé sur 16 bits et représente la validité du paquet de la couche 4 UDP.

Le Checksum est constitué en calculant le complément à 1 sur 16 bits de la somme des compléments à 1 des octets de l'en-tête et des données pris deux par deux (mots de 16 bits). Si le message entier contient un nombre impair d'octets, un 0 est ajouté à la fin du message pour terminer le calcul du Checksum. Cet octet supplémentaire n'est pas transmis. Lors du calcul du Checksum, les positions des bits attribués à celui-ci sont marquées à 0.

Le Checksum couvre de plus, une pseudo en-tête de 96 bits préfixée à l'en-tête UDP. Cette pseudo en-tête comporte les adresses Internet source et destinataires, le type de protocole et la longueur du message UDP. Ceci protège UDP contre les erreurs de routage.

TCPIP IPV6 VOIP VPN IP IPV4

La longueur UDP compte le nombre d'octets de l'en-tête UDP et des données du message, en excluant les 12 octets de la pseudo en-tête.

Voici un exemple de fonction permettant le calcul du checksum UDP. Elle est identique à celle de TCP.

struct pseudo_entete
    {
    unsigned long ip_source; // Adresse ip source
    unsigned long ip_destination; // Adresse ip destination
    char mbz; // Champs à 0
    char type; // Type de protocole (6->TCP et 17->UDP)
    unsigned short length; // htons( Taille de l'entete Pseudo + Entete TCP ou UDP + Data )
    };

unsigned short calcul_du_checksum(bool liberation, unsigned short *data, int taille)
    {
    unsigned long checksum=0;
    // ********************************************************
    // Complément à 1 de la somme des complément à 1 sur 16 bits
    // ********************************************************
    while(taille>1)
        {
        if (liberation==TRUE)
            liberation_du_jeton(); // Rend la main à la fenêtre principale
        checksum=checksum+*data++;
        taille=taille-sizeof(unsigned short);
        }

    if(taille)
        checksum=checksum+*(unsigned char*)data;

    checksum=(checksum>>16)+(checksum&0xffff);
    checksum=checksum+(checksum>>16);

    return (unsigned short)(~checksum);
    }

unsigned short calcul_du_checksum_udp(bool liberation, unsigned long ip_source_tampon, unsigned long ip_destination_tampon, struct udp udp_tampon, char data_tampon[65535])
    {
    struct pseudo_entete pseudo_udp;
    char tampon[65535];
    unsigned short checksum;

    // ********************************************************
    // Initialisation du checksum
    // ********************************************************
    udp_tampon.checksum=0; // Doit être à 0 pour le calcul

    // ********************************************************
    // Le calcul du Checksum UDP (Idem à TCP)
    // ********************************************************
    // Le calcul passe par une pseudo entete UDP + l'entete UDP + les Data
    pseudo_udp.ip_source=ip_source_tampon;
    pseudo_udp.ip_destination=ip_destination_tampon;
    pseudo_udp.mbz=0;
    pseudo_udp.type=IPPROTO_UDP;
    pseudo_udp.length=htons((unsigned short)(sizeof(struct udp)+(unsigned short)strlen(data_tampon)));
    memcpy(tampon,&pseudo_udp,sizeof(pseudo_udp));
    memcpy(tampon+sizeof(pseudo_udp),&udp_tampon,sizeof(struct udp));
    memcpy(tampon+sizeof(pseudo_udp)+sizeof(struct udp),data_tampon,strlen(data_tampon));
    checksum=calcul_du_checksum(liberation,(unsigned short*)tampon,sizeof(pseudo_udp)+sizeof(struct udp)+strlen(data_tampon));
 
    return(checksum);
    }

4 - Discussion autour de la documentation

Vous pouvez poser toutes vos questions, vos remarques et vos expériences à propos de l'entête UDP. Pour cela, rendez-vous sur le Forum "TCP-IP".

5 - Suivi du document

Le 16 novembre 2003, par _SebF, ajout du schéma de la pseudo entête.

Le 15 septembre 2003, par _SebF, création du document.

 



mot clé : fiable requete udp dns protocol udp liaison udp entete udp couche 4 petite trame erreur tcpip mode non connecte pseudo protocole udp tout sur udp datagramme udp garantie vpn snmp voip ipv6 datatgrame udp rfc 768 session ipv4 control trame udp reponse udp tous sur udp faible negociation udp resolution udp comprendre udp adresse udp datagramme champs frame udp longueur decouverte udp ip connaitre udp

Copyright © 2011-2015 FrameIP TcpIP. Tous droits réservés. Les marques et marques commerciales mentionnées appartiennent à leurs propriétaires respectifs. L'utilisation de ce site Web TcpIP implique l'acceptation des conditions d'utilisation et du règlement sur le respect de la vie privée.
Sécurité entreprise Téléphonie entreprise Expert de votre Infrastructure Test ADSL Serinya Operateur Telecom