LightcodeSysadmin Open Source

Chapitre 2 : Les transferts

Transmission des données

L’envoie des informations

Dans les réseaux informatiques, les informations sont transmises sous la forme de données binaire. Avant de commencer, il est donc nécessaire de connaître le binaire. Pour rappel, le binaire est une numération constituée de deux valeurs : un état “vrai” et un état “faux”. Nous représenterons cela par un “1” quand c’est vrai et un “0” quand c’est faux.

Quand une machine souhaitera envoyer des données à une autre, elle enverra ces bits les uns à la suite des autres. Les données sont envoyées sous forme d’un signal électrique ou d’un faisceau lumineux. Les données binaires peuvent donc être transformer en signal analogique. Ces informations sont envoyées sous la forme d’un code, par exemple, sur un câble de cuivre, une tension de 15 V peut symboliser le “1” et une tension de –15 V peut symboliser le “0”.

Pour envoyer des informations, les machines utilisent une carte réseau, appelée coupleur. Cette dernière va gérer la connexion au support physique (ligne de cuivre, fibre optique…) et permettra au système d’exploitation d’envoyer les données binaires sur le support physique.

Envoyer des caractères

Les données binaires envoyées peuvent avoir plusieurs significations suivant le contexte. Lorsque l’on voudra envoyer des caractères, on utilisera pour cela une table de caractères, qui feront correspondre à un caractère à une suite de bits, que l’on pourra convertir en nombre décimal. Une table de caractère décrira le nombre de bits requis pour coder un caractère. Voici un exemple :

  • Le code ASCII, codé sur 7 bits pour la version étendue : le “a” correspondra au code hexadécimal 71 ;
  • L’UTF-8 emploie un code permettant de coder le caractère sur 1, 2, 3 ou 4 octets, permettant de représenter un très grand nombre de caractères. L’UTF-8 permet de coder aussi bien un caractère latin, le grec, le chinois, etc. Le “a” correspondra à 61.

Note : pour dire que l’on utilise un code hexadécimal, on mettra un “0x” devant : 0x71 et 0x61.

Le modèle OSI

Notion de protocole

Nous avons vu précédemment que lors d’une communication, l’émetteur envoie une suite de bits. Ces bits sont rangés dans un ordre précis afin de pouvoir être interprété par la machine qui les reçoit. Un protocole va donc définir la façon dont sont rangés les bits et leur attribuer des noms. Un protocole est un moyen de communication qui est décrit par une norme.

Définition du modèle OSI

Afin de faire communiquer correctement les machines et faciliter les interconnections, on empilera plusieurs protocoles que l’on appellera “couche”. Les protocoles prévoient une technique pour délimiter le début et la fin de sa partie binaire et nous renseignera du protocole utilisé dans la couche suivante.

Le rôle de ces couches est décrit par le modèle OSI. Voici les sept couches, à côté, il y a quelques exemples de protocoles abordés dans cet ouvrage :

Les sept couches du modèle OSI

On commence par la couche “physique” pour aller jusqu’à la couche “application”. Toutes les couches ne sont pas obligatoires. Très souvent, les couches “session” et “présentation” ne sont pas utilisées lors d’une communication, nous allons donc les mettre de côté pour le moment.

Chaque couche contient les suivantes, autrement dit, elles s’emboitent. Par exemple la couche liaison contient la couche réseau, transport, session, …, application, cette couche est appelée trame. L’autre entité mise en relief dans la figure est le paquet, il contiendra les données que l’utilisateur va envoyer. Le paquet contient l’adresse complète du destinataire finale, souvent le paquet sera de type IP. La plupart des autres protocoles encore utilisés servent à gérer le réseau.

L’encapsulation

Une couche est composée de deux éléments : l’en-tête et le corps. L’en-tête est composé de différents champs qui contiennent des informations sur la couche. Le corps peut soit contenir les données des utilisateurs (lorsque c’est la dernière couche) ou contenir une autre couche. Ainsi une couche N, contiendra dans son en-tête des informations sur la couche N+1. Lors de l’encapsulation, on commencera par la dernière couche (N), on l’encapsulera dans l’avant dernière (N-1), en complétant les champs de la couche N-1 avec des informations sur la couche N. En effet, très souvent, un champ nommé Next Header désignant le numéro de la prochaine est complétée lors de l’encapsulation. Ainsi, lors de la décapsulation des couches, le logiciel connaitra toujours le protocole utilisé dans la couche suivante. La décapsulation lira donc les couches en commençant par la première.

Encapsulation d'une couche N+1 dans une couche N

La couche physique

La couche physique, aussi appelée “support physique”, désigne le moyen de transporter les informations sur le support physique. Ces supports peuvent être classés dans trois grandes familles :

  • Les ondes hertziennes : Wi-Fi par exemple ;
  • La fibre optique ;
  • Les fils métalliques : des paires torsadées ou un câble coaxial ;

Nous consacrerons le chapitre 4 au support physique.

La couche liaison

