1. 程式人生 > >ASN.1語法詳解

ASN.1語法詳解

Chapter 4 ASN.1

《Network management : principles and practice》


4.1 網路資料表示及編碼
4.2 ASN.1的基本概念
4.3 基本編碼規則

4.1 網路資料表示及編碼
ASN.1(Abstract Syntax Notation 1)是一種形式語言。
獨立與表示層編碼技術,提供統一的網路資料表示。
管理資訊
PDU
需要一種對資料型別和資料內容進行描述的語法。
ASN.1很好地表示出資料的含義。
ASN.1提供對傳輸語法的支援:BER(Basic Encoding

Rule)。
4.2 ASN.1的基本概念
4.2.1 文字約定
ASN.1區分大小寫。
跳空格,與佈局無關。
註釋以--開頭,以--或行尾結束。
識別符號由大、小寫字母,數字和橫線組成,如sysName
內部型別識別符號全部大寫,如BOOLEAN,INTEGER。
使用者定義的型別名和模組名以大寫字母開頭,School 。
4.2.2 ASN.1符號說明
符號 含義
::= 定義為
| 或
-- 後面是註釋(行)
{} 清單的開始和結束
[] 標籤的開始和結束
() 子型別的開始和結束

.. 範圍
4.2.3 抽象資料型別
在ASN.1中,每一個數據型別都有一個標籤(tag),
標籤的型別分4種:
 通用標籤
 應用標籤
 上下文專用標籤
 私有標籤
通用資料型別有20多種,分4大類:

簡單型別:由單一成分構成的原子型別。

構造型別:由兩種以上成分構成的構造型別。

標籤型別:由已知型別定義的新型別。

其他型別:包括CHOICE和ANY兩種型別。
一、簡單型別
1INTEGER
ASN.1中沒有限制整型的位數,可以任意大小。
e.g. PageNumber::=INTEGER

ColorType::=INTEGER{
red (0),
blue (1),
green (2)}
colorA ColorType::=1
2 BOOLEAN
布林值。取值為TRUE或FALSE。
e.g. Employed::=BOOLEAN
Married::=BOOLEAN
lincoln Married ::= TRUE ,lincoln Married ::= FALSE
3 ENUMERATED
e.g. Month::= ENUMERATED {
January (1),
February (2),
March (3),



December (12) }
hottestMonth Month::=July
--or 7
4 REAL
實數。ASN.1對實數的精度沒有限制。每個實數可以用M×BE
表示,即三元組。
{M,B,E}
e.g. AngleInRadians::=REAL
angle1 AngleInRadians::={31415926,10,-7}
5 BIT STRING
位串型別,由零個或多個位元組成的有序位串。可用二進位制和
十六進位制表示。如: 10010001B,91H
e.g. Occupation::=BIT STRING{
clerk (0),
editor (1),
artist (2),
publisher (3) }
peter Occupation::={editor,artist}
--or "0110B"
6 OCTET STRING
八位位組串,由0個或多個8位位組組成的有序串。可用十進位制
(0-255)。二進位制和十六進位制表示。如:1101000100011010B或
D11AH
e.g. MacAddress::=OCTET STRING(SIZE(6))
pc1 MacAddress::= 11A1D001E001H
7 OBJECT IDENTIFIER
物件識別符號。從物件樹派生出的一系列點分數字串的形式,用來
表示物件。
e.g. internet OBJECT IDENTIFIER::={iso(1) org(3) dod(6) 1}
directory OBJECT IDENTIFIER::={internet 1}
mgmt OBJECT IDENTIFIER::={internet 2}
experimental OBJECT IDENTIFIER::={internet 3}
private OBJECT IDENTIFIER::={internet 4}
8 NULL
空值型別,當某時刻無法知道資料的標準值,可將值為NULL。
e.g. PatientIdentifier::=SEQUENCE{
name Visiblestring --取自IA5的圖形字元組成,不含控制字元
roomNumber CHOICE
{ INTEGER
NULL }}
patient1 PatientIdentifier::={name “peter”,roomNumber 301}
patient2 PatientIdentifier::={name “john”,roomNumber NULL}
CHARACTER STRING
字串型別。包括:

NumericString

PrintableString

IA5String

VisibleString

