Couche présentation
# Couche présentation

La couche présentation est la 6e couche du modèle OSI.

## Définition OSI (ISO 7498-1)

La couche présentation est chargée du codage des données applicatives. Les couches 1 à 5 transportent des octets bruts sans se préoccuper de leur signification. Mais ce qui doit être transporté en pratique, c'est du texte, des nombres et parfois des structures de données arbitrairement complexes. Un protocole de routage par exemple doit transporter un graphe représentant au moins partiellement la topologie du réseau. Le rôle de la couche présentation est donc de convertir les données applicatives manipulées par les programmes en chaînes d'octets

## Services offerts par la couche présentation

* Conversion de code caractère (par exemple ASCII/EBCDIC)
* Conversion de données (par exemple CR - CR/LF)
* Compression
* Chiffrement et déchiffrement

## Exemples de couche de présentation

### Le monde ISO

Dans le monde ISO, la règle consiste à définir les données en ASN.1 (Abstract Syntax Notation) et à réaliser dans la couche de présentation le codage/décodage en BER ou DER.

### Le monde IP

Dans le monde IP, historiquement, la méthode canonique et implicite est de tout transformer en texte: codage des nombres entiers en décimal, non-utilisation des flottants, utilisation de délimiteurs comme le guillemet ou la marque de fin de ligne (octets 13 et 10) avec des mécanismes d'échappements compliqués pour les cas où le délimiteur apparaît dans les données. Ces transformations sont spécifiées, et souvent répétées, pour chaque protocole applicatif, puisque le «modèle» IP ne contient pas de couche de présentation.

Cela ne résout le problème qu'à moitié puisque le codage des caractères en octets n'est pas défini. Soit on utilise le codage US-ASCII en ignorant les langues utilisant des caractères non ASCII (cf. par exemple le protocole SMTP (RFC 821 annexe A et RFC 822 section 3.3)), soit on ajoute parfois une déclaration de codage de caractères (cf. utilisation de MIME dans ESMTP et HTTP). Même dans le cas de HTTP, les URL sont décrites comme formées de caractères mais sans spécifier quels caractères sont autorisés. (Par exemple : la séquence d'échappement « %85 » pour l'octet 133 est-elle valide ?)

Lorsque cela s'est avéré insuffisant au vu de la complexité de la structure des données à transporter, notamment pour le protocole applicatif Remote Procedure Call de Sun Microsystems, on a inventé XDR (External Data Representation), jusqu’à l’introduction de XML en 1998, dont la vocation était précisément d’étendre le mode de représentation SGML conçu pour des fichiers de type « document » (consommables par des humains) à des jeux d’éléments de données (à traiter par des machines) transitant sur Internet.

On notera qu'aucune de ces représentations n'est un protocole proprement dit. Cela illustre le fait que s'il n'y a pas de négociation du mode de codage, tout mécanisme utilisé pour l’enregistrement peut aussi faire office de fonction de présentation.

