# Les réseaux informatiques/La couche présentation

Après avoir vu les couches transport et session, il est temps de passer à la couche suivante : la couche présentation. Le rôle de cette couche est de gérer l'encodage des données envoyées et/ou reçues. Par encodage, on veut dire comment les données sont transformées en un paquet réseau, un flux de bits. Le problème que cherche à résoudre cette couche est comment faut-il découper et interpréter un paquet réseau, la suite de bits envoyée/reçue. Après tout, rien ne ressemble plus à une suite de bits qu'une autre suite de bits : celle-ci peut être aussi bien une image au format JPEG, un tableau de nombres entiers, un morceau de fichier son, etc. L'interprétation à donner à une suite de bits n'est pas possible sans informations supplémentaires : tout dépend de la manière dont l'émetteur l'a organisée, manière qui doit être connue du récepteur. Sans couche présentation, le récepteur ne saurait pas quel est le type de la donnée envoyée, ce qu'elle représente, comment l’interpréter. Pour résumer, la couche présentation prend en charge le codage des données au sens large, ce qui englobe aussi bien la compatibilité des données entre ordinateurs que leur compression et leur cryptage. Dans ce qui va suivre, nous verrons les protocoles les plus utilisés pour coder les données, ainsi que ceux utilisés pour compresser ou crypter des paquets réseau.

## L'encodage des données

Le premier rôle de la couche présentation est de garantir la compatibilité des données entre les machines d'un réseau. Pour rappel, les données peuvent être codées de pleins de manières différentes : le texte peut utiliser des jeux de caractères très différents, les entiers peuvent être codés en petit ou grand boutisme, les formats de nombres flottants peuvent différer selon l'ordinateur, et ainsi de suite. Lorsque deux ordinateurs communiquent entre eux, il se peut qu'ils utilisent des formats de données différents. Dans ce cas, les données doivent être converties d'un format à un autre avant la transmission.
Une solution demande aux deux ordinateurs de s'échanger des informations sur les formats que chacun utilise : l'émetteur et le récepteur vont ainsi se mettre d'accord sur les formats supportés et choisir un format commun. Il s'agit d'une phase de négociation entre les deux machines, comme dans le protocole HTTP où le client indique les caractéristiques qu'il accepte (types de fichiers, encodage de transfert, ...) avec coefficient de préférence et où le serveur essayes de satisfaire le client en respectant ses souhaits. Une telle négociation existe dans beaucoup de protocoles tels le protocole SSL (Secure Socket Layer) permettant de négocier les algorithmes de cryptage employés et d'autres paramètres.
Pour se simplifier la tâche, beaucoup de protocoles réseau utilisent souvent d'autres méthodes. Généralement, on utilise des formats intermédiaires standardisés : les données à envoyer sont converties dans ce standard intermédiaire, sont transmises et le récepteur traduit ces données intermédiaires dans ses formats à lui. Cette méthode simplifie grandement les conversions et les échanges entre ordinateurs. Une autre solution est d'envoyer les données sans conversion au récepteur en précisant le format utilisé, le récepteur prenant en charge la conversion. Il s'agit de deux méthodes différentes : soit le récepteur fait la conversion, soit on utilise un format intermédiaire. La seconde méthode est de loin la plus utilisée aux heures actuelles.

### Les conversions d'entiers

