第二章 抽象語法表示_第1頁
第二章 抽象語法表示_第2頁
第二章 抽象語法表示_第3頁
第二章 抽象語法表示_第4頁
第二章 抽象語法表示_第5頁
已閱讀5頁,還剩65頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡介

1、抽象語法表示ASN.1 Abstract Syntax Notation(ASN.1)是一種形式語言形式語言 提供統(tǒng)一的網(wǎng)絡(luò)數(shù)據(jù)表示,用于定義應(yīng)用數(shù)據(jù)的抽象語法和應(yīng)用協(xié)議數(shù)據(jù)單元的結(jié)構(gòu)。 OSI或SNMP管理信息庫,都是用ASN.1定義的?;揪幋a規(guī)則BER Basic Encoding Rule(BER)是一種編碼規(guī)則編碼規(guī)則 用ASN.1定義的應(yīng)用數(shù)據(jù)在傳送過程中按照BER變換成比特串。表示層的功能是提供統(tǒng)一的網(wǎng)絡(luò)數(shù)據(jù)表示在互相通信的端系統(tǒng)中至少有一個(gè)應(yīng)用實(shí)體(如SNMP、TELNET、FTP等)和一個(gè)表示實(shí)體(即ASN.1)。表示實(shí)體定義了應(yīng)用數(shù)據(jù)的抽象語法。應(yīng)用協(xié)議按照預(yù)先定義的抽象語

2、法構(gòu)造協(xié)議數(shù)據(jù)單元,用于交換信息。表示實(shí)體則對應(yīng)用層數(shù)據(jù)進(jìn)行編碼,將其轉(zhuǎn)換成二進(jìn)制的比特串進(jìn)行傳送。圖2-1 關(guān)于信息表示的通信系統(tǒng)模型抽象語法獨(dú)立于任何編碼技術(shù)。抽象語法要滿足應(yīng)用的需要,能夠定義應(yīng)用需要的數(shù)據(jù)類型和表示這些類型的值。ASN.1是根據(jù)當(dāng)前網(wǎng)絡(luò)應(yīng)用的需求制定的標(biāo)準(zhǔn)。同等表示實(shí)體之間通信時(shí)對用戶信息的描述和編碼規(guī)則稱為傳輸語法。傳輸語法與抽象語法之間是多-多對應(yīng)關(guān)系。對傳輸語法的要求是支持對應(yīng)的抽象語法。ASN.1是由原CCITT和ISO共同開發(fā)的標(biāo)準(zhǔn)語言,可在系統(tǒng)間進(jìn)行數(shù)據(jù)的傳輸。在ASN.1中定義所需的數(shù)據(jù)結(jié)構(gòu)類型,并將它們組成庫。表示層可以實(shí)現(xiàn)從通信線路上所用的外部數(shù)據(jù)格式

3、到接收計(jì)算機(jī)所用的內(nèi)部數(shù)據(jù)格式的轉(zhuǎn)換。當(dāng)一個(gè)應(yīng)用想發(fā)送一個(gè)數(shù)據(jù)結(jié)構(gòu)時(shí),可以將數(shù)據(jù)結(jié)構(gòu)與其對應(yīng)的ASN.1標(biāo)識一起傳給表示層。以ASN.1定義作為索引,表示層便知道數(shù)據(jù)結(jié)構(gòu)的域的類型及大小,從而對它們編碼傳輸。在另一端,接收表示層查看此數(shù)據(jù)結(jié)構(gòu)的ASN.1 標(biāo)識,從而了解數(shù)據(jù)結(jié)構(gòu)的域的類型及大小。抽象語法與一個(gè)能對其進(jìn)行編碼的傳輸語法的組合,就構(gòu)成一個(gè)表示上下文表示上下文。表示上下文可以在連接建立時(shí)協(xié)商確定,也可以在通信過程中重新定義。ASN.1的文本約定 (1)多個(gè)空格和空行等效于一個(gè)空格。 (2)用于表示值和字段的標(biāo)識符、類型指針和模塊名由大小寫字母、數(shù)字和短線組成。 (3)標(biāo)識符以小寫字母

