Les protocoles et services de présentation :

ASN.1, XDR et Produits

Introduction

 

La couche présentation - Objectif:

- On veut pouvoir conserver le sens des informations transmises à travers le réseau
- Cette couche suppose l'existence d’une communication fiabilisée entre les 2 machines concernées

 

Problématique

La représentation des données est souvent différente pour 2 machines distantes :

Il est difficile de transmettre des structures de données complexes : comment choisir l'ordre d'envoi des sous-parties, ...

Il faut pouvoir minimiser le nombre de bits transmis afin de ne pas utiliser la bande passante de façon trop importante

On doit aussi éventuellement pouvoir sécuriser les données qui vont transiter sur le réseau car certaines informations sensibles peuvent être communiquées entre les sites distants.

 

Solutions techniques

Il est nécessaire de pouvoir disposer d'une représentation commune des données entre les 2 communicants :

Cette représentation correspond à la notion de contexte de présentation qui est défini par le couple :

- Syntaxe abstraite

- Syntaxe de transfert


Syntaxe abstraite :

C'est un langage de définition de la structure générique des données (types de données utilisés).Elle constitue les définitions sur lesquelles se base le dialogue de la couche application. La syntaxe abstraite est à opposer à la syntaxe concrète qui définit la structure des données localement sur la machine.

Exemple de syntaxe abstraite:
- Une donnée constituée d’un composant de type booléen et d’un autre de type entier qui est optionnel.


Syntaxe de transfert :

La syntaxe de transfert définit la représentation des données échangées par les couches session des 2 machines (à partir de règles de codage communes).
Une syntaxe abstraite peut être associée à plusieurs syntaxes de transfert.

Exemple de syntaxe de transfert :
- Données codées suivant (type, longueur, valeur)
- Booléen codé sur un octet avec les valeurs 0 ou 1


Illustration de l’utilisation des syntaxes :

Ainsi avec une seule syntaxe de transfert on n'a besoin pour n systèmes distincts que de n implantations de règles de codages et n pour les reglès de décodage au lieu de n*(n-1) implantations de conversions implicites entre les divers systèmes :

Services offerts à la couche application :

 

XDR

« eXtended Data Representation »


Protocole développé initialement par SUN pour permettre le transfert des données lors d'appels à des procédures distantes avec RPC.
Défini dans la RFC 1014


Il y a une seule syntaxe de transfert :



Afin d'assurer un alignement des données sur des multiples de 4 octets, des octets résiduels (qui contiennent la valeur 0) sont rajoutés de façon à constituer un bloc de données qui aura une taille multiple de 4. Les types de données ont une et une seule syntaxe de transfert qui est décrite dans le tableau suivant:

Type

Syntaxe de transfert

Integer(Unsigned) Entier sur 32 bits
Enumeration Entier sur 32 bits
Boolean Entier sur 32 bits
Hyper Integer (Unsigned) Entier sur 64 bits
Simple precision Floating Point Codage standard IEEE virgule flottante en simple précision (32 bits)
Double precision Floating Point Codage standard IEEE virgule flottante en double précision (64 bits)
Fixed length Opaque data Données brutes + octets résiduels
Variable length Opaque data Taille données + Données brutes + octets résiduels
String Taille données + caractères en ASCII + octets résiduels


Les types complexes sont définis à partir de types simples :


- Array (de taille fixe ou variable) :

Un groupe d'éléments homogènes peut être codé en XDR dans un Array. La spécification fournit un encodage pour les tableaux de longueur fixe ou de longueur variable. Dans le dernier cas, la longueur est inclu dans les 4 premiers octets de la représentation et codée sous forme d'un entier non signé.


- Structure :

Une déclaration de Structure en XDR est basée sur celle qui est définie dans le langage C et à la syntaxe :struct {
composant-1;
...
composant-n;
} nom-structure;

Chaque composant de la structure est encodé dans l'ordre dans lequel il a été déclaré. La taille de chacun des composants doit être un multiple de 4 octets , bien que chaque composant puisse avoir une taille différente.


- Discriminated Union :

XDR permet la spécification d'un type d'union exclusive. La représentation consiste en 2 parties : le discriminant est codé sur 4 octets puis la 2e partie correspond aux données de la valeur discriminante.

- Typedef


Le type typedef ne déclare aucune donné mais sert plutot à définir de nouveaux identificateurs utilisés pour déclarer d'autres données.

- Void

Un element de type void est un quantité de 0 octets qui peut être utilisée dans les spécifications. C'est utilisé pour les opérations qui ne nécéssitent pas de données en entrée ou sortie par exemple. Ce peut être aussi utilisé pour spécifié une branche nulle d'une Discriminated Union

Exemple de spécification XDR :

Struct fichier {
string nomfichier<255>;
opaque donnees;
}

 

ASN.1

« Abstract Syntax Notation One »


Il existe un ensemble de types basiques qui sont les éléments de bases pour décrire la structure des données. On les utilise pour représenter des valeur numériques ainsi que des chaines de caractères :


Définition de types construits:


Il y a plusieurs règles de codages disponibles:


Comparaison ASN.1/XDR

 

XDR

ASN.1

Norme

Internet (IETF) OSI et ITU -T

Typage

implicite explicite

Syntaxe de transfert

1 seule, efficace pour les architectures actuelles BER : simple mais peu efficace
PER : plus efficace que BER

Réutilisabilité des types

redéfinition obligatoire modules, macros


Exemple :

ASN.1

XDR

Fichier ::= SEQUENCE {
nomfichier PrintableString(SIZE (1..255)),
taillefichier INTEGER(0..65535),
proprietaire PrintableString (SIZE(1..32)),
donnees OCTET STRING(SIZE(65535))
}

Struct fichier {
string nomfichier<255>;
int taillefichier;
string proprietaire<32>;
opaque donnees<65535>;
};

 

Applications :


XDR


ASN.1


Liens


Couche Présentation :

Presentation Layer: The Service
http://www.csc.vill.edu/mnt/a/cassel/html/netbook/chap9/node3.html

Presentation Services
http://www-net.cs.umass.edu/cs653-1997/notes/ch4/ch4.htm


XDR :

La RFC spécifiant XDR
ftp://ftp.isi.edu/in-notes/rfc1832.txt

External Data Representation
http://snad.ncsl.nist.gov/snad-staff/olsen/pubs/titlehce/node18.html

Présentation de XDR
http://www.cs.rpi.edu/courses/fall96/netprog/lectures/slds/xdr/sld001.htm

XDR technical notes
http://www.vitele.com:8101/cisco/cc/td/doc/product/software/ioss390/ios390rp/rpxdesc.htm


ASN1 :

Site d'information sur ASN.1
http://asn1.elibel.tm.fr/fr/index.htm

ITU-T : ASN.1 Project
http://www.itu.int/ITU-T/asn1/

ASN.1 ressources
http://www.oss.com/asn1/index.html

Expert Abstract Syntax Notation One Design
http://asn-1.com/

CTI forum : ASN.1 standard
http://www.ctiforum.com/standard/standard/asn.1/asn/asn2.htm

Références sur ASN.1
http://renoir.vill.edu/~cassel/netbook/asn1only/asn1only.html

ASN.1 et la sécurité
http://www.isi.edu/~brian/security/asn1.html

Description de ASN.1 avec ses évolutions possibles
http://byerley.cs.waikato.ac.nz/~tonym/articles/asn/node1.html