Abstract Syntax Notation (ASN.1)

advertisement
In the Name of the Most High
Abstract Syntax Notation One
ASN.1
by
Behzad Akbari
Fall 2011
These slides are based in parts upon slides of Prof. Dssouli (Concordia university)
Abstract Syntax Notation One





Both the information and communications models need to be specified
syntactically and semantically.
This requires a language that specifies the management protocol in the
application layer.
This is where Abstract Syntax Notation One (ASN.1) plays a role.
ASN.1 is actually more than a syntax; it’s a language that addresses both syntax
and semantics
Two type of syntax




Abstract syntax: set of rules that specify data type and structure for information storage
Transfer syntax: set of rules for communicating information between systems
Can generate machine-readable code: Basic Encoding Rules (BER)
ASN.1 is based on the Backus system and uses the formal syntax and grammar
of the Backus-Nauer Form (BNF)
Backus-Nauer Form (BNF)

Definition: <name> ::= <definition> 
where <name> denotes “entity” and the symbol
“::=“ represents “defined as”

primitive definitions:



<digit> ::= 0|1|2|3|4|5|6|7|8|9
<op> ::= +|-|x|/
similarly, an entity number can be constructed from
primitives:

<number> ::= <number> | <digit> <number>

Example:
 9 is primitive 9
 19 is construct of 1 and 9
 619 is construct of 6 and 19
ASN.1 Assignments

Assignments
<BooleanType> ::= BOOLEAN  data type assignment (or
name of the entity)
<BooleanValue> ::= TRUE | FALSE  value assignment
(assigned value to the data type)

Group of assignments: Modules





Start with capital letters
Usually modules are built from primitive (atomic) data types (e.g.,
INTEGER, REAL, etc..)
May use ASN.1 constructs (e.g., SET, SEQUENCE, etc.)
Constructors are used to build structured data types
Backward and forward references, and inline definition
ASN.1 Modules
PersonnelRecord ::= SET
Constructs: “list makers”
Name,
{
GraphicString,
title
division CHOICE {
A module PersonnelRecord
[0] SEQUENCE
marketing
(a set of data types)
{Sector,
Primitives data types
Country},
[1] CHOICE
research
{product-based [0] NULL,
Construct: alternatives
[1] NULL},
basic
[2] SEQUENCE
production
{Product-line,
}}
Country }
Three construction mechanisms (develop structured data
types):
Alternatives: CHOICE
List:
SET and SEQUENCE
Repetition: SET OF and SEQUENCE OF
ASN.1 Modules
PersonnelRecord ::= SET
Lists built with “SEQUENCE”
{
Name,
maintains the correct order
title
GraphicString,
division CHOICE {
PersonnelRecord is a set of
marketing
[0] SEQUENCE
different data types, each uniquely
{Sector,
associated with a name and can
Country},
be encoded and transmitted
research
[1] CHOICE
in any order.
{product-based [0] NULL,
basic
[1] NULL},
production
[2] SEQUENCE
{Product-line,
Country }
}}
Example:
“Smith”, “Manager”, {“North”, “Chile”}
“Manager”, “Smith”, {“North”, “Chile”}
{“North”, “Chile”}, “Smith”, “Manager”
ASN.1 Symbols
Symbol
::=
|
-{}
[]
()
..
Meaning
Defined as
or, alternative, options of a list
Signed number
Following the symbol are comments
Start and end of a list
Start and end of a tag
Start and end of subtype
Range
Data Types
Data Types
Convention
Example
Object name
Initial lowercase letter
sysDescr, etherStatsPkts
Application data type
Initial uppercase letter
Counter, IpAddress
Module
Initial uppercase letter
PersonnelRecord
Macro, MIB module
All uppercase letters
RMON-MIB
Keywords
All uppercase letters
INTEGER, BEGIN
Data types are generally defined based on a structure and a tag:


Structure: simple (or atomic), structured, etc..
Tag: class and a tag
Data Type:
Structure & Tag
Data Type
Tag
• Structure defines how data type is built
• Tag uniquely identifies the data type
Structure
Number
Simple
Structured
Tagged
Other
Universal
Class
Application
Contextspecific
Private
ASN.1 simple types

Basic Types
o
o
o
o
o
o

BOOLEAN
INTEGER
ENUMERATED
REAL
BIT STRING
OCTET STRING
Character String Types (various subsets of ISO 10646-1)
o
o
o
o
o
o
o
NumericString
(0-9,<space>)
PrintableString (0-9,A-Z,a z,<space>,<special>)
VisibleString
GraphicString
TeletexString
UTF8String
IA5String
ASN.1 simple types


