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