《精通SNMP》 2 4 標籤型別和子型別

2021-09-23 14:56:31 字數 2196 閱讀 6222

除前面介紹的簡單型別和結構型別外,還存在標籤型別和子型別,它們是asn.1從不同應用角度定義的兩種型別。

2.4.1 標籤型別

一般地,使用者在定義型別時,除了名字外,tag、傳輸編碼都繼承基礎型別原有的定義。標籤型別(tagged type )是這樣一種型別:使用者在利用已有的型別定義新型別時,也為新型別定義了新的tag。

例如下面的型別定義語句:

age ::= integer
其中,型別age也是整型型別,tag、傳輸編碼都不改變。再看下面的型別定義語句:

型別ipaddress的基礎型別是octet string,但它的tag已經不再是基礎型別的tag了,而是新分配了乙個。注意,型別ipaddress雖然tag和octet string不同,但傳輸時仍然採用octet string的編碼方式。

當乙個應用系統使用asn.1時,需要定義自己的特定型別。有時,不同型別的基礎型別相同。例如,描述人的身高、體重和年齡屬性的資料型別,可以是一種資料型別,基礎型別是integer;如果認為有必要進一步區分這三種型別,也可以定義成三種不同的型別,並為它們分配新的標誌號,從而定義成標籤型別。也就是說,雖然三種標籤型別的基礎型別都是integer,但它們的tag不同,是三種不同型別,分別用來描述身高、體重和年齡。

另外,在結構型別set中,不同的元件經常有相同的型別,為了避免混淆,也需要將這些元件定義為標籤型別。

標籤型別的定義有直接方式(explicit)和間接方式(implicit)兩種,最常用的是間接方式定義,語法為:

< 型別名 > ::= [ [ 類別名 ] 標誌號 ] implicit < 基礎型別 >
方括號中的類別名是可選的,預設是上下文有關類。間接方式定義的標籤型別取代了基礎型別的tag,傳輸時使用新的tag。

直接方式比較少見,語法為:

< 型別名 > ::= [ [ 類別名 ] 標誌號 ] explicit < 基礎型別 >
直接方式是在基礎型別的tag上增加了乙個新的型別類別名和標誌號,傳輸時新定義型別的tag形式是新定義tag和基礎型別的tag一起使用。

結構型別元件的標籤型別的定義方式,可以在模組格式中統一指定,這種方式被稱為全域性標籤型別定義方式。全域性定義方式有explicit tags 和implicit tags兩種形式,以後的標準中又增加了一種automatic tags方式。

如果模組中全域性標籤定義方式為implicit tags,則模組中所有結構型別(choice型別除外)的元件標籤定義預設方式為implicit,除非顯式指定為explicit方式。此外,全域性方式只對本模組中定義的型別起作用,從其他模組中引用的型別標籤定義方式不受影響。

2.4.2 子型別

如果型別a的值集合是另乙個型別b的值集合的子集,那麼型別a稱為型別b的子型別。例如,型別定義語句:

subint ::= integer (0 . . 255)
定義型別subint是integer型別的子型別。

上面語句定義的子型別稱為簡單子型別,除此之外,還有一種形式複雜的子型別。複雜子型別使用如下的關鍵字:

size             --大小,長度範圍 

from            --由限制字元所組成的字串

intersection        --交集

union           --並集,與 '|' 相同

except           --除……之外

all            --包括……的全部

這些關鍵字可以組合使用,意義很容易理解,下面是幾個具體例子:

integer (all except (1..20))         --不包括1到20數字的所有整數 

ia5string ("yes" union "no" union "maybe")  --或「yes」 或「no」 或 「maybe」

printablestring (from ("a"|"b"|"c"|"d"))   --字串中不能出現a、b、c和d之外的字元

printablestring (size (10))          --長度為10的可列印字串

printablestring (size (1..10))        --大小範圍在1到10的可列印字串

SNMP協議詳解 2

四 snmp協議資料單元 在snmp管理中,管理站 nms 和 agent 之間交換的管理資訊構成了snmp報文,報文的基本格式如下圖1 圖 1snmp主要有snmpv1 snmpv2c snmpv3幾種最常用的版本。1 snmpv1 snmpv1是snmp協議的最初版本,提供最小限度的網路管理功能...

MakeFile從入門到精通 2

程式的編譯與連線 軟體的底層構造系統 1,程式儲存與執行 2,程式編譯和連線 3,程式檔案的分類 4,動態庫與靜態庫 計算機基本都遵循馮諾伊曼結構,cpu 記憶體ram ddr記憶體條 固態硬碟 嵌入式就是flash nor nand 一般手機平板呼叫 pc 伺服器基本都遵循。主要是這三塊組成。一般...

程式設計日誌 精通struts2

1.tomcat啟動專案有bug。最後檢視log檔案 localhost.2014 06 23 2.xwork版本問題,類跟目錄也因版本而異 3.map api有android和網頁版區別 4.index.action和index的字尾問題 5.struts core 1.3.5 出現錯誤 stru...