Syntax : <type name> ::= type
Example: counter
::= INTEGER
IpAddress
::= OCTET STRING
PageNumber
::= INTEGER
ChapterNumber::= INTEGER
Months ::= ENUMERATED {january (1),
february (2),
march (3),
april (4),
may (5),
june (6),
july (7
august (8),
september (9),
october (10),
november (11),
december (12)}
ASN.1 simple types

A subtype is derived from a parent type

Syntax: <subtype name> ::= <type> ( <constraint> )
Examples:
Counter
::= INTEGER ( 0..4294967295 )
IpAddress
::= OCTET STRING ( SIZE(4) )
Spring
::= Months ( march | april | may )
Summer
::= Months ( june | july | august )
SmallPrime ::= INTEGER ( 2 | 3 | 5 | 7 | 11 )
Structure
•
Simple
PageNumber ::= INTEGER
ChapterNumber ::= INTEGER
•
Structured / Construct
BookPageNumber ::= SEQUENCE
{ChapterNumber, Separator, PageNumber}
•
Tagged
• Derived from another type; given a new ID
• In Fig. 3-14, INTEGER is either universal or
application specific
•
Other
• CHOICE, ANY
Structured Type

SEQUENCE


SEQUENCE OF


Ordered array of repetitive data
SET


Ordered list maker
Unordered list maker
SET OF

Unordered list of repetitive data
ASN.1 structured types

A data type is structured type when it contains other types (i.e.,
have components)
BookPageNumber ::= SEQUENCE
{ChapterNumber, Separator, PageNumber}
separator is a VisibleString data type with value “-”
Example: {1-1, 2-3, 3-39}
BookPages ::= SEQUENCE OF { BookPageNumber }
BookPages ::= SEQUENCE OF {
SEQUENCE
{ChapterNumber, Separator, PageNumber}}
Example: {1-1, 1-2,..,2-1, 2-2,…..}
ASN.1 structured types

The pages of a book could also be specified as a
collection of individual pages in random order
BookPages ::= SET OF
{
SEQUENCE
{ChapterNumber, Separator, PageNumber}
}
ASN.1 Tagged Types



Tag uniquely identifies a data type and is required for
encoding the data types for communication
Comprises class and tag number
Class:
o
o
o
o
Universal - similar to global variables
Application - only in the application used
Context-specific - specific context in application
Private - used extensively by commercial vendors
Example:
BOOLEAN
INTEGER
research
product-based
Universal 1
Universal 2
Application [1]
Context-specific under research [0]
ASN.1 Tagged Types
UNIVERSAL 1
BOOLEAN
UNIVERSAL 2
INTEGER
UNIVERSAL
- basic types 3
BIT STRING
UNIVERSAL 4
OCTET STRING
UNIVERSAL 9
REAL
UNIVERSAL 10 ENUMERATED
UNIVERSAL 6
- object types
UNIVERSAL 7
OBJECT IDENTIFIER
ObjectDescriptor
UNIVERSAL
26 types
VisibleString
- character string
UNIVERSAL 5
...
NULL
UNIVERSAL
23 types
UTCTime
- miscellaneous
UNIVERSAL 24 GeneralizedTime
UNIVERSAL
16 SEQUENCE [OF]
- structured types
UNIVERSAL 17 SET [OF]
ASN.1 Tagged Types
PersonnelRecord ::= SET
{
Name,
title
GraphicString,
division CHOICE {
marketing
[0] SEQUENCE
Tag nb is 1 (overrides
{Sector,
that of BOOLEAN)
Country},
research
[1] CHOICE
{product-based [0] NULL,
Application specific
basic
[1] NULL},
production
[2] SEQUENCE
{Product-line,
Context specific (subset of
Country }
}}
an application, and limited
to the application)
ASN.1 Object Types

Used to name and describe information objects




Such as standard documents, data structures, managed objects
In general, an information object is a class of information,
e.g., file format, rather than an instance of such a class
(i.e., individual file)
Object identifier is a unique identifier for a particular object
and its value consist of a set of integers
Object descriptor is a human readable description of an
information object
ASN.1 Object Types
root
ccitt(0)
iso(1)
joint-iso-ccitt(2)
org(3)
internet(1)
mgmt(2)
mib-2(1)
dod(6)
private(4)
experimental(3)
enterprise(1)
internet OBJECT IDENTIFIER ::= {iso(1) org(3) dod(6) 1 }
private OBJECT IDENTIFIER ::= {internet 4 }
ASN.1 Object Types


Private type is used
extensively by vendors
of network products
A vendor is assigned a
node on the MIT, all
branches and leaves
under that node will be
assigned private data
types by the vendor
itu
0
iso
1
org
3
dod
6
internet
1
private
4
enterprise
1
ibm OBJECT IDENTIFIER ::= {iso(1) org(3) dod(6)
internet(1) private(4) enterprize(1) 2}
IBM
2
iso-itu
2
Encoding Structure

ASN.1 syntax containing management information is
encoded using the Basic Encoding Rules (BER) that
is defined for the transfer syntax

BER is a specification developed and standardized by
CCITT and OSI

ASCII data is converted to bit-oriented data

TLV, Type-Length-Value: is a specific encoding
structure



Type: indicates the ASN.1 type, class of the type
Length: length of the actual value representation
Value: the value of the ASN.1 type as a string of octets
Encoding Structure
Type
Class
(7-8th bits)
Length
P/C
(6th bit)
Value
Tag Number
(1-5th bits)
1 byte

P/C (1-bit) specifies whether the structure is
simple or a construct


0 for simple
1 for construct
Encoding Structure
Type
Class
(7-8th bits)
Length
P/C
(6th bit)
Value
Tag Number
(1-5th bits)
1 byte

Class (2 bits): specifies the class being used
Class
Universal
Application
Context-specific
Private
th
8 bit
0
0
1
1
th
7 bit
0
1
0
1
Encoding Structure
Type
Class
(7-8th bits)
Length
P/C
(6th bit)
Value
Tag Number
(1-5th bits)
1 byte

Tag Number: designates the tag value in binary

Example: 00 0 00010 for encoding INTEGER
Universal class
Primitive
Tag value = 2
Tag number < 31
Identifier Octet
Bits
8
7
Class
6
5
4
P/C
3
2
Tag number
0 = Primitive
1 = Constructed
0 0 = Universal
0 1 = Application
1 0 = Context-specific
1 1 = Private
1
Tag number >= 31
Leading octet
Class P/C 1 1 1 1 1
2nd octet
1
Last octet
...
1
+ ... +
= Tag number
0
+
Encoding of Length Field

Short form ( L < 128 octets)
one octet
0
Length L
L octets
Contents (or Value) field
 Long form ( 128  L < 21008 octets)
first octet
1
K
K octets
L octets
Length L
Contents field
Example, L = 128: 10000001 10000000
Binary equivalent of 128
BER, Examples
Type Length Value
distance
INTEGER ::= 27
02
01
1B
00 0 00010
UNIVERSAL P
today INTEGER ::= 129
02
02
2
00 81
Length is 2 to
indicate 2 octets
for Value
DayOfYear ::= [APPLICATION 17] IMPLICIT INTEGER
today DayOfYear ::= 129
51
02
01 0 10001
APPLICATION
P
17
00 81
BER, Examples
Birthday
name
day
}
::= SEQUENCE {
VisibleString,
DayOfYear
Type Definition
UNIVERSAL 16
00 1 10000
Value Assignment
myBirthday Birthday ::= {
name
"Jane",
day
129
}
Birthday Length Contents
30
??
0A
VisibleString
1A
DayOfYear
51
BER Encoding
Length
04
Length
02
Contents
"Jane"
Contents
00 81
Example: SNMP Message
Tag
Message ::= SEQUENCE {
version INTEGER {
version-1(0)
},
community OCTET STRING,
data ANY
}
30
02
04
Example: SNMP Message
Type  30: SEQUENCE
Length  82 01 c0: 448 octets
82: 10000010
Type  30: SEQUENCE
Length  32: 50 octets
Macros
<macroname> MACRO ::=
BEGIN
TYPE NOTATION
::= <syntaxOfNewType>
VALUE NOTATION ::= <syntaxOfNewValue>
<auxiliaryAssignments>
END
Macro Example
OBJECT-TYPE MACRO ::= BEGIN
TYPE NOTATION ::=
"SYNTAX" type (TYPE ObjectSyntax)
“ACCESS" Access
"STATUS" Status
VALUE NOTATION ::= value (VALUE ObjectName)
Access ::= "read-only" | "read-write“ | "write-only
| "not-accessible"
Status ::= "mandatory” | "optional“
END
| "obsolete"
Object-Type Example
sysName OBJECT-TYPE
SYNTAX DisplayString (SIZE (0..255))
ACCESS read-write
STATUS mandatory
::= { system 5 }
Marco Example 2
CAR MACRO::= BEGIN
TYPE NOTATION ::= Brand Engine CarType Year
VALUE NOTATION ::= value (VALUE OBJECT IDENTIFIER)
Brand ::= “BRAND” value (PrintableString)
Engine ::= “CC” Ccs
Ccs ::= Cc | Ccs”,” Cc
Cc ::= value (INTEGER (600..5000))
CarType ::= “STYLE” CType
CType ::= “Sedan” |
“Liftback” | “SUV” | “Other”
Year ::= “YEAR” value (INTEGER)
END
Camry CAR
BRAND Toyota
CC 2000, 2400, 3000
STYLE Sedan
YEAR 2006
::= {toyota 3}
Download