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

下載本文檔

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

文檔簡介

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

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

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

ASN.1語法2.2

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

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

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

ColorType::=INTEGER colorAColorType::=1

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

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

{M,B,E}{314,10,3}例如:2.2.1抽象數(shù)據(jù)類型1.簡單類型(4)ENUMERATED,枚舉類型,實際上是一組個數(shù)有限的整數(shù)值??梢越o每個整型值賦予不同的意義。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對于SNMP的MIB中,在獲取響應(yīng)信息中的錯誤狀態(tài)如下所示。ErrorStatus::=ENUMERATED{noError(0),

tooBig(1),

noSuchname(2),

badValues(3),

readOnly(4),

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

internetOBJECTINDETIFIER::={iso(1)org(3)dod(6)1}名字形式:.dod.1數(shù)字形式:2.2.1抽象數(shù)據(jù)類型(8)NULL,空值類型,它僅包含一個值—NULL,主要用于位置的填充。如果某個時刻無法得知數(shù)據(jù)的準(zhǔn)確值,簡單的方法就是將這一數(shù)據(jù)定義為NULL類型。還可以用NULL表示序列中可能缺省的某個元素。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òu)造類型。序列類型序列類型的一個值2.2.1抽象數(shù)據(jù)類型2.構(gòu)造類型(1)SEQUENCE,元素類型標(biāo)識符后可以跟如下3個關(guān)鍵字。OPTIONAL:元素項可選。DEFAULT:具有默認值。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}序列類型可選默認值2.2.1抽象數(shù)據(jù)類型它的一個實例是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ù)組)類型,即序列中的各項都屬于同一類型,可以看作是SEQUENCE類型的特例。例2.7定義了座位號類型Seats,因為座位號都是整數(shù),所以可以使用單純序列類型。例2.7

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

nameIA5STRING,

ageINTEGER,

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

majorIA5STRING}

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

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

。總結(jié),有兩種情況需要給一個現(xiàn)有的類型加上Tag:首先是一個類型可以有多個類型名;另外,在一個結(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)簽,所以編碼時只編碼新標(biāo)簽。顯式標(biāo)簽的語義是在一個基類型上加上新標(biāo)簽,從而導(dǎo)出一個新類型。2.2.1抽象數(shù)據(jù)類型3.標(biāo)簽類型標(biāo)簽聲明模式

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

。

Expriv::=[PRIVATE1]IMPLICITINTEGER在傳輸Expriv類型的數(shù)據(jù)時,只傳新標(biāo)簽[PRIVATE1]。2.2.1抽象數(shù)據(jù)類型4.其他類型CHOICE和ANY是兩個沒有標(biāo)簽的類型,因為它們的值是未定的,而且類型也是未定的。當(dāng)這種類型的變量被賦值時,它們的類型和標(biāo)簽才能確定。CHOICE:選一ANY:未定2.2.1抽象數(shù)據(jù)類型4.其他類型 (1)CHOICE,選擇類型,包含一個可供選擇的數(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ù)據(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.單個值(SingleValue)列出子類型可取的各個值。例如,TestResule::=INTEGER(0|1|2)表示TestResult可以取0、1或2中的一個值。2.2.2子類型2.值區(qū)間(ValueRange)這種方法只能用于整數(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.限制大小(SizeConstrained)可以限制5種類型(BITSTRING,OCTETSTRING,CHARACTERSTRING,SEQUENCEOF,SETOF)的規(guī)模大小。例如,WorkstationNumber::=OCTETSTRING(SIZE(32))表示該變量的值為32個字節(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)系。

-對于SEQUENCEOF和SETOF使用WITHCOMPONENT來添加約束。

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

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

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

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

800303000A3B 0305045F291CD0

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

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

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

001101002.3.2編碼舉例8.SEQUENCE序列值的編碼是構(gòu)造類型。值八位組由序列類型ASN.1定義中列出的每個類型的一個數(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)簽號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),用于定義一個抽象數(shù)據(jù)類型ASN.1模塊實際上是由一組類型定義和值定義組成。類型定義就是說明類型的名稱和類型的格式。值定義則是規(guī)定將什么樣的具體值賦給某一類型的變量??梢杂妹忠靡粋€已定義的模塊。模塊定義<modulereference>DEFINITIONS::=BEGINEXPORTSIMPORTSAssignmentListEND

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

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

溫馨提示

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

評論

0/150

提交評論