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

下載本文檔

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

文檔簡(jiǎn)介

第二章抽象語法表示抽象語法表示ASN.1AbstractSyntaxNotation(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ī)則BERBasicEncodingRule(BER)是一種編碼規(guī)則用ASN.1定義的應(yīng)用數(shù)據(jù)在傳送過程中按照BER變換成比特串。本章內(nèi)容數(shù)據(jù)的表示數(shù)據(jù)具有語法和語義兩個(gè)方面語法:指數(shù)據(jù)的表示形式,或者說構(gòu)成數(shù)據(jù)的規(guī)則。語義:指數(shù)據(jù)的內(nèi)容及其含義。同樣的語義有不同的語法表示數(shù)據(jù)的表示確定要表示信息的數(shù)據(jù)類型。對(duì)于不同類型的數(shù)據(jù)定義不同的操作。任何類型的數(shù)據(jù)最終都將被表示成為比特序列。比特序列不能說明它自身表示哪一種類型的數(shù)據(jù),它所代表的意義會(huì)因計(jì)算機(jī)體系結(jié)構(gòu)、程序設(shè)計(jì)語言等因素的不同而不同。不同計(jì)算機(jī)系統(tǒng)的數(shù)據(jù)表示網(wǎng)絡(luò)中不同類型的計(jì)算機(jī)交互通信時(shí),采用的“語法”不同,這種差異決定了同一數(shù)據(jù)對(duì)象在不同計(jì)算機(jī)中被表示為不同的比特序列。test.x=258;test.code=‘a(chǎn)’a0000000100000011a0000001100000001test.codetest.xtest.codetest.xhost1formathost2format需要統(tǒng)一的網(wǎng)絡(luò)數(shù)據(jù)表示格式為了保證同一數(shù)據(jù)對(duì)象在不同計(jì)算機(jī)中語義的正確性,實(shí)現(xiàn)在不同應(yīng)用系統(tǒng)之間的信息交換。對(duì)于網(wǎng)絡(luò)中n個(gè)異體的節(jié)點(diǎn)能互通,我們需要為每個(gè)節(jié)點(diǎn)編寫(n-1)個(gè)編解碼程序,即需要總數(shù)為n*(n-1)個(gè)編解碼程序。ASN.1的作用是提供統(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ù)先定義的抽象語法構(gòu)造協(xié)議數(shù)據(jù)單元,用于交換信息。表示實(shí)體則對(duì)應(yīng)用層數(shù)據(jù)進(jìn)行編碼,將其轉(zhuǎn)換成二進(jìn)制的比特串進(jìn)行傳送。2.1網(wǎng)絡(luò)數(shù)據(jù)表示2.1網(wǎng)絡(luò)數(shù)據(jù)表示圖2-1關(guān)于信息表示的通信系統(tǒng)模型表示層的基本概念實(shí)際語法(ConcreteSyntax):本地的,并且定義本地系統(tǒng)的數(shù)據(jù)表示方法。抽象語法(AbstractSyntax):定義了數(shù)據(jù)的常用結(jié)構(gòu)(包括不同的數(shù)據(jù)類型),獨(dú)立于任何編碼技術(shù)的,只與應(yīng)用有關(guān)。傳輸語法(TransferSyntax):提供從抽象語法表示的數(shù)據(jù)到比特序列,以及其相反操作的方法。編碼規(guī)則(EncodingRule):提供了如何將抽象語法映射為傳輸語法。語法三元組:實(shí)際語法、抽象語法、傳輸語法抽象語法獨(dú)立于任何編碼技術(shù),要滿足應(yīng)用的需要,能夠定義應(yīng)用需要的數(shù)據(jù)類型和表示這些類型的值。同等表示實(shí)體之間通信時(shí)對(duì)用戶信息的描述和編碼規(guī)則稱為傳輸語法。抽象語法標(biāo)記ASN.1的作用ASN.1規(guī)范抽象語法表示應(yīng)用一種編碼規(guī)則BER(基本編碼規(guī)則)CER(規(guī)范編碼規(guī)則)傳輸語法多對(duì)多關(guān)系A(chǔ)SN.1用于領(lǐng)域ASN.1已經(jīng)應(yīng)用到的通信協(xié)議與科學(xué)領(lǐng)域包括:通信領(lǐng)域,包括3GPP、4G移動(dòng)通信智能交通系統(tǒng)ITS網(wǎng)絡(luò)語音通信技術(shù)VoIP多媒體傳輸?shù)臉?biāo)準(zhǔn)安全相關(guān)系統(tǒng),包括智能卡,電子商務(wù)中的身份確認(rèn)卡等嵌入式系統(tǒng)的通信應(yīng)用空中交通管制以及近年其他領(lǐng)域很多的應(yīng)用。ASN.1是由原CCITT和ISO共同開發(fā)的標(biāo)準(zhǔn)語由ISO8824/ITU-TX.208定義一種數(shù)據(jù)類型描述語言獨(dú)立于計(jì)算機(jī)架構(gòu)和語言可容易地映射成C或C++或Java的數(shù)據(jù)結(jié)構(gòu)與多個(gè)標(biāo)準(zhǔn)化編碼規(guī)則相關(guān)2.2

