SNMP系列文章之一 —— SNMP簡介及抽象語法標記

1. SNMP簡要介紹

1.1 SNMP是什麼

SNMP是英文Simple Network Management Protocol(簡單網絡管理協議)的縮寫。從狹義上講,它是一種專門用於網絡管理軟件和網絡設備之間通信的協議,從廣義上講,它是一組爲實現網絡的自動化管理任務而制定的一系列通行標準,包括了管理信息的表示與命名、通信協議等內容。

簡單地說,網絡管理就是維護一個網絡系統的正常運行。“正常運行”的意思是按照設計的目標,發揮應有的功能。根據功能的不同,將基於OSI參考互聯模型的網絡管理劃分爲以下幾個部分:

(1)故障管理(fault management)

(2)計費管理(accounting management)

(3)配置管理(configuration management)

(4)性能管理(performance management)

(5)安全管理(security management)

1.2 SNMP結構

SNMP的組成可以分爲兩大部分:管理信息的定義與標識和SNMP實體之間的通信協議。

管理信息的定義與標識的核心內容是管理信息結構與標識(Structure and Identification of Management Information, SMI)和許多的管理信息庫(Management Information Base,MIb)。SMI目前有SMIv1和SMIv2兩個版本,它規定如何定義、標識管理信息。MIB遵循SMI規範,定義具體的管理信息。

通信協議主要內容分別在SNMPv1,SNMPv2和SNMPv3等標準定義,不同版本中的通信協議操作和通信協議安全機制不同。

SMI,MIB和SNMP構成了SNMP協議族的基石,堪稱爲組成SNMP協議族的“三駕馬車”。

這三者的關係如下:

                             NMS  <--- (SMI ---> MIB) ----> 代理(Agent)

                                |<----------------------------------------->|

運行網絡管理程序的計算機稱爲網絡管理工作站(Network Management Station, NMS),代理(Agent)是運行在被管理的網絡設備上完成SNMP功能的進程。

SNMPv1, SNMPv2c和SNMPv3的區別和各自優缺點

1.3 SNMP相關協議

(1)SNMPv1

SNMPv1簡單易於實施,被業界廣泛接受並得以實施。但最大的缺點是安全性差,唯一的安全機制是基於共同體字符串(community strings),類似一個普通的字符串密碼。

RFC1155 --- 基於TCP/IP的網絡管理信息結構與標識

RFC1157 --- 簡單網絡管理協議

RFC1212 --- 簡明MIB定義

RFC1213 --- 基於TCP/IP的網絡管理信息庫(MIB-II)

RFC1215 --- 定義SNMP陷阱消息宏

(2)SNMPv2c

大部分標稱支持SNMPv2的設備,實際上實施的就是這個版本。

RFC1901 --- 介紹基於共同體的SNMPv2

RFC1905 --- SNMPv2協議操作

RFC1906 --- 傳輸層映射

(3)SNMPv3

RFC3410 --- Internet標準管理架構及適用說明

RFC3411 --- SNMP網絡管理框架結構

RFC3412 --- SNMP消息處理與分發

RFC3413 --- SNMP應用

RFC3414 --- SNMPv3基於用戶的安全模式

RFC3415 --- SNMPv3基於視圖的訪問控制模式

 

2. 抽象語法標記(ASN.1)

2.1 抽象語法標記是什麼

在電信和計算機網絡領域,ASN.1(Abstract Syntax Notation one)是一套標準,是描述數據的表示、編碼、傳輸、解碼的靈活的記法。它提供了一套正式、無歧義和精確的規則以描述獨立於特定計算機硬件的對象結構。

ASN.1是ISO和ITU-T的聯合標準,最初是1984年的CCITT X.409:1984的一部分。ASN.1本身只定義了表示信息的抽象句法,但是沒有限定其編碼的方法。 

ASN.1有嚴格的BNF(巴科斯範式BNF: Backus-Naur Form.的縮寫)定義,具有簡潔、精確和無二義性的特點。它有兩種用途:一是用於如電子郵件等應用語法;二是用作定義特定協議實體PDU結構的一種手段。

ASN.1的引入,解決了不同網絡設備製造商之間通信的問題。因爲他是一種標準的、與具體的網絡環境無關的語法格式。

2.2 巴克斯範式

巴科斯範式(BNF: Backus-Naur Form 的縮寫)是由 John Backus 和 Peter Naur 首先引入的用來描述計算機語言語法的符號集。現在,幾乎每一位新編程語言書籍的作者都使用巴科斯範式來定義編程語言的語法規則。

在雙引號中的字("word")代表着這些字符本身。而double_quote用來代表雙引號。

在雙引號外的字(有可能有下劃線)代表着語法部分。

