ASN.1探索 - 3 編碼規則與傳輸語法(3 - PER)(轉)


轉自: http://wmfbravo.blog.163.com/

感謝: wmfbravo

 

本章主要介紹BERPER兩種編碼規則及其衍生規則。

3.3  PER

BER編碼因其在大小上的開銷過大而受人詬病,和真實編碼數據相比,平均需要增加50%的額外數據。正式這個原因推動了PERPacked Encoding Rules)的誕生。相同協議,PER編碼與BER相比在大小上至少有40%60%的改進。因而在VoIP、視頻電話、多媒體以及3G等需要高速數據傳輸的領域有廣泛應用。

3.3.1  基本規則

PER編碼規則的黃金定律為:“obtain the most compact encoding using encoding rules as simple as possible”。

BER中遞歸使用三元組TLV<Tag, Length, Value>不同,PER的格式為:’[P][L][V]’ <optional Preamble, optional Length, optional Value>,這里PLV中每個域都不再是八位組串而是比特串。

因為Length可以省略(甚至Value也可以省略),那么就不能從編碼中得知邊界,所以解碼器必須知道抽象描述才能正確解碼。PER編碼中沒有Tag域,因此PER不再缺省支持擴展,必須明確在描述中添加擴展符。

只有當長度沒有被SIZE固定或者數據長度很重要的情況下,才對Length進行編碼;對SEQUENCE或者SET類型的值編碼時,匯總前面增加個bitmap來標識可選成員是否出現;同樣,在編碼CHOICE的被選擇成員前,會增加一個序號指示其位置。

BER相比,PER使得編解碼器處理時間相對要少(但達不到兩倍的處理速度),傳輸速度更快。

3.3.2  四種變形

PER編碼規則可以分為基本的(Basic)和規范的(Canonical)兩類,每一類又可以分為對齊(Aligned)和不對齊(Unaligned)兩種。規范形式的優勢在CERDER中已經討論過了,主要用在中繼接力系統和安全系統等使用數字簽名的場合。在基本形式中,一個抽象值可能有多個PER編碼。但是,在有限測試后,我們知道基本形式編碼器要比規范形式編碼器速度更快。

對齊方式下,為了保持八位組對齊,可以增加值為0的比特。不對齊方式則編碼更為緊湊,但是在編解碼時需要花費更多的處理時間。不對齊方式下,不會檢查八位組的對齊情況,只在整個數據編碼結束后,才進行補位。

注意對齊和不對齊兩種方式不能互通,即只能用同種的解碼器解碼同種編碼器編碼后的碼流。在四種變形中,基本不對齊方式編碼是最緊湊的。按照緊湊性降低的順序,后續依次為:規范不對齊方式,基本對齊方式和規范對齊方式。

在表示層傳輸上下文協商中,我們需要用Object Identifier指明具體采用的是哪種變形。具體值,請參考第二章中Object Identifier注冊樹。

3.3.3  PER可見子類型約束

為了最大限度的壓縮編碼,PER需要依賴ASN.1描述中的子類型約束。約束增加的越具體,PER越能得到更優化的編碼。而且PER會使用到的約束都是經常使用的約束,這樣也使得PER編譯器容易實現。此外,這些約束都是編譯器在編譯過程中“靜態”使用的,不會增加實際編解碼過程處理時間。

我們稱這類約束為PER可見約束(PER-Visible Constraints),它們只包含下表所列:

Table 3-3 PER可見約束

類型

PER可見約束

BOOLEAN

NULL

INTEGER

單值約束、值域約束、類型包含約束、約束組合、約束擴展

ENUMERATED

REAL

BIT STRINGOCTET STRING

SIZE約束、約束組合、約束擴展

OBJECT IDENTIFIER

NumericStringPrintableStringVisibleStringISO646String

IA5StringUniversalString

BMPString

FROM約束、SIZE約束、類型包含約束、約束組合、SIZE約束中的擴展

not-known-multiplier character

string types

GeneralizedTimeUTCTimeObjectDescriptor

open types

SEQUENCESET

SEQUENCE OFSET OF

SIZE、約束組合、約束擴展

CHOICE

EXTERNAL

EMBEDDED PDVCHARACTER STRING

WITH COMPONENTS

open types指引用到一個類型域、一個可變類型的值域、或者一個可變類型值集合域。即引用到信息對象類中的類型。

 