4、開頭。 (4)類型指針和模塊名以大寫字母開頭。 (5)ASN.1定義的內(nèi)部類型全部用大寫字母表示。 (6)關(guān)鍵字全部用大寫字母表示。 (7)注釋以一對短線(-)開始,以一對短線或行尾結(jié)束。在ASN.1中,每一個(gè)數(shù)據(jù)類型都有一個(gè)標(biāo)簽(tag)標(biāo)簽有類型和值類型和值,數(shù)據(jù)類型由標(biāo)簽的類型和值唯一確定。標(biāo)簽的類型分為以下4種: 通用標(biāo)簽:UNIVERSAL表示,由標(biāo)準(zhǔn)定義的。 應(yīng)用標(biāo)簽:APPLICATION表示,是由某個(gè)具體應(yīng)用定義的類型。 上下文專用標(biāo)簽:Context-Specific表示,這種標(biāo)簽在一定范圍)中適用。 私有標(biāo)簽:PRIVATE表示,用戶定義的標(biāo)簽。ANSI.1定義的數(shù)據(jù)類型有

5、20多種,標(biāo)簽類型都是UNIVERSAL,如表2-3所示。可分為4大類。 簡單類型:由單一成分構(gòu)成的原子類型,包括INTEGER,BOOLEAN,. 構(gòu)造類型:由兩種以上成分構(gòu)成的構(gòu)造類型,包括SEQUENCE,SEQUENCE OF,. 標(biāo)簽類型:由已知類型定義的新類型。 其他類型:包括CHOICE和ANY兩種類型。1簡單類型 (1)INTEGER。 例2.1Number :=INTEGER (2)BOOLEAN。 例2.2 Married :=BOOLEAN (3)REAL,實(shí)數(shù)類型,對精度沒有限制,可以表示為科學(xué)計(jì)數(shù)法:MBE,其中尾數(shù)M和指數(shù)E可以取任何正或負(fù)整數(shù)值,基數(shù)B可以取2或1

6、0。 (4)ENUMERATED,枚舉類型,實(shí)際上是一組個(gè)數(shù)有限的整數(shù)值??梢越o每個(gè)整型值賦予不同的意義。 例2.3Week :=ENUMERATED Monday (1), Tuesday (2), Wednesday (3), Thursday (4), Friday (5), Saturday (6), Sunday (7) 例2.4 對于SNMP的MIB中,在獲取響應(yīng)信息中的錯(cuò)誤狀態(tài)如下所示。 ErrorStatus:= ENUMERATED noError (0), tooBig (1), noSuchname (2), badValues (3), readOnly (4), ge

7、nError (5) (5)BIT STRING,位串類型,由0個(gè)或多個(gè)比特組成的有序位串。位串的值可以由對應(yīng)的二進(jìn)制或十六進(jìn)制串表示。例如,10100010B或A2H都是位串類型的有效數(shù)值。 (6)OCTET STRING,八位位組串,由0個(gè)或多個(gè)8位位組組成的有序串。和位串類型一樣,八位位組串也可以用對應(yīng)的二進(jìn)制或十六進(jìn)制串表示。 (7 7)OBJECT IDENTIFIEROBJECT IDENTIFIER,對象標(biāo)識符,從對象樹派生出的一系列點(diǎn)分?jǐn)?shù)字串的形式,用來標(biāo)識對象。 在ASN.1中對象集合按照樹形結(jié)構(gòu)組織,樹的每個(gè)分支被賦予一個(gè)整數(shù)標(biāo)識。 對象標(biāo)識符是從根節(jié)點(diǎn)開始到對象節(jié)點(diǎn)路徑上

8、邊標(biāo)識的順序連接,它是對象的唯一標(biāo)識。 根節(jié)點(diǎn)以下有3個(gè)節(jié)點(diǎn),分別是ccitt(0),iso(1),joint-iso-ccitt(2),它們向下又可細(xì)分,如iso的子節(jié)點(diǎn)包括standard(0),registration-authority(1),member-body(2),org(3)。 其中org(3)下面的子節(jié)點(diǎn)internet就定義了最常使用的管理對象。 例2.5 internet OBJECT IDENTIFIER := iso(1) org(3) dod(6) 1 對象標(biāo)識符的值是 .dod.1 (8)NULL,空值類型,它僅包含一個(gè)值NULL,主

