當前位置:首頁 > 通用術語 > 什麼是ASN.1 – 抽象語法表示法?概念、運作方式

什麼是ASN.1 – 抽象語法表示法?概念、運作方式

2025-08-26通用術語223

ASN.1,即抽象語法表示法一,是國際標準化組織 (ISO) 標準,它提供了一種將人類可讀符號編碼為壓縮二進位形式的機制。抽象語法表示法 1 (ASN.1) 是 X.400 和 X.500 規格的一部分,提供格式化和編碼 X.400 型電子郵件訊息的標準方法,以便透過網路傳輸。更一般地說,ASN.1 是一種指定用於任何形式的串行傳輸的抽象對象的方法。

ASN.1還用於在簡單網路管理協定(SNMP)的管理資訊庫(MIB)檔案中定義物件。

ASN.1

怎麼運作

ASN.1 在語法上類似於程式語言,它允許定義不同的資料類型、資料結構、陣列、類別和其他類似於 C++ 程式語言中的結構。開放系統互連 (OSI) 參考模型的呈現層 (第 6 層) 使用 ASN.1 作為標準,以指定此層應用程式之間交換資訊的語法。ASN.1 資料類型可以是簡單的,也可以是結構化的。

ASN.1 資料結構以十六進位表示法編碼為八位元組。然後,這些結構作為二進位資訊透過網路傳輸。

八位元組編碼規則 (OER) 的設計易於實施,並產生比基本編碼規則 (BER) 產生的編碼更緊湊的編碼。除了減少開發編碼器/解碼器的工作量之外,使用 OER 還可以降低頻寬利用率(儘管不如打包編碼規則那麼多)、節省 CPU 週期並降低編碼/解碼延遲。

亞型

通常,設計人員只打算 ASN.1 類型值的某些子集在某些情況下有效。例如,在以百分比形式傳達濕度測量時,只有 0 到 100 範圍內的數字有效,或者在傳達郵遞區號時,只允許具有特定字元且長度在特定範圍內的字串。也許當某些協定訊息在特定上下文中使用時,選擇性校驗和欄位將不存在。

這些都是約束的範例,可以透過定義合適父類型的子類型來表示。這是透過在父項的符號中附加適當的子類型規格來完成的。結果本身就是一個類型,可以在允許類型的任何地方使用。(因此,子類型規範也可以應用於子類型,在這種情況下,它可能有助於進一步減少值集)。子類型規格由一或多個子類型值集組成,以 “|” 分隔(發音為“或”)。整個列表位於圓括號(())中。

例如:

Weekend ::= DaysOfTheWeek (saturday | sunday)

類型 Weekend 是透過將子類型規格附加至父類型 DaysOfThe Week 來定義。子類型規格 (圓括弧中的運算式) 會定義哪些 DaysOfTheWeek 的值也是 Weekend 的值。

有六種不同的值集表示法。其中兩個適用於所有父類型,其他僅適用於特定父類型。
適用於所有母系類型的值集表示法是單一值及包含子類型。前一種表示法只是父類型的某個值,結果值集僅由該值組成。例如上述 “星期六” 和 “星期日”,每個值都是 DaysOfTheWeek 的單一值。所包含的子類型表示法包括關鍵字 INCLUDES,後面接著相同母項類型的一些其他子類型,並表示由該子類型中所有值組成的值集。
例如,給定:
LongWeekend ::= DaysOfTheWeek

     (INCLUDES Weekend | monday)

類型 LongWeekend 包含三個值 saturday、sunday 和 monday,這是其定義中使用的值集的聯集。每個值集都會定義父類型值的某些子集。產生的子類型具有這些子集聯集中的值,這些值必須是非空的。
值範圍表示法可用來子類型化其值已排序的任何類型 (例如,整數類型) 。它涉及指定範圍的下限和上限。
大小範圍可以包含在值具有已定義大小的任何類型 (例如,位字串類型) 。在這裡,值集包含其大小 (以適當單位測量) 在指定範圍內的所有值。

字母限制只能套用至字串類型,且只容許由某些字元子集所形成的值。

最後,可以使用內部子類型來定義結構化類型的值集(例如,集合和類型集)。這裡的值集包括其組件值滿足特定約束的所有值。

名稱

ASN.1 中的數個物件類別具有可參考的名稱。我們實際上已經遇到了上述每種名稱的示例,如下所示:

類型參考:天氣報告
值參考:sample報告
標識符:濕度

像這些例子一樣,選擇名稱對人類讀者具有意義非常重要。事實上,如果名稱選擇正確(並遵循適當的佈局約定),那麼即使不精通該語言的人也可以通常掌握 ASN.1 某些部分的本質。