不在上表中的,都不是PER可見約束, PER編譯器也就不做相應優化。

3.3.4  數的編碼

我們考察一個非負數的四種形式的編碼,因為自然數常出現在長度域Lbitmap的大小、CHOICE中的序號以及INTEGER類型邊界中。

對於INTEGER類型,PER可見約束之一是值域約束。對於有值域約束(bmin..bmax)的值n,如果下邊界bmin足夠大,PER編碼n- bmin的代價就更小。如下:

Figure 3-26 有約束自然數的基本編碼規則

I. 有約束數編碼

有約束指值域的上、下邊界都有限。如果d=1,即只有一個值,則收、發雙方都知道,那么就沒有編碼的必要。

在對齊方式下:

l           2d255n- bmin的編碼占用log2d個比特。這些比特添加在待發送比特域之后,不進行八位組對齊,不編碼L

l           d=256n- bmin的編碼占用一個八位組,不編碼L

l           257d65,536n- bmin的編碼占用兩個八位組,不編碼L

l           65,537dn- bmin的編碼占用log256d個八位組,並且在前面增加L的編碼。

在不對齊方式下:

n- bmin的編碼占用log2d個比特,不編碼L

II. 半約束數編碼

半約束指值域沒有上邊界(上邊界為+)。

n- bmin的編碼占用log256d個八位組,並且在前面增加L的編碼。

III. 無約束數編碼

無約束指值域沒有下邊界(即使存在上邊界)。

按照BER中整數的編碼方式編碼,並且在前面增加L的編碼。

IV. 常見小自然數編碼

這種情況經常出現在對表征SEQUENCESET類型可選成員的Bitmap長度進行編碼時;或者CHOICE類型序號編碼時。這種長度相當小,但是卻沒有一種限定。

l           0n63時,n6個比特編碼,並且在前面增加一個0比特(八位組不對齊):

l           64n時,n以半約束數方式編碼,下邊界為0,並且在前面增加一個1比特:

3.3.5  長度域編碼

BER中長度域表征編碼的八位組數不同,在PER的長度域出現下,如果編碼為比特串則表征比特位數;如果編碼為八位組串(OCTET STRINGopen類型)則表征八位組個數;如果編碼為known-multiplier character string則表征字符數;如果是SEQUENCE OF或者SET OF則表征成員個數。

每當ASN.1描述中 對類型通過(SIZE(lmin..lmax))做大小限定時(lmax可以是+),長度l的值要按照3.3.4  中的規則編碼。作為特例,當lmin =lmax65,535時,長度不需要發送,因為解碼器知道該長度。

對齊方式下:

l           l是一個bitmap的長度,l-1作為常見小自然數編碼;

l           lmax65,535l作為有約束的數編碼(約束為(lmin..lmax));

l           65,535lmax,或者lmax是無窮大:

l127l以一個八位組編碼(八位組對齊),最高比特位為0

128l16,383l以兩個八位組編碼(八位組對齊),最高兩個比特位為10

-當16,384l,整個編碼以f*16K為單位分割(f取值為123或者4)。除最后的片段外,其余每段,長度都以一個八位組編碼,最高兩個比特位為11。如果編碼恰好時16K的整倍數,則在最后補充一個全空的八位組;否則最后一個片段按照前兩條進行編碼。例如占147,457個單元的編碼可以為:

 

不對齊方式下:

l           l是一個bitmap的長度,l-1作為常見小自然數編碼;

l           lmax65,535l-lmin以占用log2(lmin-lmax+1)個比特編碼;

l           65,534lmax-lmin,或者上邊界為無窮大:

-當l127l以八比特編碼,最高比特位為0

128l16,383l以十六比特編碼,最高兩個比特位為10

-當16,384l,編碼方式域對齊類似,但是不是八位組對齊的。

 

當類型有可擴展的SIZE約束,並且待發送值不在該約束擴展的根部分,則長度l作為半約束數編碼(即lmin=0 lmax =+)。

3.3.6  各類型編碼

I. BOOLEAN

以一個比特編碼,1TRUE0FLASE

直接編碼,不編碼長度,也不做八位組對齊。

II. NULL

不編碼。

如果NULL是作為CHOICE的一個選項或者SEQUENCESET可選成員值出現,則已經有bitmap能表征。

III. INTEGER