ASN.1語法2.2

ASN.1語法ASN.1數(shù)據(jù)類型定義庫發(fā)送數(shù)據(jù)結(jié)構(gòu)ASN.1數(shù)據(jù)結(jié)構(gòu)ASN.1數(shù)據(jù)標(biāo)識(shí)編碼語法規(guī)則:數(shù)據(jù)結(jié)構(gòu)、類型、順序的描述編碼規(guī)則:將語法部分的描述的數(shù)據(jù)進(jìn)行編碼,編為二進(jìn)制數(shù)據(jù)流,以便在網(wǎng)絡(luò)上傳輸或解碼?;揪幋a規(guī)則(BasicEncodingRules,BER)2.2

ASN.1語法ASN.1的兩個(gè)根本問題?ASN.1的文本約定(1)多個(gè)空格和空行等效于一個(gè)空格。(2)所有的標(biāo)識(shí)符、參考、關(guān)鍵字都要以一個(gè)字母開頭,后接字母(大、小寫都可以)、數(shù)字或者連字符“-”(但不能以連字符“-”結(jié)尾,也不能連續(xù)出現(xiàn)兩個(gè)連字符),不能出現(xiàn)下劃線“_”。2.2

ASN.1語法合法的:INTEGERv1515No-final-dashMY-CLASS不合法的:Final-dashdouble--underscore15153MASN.1的文本約定(3)關(guān)鍵字一般都是全部大寫的,除了一些字符串類型,如PrintableString,UTF8String,等,因?yàn)檫@些都是由原類型OCTETSTRING衍生出來的。(4)在標(biāo)識(shí)符中,只有類型和模塊名字是以大寫字母開頭的,其它標(biāo)識(shí)符都是以小寫字母開頭的。(5)注釋以一對(duì)短線(--)開始,以一對(duì)短線或行尾結(jié)束。2.2

ASN.1語法2.2

ASN.1語法2.2.1抽象數(shù)據(jù)類型在ASN.1中,每一個(gè)數(shù)據(jù)類型都有一個(gè)標(biāo)簽(tag)標(biāo)簽有類型和值,數(shù)據(jù)類型由標(biāo)簽的類型和值唯一確定。數(shù)據(jù)類型標(biāo)簽(tag)值(tag)P23表2-32.2.1抽象數(shù)據(jù)類型標(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)簽。2.2.1抽象數(shù)據(jù)類型ANSI.1定義的數(shù)據(jù)類型有20多種,標(biāo)簽類型都是UNIVERSAL,如表2-3所示??煞譃?大類。簡(jiǎn)單類型:由單一成分構(gòu)成的原子類型,包括INTEGER,BOOLEAN,...構(gòu)造類型:由兩種以上成分構(gòu)成的構(gòu)造類型,包括SEQUENCE,SEQUENCEOF,...標(biāo)簽類型:由已知類型定義的新類型。其他類型:包括CHOICE和ANY兩種類型。ASN.1類型定義的方法<新類型的名字>::=<類型描述>

其中:<新類型的名字>是一個(gè)以大寫字母開頭的標(biāo)識(shí)符;<類型描述>是基于內(nèi)建類型或在其它地方定義的類型。Married::=BOOLEANAge::=INTEGERPicture::=BITSTRING如:類型名關(guān)鍵字ASN.1值定義的方法<新的值的名字><該值的類型>::=<值描述>