< > : 內包含的爲必選項。

[ ] : 內包含的爲可選項。

{ } : 內包含的爲可重複0至無數次的項。

| : 表示在其左右兩邊任選一項,相當於"OR"的意思。

::= : 是“被定義爲”的意思

2.3 ASN.1基礎

2.3.1 類型分類

在ASN.1中,類型(type)是可以編碼傳輸值得非空命名集合,值(value)是類型的一個實例,必須屬於某個類型。類型可以分爲簡單類型,結構類型,定義類型和其他類型。

(1)簡單類型

INTEGER:整型,BOOLEAN:布爾型,REAL:實型,OCTECT STRING:字節串型,OBJECT IDENTIFIER:標識符型,ENUMERATED:枚舉型,NULL:空類型

(2)結構類型

SET:集合結構,SEQUENCE:序列結構,SET OF:元素相同的集合結構,SEQUENCE OF:元素相同的序列結構,

(3)其他類型

CHOICE:選擇類型,ANY:可以使任意一種已知類型

(4)定義類型

前面所說的都是ASN.1標準中定義好的,所以又稱爲ASN.1內置類型,一般使用時,用戶可利用這些類型再定義滿足自己需求的類型。但是,這裏所說的用戶定義類型並沒有產生新的ASN.1類型,僅僅是爲ASN.1類型定義了一個新的類型引用。作用類似於高級程序語言中爲數據類型定義別名。例如,C語言中使用typedef爲已有類型定義別名。

2.3.2 類型定義和值定義

定義類型的語言如下: <類型名>::=<已有類型>

如下面語句使用內置類型INTEGER定義了一個新類型Age(更確切地說是一個新的類型引用)

Age::=INTEGER

賦值語句的語法如下:<值名><所屬類型>::=<值>

例如,將整數賦值給一個屬於Age類型的值age: age Age ::= 25

2.3.3 命名約定

在ASN.1中,可以出現的字母符號有以下幾種:

(1)26個大寫英文字母A~Z

(2)26個小寫字母a~z

(3)10個阿拉伯數據0~9

(4)符號:=,{}《.()[]-'">|

除了值名用小寫字母開頭外,類型名和模塊名要用大寫字母開頭,而宏名和保留關鍵字則全部要用大寫字母。

2.4 ASN.1常用類型

2.4.1 簡單類型

簡單類型包括整數類型、邏輯類型、空類型、字節串類型和對象標識符類型,是ASN.1中最常用、最基本的類型。

(1)整數類型,包括正或負的任意整數或0

值符號語法: IntegerValue ::= SignedNumber | identifier

(2)邏輯類型 

BooleanValue ::= TRUE | FALSE

(3)空類型

NullValue ::= NULL

(4)OCTECT STRING 字節串類型,0個或多個字節組成的序列

OctetStringType ::= OCTECT STRING

(5)OBJECT IDENTIFIER 對象標識符類型,可以用來標識任意的信息實體

Object identifier ::= OBJECT IDENTIFIER

2.4.2 結構類型

結構類型有SET,SET OF, SEQUENCE和SEQUENCE OF幾種,其中前兩種SNMP沒有用到,所以這裏只介紹後兩種。

(1)SEQUENCE結構類型,組件可以是0個或多個不同類型組成的有序序列。

(2)SEQUENCE OF構造類型,由同一類型組成的有序序列。

2.4.3 其他類型

(1) CHOICE是選擇類型,在列舉的類型序列中選擇一種。

(2)ANY是任意類型,可以是ASN.1或其他標準定義的任意一種類型。

2.4.4 標籤類型和字類型

(1)標籤類型

標籤類型的定義分爲直接方式和間接方式兩種,而最常用的是間接方式。

間接方式定義: <類型名> ::= [ [類別名] 標誌號 ] IMPLICIT<基礎類型>

直接方式定義: <類型名> ::= [ [類別名] 標誌號 ] EXPLICIT <基礎類型>

(2)字類型

如類型A的值集合石另一個類型B的值集合的子集,那麼類型A稱爲類型B的子類型,例如,類型定義語句:

Subint ::= INTEGER (0..25) 定義類型Subint是INTEGER類型的子類型。

複雜的子類型使用以下的關鍵字:

SIZE --- 大小,長度範圍

FROM --- 由限制字符所組成的字符串

INTERSECTION --- 交集

UNION --- 並集,與|相同

EXCEPT --- 除....之外

ALL --- 包括.....的全部

2.5 ASN.1模塊

模塊的格式如下:

<模塊名> DEFINITIONS ::=

BEGIN

    EXPORTS 部分(可選)

IMPORTS 部分(可選)

<模塊體>

END

 

注:本文大部分資料都來自《精通SNMP》武孟軍 著

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章