9、要用于位置的填充。如果某個(gè)時(shí)刻無法得知數(shù)據(jù)的準(zhǔn)確值,簡單的方法就是將這一數(shù)據(jù)定義為NULL類型。還可以用NULL表示序列中可能缺省的某個(gè)元素。 (9)CHARACTER STRING,字符串類型。ASN.1中定義了一些字符集不完全相同的CHARACTER STRING類型,不同類型包含的字符集不同。標(biāo)準(zhǔn)ASCII字符可以分為G集(圖形符號集,ASCII字符編號范圍是33126)和C集(控制符號集,ASCII字符編號范圍是031)??崭穹ň幪?2)和刪除符(編號127)同時(shí)屬于兩個(gè)符號集。2構(gòu)造類型 (1)SEQUENCE,序列類型,是包含0個(gè)或多個(gè)組成元素的有序列表。 列表的不同元素可以分屬

10、于不同不同的數(shù)據(jù)類型。每個(gè)元素由元素名和元素類型組成,元素類型可以是簡單類型,也可以是定義的其他構(gòu)造類型。 元素類型標(biāo)識符后可以跟OPTIONAL或DEFAULT。 OPTIONAL示在序列類型的實(shí)例中該元素項(xiàng)可選。 DEFAULT表示序列類型的實(shí)例中該元素具有事先指定的默認(rèn)值。 COMPONENTS OF表示它包含了給定序列中的所有組成元素。例2.6 AirlineFlight :=SEQUENCE airline IA5STRING, flight IA5STRING, seats SEQUENCE maximum INTEGER, occupied INTEGER, vacant INT

11、EGER, , airport SEQUENCE origin IA5STRING, stop0 IA5STRING OPTIONAL, stop1 IA5STRING OPTIONAL, destination IA5STRING , crewsize ENUMERTAED six (6), eight (8), ten (10), cancel BOOLEAN DEFAULT FALSE 它的一個(gè)實(shí)例是airplane1 AirlineFlight := airline china, flight C3416, seats 320 ,280,40, airport original Qin

12、gdao,stop0 TaiYuan,destination WuLuMuQi, crewsize 10 或airplane1 :=china, C3416, 320 ,280,40, original Qingdao,stop0 TaiYuan,destination WuLuMuQi,10 (2)SEQUENCE OF,單純序列(數(shù)組)類型,即序列中的各項(xiàng)都屬于同一類型,可以看作是SEQUENCE類型的特例。例2.7定義了座位號類型Seats,因?yàn)樽惶柖际钦麛?shù),所以可以使用單純序列類型。 例2.7Seats :=SEQUENCE OF INTEGER (3)SET,集合類型,是包含0個(gè)或

13、多個(gè)組成元素的無序集合。這些元素的順序無任何意義,但是它們之間必須是不相同的,組成元素的類型可以為不同的ASN.1類型。 例2.8 Student :=SET number INTEGER, name IA5STRING, age INTEGER, gender ENUMBERTED male(0), female(1), major IA5STRING 20040320,LiYong,19,0,Network Engine, 20040720,WangHua,20,1,Computer Application,它們都屬于Student類型的同一個(gè)實(shí)例。 (4)SET OF,單純集合類型,是包

14、含0個(gè)或多個(gè)組成元素的無序集合,同單純序列類型類似,這些組成元素必須為相同的ASN.1類型。 例2.9 VipSeats :=SET OF INTEGER vipseats VipSeats :=60,80,1203標(biāo)簽類型 標(biāo)簽類型由一個(gè)標(biāo)簽類(class)和一個(gè)標(biāo)簽號(class number)組成。 標(biāo)簽類型有4種:通用類(UNIVERSAL),應(yīng)用類(APPLICATION),私有類(PRIVATE)和上下文無關(guān)類(CONTEX-SPECIFIC)。3標(biāo)簽類型 通用類標(biāo)簽是ASN.1標(biāo)準(zhǔn)定義的,除了CHOICE和ANY類型之外,所有的簡單類型和結(jié)構(gòu)類型都具有統(tǒng)一分配的唯一標(biāo)簽。 加標(biāo)簽