Le premier type de conversion inter-machines implique les nombres, surtout les nombres entiers. Selon les ordinateurs, ceux-ci peuvent être représentés différemment : en complément à deux, en signe-magnitude, sans signe, etc. De plus, la taille de ces entiers n'est pas la même selon les ordinateurs. Par exemple, les processeurs x86 récents utilisent des entiers de 64 bits, alors que les anciens effectuent des calculs sur des nombres de 32 bits. Mais une bonne partie de ces conversions de taille sont prises en charge par le matériel : le processeur peut souvent traduire à la volée des nombres selon leur taille. Cependant, il y a une manipulation qui ne peut pas être prise en charge par le matériel et qu'il faut donc prendre en compte lors des transferts réseaux : la conversion du boutisme. Pour la comprendre, nous allons devoir faire un rappel sur ce qu'est le boutisme.
On peut introduire cette notion par une analogie avec les langues humaines : certaines s’écrivent de gauche à droite et d'autres de droite à gauche. Dans un ordinateur, c'est pareil avec les octets des mots mémoire : on peut les écrire soit de gauche à droite, soit de droite à gauche. Quand on veut parler de cet ordre d'écriture, on parle de boutisme (endianness). Sur les processeurs gros-boutistes, l'octet de poids fort de l'entier est stocké dans l'adresse la plus faible (et inversement pour le poids faible). Sur les processeurs petit-boutistes, c'est l'inverse : l'octet de poids faible de notre donnée est stocké dans la case mémoire ayant l'adresse la plus faible. Si deux ordinateurs avec des boutismes différents échangent des données, le résultat envoyé ne sera pas interprété correctement : les octets des entiers seront lus dans l'ordre inverse. En conséquence, il faut faire la conversion entre petit et grand boutisme.

## Le chiffrement des données

On a vu que les données envoyées sur internet transitent par divers intermédiaires. En temps normal, ces intermédiaires ne font que transmettre les données sans les analyser en profondeur. Mais il arrive que, suite à certaines failles de sécurités, qu'un individu malveillant ait accès aux données que vous transférez sur le net. Certains pirates utilisent le fait que les données sont transmises en clair, sans chiffrement, pour les intercepter et les utiliser à leur profit. Par exemple, un pirate pourrait capter les identifiants que vous utilisez pour faire des paiements sur internet ou vous connecter à tel ou tel compte. Sans chiffrement, les données sont envoyés en clair sur internet et un attaquant peut parfaitement les intercepter lors de sa transmission entre le serveur et l'utilisateur. Une telle attaque d'espionnage est appelée une attaque de l'homme du milieu.
Pour éviter ce genre d'attaque, les informations échangées doivent être cryptées avant leur transfert. Pour rappel, le cryptage consiste à transformer les données à transmettre grâce à une fonction mathématique et/ou un algorithme. Cette transformation se fait en manipulant les données et une ou plusieurs clés, une information connue seulement de l'émetteur et du destinataire. Une clé permet de crypter le message, à savoir le rendre incompréhensible, et une autre permet de décrypter le message, à savoir retrouver la donnée initiale. Les données sont totalement incompréhensibles pour qui ne connait pas la clé de décryptage, ce qui fait que seuls l'émetteur et le destinataire peuvent lire le message. Les méthodes les plus simples n'utilisent qu'une seule clé, qui sert à la fois pour crypter les données et les décrypter. On parle de chiffrement symétrique. Mais sur le net, les techniques simples ne peuvent pas être utilisées. En effet, cela demanderait de transmettre la clé au destinataire du message, clé qui peut alors être interceptée au même titre que le message.
Les seules méthodes qui permettent de transmettre des informations chiffrées sur le net sont des protocoles de chiffrement asymétrique, où la clé de cryptage et la clé de décryptage sont différentes. La clé de chiffrement est appelée la clé publique, alors que celle de déchiffrement est appelée clé privée. Le chiffrement asymétrique se base sur un principe simple pour l'échange des clés entre deux ordinateurs. L'ordinateur qui veut recevoir un message va envoyer à l'autre sa clé publique. L'autre ordinateur peut alors utiliser cette clé pour chiffrer le message à envoyer. Le message crypté est alors transmis au récepteur, qui utilise sa clé privée pour le déchiffrer. Le message réellement transmis est donc illisible pour tout attaquant, vu qu'il ne connait pas la clé privée du récepteur. La connaissance de la clé publique ne lui sert à rien.
| Étape 1 : Échange des clés publiques. | Étape 2 : Transfert de données cryptés sur internet. |
L'inconvénient du chiffrement à clés asymétriques est qu'il est plus lent qu'un chiffrement à clé symétrique à cause du fait qu'il soit basé sur des problèmes mathématiques complexes. Pour pallier à cette lenteur, les systèmes de chiffrement utilisent une combinaison des deux techniques : le chiffrement à clés symétriques est utilisé pour crypter les données et le chiffrement à clés asymétriques est employé uniquement pour chiffrer la clé symétrique employée qui est générée à la volée et à usage unique pour cette session.