GeneralString
e.g. NumString::= NnmericString
str1 NumString ::= “123456790”
Surname ::= PrintableString
person1 Surname ::= “John”
二、構造型別
9 SEQUENCE
序列型別。是包含零個或多個組成元素的有序列表,列表的不
同元素可以分屬性不同的資料型別。
e.g. AirlineFlight::=SEQUENCE{
airline IA5string,
--取自IA5的字元組成,它與ASCII碼基本相同
flight Numericstring, --包含資料0到9以及空格,不包含控制字符集
seats SEQUENCE{
maximum INTEGER,
occupied INTEGER,
vacant
INTEGER},
airport SEQUENCE {
origin IA5string,
stop1 [0] IA5string OPTIONAL,
stop2 [1] IA5string OPTIONAL,
destination IA5string },
crewsize ENUMERATED {
six (6),
eight (8),
ten (10) },
cancle BOOLEAN DEFAULT FALSE }
airplane1 AirlineFlight::={airline "china",
flight "1106",
seats {320,280,40},
airport {origin "Beijing", destination
"Shanghai"},
crewsize 10 }
或 ::= {"china", "1106", {320,107,213}, {"Beijing", "Shanghai"},10}
10 SEQUENCE OF
單純序列(陣列)型別。即序列中的各項都屬於是同一型別的
ASN.1型別。
e.g. Seats::=SEQUENCE OF INTEGER
11 SET
集合型別。是包含零個或多個組成元素的無序集合,元素順序
無意義,型別可以不相同。
e.g. Person::=SET {name IA5string,
age
INTEGER,
female BOOLEAN}
personA Person::={"maggie",4,ture} 、{true, "maggie",4} 、
{4,true, " maggie "}
12 SET OF
單純集合型別,是包含零個或多個組成元素的無序集合。
e.g. Vipseats::=SET OF INTEGER
vipseatset Vipseats::={340,342,345}
三、標籤型別
Exuniv::=[UNIVERSAL 2] INTEGER
valA Exuniv ::=9
Exappl::=[APPLICATION 0] INTEGER
valB Exappl ::=10
Expriv::=[PRIVATE 1] INTEGER
valC Expriv::=11
Excont::= SET{ type1 [0] INTEGER OPTIONAL,
type2 [1] INTEGER OPTIONAL }
四、其他型別
13 CHOICE
選擇型別。包含一個可供選擇的資料型別列表。對於型別能夠
在事先都知道,可用此型別。
e.g. Prize::=CHOICE
{ car IA5string,
cash INTEGER,
nothing BOOLEAN }
peter Prize::=TRUE 或者
John Prize::= “ Lincoln ” 或者
Sam Prize::= 25000
14 ANY
如果在定義資料時還不能確定資料型別,可以使用ANY型。
ANY型可以被任何ASN.1型別置換。
e.g. TextBook::=SEQUENCE
{ author IA5string,
reference ANY}
例項:book1 TextBook ::= { author "shakespeare ",
reference IA5string " ISBN0669123757 "}
book2 TextBook ::= { author "shakespeare ",
reference INTEGER 1988}
4.2.4 子型別
通過對某些型別加以限制,可以定義它們的子型別(subtype)。子
型別的值集合是其父型別值集合的子集。
(1) 單個值
在定義中列舉出所有可能的取值,e.g.
TestResult ::=INTEGER(1|2|3|4)
sp1 TestResult ::= 2
(2) 大小限制
通過限制父型別中元素的個數定義新型別或規模。
e.g. WorkstationNumber::=OCTET STRING(SIZE(6))
BitField ::= BIT STRING(SIZE(12))
map1 BitField ::= „100110100100‟B
map2 BitField ::= „9A4‟H
(3) 取值範圍(值區間)
只適用於整數和實數型別,
e.g. NoID::=INTEGER(1..100)
PositiveInteger ::=INTEGER(0<..MAX)
PositiveInteger ::=INTEGER(1..MAX)
(4) 可用字元
只用於字串型別,限制字符集的取值範圍。
DigitString ::=IA5String(FROM(0)|(1)|(2)|(3)|(4)|(5)|
(6)|(7)|(8)|(9))
str2 DigitString ::= “46732”
(5) Inner Subtyping (內部型別)
適用於SEQUENCE,SEQUENCE OF,SET,SET OF和CHOICE類,主要用於對
這些結構型別的元素項進行限制。
e.g. PDU::=set{ alpha [0] INTEGER,
beta
[1] IA5striong OPTIONAL,
gamma [2] SEQUENCE OF parameter,
delta
[3] BOOLEAN }
TestPDU::=PDU(WITH COMPONENTS{alpha(min..<0),...,delta(FALSE)})
(6) 包含子型別
要用到關鍵字INCLUDES,說明被定義的新子型別包含原子型別的全部可能值。
e.g. Months::=ENUMERATED{jaunary(1),february(2),...,december(12)}
First-quarter::=Months(january,february,march);
Second-quarter::=Months(april,may,june)
First-half::=Months (INCLUDES First-quarter|INCLUDE Second-quarter)
jan First-quarter ::= 1
4.2.5 應用型別
ASN.1中的應用型別與特定的應用有關,根據網路管理的實際特點,
RFC1155定義了6種SNMP應用型別。
(1) NetworkAddress::=CHOICE{internet IpAddress} --可從各種網路地
址中選擇一種,目前只有Internet地址,即IP地址。
(2) IpAddress::=[APPLICATION 0] IMPLICIT OCTET STRING(SIZE(4))
(3) Counter::= [APPLICATION 1] IMPLICIT INTEGER(0..4294967295)
(4) Gauge::=[APPLICATION 2] IMPLICIT INTEGER(0..4294967295)
(5) TimeTicks::=[APPLICATION 3] IMPLICIT INTEGER(0..4294967295)
(6) Opaque::= [APPLICATION 4] OCTET STRING --arbitrary ASN.1
value 不透明型別
4.3 基本編碼規則
用ASN.1語言書寫的變數必須轉換為序列的位元組流才能在網路中傳輸。為此,
ASN.1又提供了基本編碼規則(BER)來描述傳輸過程中內容的表示。
約定


