2.1. Introduction
La notation de syntaxe abstraite ASN.1 est une langage formel :
-
définition des objets échangés entre entités homologues de niveau Présentation
-
spécification de leur type ou structure
-
exemple d'objets :
-
les données de la couche supérieure (Application),
-
les informations échangées pour l'administration du réseau Internet (SNMP)
-
les N-PDU !
-
de forme textuelle
Normalisé par le CCITT X.208 et ISO IS 8824.
La notation ASN.1 est basée sur la notion de type :
-
similaire à celle des langages de programmation structurée
La notation de syntaxe abstraite ASN.1 est décrite sous la forme BNF ("Backus-Naur form")
2.2. La notation
2.2.1 Présentation
Pour chaque objet échangé, on distingue :
-
son type
-
sa valeur (parmi l'ensemble des valeurs possibles du type)
Il existe des types simples et des types composés.
La norme ASN.1 définit des types prédéfinis :
-
des types prédéfinis simples : INTEGER
-
des types prédéfinis structurés : OCTET STRING
De nouveaux types (simples ou composés) peuvent être construits à partir d'autres types :
-
grâce aux types : SET ou SEQUENCE (des objets constructeurs)
À chaque type est associé une étiquette (Tag) qui l'identifie :
-
numéro de l'étiquette
-
la classe de l'étiquette
On distingue quatre classes d'étiquettes (Tag class) :
-
universelle
-
types de base défini dans ASN.1
-
ex : INTEGER, OCTET STRING, SET
-
spécifique à une application
-
associée à une application (ou à une classe d'application) particulière
-
définie dans d'autres normes
-
spécifique à un contexte
-
la définition des types de cette classe ont une portée limitée au sein d'une partie d'une application
-
permet de distinguer les éléments d'un ensemble
-
privée
-
définie par l'utilisateur, pour ses besoins propres.
Deux rôles d'ASN-1 :
-
définition d'un type d'objet (rôle principal)
-
définition de la valeur d'un objet (rôle secondaire)
2.3. Un exemple
2.3.1 La description informelle d'objets
L'enregistrement d'un employé :
Nom : Paul Durand
Emploi : professeur
Numéro d'employé : 51
Date d'embauche : 14 Juillet 1789
Nom de l'épouse : Anne-marie Martin
Nombre d'enfants : 2
de son premier enfant :
Nom : Marc Durand
Date de naissance : 11 Novembre 1914
de son deuxième enfant :
Nom : Paulette Dupont
Date de naissance : 8 Mai 1945
2.3.2 La description en ASN-1 de ces objets (leur valeur)
L'enregistrement :
{ nom { prenom "Paul", nom "Durand" },
emploi "professeur",
numéroDemploye 51,
dateDembauche 17890714090000.0,
nomDeLepouse { prenom "Anne-marie", nom "Martin"},
enfants {
{ nom { prenom "Marc", nom "Durand" },
dateDeNaissance 1811110800Z,
}
{ nom {prenom "Paulette", nom "Dupont" },
dateDeNaissance 450508070001Z, }
}
}
}
Automatic Tagging on !
2.3.3 La description en ASN.1 du type de ces objets
Employe DEFINITIONS ::= BEGIN
EnregistrementDemploye ::= [APPLICATION 0] SET
{ nom Nom,
emploi VisibleString,
numeroDemploye NumeroDemploye,
dateDembauche GeneralizedTime,
nomDeLepouse Nom,
enfants SEQUENCE OF Enfant DEFAULT {}
}
Enfant ::= SET
{ nom Nom,
dateDenaissance UTCTime
}
Nom ::= [APPLICATION 1] SEQUENCE
{ prenom VisibleString,
nom VisibleString
}
NumeroDemploye ::= [APPLICATION 2] INTEGER
END -- du module Employe
2.4. La syntaxe
Les commentaires :
Le module
-
son nom, sa définition (DEFINITION)
-
BEGIN/END
-
IMPORTS/EXPORTS
La description de type :
-
son nom, sa définition (::=)
La description de champ des types composés :
-
leur nom, leur définition
-
le nom sert lors de l'instanciation d'un objet de ce type a lui affecter une valeur
Type/nom : syntaxiquement les types commencent par une majuscule, les noms non !
Les type prédéfinis :
-
INTEGER, VisibleString, UTCTime, GeneralizedTime, etc
Les types construits :
-
simple : ex. NumeroDemploye
-
composé : ex: Enfant
La classe des étiquettes (entre crochets) :
-
applicative : [APPLICATION n]
-
contextuelle : [n]
-
universelle ou non-étiquetée : INTEGER ou rien
-
privée : [PRIVATE n]
Les constructeurs :
-
SET (OF), SEQUENCE (OF), CHOICE (!)
-
ensemble/ensemble ordonné
-
ensemble ayant des éléments de même type ou de types différents
-
ensemble ayant un des types alternatifs proposés
Autres
-
DEFAULT : valeur par défaut
-
OPTIONAL : champ optionnel
-
EXTERNAL : sélection de contexte
-
OBJECT IDENTIFIER, ObjectDescriptor
-
MACRO, TYPE NOTATION, VALUE NOTATION : macro-génération
-
IMPLICIT : optimisation de l'encodage
2.5 - Les types universels de ASN.1
UNIVERSAL Type
|
Code
|
Commentaire (constructeur)
|
BOOLEAN
|
1
|
|
INTEGER
|
2
|
|
BIT STRING
|
3
|
(O/N)
|
OCTET STRING
|
4
|
|
NULL
|
5
|
donnée sans valeur
|
OBJECT IDENTIFIER
|
6
|
|
ObjectDescriptor
|
7
|
|
EXTERNAL
|
8
|
signale un changement de contexte (O)
|
REAL
|
9
|
|
ENUMERATED
|
10
|
|
SEQUENCE (OF)
|
16
|
2 versions (O)
|
SET (OF)
|
17
|
2 versions (O)
|
NumericString
|
18
|
|
PrintableString
|
19
|
|
TeletexString
|
20
|
|
VideotexString
|
21
|
|
IA5String
|
22
|
codage ASCII
|
UTCTime
|
23
|
|
GeneralizedTime
|
24
|
|
GraphicString
|
25
|
|
VisibleString
|
26
|
|
GeneralString
|
27
|
|