Home » Comment ça marche, Internet

TCP, UDP et la porcherie

7 septembre 2010 4 commentaires
tags : , ,
Download PDF

Crédit photo : Le Monolecte (flickr)

Gruik gruik. Bon, ok, on parle de ports. Donc ni de porcs ni des endroits ou on range les bateaux meme si ca s’ecrit pareil. Il faudra lire l’article en entier pour comprendre l’illustration.

En informatique, un port designe deux choses

  • les endroits ou vous branchez les cables sur une machine (port serie, port USB …)
  • de petites choses tres virtuelles dont nous allons parler tout de suite.

Voyons comment vulgariser la chose. Les réseaux informatiques fonctionnent par couche. La couche la plus haute (7, ou 5 selon les représentations) est généralement le protocole parlé par l’application que vous utilisez. Votre navigateur web, par exemple, sait entre autre parler avec le protocole HTTP, base du web (à ne pas confondre avec le langage HTML qui, lui, sert à « programmer » les pages web elles-mêmes). La plus basse (1), c’est le protocole qui sert à coder le signal sur le support de transmission (modulation de fréquence électrique, de fréquence radio, …)

Lorsqu’une application de couche haute souhaite communiquer, elle parle à la couche inférieure. Ainsi, votre navigateur web parlant HTTP va envoyer à la couche transport (4) une demande « hey, je veux établir une connexion avec telle adresse IP en TCP ». Cette couche va discuter avec celle d’en dessous (3) qui va mettre toutes ces informations dans un paquet IP puis descendre le tout au niveau inférieur (2)  qui sait comment causer à la carte réseau qui va elle-même traduire le message sur votre câble réseau (1) jusqu’au modem ADSL qui va dépiler toutes ces informations pour remonter jusqu’à la couche 3 afin de savoir ou envoyer le paquet (et ainsi de suite de routeur en routeur qui dépilent et empilent les données entre la couche 1 et la couche 3) jusqu’à la destination qui remontera au dessus à la couche 4 pour vérifier que la transmission est bien passée et envoyer la donnée utile (l’adresse du site que vous voulez consulter) au serveur web qui va formuler sa réponse et rebelotte dans l’autre sens.

C’est un peu imbitable, je sais, mais la morale de l’histoire à retenir, c’est que les couches inférieures n’ont strictement aucune notion de ce que savent faire les couches supérieures (c’est également vrai dans l’autre sens). En gros, votre navigateur web ne sait pas transporter des paquets dans un réseau et un modem ADSL ne sait pas ce qu’est le protocole HTTP.

Partant de la, pour que la liaison puisse se faire correctement, les logiciels de couche 5 discutent avec TCP (situé en couche 4 si vous avez bien retiendu la leçon) via des numéros dis « numéros de ports ». Il y en a 65534 disponible dans le protocole TCP (et pareil en UDP). Lorsque votre machine discute avec l’une de ses semblable dans l’un de ces deux protocoles dédiés au transport d’information, la transmission est identifiée par l’adresse IP source, l’adresse IP destination mais aussi le port source et le port destination. C’est ce qui vous permet de pouvoir télécharger une page web pendant que votre client peer2peer fonctionne sans que tout ne se mélange à l’arrivée.

Pour faire une analogie foireuse (once again), imaginez que vous ne puissiez pas voir ni comprendre pourquoi quelqu’un qui frappe à votre porte est la. Vous établiriez un code qui dirait que le facteur frappe au volet de la cuisine, le monsieur d’EDF à celui du salon et le livreur de lait sonne à la cloche. Votre maison disposerai donc de 3 ports de communication chacun dédiés à une fonction bien précise. Une fois la personne qui arrive est bien identifiée, elle peut rentrer dans la maison (la couche haute) par la porte.

Dans la pratique, les 65000 et quelques ports sont loin de tous être dédiés à une fonction précise. On compte un peu plus d’un millier de ports réservés par des applications courantes en TCP comme en UDP, mais dans l’absolu chacun fait ce qu’il veut. Un serveur web tourne traditionnellement sur le port 80 mais rien ne vous empêche d’en faire tourner un sur le port 42687 ou sur le 22 théoriquement réservé à SSH.

Pour revenir rapidement sur les différences entre TCP et UDP, déjà abordée dans un billet précédent, le distingo majeur est que TCP contrôle la transmission. Chaque paquet est numéroté et vérifié avant d’être envoyé au logiciel du dessus, de sorte qu’il est impossible qu’une information détériorée n’y parvienne, contrairement à UDP qui permet de passer les paquets dans l’ordre de leur arrivée (qui n’est pas nécessairement l’ordre d’émission)

Pour bien comprendre, prenez le cas du téléphone via internet qui utilise UDP. Quand il y a un problème sur le trajet, vous n’entendez plus votre correspondant (ou bien si le problème est vraiment très court vous entendez un petit glitch dans la conversation). Dès que le problème est résolu, la communication est rétablie et vous continuez à discuter.

Imaginez maintenant que le téléphone sur IP fonctionne sur TCP. En cas de problème de transport, TCP renvoi les demandes en disant « j’ai pas bien reçu la réponse, recommence » jusqu’à ce que la séquence de paquet soit continue et propre. La séquence en question contenant votre voix, si le problème dure mettons 5 secondes, lors du rétablissement, soit vos 5 secondes de paroles seront compressées et restituée à votre interlocuteur bien plus vite que l’original (donc incompréhensible), soit votre conversation sera décalée de 5 secondes.

C’est pour cela qu’on qualifie donc généralement UDP de protocole de transport pour les applications temps réel ou la récupération de données datant de plus de quelques milisecondes n’a aucune espèce d’importance, alors que TCP est utilisé pour tout le reste ou il faut absolument avoir toutes les données en bon état pour que ça fonctionne mais ou on n’est pas a une ou deux secondes près (une page web avec des images pleines de trous, ça le fait pas)

4 Comments »

  • Alex said:

    « à ne pas confondre avec le langage HTTP qui, lui, sert à “programmer” les pages web elles-mêmes »

    ??? y’a pas une coquille là ?

  • Bruno (author) said:

    Oui, ben je suis fatigué, voila ! :)

    (greet à Fab et Michel qui ont aussi relevé la coquille, mais je vais pas valider 72000 commentaires)

  • Dodot said:

    De 1 à 65535, y’a 65535 non ?

  • Bruno (author) said:

    Oh la belle quadricapillosection :)

    You’re right.

Leave your response!

Add your comment below, or trackback from your own site. You can also subscribe to these comments via RSS.

Be nice. Keep it clean. Stay on topic. No spam.

You can use these tags:
<a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>

This is a Gravatar-enabled weblog. To get your own globally-recognized-avatar, please register at Gravatar.


8 + = quinze