15、后的類型實(shí)質(zhì)上是一個(gè)新的類型,它和原來的類型在結(jié)構(gòu)上是一樣的,但是是不同的類型,舉例如下。 例2.10 Number := UNIVERSAL 2INTEGER valA Number:=2006034其他類型 CHOICE和ANY是兩個(gè)沒有標(biāo)簽的類型,因?yàn)樗鼈兊闹凳俏炊ǖ?,而且類型也是未定的。?dāng)這種類型的變量被賦值時(shí),它們的類型和標(biāo)簽才能確定。 (1)CHOICE,選擇類型,包含一個(gè)可供選擇的數(shù)據(jù)類型列表。CHOICE類型的每個(gè)值都是其中某一數(shù)據(jù)類型的值。數(shù)據(jù)可能在不同情況下取不同的值,若這些可能的類型能夠在事先都知道,那么就可以使用CHOICE類型。4其他類型 例2.11 Prize :=

16、 CHOICE car IA5STRING, cash INTEGER, nothing BOOLEAN 由于獎(jiǎng)項(xiàng)的種類是可以預(yù)知的,分別為nothing TRUE,car“Lincoln”和cash 25000。 (2)ANY,和選擇類型具有確定的數(shù)據(jù)類型選擇范圍不同,若在定義數(shù)據(jù)時(shí)不能確定數(shù)據(jù)的類型,可以使用ANY類型。 例2.12 Book:=SEQUENCE author IA5STRING, reference ANY author Martin ,reference IA5STRING ISBN007895和 author Martin, reference INTEGER 199

