中文域名(CDN)的編碼技術是中文域名(CDN)系統的關鍵技術之一。CDN編碼技術就是規范在互聯網上使用CDN的編碼方法,包括字符串預處理框架和中文域名字段預處理的框架。在介紹CDN編碼技術之前需要首先介紹其相關的知識。
欲詳細了解中文域名系統介紹的請進入。
一、字符串預處理(stringprep)
1、字符串(string)
字符串(string)就是由字符組成的序列,可以包含字母、數字、符號和空格等字符,字符可以是任何的Unicode字符,包括ASCII字符和非ASCII字符。事實上,通常在互聯網上傳輸的字符串,突出的例子如互聯網上傳輸的域名(DN,Domain Name)。域名是由字段組成,每個字段又是由字符構成,這些字符在互聯網上傳輸時就形成了字符串。
欲具體了解Unicode字符介紹的請進入。
2、字符串預處理(stringprep)概念
字符串預處理(stringprep)是由IETF的RFC 3454《Preparation of Internationalized Strings(國際化字符串的預處理)》所規范提出的。國際化字符串是指除了包括LDH(字母(Letter)、數字(Digit)和連接符(Hyphen)等)字符外,還包括非LDH字符(如中文字符等)所形成的字符串。這里的國際化是相對于國際化域名(IDN)而言(注意:中文域名(CDN)是IDN的一種)。國際化字符串的預處理簡稱字符串預處理(stringprep)。
字符串預處理?(stringprep)是指在將字符串用于網絡傳輸之前,對其進行一系列的處理過程,以確保字符串具有特定的標準形式。RFC 3454標準定義了一系列表格,這些表格可以被組合為不同的配置,每個配置都定義了所使用的表格和其他可選項?。字符串預處理主要用于互連網協議中,確保在網絡傳輸中字符串的格式和內容符合標準,避免因格式不一致導致的問題。
字符串預處理的具體步驟和目的包括:其一是使用預備過程?:在將字符串進行網絡傳輸之前,先對其進行預備處理,確保字符串具有特定的標準形式。其二是配置選項?:配置選項包括所使用的表格和其他可選項,這些配置確保了字符串的標準化和一致性。我們知道,在C語言中,預處理指令主要用于在編譯前對源代碼進行簡單的加工,如包含頭文件、宏定義等。而字符串預處理則是在網絡傳輸前對字符串進行特定的處理,確保其在網絡中的正確傳輸和解析。兩者雖然都涉及“預處理”的概念,但應用場景和具體操作有所不同。
3、字符串預處理(stringprep)框架
字符串預處理框架確立了一個包含處理Unicode 字符規則的框架模型。其它協議可根據這些規則定義自己的框架,這些框架可使用戶在應用程序中輸入國際化字符串,并且正確地得到處理。RFC 3454不規定如何把非Unicode 碼位轉化成Unicode碼位。字符串預處理框架輸入的是字符串,輸出是字符串或錯誤信息。字符串預處理框架不能解決用戶期望的所有字符變體問題。RFC 3454公布了一系列表格,分為兩類:集合(in)和映射(map)。對于集合(in),stringprep 提供了“特征函數”,即如果形參是集合的一部分則返回值為 True 的函數。對于映射(map),它提供了映射函數,它會根據給定的鍵返回所關聯的值。下表1-3-1給出了stringprep中所有可用函數的列表說明。
表 1-3-1:stringprep中所有可用函數的列表說明
字符串預處理?(stringprep)過程包括:映射、歸一化(或稱標準化)、禁止輸出檢查和雙向字符檢查,其簡要說明詳見下表1-3-2。映射中和歸一化中所說的映射可是一對零,一對一,一對多,多對多或多對一映射,所以輸出的字串有可能比原輸入字串長或短。RFC 3454的內容重點規定了這些過程的要求。
表 1-3-2:字符串預處理?(stringprep)過程簡介
欲詳細了解RFC 3454標準具體內容的請進入。
二、中文域名字段預處理
中文域名字段預處理是字符串預處理的一種框架特例,實現中文域名字段預處理應首先完全實現字符串預處理(stringprep)。其目的是使其能用于中文域名字段,或者檢查其能否用于域名字段。中文域名字段預處理是用來直接處理中文域名字段的,而不是整個域名。中文域名與應用(CDNA)對每個域名字段會調用中文域名字段預處理。在我國國家標準GB/T 44278定義了中文域名與應用(CDNA)框架。
欲詳細了解GB/T 44278標準關于CDNA介紹的請進入。
中文域名字段預處理使用Unicode保留字符表中的字表(見RFC 3454表A.1),如果應用程序在實現CDNA 時使用未分配碼點列表,也應使用該字表;映射時使用RFC 3454的映射表(見RFC 3454表B.1、表B.2和表B.3);歸一化時使用形式的歸一化(NFKC,Normalization Form with Compatibility Composition);“禁止輸出”字符應使用RFC 3454的禁止輸出表(見RFC 3454表C.1~表C.9)。
三、關于Punycode 編碼
1、概述
我們知道,中文域名與應用(CDNA)規定了支持CDN 的架構,在該架構中就規定到中文域名字段字符的編碼要求。該框架要求中文域名名字字符的編碼應采用Punycode 編碼。Punycode 是一種為國際化多語種域名設計的一種簡單高效的轉換編碼方法,Punycode 是 Bootstring 算法的一個特例,Bootstring 的通用算法,來用基礎碼位表示大字符集中的碼位串。Punycode和Bootstring是由IETF RFC 3492《Punycode: A Bootstring encoding of Unicode for Internationalized Domain Names in Applications(IDNA)(Punycode:一種用于IDNA的Bootstring編碼)》所規范,適用于 IDNA,而CDNA的實現應支持IDNA。
RFC 3492要要求,非ASCII 形式的域名字段可用ACE(ASCII Compatible Encoding,ASCII編碼兼容)前綴開始的ACE 形式表示;后綴是Unicode 字串的Punycode 編碼。Punycode 編碼唯一且可逆轉地把Unicode字串轉換成ASCII 字串。Unicode里的ASCII 字符還是按原來的字符顯示,非ASCII 字符用ASCII 字符中LDH 表示。RFC 3492規定了一種叫bootstring 的通用算法來用基礎字符(一般指ASCII字符集中的字符,其等同于我國GB/T 1988規定的編碼)碼位來表示大字符(一般指Unicode字符集里的字符集(ASCII字符除外),其等同于我國GB/T 13000規定的編碼)中的碼位串。Punycode 是Bootstring 算法的特殊形式,它使用了專門的參數使其符合國際化多語種域名應用的需要而設計, Punycode 主要是用來把中文域名字段轉換成ASCII 形式。Bootstring 被設計成具有下列特點:完備性、唯一性、可逆轉性、編碼高效性、簡單性和可持續性等,其具體表述詳見下表3-1。
表 3-1:Bootstring算法的特點
2、Bootstring算法簡介
Bootstring的框架包括4項技術:基礎碼位分離;插入未排序碼位;廣義變長整數;貝葉斯適應(Bias adaptation)。其含義的表述詳見下表3-2。Bootstring算法的內容包括:貝葉斯適應函數;解碼過程;編碼過程;溢出的處理。Bootstring算法的具體要求詳見RFC 3492。
表 3-2:Bootstring框架的簡述
欲詳細了解RFC 3492標準具體內容的請進入。
四、中文域名編碼技術
我國國家標準GB/T 44596《中文域名編碼技術要求》規定了在互聯網體系上使用中文域名(CDN)的編碼規范,以及使用中文域名字段的預處理要求,同時規定了利用國際化域名(IDN)碼進行CDN編碼的技術要求。該國家標準所規范的CDN編碼技術要求,使用了上述的RFC 3454規范的字符串預處理(stringprep)技術和RFC 3492規范的Punycode 編碼方法。另外,我國通信行業標準YDT 2143《基于國際多語種域名體系的中文域名的編碼處理技術要求》也提出了與GB/T 44596國標相同的技術要求。若要詳細了解這兩個國內標準關于CDN編碼技術要求具體內容的請詳見下述附件。
附件 4-1:GB/T 44596-2024《中文域名編碼技術要求》
附件 4-2:YDT 2143-2010《基于國際多語種域名體系的中文域名的編碼處理技術要求》
欲詳細了解中文域名的字表技術要求的請進入。