其中:<新的值的名字>是以小寫字母開頭的標(biāo)識(shí)符;<該值的類型>可以是一個(gè)類型的名字,也可以是類型描述;<值描述>是基于整數(shù)、字符串、標(biāo)識(shí)符的組合。Married::=BOOLEANAge::=INTEGERPicture::=BITSTRING如:marriedMarried=FALSEageAge::=20pitcurePicture::=‘01101’B標(biāo)識(shí)符類型名值2.2.1抽象數(shù)據(jù)類型1.簡(jiǎn)單類型(1)INTERGER:ASN.1中沒有限制整數(shù)的位數(shù),即它可以是任意大小的整數(shù)。例子:

ColorType::=INTEGER colorAColorType::=1

這里說明了一個(gè)ColorType類型的變量colorA,并將值賦為1。2.2.1抽象數(shù)據(jù)類型1.簡(jiǎn)單類型(2)BOOLEAN:布爾型,取值為TRUE或FALSE。所有可歸結(jié)為二值形式的問題回答都可以表示為布爾型。例子:

2.2.1抽象數(shù)據(jù)類型1.簡(jiǎn)單類型(3)實(shí)數(shù)類型,對(duì)精度沒有限制,可以表示為科學(xué)計(jì)數(shù)法:M×BE,其中尾數(shù)M和指數(shù)E可以取任何正或負(fù)整數(shù)值,基數(shù)B可以取2或10。如:3.14*105

{M,B,E}{314,10,3}例如:2.2.1抽象數(shù)據(jù)類型1.簡(jiǎn)單類型(4)ENUMERATED,枚舉類型,實(shí)際上是一組個(gè)數(shù)有限的整數(shù)值??梢越o每個(gè)整型值賦予不同的意義。2.2.1抽象數(shù)據(jù)類型例2.3

Week::=ENUMERATED{Monday(1),

Tuesday(2),

Wednesday(3),

Thursday(4),

Friday(5),

Saturday(6),

Sunday(7)}weekWeek::=Monday2.2.1抽象數(shù)據(jù)類型例2.4對(duì)于SNMP的MIB中,在獲取響應(yīng)信息中的錯(cuò)誤狀態(tài)如下所示。ErrorStatus::=ENUMERATED{noError(0),

tooBig(1),

noSuchname(2),

badValues(3),

readOnly(4),

genError(5)}2.2.1抽象數(shù)據(jù)類型(5)BITSTRING,位串類型,由0個(gè)或多個(gè)比特組成的有序位串。位串的值可以由對(duì)應(yīng)的二進(jìn)制或十六進(jìn)制串表示。單引號(hào)引用的二進(jìn)制串后加大寫字母B:‘01101’B單引號(hào)引用的十六進(jìn)制串后加大寫字H:‘0123456789ABCDEF’H例如:Occupation::=BITSTRINGjackOccupation::=‘0110’B2.2.1抽象數(shù)據(jù)類型(6)OCTETSTRING,八位位組串,由0個(gè)或多個(gè)8位位組組成的有序串。和位串類型一樣,八位位組串也可以用對(duì)應(yīng)的二進(jìn)制或十六進(jìn)制串表示。例如:2.2.1抽象數(shù)據(jù)類型NumbericString:包含數(shù)字0到9及空格。PrintableString:包含所有大小字母、數(shù)字、標(biāo)點(diǎn)、以及空格IA5String:由取自IA5(5號(hào)國(guó)際字母表)的字母組成,它和ASCII基本相同。VisibleString:由取自IA5的圖形字符組成,不含控制字符集。GeneralString:包含所有的標(biāo)準(zhǔn)字符。NumString::=NumericStringstr1NumString::=“1234567890”Surname::=PrintableStringpersonSurname1Surname::=“John”例如:2.2.1抽象數(shù)據(jù)類型(7)OBJECTIDENTIFIER,對(duì)象標(biāo)識(shí)符,從對(duì)象樹派生出的一系列點(diǎn)分?jǐn)?shù)字串的形式,用來唯一標(biāo)識(shí)對(duì)象。在ASN.1中對(duì)象集合按照樹形結(jié)構(gòu)組織,樹的每個(gè)分支被賦予一個(gè)整數(shù)標(biāo)識(shí)。對(duì)象標(biāo)識(shí)符是從根節(jié)點(diǎn)開始到對(duì)象節(jié)點(diǎn)路徑上邊標(biāo)識(shí)的順序連接,它是對(duì)象的唯一標(biāo)識(shí)。例如:

internetOBJECTINDETIFIER::={iso(1)org(3)dod(6)1}名字形式:.dod.1數(shù)字形式:2.2.1抽象數(shù)據(jù)類型(8)NULL,空值類型,它僅包含一個(gè)值—NULL,主要用于位置的填充。如果某個(gè)時(shí)刻無法得知數(shù)據(jù)的準(zhǔn)確值,簡(jiǎn)單的方法就是將這一數(shù)據(jù)定義為NULL類型。還可以用NULL表示序列中可能缺省的某個(gè)元素。2.2.1抽象數(shù)據(jù)類型2.構(gòu)造類型構(gòu)造類型有序列和集合兩種:

序列SEQUENCESEQUENCEOF(元素類型必須相同)集合SETSETOF(元素類型必須相同)(元素有序)(元素?zé)o序)類似:C語言中的結(jié)構(gòu)體類似:C語言中的數(shù)組2.2.1抽象數(shù)據(jù)類型2.構(gòu)造類型(1)SEQUENCE,序列類型,是包含0個(gè)或多個(gè)組成元素的有序列表。每個(gè)元素由元素名和元素類型組成,元素類型可以是簡(jiǎn)單類型,也可以是定義的其他構(gòu)造類型。序列類型序列類型的一個(gè)值2.2.1抽象數(shù)據(jù)類型2.構(gòu)造類型(1)SEQUENCE,元素類型標(biāo)識(shí)符后可以跟如下3個(gè)關(guān)鍵字。OPTIONAL:元素項(xiàng)可選。DEFAULT:具有默認(rèn)值。COMPONENTSOF表示它包含了給定序列中的所有組成元素。2.2.1抽象數(shù)據(jù)類型例2.6AirlineFlight::=SEQUENCE{airlineIA5STRING,

flightIA5STRING,

seatsSEQUENCE{maximumINTEGER,

occupiedINTEGER,

vacantINTEGER,

},

airportSEQUENCE{originIA5STRING,

stop[0]IA5STRINGOPTIONAL,

stop[1]IA5STRINGOPTIONAL,

destinationIA5STRING},

crewsizeENUMERTAED{six(6),

eight(8),

ten(10)},

cancelBOOLEANDEFAULTFALSE}序列類型可選默認(rèn)值2.2.1抽象數(shù)據(jù)類型它的一個(gè)實(shí)例是airplane1AirlineFlight::={airline"china",

flight"C3416",

seats{320,280,40},

airport{original"Qingdao",stop[0]"TaiYuan",destination"WuLuMuQi"},

crewsize10}或airplane1::={"china","C3416",{320,280,40},{original"Qingdao",stop[0]"TaiYuan",destination"WuLuMuQi"},10}2.2.1抽象數(shù)據(jù)類型2.構(gòu)造類型(1)COMPONENTSOF表示它包含了給定序列中的所有組成元素。TypeCompOfSet::=SEQUENCE{oBITSTRING,tNULL,iPrimtableString,aBOOLEAN,bINTEGERDEFAULT0,cREALOPTIONAL}TypeSet::=SEQUENCE{aBOOLEAN,bINTEGERDEFAULT0,cREALOPTIONAL}TypeCompOfSet::=SET{oBITSTRING,tNULL,iPrimtableString,COMPONENTSOFTypeSet}2.2.1抽象數(shù)據(jù)類型(2)SEQUENCEOF,單純序列(數(shù)組)類型,即序列中的各項(xiàng)都屬于同一類型,可以看作是SEQUENCE類型的特例。例2.7定義了座位號(hào)類型Seats,因?yàn)樽惶?hào)都是整數(shù),所以可以使用單純序列類型。例2.7

Seats::=SEQUENCEOFINTEGER2.2.1抽象數(shù)據(jù)類型(3)SET,集合類型,是包含0個(gè)或多個(gè)組成元素的無序集合。例2.8Student::=SET{numberINTEGER,

nameIA5STRING,

ageINTEGER,

genderENUMBERTED{male(0),female(1),

majorIA5STRING}

{20040320,"LiYong",19,{0},"NetworkEngine"},

{20040720,“WangHua”,20,{1},“ComputerApplication”},。Student類型的實(shí)例:2.2.1抽象數(shù)據(jù)類型(4)SETOF,單純集合類型,是包含0個(gè)或多個(gè)組成同類型的元素的無序集合。例2.9VipSeats::=SETOFINTEGERvipseatsVipSeats::={60,80,120}2.2.1抽象數(shù)據(jù)類型3.標(biāo)簽類型所謂標(biāo)簽類型是指應(yīng)用或用戶加在某個(gè)類型上的Tag

??偨Y(jié),有兩種情況需要給一個(gè)現(xiàn)有的類型加上Tag:首先是一個(gè)類型可以有多個(gè)類型名;另外,在一個(gè)結(jié)構(gòu)(序列或集合)中,可以用CONTEXT-SPECIFIC標(biāo)簽區(qū)分類型相同的元素。2.2.1抽象數(shù)據(jù)類型3.標(biāo)簽類型例子:

Exuniv::=[UNIVERSAL2]INTEGER valAExuniv::=9 Exappl::=[APPLICATION0]INTEGER valBExappl::=10 Expriv::=[PRIVATE1]INTEGER valCExpriv::=11 Excont::=SET{type1[0]INTEGEROPTIONALtype2[1]INTEGEROPTIONAL}新的類型2.2.1抽象數(shù)據(jù)類型3.標(biāo)簽類型標(biāo)簽聲明模式

可以聲明標(biāo)簽類型是隱含的或顯式的,分別用關(guān)鍵字

IMPLICIT和EXPLICIT(可省略)表示。隱含標(biāo)簽的語義是用新標(biāo)簽替換原標(biāo)簽,所以編碼時(shí)只編碼新標(biāo)簽。顯式標(biāo)簽的語義是在一個(gè)基類型上加上新標(biāo)簽,從而導(dǎo)出一個(gè)新類型。2.2.1抽象數(shù)據(jù)類型3.標(biāo)簽類型標(biāo)簽聲明模式

例子:Expriv::=[PRIVATE1]INTEGER(顯式的)在傳輸Expriv類型的數(shù)據(jù)時(shí),要傳輸INTEGER本身的標(biāo)簽[UNIVERSAL2],以及新標(biāo)簽[PRIVATE1]

。

Expriv::=[PRIVATE1]IMPLICITINTEGER在傳輸Expriv類型的數(shù)據(jù)時(shí),只傳新標(biāo)簽[PRIVATE1]。2.2.1抽象數(shù)據(jù)類型4.其他類型CHOICE和ANY是兩個(gè)沒有標(biāo)簽的類型,因?yàn)樗鼈兊闹凳俏炊ǖ?,而且類型也是未定的。?dāng)這種類型的變量被賦值時(shí),它們的類型和標(biāo)簽才能確定。CHOICE:選一ANY:未定2.2.1抽象數(shù)據(jù)類型4.其他類型 (1)CHOICE,選擇類型,包含一個(gè)可供選擇的數(shù)據(jù)類型列表。數(shù)據(jù)可能在不同情況下取不同的值。例2.11Prize::=CHOICE{carIA5STRING,

cashINTEGER,

nothingBOOLEAN}prize1Prize::=car:”2500“Prize2Prize::=nothing:TRUE選擇類型選擇類型值2.2.1抽象數(shù)據(jù)類型(2)ANY,定義數(shù)據(jù)時(shí)不能確定數(shù)據(jù)的類型,可以使用ANY類型。例2.12Book::=SEQUENCE{authorIA5STRING,

referenceANY}{author"Martin",referenceIA5STRING"ISBN007895“}{author"Martin",referenceINTEGER1998}2.2.2子類型子類型是由限制父類型的值集合而導(dǎo)出的類型,所以子類型的值集合是父類型的子集。子類型還可以產(chǎn)生子類型,產(chǎn)生子類型的方法有以下6種。1.單個(gè)值(SingleValue)列出子類型可取的各個(gè)值。例如,TestResule::=INTEGER(0|1|2)表示TestResult可以取0、1或2中的一個(gè)值。2.2.2子類型2.值區(qū)間(ValueRange)這種方法只能用于整數(shù)和實(shí)數(shù),指出子類型可取的區(qū)間。例如,EmployeeNumber::=INTEGER(1000..20000)表示該變量取整數(shù)值,范圍為1000~20000。2.2.2子類型3.允許字符(PermittedAlphabet)允許字符只能用于字符串類型,限制字符集的取值范圍例如:HouseSize::=IA5STRING(FROM(“0”|“1”|“2”|“3”|“4”|“5”|“6”|“7”|“8”|“9”))Morse::=PrintableString(FROM("."|"-"|""))IDCardNumber::=NumericString(FROM("0".."9"))TouchToneButtons::=IA5String(FROM("0".."9"|"*"|"#"))

2.2.2子類型4.限制大?。⊿izeConstrained)可以限制5種類型(BITSTRING,OCTETSTRING,CHARACTERSTRING,SEQUENCEOF,SETOF)的規(guī)模大小。例如,WorkstationNumber::=OCTETSTRING(SIZE(32))表示該變量的值為32個(gè)字節(jié)的串。StringOf31BitsAtTheMost::=BITSTRING(SIZE(0..31))(可變)2.2.2子類型5.包含子類型(ContainedSubtype)從已有的子類型定義新的子類型,新子類型包含原子類型的全部可能的值。用關(guān)鍵字INCLUDES,說明被定義的類型包含了已有類型的所有的值。例如,Months::=ENUMERATED{January(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)Second-quarter::=Months(April,May,June)First-half::=Months(INCLUDES

First-quarter|INCLUDESSecond-quarter)2.2.2子類型6.內(nèi)部子類型(InnerSubtype)可用于序列、集合、CHOICE類型。是一種復(fù)雜的子類型關(guān)系。

-對(duì)于SEQUENCEOF和SETOF使用WITHCOMPONENT來添加約束。

例子1:TextBlock::=SEQUENCEOFVisibleString子類型:AddressBlock::=TextBlock(WITHCOMPONENT(SIZE(1..32)))這個(gè)定義相當(dāng)于:AddressBlock::=SEQUENCEOFVisibleString(SIZE(1..32))2.2.2子類型6.內(nèi)部子類型(InnerSubtype)對(duì)于SEQUENCE和SET使用WITHCOMPONENTS來添加約束,注意關(guān)鍵字結(jié)尾有S,因?yàn)镾EQUENCE和SET成員是不同類型的。例子2:Quadruple::=SEQUENCE{alpha ENUMERATED{state1,state2,state3},beta IA5StringOPTIONAL,gamma SEQUENCEOFINTEGER,delta BOOLEANDEFAULTTRUE}子類型:Quadruple1::=Quadruple(WITHCOMPONENTS

{...,alpha(state1),gamma(SIZE(5))})(符號(hào)“…”指示只對(duì)顯式聲明的成員進(jìn)行約束,其它成員保留。注意對(duì)SEQUENCE類型,聲明約束時(shí)仍然要保持成員的順序。)2.2.3應(yīng)用類型ASN.1中的應(yīng)用類型與特定的應(yīng)用有關(guān)。對(duì)于SNMP,RFC1155定義了以下應(yīng)用類型。1.NetWorkAddress::=CHOICE{internetIpAddress}這種類型用ASN.1的CHOICE構(gòu)造定義,可以從各種網(wǎng)絡(luò)地址中選擇一種。目前只有Internet地址,即IP地址。2.IpAddress::=[APPLICATION0]IMPLICITOCTETSTRING(SIZE(4))以網(wǎng)絡(luò)序表示的IP地址。因?yàn)樗且粋€(gè)32位的值,所以定義為4個(gè)字節(jié)。2.2.3應(yīng)用類型3.Counter::=[APPLICATION1]IMPLICITINTEGER(0..4294977295)計(jì)數(shù)器類型是一個(gè)非負(fù)整數(shù),其值可增加,但不能減少,達(dá)到最大值232?1后回零,再從頭開始增加。計(jì)數(shù)器可用于計(jì)算收到的分組數(shù)或字節(jié)數(shù)。4.Gauge::=[APPLICATION2]INTEGER(0..4294977295)計(jì)量器類型是一個(gè)非負(fù)整數(shù),其值可增加,也可減少。最大值為232?1,與計(jì)數(shù)器不同的是計(jì)量器達(dá)到最大值后不回零,而是鎖定在232?1,直到復(fù)位,計(jì)量器可用于表示存儲(chǔ)在緩沖隊(duì)列中的分組數(shù)。2.2.3應(yīng)用類型5.TimeTicks::=[APPLICATION3]INTEGER(0..4294977295)時(shí)鐘類型是非負(fù)整數(shù),從1~232?1,時(shí)鐘單位以0.01s遞增,可表示從某個(gè)事件(如設(shè)備啟動(dòng))開始到目前經(jīng)過的時(shí)間。6.Opaque::=[APPLICATION4]OCTETSTRING不透明類型即未知數(shù)據(jù)類型,或者說可以表示任意類型。這種數(shù)據(jù)編碼時(shí)按照OCTETSTRING處理,管理站和代理能解釋這種類型。2.3ASN.1基本編碼規(guī)則BER用ASN.1表示的變量必須轉(zhuǎn)換為串行的字節(jié)流才能在網(wǎng)絡(luò)中傳輸?;揪幋a規(guī)則(BasicEncodingRules,BER):轉(zhuǎn)換文本ASN.1語法到機(jī)讀代碼的算法ASN.1用BER來描述傳輸過程中內(nèi)容BER在ISO8825/X標(biāo)準(zhǔn)中進(jìn)行了定義。2.3.1BER編碼結(jié)構(gòu)BER傳輸語法的格式是TLV三元組<標(biāo)簽Tag,長(zhǎng)度Length,值Value>。標(biāo)簽(Tag)字段是關(guān)于標(biāo)簽類別和編碼格式的信息;長(zhǎng)度(Length)字段表示值(Value)字段的數(shù)據(jù)長(zhǎng)度值(Value)字段包含實(shí)際的數(shù)據(jù)。圖2-2BER編碼的結(jié)構(gòu)2.3.1BER編碼結(jié)構(gòu)BER傳輸語法是基于八位組(由8比特組成,是編碼的基本單位)大端編碼的其八位組中的二進(jìn)制編號(hào)從8到1,高8位在左,約定第8位是最高有效位,第1位是最低有效位。圖2-3BER編碼的結(jié)構(gòu)2.3.1BER編碼結(jié)構(gòu)2.3.1BER編碼結(jié)構(gòu)圖2-5標(biāo)簽字段8752.3.1BER編碼結(jié)構(gòu)2.長(zhǎng)度字段BER編碼中Length表示Value部分所占八位組的個(gè)數(shù)格式主要有兩大類:(1)確定格式:短、長(zhǎng)兩種格式。(2)不確定格式2.長(zhǎng)度字段(1)確定格式

若L>127若L<=127表示Length長(zhǎng)度表示長(zhǎng)度VLAUE2.長(zhǎng)度字段(2)不確定格式

0X80LV0x000x002.3.1BER編碼結(jié)構(gòu)編碼規(guī)則:(1)若編碼是簡(jiǎn)單類型,則使用確定格式。(2)若編碼是構(gòu)造類型,并且編碼立即可用,則既可以使用確定格式,也可以使用非確定格式,由發(fā)送者選擇。(3)若編碼是構(gòu)造類型,但編碼不是立即可用,則使用非確定格式。2.3.1BER編碼結(jié)構(gòu)3.值字段內(nèi)容字段由0個(gè)或多個(gè)八位組組成,并根據(jù)不同類型數(shù)據(jù)值的不同規(guī)定對(duì)它們進(jìn)行編碼。2.3.2編碼舉例以UNIVERSALTag和短型Value為例,介紹各種類型的BER編碼,重點(diǎn)關(guān)注Value部分。1.BOOLEAN布爾值的編碼是簡(jiǎn)單類型,其值由1個(gè)八位組組成。FlASE編碼000000010000000100000000通用標(biāo)簽簡(jiǎn)單類型標(biāo)簽號(hào)2.3.2編碼舉例以UNIVERSALTag和短型Value為例,介紹各種類型的BER編碼,重點(diǎn)關(guān)注Value部分。1.BOOLEAN布爾值的編碼是簡(jiǎn)單類型,其值由1個(gè)八位組組成。TRUE編碼非0即為真2.3.2編碼舉例2.NULL空值的編碼是簡(jiǎn)單類型。不需要使用值八位組,相應(yīng)的長(zhǎng)度值0??罩档臉?biāo)簽是UNIVERSAL5,所以編碼為0500H2.3.2編碼舉例3.INTEGER整數(shù)值的編碼是簡(jiǎn)單類型,其值由1個(gè)或多個(gè)八位組組成。整數(shù)值采用二進(jìn)制補(bǔ)碼形式編碼。對(duì)于正數(shù),如果最高比特位為0則直接編碼;如果為1,則在最高比特位之前增加一個(gè)全0的八位組;對(duì)于負(fù)數(shù),先取絕對(duì)值,再取反,最后加1。2.3.2編碼舉例例如,127的編碼02017F。其中第一個(gè)字節(jié)表示整數(shù)類型的標(biāo)簽(UNIVERSAL2),第二個(gè)字節(jié)表示值部分的長(zhǎng)度為1個(gè)字節(jié)。256的編碼02020100H。?129的編碼0202FF7FH。2.3.2編碼舉例4.REAL實(shí)數(shù)值的編碼是簡(jiǎn)單類型,其值由1個(gè)或多個(gè)八位位組組成。2.3.2編碼舉例4.REAL(1)字符編碼(2)二進(jìn)制編碼字符編碼形式TLV每一位串表示字符的ASCII碼(2)二進(jìn)制編碼TLVS表示正負(fù)號(hào)B表示基數(shù)(2,8,16)F比例因子(0,1,2,3)LE表示指數(shù)位的長(zhǎng)度S*M*BE*2FFF2.3.2編碼舉例5.BITSTRING位串值的編碼可以是簡(jiǎn)單類型,也可以是構(gòu)造類型。BITSTRING:需要增加表征補(bǔ)充位個(gè)數(shù)的八位組位串編碼:0A3B5F291CD0H補(bǔ)了4位2.3.2編碼舉例5.BITSTRING采用構(gòu)造編碼則為:23

800303000A3B 0305045F291CD0

將位串值拆為(0A3B)和(5F291CD)兩部分,如圖2-10所示。位串編碼:0A3B5F291CD2.3.2編碼舉例6.OCTETSTRING字節(jié)串值的編碼與BITSTRING類似,但是不需要增加表征補(bǔ)充位個(gè)數(shù)的八位組。OCTETSTRING類型值‘0123456789abcdef’H的編碼:04

080123456789abcdefOCTETSTRING類型值‘ACE’H的編碼:04

02ACE02.3.2編碼舉例7.OBJECTIDENTIFIER標(biāo)識(shí)符形式{136100}編碼后的第一個(gè)標(biāo)識(shí)符的值:(X*40)+Y。{1*40+36100}因此,編碼子標(biāo)識(shí)符數(shù)比實(shí)際對(duì)象全部字標(biāo)識(shí)符數(shù)少1。06H長(zhǎng)度…10N個(gè)子標(biāo)識(shí)符該標(biāo)識(shí)符最后一個(gè)8位組其余8位組2.3.2編碼舉例7.OBJECTIDENTIFIER對(duì)象標(biāo)識(shí)符{joint-iso-ccitt1003},即{21003},計(jì)算得到2×40+100=180,因此按照{(diào)1803}編碼為:0603813403H。1801011010010000001001101000000001181340310000001