17、8 都是Book的正確實(shí)例。子類型是由限制父類型的值限制父類型的值集合而導(dǎo)出的類型,所以子類型的值集合是父類型的子集。子類型還可以產(chǎn)生子類型,產(chǎn)生子類型的方法有以下6種。 1單個(gè)值(Single Value) 列出子類型可取的各個(gè)值。例如, TestResule:=INTEGER(0|1|2) 表示TestResult可以取0、1或2中的一個(gè)值。 2值區(qū)間(Value Range) 這種方法只能用于整數(shù)和實(shí)數(shù),指出子類型可取的區(qū)間。例如, EmployeeNumber:=INTEGER(1000.20000) 表示該變量取整數(shù)值,范圍為100020000。 3允許字符(Permitted Al

18、phabet) 允許字符只能用于字符串類型,限制字符集的取值范圍 House Size:= IA5STRING(FROM(“0” | “1” | “2” | “3” | “4” | “5” | “6” | “7” | “8” | “9”)SIZE(5) 表示該變量可取的值是5個(gè)數(shù)字組成的字符串。 4限制大?。⊿ize Constrained) 可以限制5種類型(BIT STRING,OCTET STRING,CHARACTER STRING,SEQUENCE OF,SET OF)的規(guī)模大小。例如, WorkstationNumber:=OCTET STRING(SIZE(32) 表示該變量的值

19、為32個(gè)字節(jié)的串。 5包含子類型(Contained Subtype) 從已有的子類型定義新的子類型,新子類型包含原子類型的全部可能的值。用關(guān)鍵字INCLUDES,說明被定義的類型包含了已有類型的所有的值。例如, Months:=ENUMERATEDJanuary (1),F(xiàn)ebruary (2),March(3),April(4),May(5),June(6),July(6),August(8),September(9),October(10),November(11),December(12) First-quarter:=Months(January,F(xiàn)ebruary,March) Se

20、cond-quarter:=Months(April,May,June) First-half:=Months(INCLUDES First-quarter | INCLUDES Second-quarter) 6內(nèi)部子類型(Inner Subtype) 適用于SEQUENCE,SEQUENCE OF,SET,SET OF和CHOICE類型,主要用于對這些結(jié)構(gòu)類型的元素項(xiàng)進(jìn)行限制。例如,下面定義的協(xié)議數(shù)據(jù)單元(PDU)類型。 PDU:=SET alpha 0 INTEGER, Beta 1 IA5STRING OPTIONAL, Gamma 2 SEQUENCE OF parameter, D

21、elta 3 BOOLEAN i8 6內(nèi)部子類型(Inner Subtype) 適用于SEQUENCE,SEQUENCE OF,SET,SET OF和CHOICE類型,主要用于對這些結(jié)構(gòu)類型的元素項(xiàng)進(jìn)行限制。例如,下面定義的協(xié)議數(shù)據(jù)單元(PDU)類型。 PDU:=SET alpha 0 INTEGER, Beta 1 IA5STRING OPTIONAL, Gamma 2 SEQUENCE OF parameter, Delta 3 BOOLEAN i8ASN.1中的應(yīng)用類型與特定的應(yīng)用有關(guān)。對于SNMP,RFC1155定義了以下應(yīng)用類型。 1NetWorkAddress:=CHOICE in

22、ternet IpAddress 這種類型用ASN.1的CHOICE構(gòu)造定義,可以從各種網(wǎng)絡(luò)地址中選擇一種。目前只有Internet 地址,即IP地址。 2IpAddress:=APPLICATION 0 IMPLICIT OCTET STRING(SIZE(4) 以網(wǎng)絡(luò)序表示的IP地址。因?yàn)樗且粋€(gè)32位的值,所以定義為4個(gè)字節(jié)。 3Counter:=APPLICATION 1 IMPLICIT INTEGER(0.4294977295) 計(jì)數(shù)器類型是一個(gè)非負(fù)整數(shù),其值可增加,但不能減少,達(dá)到最大值2321后回零,再從頭開始增加。計(jì)數(shù)器可用于計(jì)算收到的分組數(shù)或字節(jié)數(shù)。 4Gauge:=APP

23、LICATION 2 INTEGER(0.4294977295) 計(jì)量器類型是一個(gè)非負(fù)整數(shù),其值可增加,也可減少。最大值為2321,與計(jì)數(shù)器不同的是計(jì)量器達(dá)到最大值后不回零,而是鎖定在2321,直到復(fù)位,計(jì)量器可用于表示存儲在緩沖隊(duì)列中的分組數(shù)。 5TimeTicks:=APPLICATION 3 INTEGER(0.4294977295) 時(shí)鐘類型是非負(fù)整數(shù),從12321,時(shí)鐘單位以0.01s遞增,可表示從某個(gè)事件(如設(shè)備啟動(dòng))開始到目前經(jīng)過的時(shí)間。 6Opaque:=APPLICATION 4 OCTET STRING 不透明類型即未知數(shù)據(jù)類型,或者說可以表示任意類型。這種數(shù)據(jù)編碼時(shí)按照O

24、CTET STRING處理,管理站和代理能解釋這種類型。用ASN.1表示的變量必須轉(zhuǎn)換為串行的字節(jié)流才能在網(wǎng)絡(luò)中傳輸。基本編碼規(guī)則(Basic Encoding Rules,BER):轉(zhuǎn)換文本ASN.1語法到機(jī)讀代碼的算法ASN.1用BER來描述傳輸過程中內(nèi)容BER在ISO 8825/X標(biāo)準(zhǔn)中進(jìn)行了定義。ER傳輸語法的格式是TLV三元組。 標(biāo)簽(Tag)字段是關(guān)于標(biāo)簽類別和編碼格式的信息; 長度(Length)字段表示值(Value)字段的數(shù)據(jù)長度 值(Value)字段包含實(shí)際的數(shù)據(jù)。圖2-2 BER編碼的結(jié)構(gòu)BER傳輸語法是基于八位組(由8比特組成,是編碼的基本單位)大端編碼的其八位組中的二

25、進(jìn)制編號從8到1,高8位在左,約定第8位是最高有效位,第1位是最低有效位。圖2-3 BER編碼的結(jié)構(gòu)圖2-4 標(biāo)簽字段的結(jié)構(gòu)圖2-5 標(biāo)簽字段2長度字段 BER編碼中Length表示Value部分所占八位組的個(gè)數(shù) 格式主要有兩大類:確定格式和不確定格式 在確定格式中又分為短、長兩種格式。 采用確定格式,當(dāng)長度不大于127時(shí),Length只在一個(gè)八位組中編碼;當(dāng)長度大于127時(shí),在多個(gè)八位組中編碼,此時(shí)第一個(gè)八位組低七位表示的是Length所占的長度,后續(xù)八位組表示Value的長度。 采用不確定格式時(shí),Length所在八位組固定編碼為0 x80,在Value后以兩個(gè)0 x00結(jié)尾??梢栽诰幋a沒有

26、完全結(jié)束的情況下,可以先發(fā)送部分消息給對方。 編碼規(guī)則: (1)若編碼是簡單類型,則使用確定格式。 短格式:長度字段僅一個(gè)八位組,最高位為0。 長格式:長度字段包含多個(gè)八位組,第1個(gè)字節(jié)最高位為1,其余7位表示后面有多少字節(jié)來表示值字段的長度。例如,25510可表示為10000001 11111111 (2)若編碼是構(gòu)造類型,并且編碼立即可用,則既可以使用確定格式,也可以使用非確定格式,由發(fā)送者選擇。 (3)若編碼是構(gòu)造類型,但編碼不是立即可用,則使用非確定格式。3值字段 內(nèi)容字段由0個(gè)或多個(gè)八位組組成,并根據(jù)不同類型數(shù)據(jù)值的不同規(guī)定對它們進(jìn)行編碼。以UNIVERSAL Tag和短型Value

27、為例,介紹各種類型的BER編碼,重點(diǎn)關(guān)注Value部分。1BOOLEAN 布爾值的編碼是簡單類型,其值由1個(gè)八位組組成。 FALSE的編碼是01 01 00;TRUE的編碼是 01 01 FF。其中第一個(gè)字節(jié)表示布爾類型的標(biāo)簽(UNIVERSAL 1) 第二個(gè)字節(jié)表示值部分的長度為1個(gè)字節(jié) 第三個(gè)字節(jié)表示布爾值。2NULL 空值的編碼是簡單類型。不需要使用值八位組,相應(yīng)的長度值0??罩档臉?biāo)簽是UNIVERSAL 5,所以編碼為05 003INTEGER 整數(shù)值的編碼是簡單類型,其值由1個(gè)或多個(gè)八位組組成。 整數(shù)值采用二進(jìn)制補(bǔ)碼形式編碼。 補(bǔ)碼從高位到低位排列在值的第一字節(jié)的第8位到第1位,第二

