2. La couche transport

Référence : O.Bonaventure, Computer Networking, chapitre “Transport Layer”

La couche transport repose sur la couche réseau. Avant d’explorer cette couche transport, il est important de se rappeler ce que nous apporte cette couche inférieure :

La couche réseau permet la communication entre deux machines situées sur des réseaux différents mais connectés. Le cas de figure le plus fréquent est tout simplement la communication entre deux hôtes sur Internet : la couche réseau leur permet d’échanger des données, qu’ils soient l’un à côté de l’autre ou séparés par un océan. Les messages vont donc transiter par de nombreux équipements intermédiaires, qui vont relayer les données depuis la source jusqu’au destinataire, identifié sur base de son adresse IP.

Couche réseau

Dans le réseau Internet, la couche réseau repose sur le protocole IP, qui permet l’échange de datagrammes appelés paquets. Ce protocole, s’il permet l’acheminement de données, n’est pas fiable : il est possible que des données soient perdues durant le transit, par exemple suite à la saturation des buffers d’un routeur (congestion). Découpées en paquets, ces données pourraient également prendre des chemins différents, par exemple lorsque certains opérateurs font de la répartition de charge sur leurs backbones, ou bien suite à une redirection à cause d’une panne de lien. Enfin, le protocole IP est sans connexion : il n’est pas nécessaire de contacter au préalable une destination pour lui envoyer des données, il suffit simplement d’indiquer son adresse IP dans l’en-tête du paquets.

En résumé, la couche réseau nous offre une transmission de datagrammes d’hôte distant à hôte distant, sans connexion et non fiable.

La couche réseau, bien qu’essentielle, ne permet pas telle quelle d’être utilisée par des applications, pour plusieurs raisons :

  • Comment différencier les flux réseaux appartenant aux différentes applications? L’OS reçoit en effet un ensemble de paquets IPs sur une interface réseau donnée (multiplexage des flux réseaux), et n’a pas moyen, sur base de l’en-tête, de savoir à quel processus le transmettre. Il faut donc un mécanisme pour pouvoir répartir les informations aux processus destinataires.
  • Certaines applications vont avoir besoin de transmission de données rapides, d’autres préféreront la fiabilité du transfert, en fonction de leur mode opératoire propre. Une application de streaming vidéo n’aura pas les mêmes besoins qu’un client mail : la première a besoin d’un délai faible et stable pour garantir une qualité de visionnage correct, mais peut s’accommoder de quelques pertes dont l’impact visuel sera moins perceptible par l’utilisateur qu’un retard dans les trames. La seconde, par contre, n’en est pas à quelques millisecondes près au niveau délai, mais a par contre besoin que chaque octet soit correctement transmis au destinataire.

Pour résoudre ces problèmes, la couche transport a été ajoutée au dessus de la couche réseau, avec des mécanismes supplémentaires. Concrètement, deux protocoles sont principalement utilisés dans cette couche :

  • TCP, qui offre un service fiable, orienté connexion et en mode flux d’octets. Il sera principalement utilisé pour tout ce qui nécessite une fiabilité au niveau des transferts.
  • UDP, non fiable, en mode datagramme sans connexion, permettant en gros une transmission plus rapide que TCP. Il sera surtout utilisé pour les applications échangeant des messages cours et/ou nécessitant des délais courts, et qui sont soit tolérantes aux erreurs, soit utilisées dans des contextes où les pertes sont peut probables (par exemple pour des communications à l’intérieur d’un même subnet).

Table of contents