假設INTEGER類型擁有有效的值域范圍(bmin..bmax),當描述中INTEGER類型有至少一個可擴展的PER可見約束(PER-Visible Constraint),在編碼時會在前面增加一個前導(Preamble)比特(不考慮八位組是否對齊)。當INTEGER類型的值在擴展的根部分,該比特為0;否則該比特為1

在編碼n- bmin過程中,如果需要編碼L(前面討論過),則增加長度域L的編碼。長度L的約束為(1..lmax),其中lmax =log2bmax

如果待發送值n屬於約束的擴展部分,則長度按照無約束自然數方式編碼,如值:

v INTEGER (3..6, ..., 8..10) ::= 8

的對齊方式編碼為:

IV. ENUMERATED

如果該ENUMERATED類型不是可擴展的,則先按照數值大小做升序排列,然后以0為起點,步長為1給每個成員編上序號。對該類型的值編碼時,只將序號以值域約束(0..Indexmax)編碼。如:

                v ENUMERATED {orange(56), green(-2), red(2476)} ::= orange

PER編碼為“01”(因為此時為Indexmax 2,需要兩個比特)。

如果該ENUMERATED類型是可擴展的,那么要在編碼前增加一個前導(Preamble)比特。當值在擴展的根部分時,該比特為0;否則該比特為1。同時對擴展部分的成員重新進行編號,起點仍為0,步長為1。編碼時對值在根部分的情況,就和該類型是不可擴展時一樣;值在擴展部分的情況,對序號按照自然數方式編碼。如:

                v1 ENUMERATED {orange(56), green(-2), red(2476), …, yellow}

::= orange

PER編碼仍然為“01”;而

                v2 ENUMERATED {orange(56), green(-2), red(2476), …, yellow, purple}

::= yellow

PER編碼則為“10000000”。

V. REAL

對值的編碼規則和CER或者DER相同(而且是八位組對齊的),並且在前面增加長度域L的編碼。這里L表征的是八位組數。

VI. BIT STRING

如果該BIT STRING類型有可擴展的PER可見大小約束(PER-Visible Size Constraint),那么要在編碼前增加一個前導(Preamble)比特。當值在擴展的根部分時,該比特為0;否則該比特為1

對於有大小約束(SIZE(lmin..lmax))BIT STRING類型:

l           lminlmax16比特,不發送長度,直接編碼(不是八位組對齊的);

l           17lminlmax65,536比特,不發送長度,直接編碼(在八位組對齊方式下是八位組對齊的);

l           65,537lminlmax,長度按照3.3.5  中約定編碼;而值按照需要進行分段;

l           lminlmax(或者沒有有效的大小約束),長度按照3.3.5  中約定編碼;而值按照需要進行分段。

如果BIT STRING類型包含一個命名位置列表,所有結尾的0比特都被去掉;此外,為了滿足大小約束,可以增加或者刪除結尾0比特來達到最小的長度。

VII. OCTET STRING

BIT STRING規則相同,不過長度域L表征的是八位組的個數而不是比特數。

VIII. OBJECT IDENTIFIER

值的編碼規則與BER相同,前面需要增加長度域L的編碼。

IX. RELATIVE-OID

值的編碼規則與BER相同,前面需要增加長度域L的編碼。

X. 字符串與日期

首先描述known-multiplier字符串類型,如果這種類型是受約束的,帶了一個形如(SIZE(lmin , lmax))的有效的size約束和一個形如(FROM("c1"|"c2"|...|"cn"))的有效的字符約束。如果FROM約束是可擴展的,則有效的字符約束就包括了父類型包含的所有的字符。

如果SIZE約束是可擴展的,則在bit-field上加一個比特。如果串長屬於擴展根的范圍內,則該比特等於0,否則該比特等於1。記住,如果FROM約束中包含了可擴展的符號,則該約束對於PER不可見,即不會改變擴展比特的取值。

PER壓縮known-multiplier字符串類是基於有效的字符約束的。假設n是有效字符約束中字符的個數,b [log2 n], c = [log2 b],則每個字符在aligned變體中被編碼成B = 2 c 個比特(大於b的最小的2的次方),而在unaligned變體中被編碼成B =  b 個比特vmin vmax 分別是("c1"|"c2"|...|"cn")對應的最小和最大的字符值。