ASN.1 中的所有名稱都是從同一組字元抽取的字串,即:

大寫字母:ABCDEFGHIJKLMNOPQRSTUVWXYZ
小寫字母:abcdefghijklmnopqrstuvwxyz
十進制數字:0123456789
連字符:–

名稱中的第一個字元必須是字母。名稱中字母的大小寫很重要,因此「邊框」和「邊框」是不同的名稱。事實上,首字母的大小寫具有特殊意義,因為類型引用(以及模組引用,見下文)必須以大寫字母開頭,而值引用和標識符必須以小寫字母開頭。然而,使用兩個或多個名稱並不是一個好主意,這些名稱僅因某些字母的大小寫而不同。

必須選擇使用者選擇的名稱,以避免與 ASN.1 的保留字(包括該語言的大部分關鍵字)發生衝突。由於關鍵字通常為大寫,因此在名稱中使用小寫字母可以輕鬆遵守這一點,並且通常也使名稱更具可讀性。名稱的長度沒有上限,這允許使用適當的短語作為物件的名稱。

合法(且可能適當)名稱的範例如下:

  • 未格式化郵政地址

  • 存取控制清單

  • 前十字韌帶

  • 溫度

  • MverifyPDU

  • 創紀錄低

  • ib-g3傳真非基本參數

這些範例中的前幾個可用來做為類型參照,其他範例則可作為識別碼或值參照使用。

請注意,在這些範例中使用了兩種不同的約定來形成多字名稱,因為空格在名稱中無效,因此不能用來分隔各個作品。

“什麼是ASN.1 – 抽象語法表示法?概念、運作方式” 的相關文章

什麼是存取控制?概念、怎麼運作、通用術語

什麼是存取控制?概念、怎麼運作、通用術語

存取控制是一個通用術語,描述管理員如何保護對 Active Directory 中物件的存取。存取控制一詞也用於 Windows Server 和 Windows XP 平臺,以描述如何使用 NTFS 檔案系統來保護檔案和資料夾,以及如何控制共用資料夾、印表機和其他網路資源的存取。存取控制原則怎麼運...

什麼是組織單位 (OU)?概念、怎麼運作

什麼是組織單位 (OU)?概念、怎麼運作

網路百科全書中組織單位 (OU) 的定義。什麼是組織單位 (OU)?組織單位是 Microsoft Windows Server Active Directory 中的一種容器物件,可以包含其他 Active Directory 物件。怎麼運作組織單位 (OU) 可以包...

什麼是RAID?概念、RAID 範例

什麼是RAID?概念、RAID 範例

RAID 是一種使用資料備援在磁碟子系統上實作容錯的技術。什麼是 RAID?RAID 代表獨立磁碟冗餘陣列,是一種透過使用軟體或使用單獨的硬體 RAID 儲存單元使用資料冗餘在磁碟子系統上實現容錯的技術。RAID 範例資料會以數種方式之一分散到磁碟機、稱為 RAID 層級、視所需的備援和效能層級而定...

什麼是批次檔案?概念、怎麼運作的

什麼是批次檔案?概念、怎麼運作的

批次檔案是副檔名為 .bat 或 .cmd 的 ASCII 文件,包含一系列命令。什麼是批次檔案也稱為批次程序,副檔名為 .bat 或包含一系列命令的 .cmd 的 ASCII 檔案。在命令提示字元或登入指令碼中叫用批次檔時,會循序執行這些命令。批次檔案主要用於簡化例行或重複性管理任務的執...

什麼是通用分組無線電服務 (GPRS)?概念、怎麼運作的

什麼是通用分組無線電服務 (GPRS)?概念、怎麼運作的

網絡百科全書中通用分組無線服務 (GPRS) 的定義。什麼是GPRS(通用分組無線服務)?GPRS是時分多址(TDMA)蜂窩電話系統的升級版。通用分組無線電服務(GPRS)使用分組交換代替TDMA系統現有的電路交換技術,以更有效地利用可用帶寬。探地雷達GPRS為用戶提供多達八個獨立的14.4-Kbp...

什麼是G.Lite?概念、怎麼運作的

什麼是G.Lite?概念、怎麼運作的

G.Lite 是非對稱數字用戶線 (ADSL) 的變體,旨在家庭互聯網訪問。繼續閱讀以獲取詳細信息。什麼是 G.Lite?G.Lite 是非對稱數字用戶線 (ADSL) 的變體,旨在家庭互聯網訪問。G.Lite 的下行速率通常高達 1.5 Mbps,上行速率高達 384 Kbps,具體取決於實施。G...