28、字節(jié)的第8位到第1位,以下按順序類推。 編碼取需要的最小字節(jié)數(shù),因此不可能出現(xiàn)第一字節(jié)的所有位和第二字節(jié)的第8位全0或全1的情況。 對于正數(shù),如果最高比特位為0則直接編碼; 如果為1,則在最高比特位之前增加一個(gè)全0的八位組; 對于負(fù)數(shù),先取絕對值,再取反,最后加1。 例如,0的編碼02 01 00;127的編碼 02 01 7F。其中第一個(gè)字節(jié)表示整數(shù)類型的標(biāo)簽(UNIVERSAL 2),第二個(gè)字節(jié)表示值部分的長度為1個(gè)字節(jié)。 128的編碼02 02 00 80;256的編碼02 02 01 00。其中第一個(gè)字節(jié)表示整數(shù)類型的標(biāo)簽(UNIVERSAL 2),第二個(gè)字節(jié)表示值部分的長度為2個(gè)字節(jié)

29、,第三個(gè)字節(jié)和第四個(gè)字節(jié)表示值的大小。 128的編碼 02 01 80;129的編碼02 02 FF 7F。圖2-7所示為127、256、129的BER編碼。4.REAL 實(shí)數(shù)值的編碼是簡單類型,其值由1個(gè)或多個(gè)八位位組組成。 如果實(shí)數(shù)值為0,則不需要使用值八位位組,相應(yīng)長度值為0,則編碼為09 00。如果實(shí)數(shù)值不為0,則使用“B”作為編碼的基?;梢杂砂l(fā)送者選擇。如果“B”是2,8或16,則選擇二進(jìn)制編碼;如果“B”是10,則選擇字符編碼。 采用二進(jìn)制編碼時(shí),分為尾數(shù)編碼和指數(shù)編碼兩部分4.REAL 尾數(shù)編碼的部分信息和指數(shù)編碼的長度由第一個(gè)值八位組指定,后面接著是指數(shù)編碼字段,剩余的值字段

30、是尾數(shù)編碼的其他部分。如果尾數(shù)不為0,那么它由符號S、非負(fù)整數(shù)值B和二進(jìn)制比例因子F來表示,即M = S B 2F,0F4,S = 1。 S由第一個(gè)值八位組的位7表示,S = 1則位7等于1,否則位7等于0。位6和位5 根據(jù)基數(shù)B進(jìn)行編碼?;鶖?shù)為2,編碼為00;基數(shù)為8,編碼為11,基數(shù)為16,編碼為10。位4和位3是比例因子的無符號二進(jìn)制表示。位2和位1對指數(shù)編碼的形式,如表2-5所示。4.REAL 值字段的剩余部分將整數(shù)值N編碼成無符號二進(jìn)制。 當(dāng)使用十進(jìn)制編碼(位8和位7等于00)時(shí),按ISO 6093的規(guī)定進(jìn)行編碼。其中第一個(gè)值八位組的位6到位1規(guī)定使用ISO 6093的何種編碼形式,