如果vmax 2B -1, 即所有的系列里的("c1"|"c2"|...|"cn")都可以用B個比特來編碼,串中的每個字符都可以作為在區間(vmin .. vmax)之間的一個整數來編碼。這就避免了給字符重新排序賦值。否則,字符序列("c1"|"c2"|...|"cn")按照標准[ISO646] [ISO10646-1]中定義的順序加索引,索引從0開始,每次加1。這個新的索引號以B個比特來編碼和發送。

如果字符串的長度是固定的(lmin =  lmax)並且小於64K,則長度字段L就不需要了,在aligned變體情況下,只有當 B ×lmax 17 時才需要octet - aligned.

如果字符串的長度不固定或者長度雖然固定但大於64K,則長度字段按照章節3.2 編碼,然后附着到碼流中(在在aligned變體情況下,只有當 B ×lmax 17 時才需octet - aligned)。

例如,字符串

v IA5String (FROM ("ACGT")^SIZE(3)) ::= "TAG"

被編碼成 11 00 10  。而字符串

v IA5String  ::= "TAG"

unaligned變體情況下被編成(注:IA5Stringvmin vmax分別為0127):

aligned變體情況下被編成(下面的方框表示從整數個字節開始)

日期類型 GerneralizedTimeUTCTime 的編碼方式在basic PER情況下與BER相同,在canonical PER情況下與DER相同。

對於不屬於known-multiplier的字符串類型,所有的約束對PER都是不可見的。它們的編碼方式在basic PER情況下與BER相同,在canonical PER情況下與DER相同。長度字段L作為一個無約束整數加在前面。

對於known-multiplier字符串類型在定義中最小和最大的字符值請參考下表:

Table 3-4 known-multiplier字符串的最小最大字符值

類型

  vmin

  vmax

NumericString

32

57

PrintableString

32

122

VisibleString

32

126

IA5String

0

127

BMPString

0

216 -1

UniversalString

0

232 -1

XI. Open類型

一個open類型的值實際上是一個任意類型的值,這個類型對於發送方和接收方而言都是已知的。因此這個值就被編成它的有效類型而沒有類型的指示。通常情況下,這個值的類型已經在前面發送過了,解碼器會存儲類型到關聯表中,而后在收到open類型能夠的值后根據關聯表就可以查詢到對應的類型進行解碼。

相應的值編碼后,不是整數個字節的情況補充值為'0'的比特位以便使該碼流為整數個字節(假設為n)。並在頭部加上長度字段L表示字節數nL作為無約束整數進行編碼。

XII. SEQUENCE

首先,如果有COMPONENTS OF語句,則由相應的類型進行替換。

如果SEQUENCE類型是可擴展的,則在編碼的頭部加上一個比特的bit-field,如果SEQUENCE的取值中有屬於擴展附加部分的成員,則該比特等於1,否則等於0

如果SEQUENCE的定義中在擴展根部(extension root)有"n"個成員被置為OPTIONALDEFAULT,則在編碼頭部再添加"n"個比特的bit-field,該bit-field從第一個bit開始,依次指示被標記為OPTIONALDEFAULT的成員是否出現。如果為1,則該成員出現,否則沒有出現。如果“n”小於64K,則這個 bit-field 應該直接添到碼流中。如果"n"大於等於64K 按照前面提到的處理方法把“n”個bitbit-field分段並添加到域序列中,前面的長度字段L就作為一個有約束的整數編碼,而約束的上限和下限都等於n

 

以上為導言(preamble)部分,導言之后是各成員類型的編碼,依次出現。

canonical PER中,對於標記有DEFAULT的成員,如果要編碼的值就是缺省值,那么這個成員的編碼省略;在basic PER中,如果序列中標記為DEFAULT的成員是一個簡單類型,當它的值為缺省值時,它的編碼應省略。而對於結構化的成員(SEQUENCE, SET, SEQUENCE OF, SET OF, CHOICE) ,即使它的取值是缺省值時,是否被編碼是由發送方來決定的。

 

如果類型是可擴展的但取值中沒有出現擴展附加部分,則該SEQUENCE的值的編碼已經結束。

如果類型是可擴展的並且取值中有p個擴展附加部分(雙重方括號內的所有成員只當作一個附加擴展部分),則添加一個p個比特的bit-map,對應的比特取值為1則表示該擴展附加部分出現,否則就沒有出現。為長度"p"bit-map增加一個長度指示,編碼方式為一個通常的小的非負整數的編碼。

 

以后,依次出現的是各擴展附加部分的編碼值

擴展附加部分的編碼方式如下:

l           如果該擴展附加部分是單個的成員,則作為open類型來編碼,即包括長度字段和整數個字節的值字段。

l           如果該擴展附加部分是由雙重方括號內的所有成員組成的,則該擴展附加部分的值作為open類型來編碼。與上面不同的是:雙重方括號內的所有成員的值被當成一個SEQUENCE類型的取值來編碼,編碼方式參見本節上段。

注意在SEQUENCE類型的值沒有包括長度字段,因為根據擴展根部的可選成員對應的bit-map和擴展附加部分對應的bit-map使解碼器推斷出成員是否存在。

XIII. SET

SET類型的擴展根部(extension root)的成員是按照canonical order來排序的,具體法則如下:

1)         首先按標簽類型排序,按照UNIVERSALAPPLICATIONcontext-specificPRIVATE四種類型依次排序,UNIVERSAL標簽類型的元素在最前,PRIVATE標簽類型的元素在最后;

2)         在標簽類型內部,按照標簽值的大小排序,小的在前,大的在后。

在排序過程中如果發現某個成員是沒有標簽的CHOICE類型,則該CHOICE類型的標簽值就會等於其所有選項中標簽的最小值。在CHOICE類型嵌套的情況下亦是如此。

如果SET類型是可擴展的且SET類型的值中有擴展附加部分,則擴展附加部分的排序按照其協議定義時的順序,不做改動(因為在新增擴展附加部分時對應的標簽必須符合canonical order)。

經過上述的排序后,SET類型的編碼就按照SEQUENCE類型的編碼。

XIV. SEQUENCE OF

顯式PER限制僅僅對SEQUENCE OF類型的成員個數有效。

假設成員數目的上限為"ub",下限為"lb"。如果沒有上限或者上限值ub大於等於64K,就認為ub不確定;如果沒有下限,"lb"置為0。假設實際的SEQUENCE OF的成員數量為“n”,編碼按如下規則進行:

1)         如果有size約束且該約束可擴展,則在碼流上添加一個1比特的bit-field(不需要octet-aligned)。 如果元素的個數屬於約束的根部則這個比特等於0,反之該比特等於1。在前一種情況下,調用節3.2為生成的編碼增加一個半約束數的長度指示,長度值等於n

2)         如果成員值的數目固定且小於64K,則沒有長度指示,SEQUENCE OF的各成員的值的編碼依次填充到生成的編碼中去。

3)         其它情況,增加長度指示成員值的數目。如果"ub"存在,則長度指示作為約束數編碼,否則作為半約束數類型的整數編碼。

需要注意的是在給每個成員編碼時,在aligned變體情況下需要octet-aligned

XV. SET OF

basic variant情況下,把每個SET類型的元素按順序編碼即可,而不需要調換順序。而在canonical variant情況下需要先把各SET中的元素按canonical order進行排序再編碼,並在必要的時候需要做一些調整,如加上一些'0' bit以形成整數個字節,或加上值為0的字節以使短部分和長的部分長度一致。

XVI. CHOICE

先給CHOICE的各個選項標上索引(index),過程如下:

1)         對於CHOICE類型的根部(root)的選項,先按照canonical order對各選項進行排序,然后給排序后的選項標上索引,第一個選擇項索引為0,第二個為1,直至根部的最后一個。 如果嵌套了沒有標簽的CHOICE類型,則該類型的標簽是其擇項中的最小的那個標簽。

2)         如果CHOICE類型是可擴展的,並且有擴展附加選項,則給擴展附加選項也分別標上索引,第一個擴展附加選項的索引為0,第二個為1,直至擴展部分的最后一個。(標索引之前不需要對這些選項進行排序,是因為在新增擴展附加選項時對應的標簽必須符合canonical order)。

 

在索引標完后,就可以對CHOICE類型的值進行編碼,過程如下:

1)         如果僅有一個選擇項,如果選擇了該選擇項的話,不要對索引進行編碼。

2)         如果CHOICE類型是可擴展的,則在碼流上加一個比特的bit-field(不需要octet-aligned)。如果該值屬於擴展附加選項,則 該比特等於1,否則等於0

3)         如果沒有擴展標記,或者有擴展標記但選項在CHOICE類型的根部,則選項的索引值就作為一個INTEGER來編碼(約束為0..n,假設n為根部的最大索引值),然后是選項的值的編碼。