La couche liaison, ou niveau trame, sert à transporter le paquet sur le support physique. Mais aussi, cette couche permet de différencier les paquets envoyés sur le réseau. En effet, sans la trame, il serait impossible de déterminer la fin d’un paquet et le début du suivant.

La couche de liaison va donc permettre d’encapsuler le paquet, c’est-à-dire de lui donner un début et une fin. Le protocole de liaison ajoute aussi une détection des erreurs, en effet, en cas d’erreur la trame peut être renvoyée. Les erreurs peuvent se produire lors du transport sur le support physique notamment. Voici quelques exemples de protocoles de niveau trame : l’Ethernet, l’ATM, le PPP ou encore la Wi-Fi

Nous analyserons de l’Ethernet au chapitre 5 et la Wi-Fi au chapitre 6.

La couche réseau

La couche réseau, ou niveau paquet, va transporter les données en les accompagnant des informations nécessaires. D’abords, un paquet contient l’adresse finale du destinataire, celle-ci sera utilisée afin de diriger correctement le paquet dans le réseau.

De plus, la couche réseau va aussi permettre d’assurer l’intégrité des données et une qualité de service. La qualité de service (QoS) permet de donner des contraintes à un flux de données, ces contraintes doivent être respectées à l’intérieur des nœuds de transfert.

À ce niveau, il ne reste plus que le protocole IP, qui permettra de transporter les données des utilisateurs. Il existe aussi des protocoles de gestion du réseau comme ICMP ou OSPF. Ces protocoles permettent de gérer le réseau. Nous parlerons du protocole IP plus longuement au chapitre 7.

La couche transport

La couche transport apporte la notion de “port”. Dans le système d’exploitation, une application demandera l’écoute d’un port, ce qui permet de séparer les connexions à l’intérieure d’une même machine.

La couche transport peut aussi permettre de sécuriser la connexion, dans le sens où le destinataire sera sûr de recevoir toutes les données dans l’ordre et sans erreur. Nous verrons que cela est possible avec TCP. Le second protocole fait pour transporter les données des utilisateurs, est l’UDP. Ce protocole n’est quant à lui non sécurisé.

La couche application

La couche application est la dernière couche et c’est généralement celle-là qui contiendra les données. Une grande variété de protocoles existe à ce niveau comme HTTP, FTP, DNS… nous les verrons aussi au cours de cet ouvrage.

Sniffer les trames

À l’aide d’un sniffer, il est possible de “voir” les trames qui entrent et sortent d’une carte réseau. En effet, ces logiciels permettent d’afficher les trames en décomposant les protocoles et en affichant les champs.

Sous Linux, il est possible d’enregistrer les trames à l’aide de la commande tcpdump -w fichier.cap. Vous pourrez ensuite utiliser un autre logiciel pour les analyser comme Wireshark (capture ci-dessous).

Capture réseau effectuée avec Wireshark

Ce genre de logiciel permet de débugger ou de découvrir les protocoles réseaux.

Les techniques de transfert

Nous avons vu que les machines communiquent à l’aide de leur interface réseau sur un support physique. Lorsque nous avons un réseau en étoile, il y aura au centre, une machine dédiée aux transferts des trames vers les autres machines comme dans les réseaux en étoile.

Il existe plusieurs techniques permettant de transférer des données d’une ligne à l’autre. Dans cette section, nous en présenterons deux : la commutation et le routage. Une technique de transfert sera utilisée par un nœud de transfert, qui est une machine qui aura au moins deux interfaces réseaux.

La commutation de trame

La commutation s’utilisera généralement avec le niveau 2, on dit que l’on commute des trames. La commutation va permettre de diriger les trames vers la bonne sortie, on utilisera pour cela des références. La référence est une adresse, mais elle ne désigne pas toujours l’utilisateur final. En effet, elle est susceptible de changer en passant à travers les différents nœuds de transfert.

Pour diriger les trames sur la bonne ligne, le commutateur utilisera une table de commutation. La table de commutation permet d’associer des références avec une ligne de sortie. Le contenu de cette table varie en fonction des protocoles de liaison. Il existe donc plusieurs types de commutation, souvent liés au protocole de liaison. Nous en verrons un exemple au chapitre 5, avec la commutation Ethernet, qui est assez particulière. Nous verrons ensuite une seconde méthode permettant de commuter l’Ethernet.

Le routage

Le routage s’effectue au niveau paquet : le routeur devra décapsuler la trame afin de lire l’adresse du destinataire final directement dans le paquet. Pour envoyer ce paquet au nœud suivant, il va devoir l’encapsuler. En effet, un paquet ne peut pas être envoyé directement sur la ligne, il faut obligatoirement l’encapsuler dans une trame.

Afin de diriger le paquet sur la bonne ligne, le routeur utilisera une table de routage. Le routeur devra connaître le chemin pour aller vers tous les destinataires. Il est toutefois possible de simplifier cette table, comme c’est le cas dans le protocole IP que nous étudierons dans le chapitre 7.