Wow! What language is that?

The MIB is written in ASN.1 notation. (The initials stand for Abstract Syntax Notation 1.) ASN.1 is a standard notation maintained by the ISO (International Organization for Standardization) and used in everything from the World Wide Web to aviation control systems.

A full description of ASN.1 is completely beyond the scope of this white paper - standard references to ASN.1 run up to 600 pages. For our purposes, there are only a few things to understand about ASN.1:

1. It's human-readable.

2 It's specifically designed for communication between dissimilar computer systems, so it's the same for every machine.

3. It's extensible, so it can be used for describing almost anything.

4. Once a term is defined in ASN.1, it can be used as a building block for making other terms. This is very important for understanding MIB structure - you'll see why later on.

How ASN.1 builds new terms out of existing terms

ASN.1 defines each term as a sequence of components, some of which may be sequences themselves. To give a simplified example, here's how you might describe a letter in ASN.1:

Letter ::= SEQUENCE {
opening OCTET STRING,
body OCTET STRING,
closing OCTET STRING,
address AddressType
}

Note that while most of the elements in this sequence are defined using a primitive element (the "octet string," which is the equivalent of a byte), the address is simply defined as a text string, "AddressType." You can do this because AddressType is defined in another sequence, like so:

AddressType ::= SEQUENCE {
name OCTET STRING,
number INTEGER,
street OCTET STRING,
city OCTET STRING,
state OCTET STRING,
zipCode INTEGER
}

For a computer parsing the sequence "Letter," AddressType will be read as an instruction to insert the octet string and integer structures listed in the sequence that defines AddressType