4)         如果有擴展標記且選項是CHOICE類型的擴展附加選項,則該索引被當作一個通常的小的非負整數進行編碼,其"lb"置為0。把選項的值當作open類型進行編碼。

XVII. Tagged Type

因為PER不是隱式支持Tag的,所以一個有Tag類型的值按照該類型的編碼規則進行編碼。在ASN.1模塊內,特定Tag上的限制要遵守;建議在模塊頭的聲明中增加AUTOMATIC TAGS,這不會影響已有的限制。

XVIII. EXTERNAL

略。

XIX. INSTANCE OF

一個INSTANCE OF類型的值按照其等效SEQUENCE類型值進行編碼。

XX. EMBEDDED PDV或者CHARACTER STRING

如果EMBEDDED PDV或者CHARACTER STRING類型有WITH COMPONENTS約束,該約束限制可選項syntaxes是兩個預定義object identifier的序列(即對收、發雙方抽象語法、傳輸語法都明確);或者限制成員identification選項為fixed,則PER編碼中嵌入數據作為OCTET STRING類型編碼。

如果成員identification沒有按照前面兩種方式之一約束,則這兩種類型的值需要按照等效的SEQUENCE類型值進行編碼。

XXI. Value Set

編碼一個有值域Value Set約束類型的值時,值域被當作有該值域約束的類型看待。如值域:

                Set1 INTEGER(1..20) ::= {1 | 5 | 7}

被等同作:

                Set1 ::= INTEGER(1..20)(1|5|7)

XXII. Information Objects Information Object Sets

信息對象和信息對象集合不編碼。傳輸其中信息的方式,是在類型或者值中引用信息對象或者信息對象集合。編碼時,按照所在值的編碼規則進行編碼。

3.3.7  一個完整例子

還是以BER中的例子,來看其對應的PER編碼。

ASN.1描述:

MyHTTP DEFINITIONS AUTOMATIC TAGS ::=

BEGIN

GetRequest ::= SEQUENCE

{

header-only           BOOLEAN,

lock                             BOOLEAN,

accept-types         AcceptTypes,

url                        Url,

...

}

 

AcceptTypes ::= SET

{

standards             BIT STRING {html(0), plain-text(1), gif(2),

jpeg(3)} (SIZE (4)) OPTIONAL,

others                   SEQUENCE OF VisibleString (SIZE (4))

OPTIONAL

}

 

Url ::= VisibleString (FROM ("a".."z"|"A".."Z"|"0".."9"|"./-_~%#"))

 

v GetRequest ::=

{

header-only           TRUE,

lock                             FALSE,

accept-types         { standards {html,plain-text} },

url                        "www.asn1.com"

}

END

相應對齊方式的PER編碼結果為:

不對齊方式的PER編碼結果為:

3.4  其它編碼規則

3.4.1  LWER

Light Weight Encoding Rules (LWER)1985年有德國發起,1988年由法國繼續推進。其目的是為了在BER基礎上構造處更為輕量級編碼規則,隨着PER的出現和成熟,於1997年放棄。

3.4.2  BACnet

BACnet Building Automation and Control Network)是由美國加熱、冷凍、空調工程師協會(ASHRAEAmerican Society of  Heating, Refrigerating and Air-conditioning Engineers)設計。用於在Internet上傳輸從分布在各地,監控集中加熱、通風、空調或者煙霧報警器的控制設備來的數據。

現在BACnet編碼規則,結合ECNX.692, Encoding Control Rule),使得可以使用一個通用的工具來生成編解碼規程。

BACnet編解碼規則具體細節,可以訪問網站:

http://www.bacnet.org

或者:

ftp://ftp.bacnet.org/Encoding.doc

3.4.3  OER

應用很少,略。

具體信息可以訪問:http://www.viggen.com/ntcip/documents/oer.rtf

3.4.4  SER

SERSignaling specific Encoding Rules)是由法電研發部(France Telecom R&D)和諾基亞(Nokia)聯合開發的。其主要目的是想通過合適的編譯器,為原本不是用ASN.1描述的協議,通過重新描述能自動生成編解碼器。這類協議主要是在ASN.1出現之前就有的,如七號信令的協議,GSM接入協議等。

據悉,國內電信設備商H,基於同樣目的也設計了類似編碼規則。但和上述的工作原理有差異。

因專利保護關系,這些規則的詳細內容不得而知。

 

此外,自1999年后,ASN.1中引入了XML。相應的有了XERXML Encoding Rules)。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM