TCP/IP 協定與 Internet 網路:第十六章 SNMP 網路管理協定  上一頁   下一頁

 

翻轉工作室:粘添壽

 

16-11 ANS-1 編碼規則

ASN-1 的編碼規則也是採用一般『基本編碼原則』(Basic Encoding Rule, BER方式。其主要功能是定義 ASN-1 資料型態的值如何轉換為位元序列的排列方法,以作為傳輸使用,接收端也能依照此方法正確解碼。編碼規則是遞迴式,所以結構式物件(複合資料型態)的編碼為其擁有之基本物件(基本資料型態)編碼的連結。依照此種方法,所有物件編碼都可以歸類為基本物件編碼的串列。

BER 定義之中,不論基本物件或結構物件的值都是由四個欄位組成:(1) 識別碼,(2) 資料欄位的位元組(Byte)長度,(3) 資料欄位,(4) 結束欄位(若資料長度未知)。結束欄位是針對內容並未定義完全的複合資料型態,如果資料長度都已知道,就不需要該欄位了(如 SNMP 使用)。以下我們分別說明各個欄位的功能,如圖 16-11

16-11 ASN-1 編碼格式

16-11-1 識別碼欄位

如圖 16-12 所示,識別碼欄位中又區分為三個子欄位:(1) 標籤、(2) 資料型態、 (3) 數字。標籤顯示該編碼資料的類型(通用、應用、指定文字或專用類型)以兩個位元來區分。資料型態子欄位如為 1 表示資料為基本型態;0 為複合資料型態。數字子欄位表示該資料是屬於資料類別中的哪一種資料型態。

16-12 ASN-1 BER 之識別碼

我們以通用類別(UNIVERSAL00)來說明編碼的情況(因為在 SNMP 協定裡只用到通用類別),在通用類別之中有不同的資料型態(整數、字串等等)。表 16-22 為各種資料型態在數字子欄位的值。代碼中 11 ~ 15 28 ~ 31保留。

16-22 通用類型的資料型態

代碼(數字)

資料型態

1

BOOLEAN

2

INTEGER

3

BIT STRING

4

OCTET STRING

5

NULL

6

OBJECT IDENTIFIER

7

OBJECT DESCRIPTOR

8

EXTERNAL

9

REAL

10

ENUMERATED

16

SEQUENCE and SEQUENCE OF

17

SET and SET OF

18

NumericString

19

PrintableString

20

TeletexString

21

VideotexString

22

IA5String

23

GeneralizedTime

24

UTCTime

25

GraphicString

26

VisibleString

27

GeneralString

16-11-2 長度欄位

長度欄位是標示於緊跟後面資料內容的長度,有下列三種情況:

(1)   資料內容長度小於 128 Byte,只要一個位元組的長度欄位就足以表示。

 

(2)  資料長度大於或等於 128 Byte,長度欄位(1 Byte)不足於表示,必須以多位元組表示時。第一個位元組紀錄該長度總共需要幾個位元組(下圖中的 K),自第二位元組起,將長度之數值自高位元到低位元依序放置。

(3)  資料內容不定長度。資料內容不定長度時,我們就無法用長度欄位來描述內容的長度,而將長度欄位全部設定為 1,且在資料欄位的後面加入兩個結束記號,結束記號是用一個位元組,各位元全部設定為 0

16-11-3 資料欄位

資料欄位編碼依照各個資料型態而定,以下說明幾種資料型態的編碼方式:

(A) 整數(INTEGER

整數編碼以該整數之 2 的補數來編碼,小於 128 的正整數需要一個位元組長度,小於 32768 2 個位元組,以此類推。正負號位元組先傳送,自高位元至低位元,每八個位元為一組,依序置放。如:Integer 49 編碼結果如下:(標籤 = 00 表示通用類型)、(資料型態 = 0 表示基本型態)、(數字 = 2 表示整數)。(長度 = 1 表示資料 1 位元組)、(資料 = 49

(B) 位元串列(BIT STRING

位元串列的資料編碼和原來資料相同,但最主要問題在於長度的表示方式。長度欄位表示後面資料位元組的長度,而非位元的長度。但當位元資料依序放置在資料欄位中,資料欄位後面會剩下一些位元欄位空白,因此在長度後面必須緊接著一個位元組,主要用來說明最後資料位元組剩下幾個位元欄位未填放。如 Bit String 01001111 9 個位元串列,它的資料編碼為 074F8016 進位),其結果如下:

(C) 位元組字串(OCTET STRING

位元組串列比較容易,串列字元以標準的方式由左至右傳送。如:Octet String xy 之編碼如下:(x, y ASCII 碼表示)

(D) 物件識別碼(OBJECT IDENTIFIER

物件識別碼編碼都是以整數串列表示。我們以簡單網路管理協定(SNMP)為例來說明其物件編碼情況,例如,internet 物件的識別碼是{1361}(如圖 6-11 物件識別樹)。在 SNMP 的物件描述識別之中,第一個數字永遠是 01、或 2;第二個數字要小於 40(根據 SNMP 規格,將無法辨識第 41 類)。因此,我們可以將前面兩個數字組合成一個數字編碼,只佔一個位元組的編碼資料,第一個數字稱為 a,而第二個數字稱為 b,其編碼值為(40*a + b),依照組合編碼 internet 的第一個資料編碼為 4340*1 + 3),其餘第三個數字以後,每一個數字填入一個資料欄位內。依照慣例,物件識別碼超過 127 的數字,會編碼成多個位元組,第一個位元組的高位元設定為 1,位元組總數存在另 7 個位元。Internet 物件編碼結果如下:

(E) 序列(SEQUENCE

序列是屬於複合資料型態,它的編碼實際上就是將它所包含的基本型態,依序編碼組合而成。我們以地址結構來說明編碼的情況,其內部的子變數資料型態都假設已宣告:

SEQUENCE { Name “Tain-shou Nien”,

Street “Hwang Po 1st ”,

Number 1,

City “Feng-Shan”,

Zip 809

}

編碼方式如下:(編碼數字以十六進位表示)

1. SEQUENCE 的識別碼為 30,長度 30 是以下五筆變數資料的總長。(3030

2. Name PrintableString 型態,識別碼 13,字串長度為 0E。(字元以 ASCII 碼表示)

3. Street PrintableString 型態,識別碼 13,字串長度為 0C

4. Number INTEGER 型態,識別碼 02,內容長度為 1

5. City PrintableString 型態,識別碼 13,字串長度為 09

6. Zip INTEGER 型態,識別碼 02,內容長度為 2

編碼結果:(編碼數字以十六進位表示)

(1)    30  30

(2)        13 0E 54 61 69 6E 2D 73 68 6F 75 20 4E 69 65 6E

(3)        13 0C 48 77 61 6E 67 20 50 6F 20 31 73 74

(4)        02 01 01

(5)        13 09 46 65 6E 67 2D 53 68 61 6E

(6)        02 02 03 29

 

 

<GOTOP>