31、如表2-6所示。4.REAL 當(dāng)對特別實(shí)數(shù)值進(jìn)行編碼(位8和位7等于01)時(shí),只需要一個(gè)值八位組即可。特別實(shí)數(shù)值是指正無窮(PLUS-INFINITY)和負(fù)無窮(MINUS-INFINITY),它們的編碼如表2-7所示。5BIT STRING 位串值的編碼可以是簡單類型,也可以是構(gòu)造類型。 簡單編碼的值八位組包含一個(gè)初始八位組,取值為0到7,表征這個(gè)值最后補(bǔ)位的個(gè)數(shù)。由發(fā)送方?jīng)Q定補(bǔ)位采用0還是1。后面跟0個(gè)、1個(gè)或多個(gè)后繼八位組。位串的第一位置于第一個(gè)后繼八位組的第8位,以下順序類推 構(gòu)造編碼的值八位組由0個(gè)、1個(gè)或多個(gè)數(shù)據(jù)值的完整編碼組成。每個(gè)這樣的編碼都包括標(biāo)識、長度和值字段。每個(gè)數(shù)據(jù)值的

32、編碼通常采用簡單編碼。5BIT STRING 采用構(gòu)造編碼則為:23 80 03 03 000A3B 03 05 045F291CD0 將位串值拆為(0A3B)和(5F291CD)兩部分,如圖2-10所示。6OCTET STRING 字節(jié)串值的編碼與BIT STRING類似,但是不需要增加表征補(bǔ)充位個(gè)數(shù)的八位組。例如,字節(jié)串ACE可編碼為04 02 AC E0,而字符串“ACE”編碼為16 03 414345,如圖2-11所示。7OBJECT IDENTIFIER 對象標(biāo)識符值的編碼是簡單類型,值八位組是互相連接的子標(biāo)識符編碼的表。每個(gè)子標(biāo)識符標(biāo)識為一個(gè)或多個(gè)八位組。每個(gè)八位組的第8位指示它是

33、否是該系列的最后一個(gè),最后八位組的第8位為0,其他八位組的第8位為1,第1至7位組合起來作子標(biāo)識符的編碼。 第一個(gè)編碼子標(biāo)識符的數(shù)值從被編碼的對象標(biāo)識符值中的前兩個(gè)子標(biāo)識符值得出,使用公式:(X 40) + Y。其中X和Y是前兩個(gè)子標(biāo)識符的值。因此,編碼子標(biāo)識符數(shù)比實(shí)際對象全部字標(biāo)識符數(shù)少1。7OBJECT IDENTIFIER 對象標(biāo)識符 joint-iso-ccitt 100 3,即 2 100 3,計(jì)算得到2 40 + 100 = 180,因此按照180 3編碼為:06 03 813403H。其中第一個(gè)字節(jié)表示對象標(biāo)識符類型的標(biāo)簽(UNIVERSAL 6),第二個(gè)字節(jié)表示值部分的長度為3

34、個(gè)字節(jié)。該對象標(biāo)識符的BER編碼如圖2-12所示。8SEQUENCE 序列值的編碼是構(gòu)造類型。值八位組由序列類型ASN.1定義中列出的每個(gè)類型的一個(gè)數(shù)據(jù)值得完整編碼組成,除非該類型帶有關(guān)鍵字“OPTIONAL”或“DEFAULT”,否則這些值的編碼可以不出現(xiàn)。例如,序列類型name IA5String ok BOOLEAN,值name “john” ,ok TRUE,可以編碼為:30 0A16 05 73 6D 69 74 68 01 01 FF。 按照序列結(jié)構(gòu)可以展開為9SET 與SEQUENCE類似,但是由于集合類型的元素是無序的,故有多種編碼,成員順序由發(fā)送者決定。 例如,SETbreadt

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論