八位位組:八位元組成
八位位組的二進位制位編號從8到1,第8位為最高有效位,第1位位最低有效位
編碼結構
標籤八位位組
長度八位位組
 標籤(tag)欄位:關於標籤類別和編碼格式的資訊。
 長度(Length)欄位:定義內容欄位的長度。
 值(Value)欄位:包含實際的資料 。
內容八位位組
1. 標籤欄位
標籤欄位對標籤類別、標籤號和編碼格式進行編碼。
8
7
標籤類別
6
5
4
P/C
1 1 1 1 1
2
1
標籤號
P/C
前導八位位組
類別
3
後繼八位位組
1
1
+
1
+
0
+
= 標籤號
e.g. UNIVERSAL 10 編碼:00 0 01010
APPLICATION 35 (構造型別) 編碼:01 1 11111 0 0 100011
2. 長度欄位
用來表示值欄位的八位位組數。
確定格式。(編碼時知道長度;長格式和短格式)
長度欄位分類
不確定格式。
規則如下:
 若編碼是簡單型別,則使用確定格式;
若編碼是構造的,並且編碼立即可用,既可以使用確定格式,也可以使用不

相關推薦

ASN.1語法

Chapter 4 ASN.1 《Network management : principles and practice》 4.1 網路資料表示及編碼 4.2 ASN.1的基本概念 4.3 基本編碼規則 4.1 網路資料表示及編碼

Hadoop Hive sql語法1-認識hive及DDL操作

轉載自:http://www.aboutyun.com/thread-7324-1-1.html 1.認識hive:Hive 是基於Hadoop 構建的一套資料倉庫分析系統,它提供了豐富的SQL查詢方式來分析儲存在Hadoop 分散式檔案系統中的資料,可以將結構化的資料檔

008-Hadoop Hive sql語法3-DML 操作:元數據存儲

pan 查詢 寫入 所有 not insert語句 int 寫入文件 文件系統 一、概述 hive不支持用insert語句一條一條的進行插入操作,也不支持update操作。數據是以load的方式加載到建立好的表中。數據一旦導入就不可以修改。 DML包括:INSERT插入

Oracle create tablespace 創建表空間語法