001101002.3.2編碼舉例8.SEQUENCE序列值的編碼是構(gòu)造類型。值八位組由序列類型ASN.1定義中列出的每個(gè)類型的一個(gè)數(shù)據(jù)值得完整編碼組成,除非該類型帶有關(guān)鍵字“OPTIONAL”或“DEFAULT”,否則這些值的編碼可以不出現(xiàn)。30H2.3.2編碼舉例8.SEQUENCE例如,序列類型{nameIA5StringokBOOLEAN},值{name“john”,okTRUE},可以編碼為:300A1605736D6974680101FF。按照序列結(jié)構(gòu)可以展開為00110000構(gòu)造類型標(biāo)簽號(hào)162.3.2編碼舉例9.SET與SEQUENCE類似,但是由于集合類型的元素是無序的,故有多種編碼,成員順序由發(fā)送者決定。例如,SET{breadthINTEGER,bentBOOLEAN}的值{breadth7,bentFALSE}的編碼為:31

06

020107

010100;也可以是31

06

010100

020107。成員的順序可以改變。SMNP抓包舉例2.4宏定義1.模塊定義ASN.1的基本單位是模塊,類似于C語言中的結(jié)構(gòu),用于定義一個(gè)抽象數(shù)據(jù)類型ASN.1模塊實(shí)際上是由一組類型定義和值定義組成。類型定義就是說明類型的名稱和類型的格式。值定義則是規(guī)定將什么樣的具體值賦給某一類型的變量??梢杂妹忠靡粋€(gè)已定義的模塊。模塊定義<modulereference>DEFINITIONS::=BEGINEXPORTSIMPORTSAssignmentListEND

其中的modulereference是模塊名,第一個(gè)字母大寫。

EXPORTS構(gòu)造用于定義可供其他模塊

溫馨提示

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

評(píng)論

0/150

提交評(píng)論