系統回滾段 語法 判斷 臨時 extent 數值 off offline 文件的 CREATE [UNDO] TABLESPACE tablespace_name [DATAFILE datefile_spec1 [,datefile_spec2] ..

mysql-5.7.9 shutdown 語法

resp 登錄 ive conn denied 權限不足 這樣的 fec comm mysql-5.7.9 終於提供shutdown 語法啦:   之前如果想關閉一個mysql數據庫可以通過kill 命令、mysqladmin shutdown 、service mysql

[持續交付實踐] pipeline:pipeline 使用之語法

安裝工具 詳細 href 3.0 def 實現 能夠 action roo 一、引言 jenkins pipeline語法的發展如此之快用日新月異來形容也不為過,而目前國內對jenkins pipeline關註的人還非常少,相關的文章更是稀少,唯一看到w3c有篇相關的估計是

content = "IE=edge,chrome=1"

serve 原來 做了 微軟 coo started 頭文件 env 服務 < meta http-equiv = "X-UA-Compatible" content = "IE=edge,chrome=1" /> 這是個是IE8的專用標記,用來指定IE8瀏覽

Nginx Rewrite語法

服務器端 .html use rgs args port 資源 如果 urn 重寫中用到的指令 if (條件) {} 設定條件,再進行重寫 set #設置變量 return #返回狀態碼 break #跳出rewrite rewrite #重寫 If 語法格式 If

017-Hadoop Hive sql語法7-去重排序、數據傾斜

col 去重排序 sel cluster 可能 更多 分發 指定 clust 一、數據去重排序 1.1、去重   distinct與group by   盡量避免使用distinct進行排重,特別是大表操作,用group by代替   -- 不建議 selec

016-Hadoop Hive sql語法6-job輸入輸出優化、數據剪裁、減少job數、動態分區

分享 hive table 取數 nbsp put union 正在 style 一、job輸入輸出優化 善用muti-insert、union all,不同表的union all相當於multiple inputs,同一個表的union all,相當map一次輸出多條

(4)Smali系列學習之Smali語法內部類

這一 數字 學習 get 私有方法 如果 單獨 hello 我們 在這一節,我們來介紹一下內部類。對於Java文件中的每一個內部類,都會產生一個單獨的smali文件,比如ActivityThread$1.smali。這些文件的命名規範是如果是匿名內部類,則命名規則是外部類+

Shodan的http.favicon.hash語法

簡單 tar 地址 字段 就是 mpi 舉例 數值 sts   在Shodan搜索中有一個關於網站icon圖標的搜索語法,http.favicon.hash,我們可以使用這個語法來搜索出使用了同一icon圖標的網站,不知道怎麽用的朋友請參考我上一篇文章。   通過上一篇文章

Android.mk 文件語法

too itl 其他 國內 fine 鏈接 sina 流程詳解 img Android.mk 文件語法詳解 轉:http://blog.sina.com.cn/s/blog_602f8770010148ce.html =========================

Jenkins pipeline 語法

數列 自定義 為什麽 box catcher k8s fork dom choice 原文地址http://www.cnblogs.com/fengjian2016/p/8227532.html pipeline 是一套運行於jenkins上的工作流框架,將原本獨立運行於單

使用vs code編寫Markdown文檔以及markdown語法

技術 代碼塊 想要 空行 圖片 action show div 語言 目錄 首先安裝vscode工具,下載地址如下: https://code.visualstudio.com/ 在vs code的擴展中安裝: Markdown Preview Enhanced 這款

Javascript 陣列語法

JavaScript 中的陣列相當於 Java 中的 Map ,陣列本身是一個物件,屬於引用資料型別 更多精彩 更多技術部落格,請移步 asing1elife’s blog 定義 既然陣列是一個物件,當進行 alert(arr) 時

Linux裝置樹語法【轉】

轉自:https://www.cnblogs.com/xiaojiang1025/p/6131381.html 概念 Linux核心從3.x開始引入裝置樹的概念,用於實現驅動程式碼與裝置資訊相分離。在裝置樹出現以前,所有關於裝置的具體資訊都要寫在驅動裡,一旦外圍裝置變化,驅動程式碼就要重寫。引入了裝置樹之

nohup /dev/null 2>&1 含義

nohup命令:如果你正在執行一個程序,而且你覺得在退出帳戶時該程序還不會結束,那麼可以使用nohup命令。該命令可以在你退出帳戶/關閉終端之後繼續執行相應的程序。nohup就是不掛起的意思( n ohang up)。 該命令的一般形式為:nohup command & ls xxx

Hibernate學習之hql 與sql hql 語法

Hibernate中查詢:     createQuery( String qlString)使用的是HQL語句;     createNativeQuery (String sqlString)使用的是SQL語句;   關係HQL與SQL區別:    hql 語法詳解:   

iptables(1)工具

一、 iptables 檢視連結串列,建立連結串列,類命令     1. iptables [-t table] -N chain : 建立一條自定義規則的鏈  1