一種通用的針對(duì)應(yīng)用層協(xié)議的IPv4/IPv6數(shù)據(jù)翻譯網(wǎng)關(guān)及方法
【技術(shù)領(lǐng)域】
[0001] 本發(fā)明屬于互聯(lián)網(wǎng)技術(shù)領(lǐng)域,特別涉及一種通用的針對(duì)應(yīng)用層協(xié)議的IPv4/IPv6 數(shù)據(jù)翻譯網(wǎng)關(guān)及方法。
【背景技術(shù)】
[0002] 隨著互聯(lián)網(wǎng)的發(fā)展,IPv4地址資源已經(jīng)枯竭,而下一代網(wǎng)絡(luò)協(xié)議IPv6是互聯(lián)網(wǎng)工 程任務(wù)組(Internet Engineering Task Force)建議的解決方案。但是IPv6不支持向后兼 容IPv4,所以IPv4向IPv6的過(guò)渡正在成為當(dāng)今互聯(lián)網(wǎng)發(fā)展的嚴(yán)峻挑戰(zhàn)。而且,由于基礎(chǔ)設(shè)施 的升級(jí)以及數(shù)據(jù)的迀移等多方面存在困難,對(duì)于互聯(lián)網(wǎng)內(nèi)容提供商(ICP)來(lái)說(shuō),向IPv6的轉(zhuǎn) 換不能在較短的時(shí)間內(nèi)完成。與此同時(shí),絕大多數(shù)用戶(hù)操作系統(tǒng)都已經(jīng)支持IPv6協(xié)議,并且 IPv6用戶(hù)數(shù)量在迅速上漲。因?yàn)镮Pv4地址嚴(yán)重短缺,一些互聯(lián)網(wǎng)服務(wù)提供商(Internet Service Provider)的新建網(wǎng)絡(luò)使用了IPv6單協(xié)議棧而不是IPv4/IPv6雙協(xié)議棧。因此,彌 補(bǔ)IPv4與IPv6之間的隔閡是網(wǎng)絡(luò)協(xié)議過(guò)渡時(shí)期的重要任務(wù)。
[0003] 為了給IPv6單棧用戶(hù)提供IPv4網(wǎng)絡(luò)服務(wù),一種常見(jiàn)手段是建立IPv4/IPv6翻譯網(wǎng) 關(guān)?,F(xiàn)在已經(jīng)有若干基于翻譯原理的實(shí)現(xiàn),比較常用的是由互聯(lián)網(wǎng)工程任務(wù)組設(shè)計(jì)的 NAT64。它將收到的每一個(gè)IPv6報(bào)文的協(xié)議頭替換成IPv4協(xié)議頭,并轉(zhuǎn)發(fā);反之亦然。IPv4與 IPv6的轉(zhuǎn)換映射關(guān)系記錄在內(nèi)部的動(dòng)態(tài)映射表中。但很多應(yīng)用層協(xié)議的數(shù)據(jù)中也包含IP地 址等信息,這些信息可能被用來(lái)建立新的連接或者發(fā)起新的請(qǐng)求,例如:HTTP協(xié)議中的一個(gè) 用于傳輸HTML頁(yè)面的數(shù)據(jù)報(bào)文攜帶了一個(gè)帶有IP地址形式的URL,如果這個(gè)地址沒(méi)有被翻 譯,那么用戶(hù)將不能訪問(wèn)該URL指向的資源。而對(duì)于其他應(yīng)用層協(xié)議來(lái)說(shuō),這樣的錯(cuò)誤可能 會(huì)導(dǎo)致應(yīng)用程序崩潰。并且現(xiàn)有的翻譯網(wǎng)關(guān)不能支持很多私有應(yīng)用層協(xié)議,這也導(dǎo)致IPv4 向IPv6過(guò)渡困難。
[0004] 針對(duì)上述情況,一種有效的解決方法是實(shí)現(xiàn)一個(gè)應(yīng)用層的翻譯網(wǎng)關(guān),即應(yīng)用層網(wǎng) 關(guān)(Application Layer Gateway)。近年來(lái),應(yīng)用層網(wǎng)關(guān)已經(jīng)成為解決應(yīng)用層協(xié)議問(wèn)題的重 要手段。但實(shí)際上,開(kāi)發(fā)一個(gè)用于IPv4/IPv6翻譯的應(yīng)用層網(wǎng)關(guān)是很困難的,主要因?yàn)椋浩?一,應(yīng)用層協(xié)議種類(lèi)繁多,其對(duì)于協(xié)議格式的定義差別很大,針對(duì)每一種協(xié)議都設(shè)計(jì)一個(gè)翻 譯網(wǎng)關(guān)代價(jià)巨大,甚至很多互聯(lián)網(wǎng)內(nèi)容提供商使用私有協(xié)議,無(wú)法為其設(shè)計(jì)翻譯網(wǎng)關(guān);其 二,正確性不易保證,同樣的內(nèi)容可能有不同的語(yǔ)義,比如HTTP協(xié)議中發(fā)現(xiàn)了一個(gè)IP地址, 但其可能僅是頁(yè)面上顯示的文本,并不用來(lái)請(qǐng)求其他頁(yè)面,這使自動(dòng)識(shí)別協(xié)議內(nèi)容的實(shí)現(xiàn) 變得很困難;其三,翻譯網(wǎng)關(guān)處理一個(gè)數(shù)據(jù)報(bào)文不僅要解析其內(nèi)容格式,還要對(duì)相應(yīng)的數(shù)據(jù) 進(jìn)行修改,這對(duì)于性能提出了很高的要求,并且考慮到靈活性亦不能使用硬件實(shí)現(xiàn)。
【發(fā)明內(nèi)容】
[0005] 為了克服上述現(xiàn)有技術(shù)的缺點(diǎn),本發(fā)明的目的在于提供一種通用的針對(duì)應(yīng)用層協(xié) 議的IPv4/IPv6數(shù)據(jù)翻譯網(wǎng)關(guān)及方法,通過(guò)應(yīng)用層翻譯器對(duì)不同IP協(xié)議的報(bào)文進(jìn)行翻譯,允 許IPv6用戶(hù)訪問(wèn)基于IPv4的服務(wù),提供高效的IPv6與IPv4的互聯(lián)。
[0006] 為了實(shí)現(xiàn)上述目的,本發(fā)明采用的技術(shù)方案是:
[0007] 一種通用的針對(duì)應(yīng)用層協(xié)議的IPv4/IPv6數(shù)據(jù)翻譯網(wǎng)關(guān),部署于ICP側(cè),將上行 IPv6數(shù)據(jù)報(bào)文翻譯成IPv4數(shù)據(jù)報(bào)文,將下行IPv4數(shù)據(jù)報(bào)文翻譯成IPv6數(shù)據(jù)報(bào)文,其翻譯內(nèi) 容包括IP數(shù)據(jù)報(bào)文頭部以及下行IPv4數(shù)據(jù)報(bào)文中包含的用于建立數(shù)據(jù)連接的IPv4地址。
[0008] 其中:網(wǎng)關(guān)體系中包括如下模塊:
[0009] 分類(lèi)器,決定接收到的數(shù)據(jù)報(bào)文的應(yīng)用層協(xié)議類(lèi)型:當(dāng)一個(gè)新的數(shù)據(jù)報(bào)文到來(lái)時(shí), 分類(lèi)器根據(jù)傳輸層協(xié)議及端口來(lái)決定該數(shù)據(jù)報(bào)文的應(yīng)用層協(xié)議類(lèi)型,然后調(diào)用對(duì)應(yīng)的解析 器來(lái)解析該數(shù)據(jù)報(bào)文,如果根據(jù)上述條件有多個(gè)協(xié)議同時(shí)匹配成功,則輪流調(diào)用對(duì)應(yīng)的解 析器,直到有一個(gè)協(xié)議的解析器接受該數(shù)據(jù)報(bào)文;如果分類(lèi)器判定該數(shù)據(jù)報(bào)文不需要處理 跨協(xié)議的翻譯,則跳過(guò)應(yīng)用層處理;
[0010] 解析器,分析應(yīng)用層數(shù)據(jù)并根據(jù)翻譯規(guī)則產(chǎn)生將會(huì)應(yīng)用于該數(shù)據(jù)報(bào)文的翻譯操 作;
[0011] 數(shù)據(jù)報(bào)文修改模塊,執(zhí)行解析器生成的翻譯操作;
[0012] TCP 管理器;
[0013] 流狀態(tài)管理器:與上述其它各模塊交互來(lái)獲取、提供以及更新各種狀態(tài)信息。
[0014] 所述解析器包括由生成引擎根據(jù)協(xié)議描述語(yǔ)言生成可執(zhí)行的應(yīng)用層協(xié)議解析程 序,其輸入為對(duì)于某應(yīng)用層協(xié)議格式的描述,輸出為能夠被數(shù)據(jù)報(bào)文處理引擎調(diào)用的可執(zhí) 行程序代碼,該代碼中包括處理引擎應(yīng)當(dāng)對(duì)該協(xié)議的數(shù)據(jù)報(bào)文做出的翻譯操作。
[0015] IPv4的地址為IPx,端口為PORTx,所述翻譯規(guī)則為:IPx,P0RTx->IPy,P0RTy;
[0016] 當(dāng)解析器找到了 IPv4的地址IPx和端口 PORTx,然后調(diào)用流管理器查找到用于替換 的IPv6的地址IPy和端口 PORTy,則根據(jù)翻譯規(guī)則產(chǎn)生相應(yīng)的操作,將IPx替換成IPy,將 PORTx 替換成 PORTy。
[0017] 所述數(shù)據(jù)報(bào)文處理引擎包含三個(gè)功能模塊:解析器、數(shù)據(jù)報(bào)文修改模塊以及TCP管 理器,數(shù)據(jù)報(bào)文處理引擎采用基于報(bào)文的數(shù)據(jù)處理機(jī)制,利用所述解析器對(duì)相應(yīng)協(xié)議數(shù)據(jù) 報(bào)文進(jìn)行解析,找到所有需要翻譯操作的字段,包括其位置、長(zhǎng)度,并執(zhí)行相應(yīng)的翻譯操作。
[0018] 所述協(xié)議描述語(yǔ)言結(jié)合了詞法分析和語(yǔ)法分析功能,并提供如下額外特性:自動(dòng) 生成終結(jié)符的正則表達(dá)式,進(jìn)而轉(zhuǎn)換成具體的可執(zhí)行代碼;提供常用的翻譯操作接口,使得 僅用一行命令來(lái)代表原來(lái)多行代碼才能實(shí)現(xiàn)的翻譯操作;以及自動(dòng)添加異常處理操作,來(lái) 支持一定程度上的自動(dòng)異常恢復(fù)。
[0019] 所述數(shù)據(jù)報(bào)文修改模塊中,所有的翻譯操作最終均轉(zhuǎn)換成文本替換操作。
[0020] 在所述數(shù)據(jù)報(bào)文修改模塊中,采用如下算法來(lái)加速修改操作的執(zhí)行過(guò)程:
[0021] 首先,將操作集根據(jù)操作開(kāi)始位置升序排序,對(duì)于每個(gè)目標(biāo)位置,判斷是應(yīng)該選擇 來(lái)自操作的結(jié)果還是原始的文本,如果某一個(gè)操作的結(jié)果被選取了,新的數(shù)據(jù)將被拷貝到 目標(biāo)位置,同時(shí)原始文本的遍歷指針將跳至該操作數(shù)據(jù)的結(jié)尾。
[0022] 所述TCP管理器,一方面跟蹤更新TCP序號(hào)和ACK序號(hào),以處理TCP報(bào)文的無(wú)序接收; 另一方面提供緩存能力,以處理TCP重傳和跨越數(shù)據(jù)報(bào)文的應(yīng)用層協(xié)議字段。
[0023] 本發(fā)明還提供了一種基于所述通用的針對(duì)應(yīng)用層協(xié)議的IPv4/IPv6數(shù)據(jù)翻譯網(wǎng)關(guān) 的方法,包括如下步驟:
[0024] 步驟1:用戶(hù)使用協(xié)議描述語(yǔ)言對(duì)其使用的應(yīng)用層協(xié)議進(jìn)行代碼描述,包括協(xié)議頭 部格式及內(nèi)容格式,標(biāo)記出需要執(zhí)行翻譯操作的字段,并指定在該字段上執(zhí)行的操作;
[0025] 步驟2 :根據(jù)步驟1中用戶(hù)的代碼描述,生成可執(zhí)行的解析器子程序;首先,自動(dòng)補(bǔ) 全代碼描述中缺失的規(guī)則,包括終結(jié)符的正則表達(dá)式以及將預(yù)定義的操作接口展開(kāi)為C++ 代碼,補(bǔ)全后的代碼作為中間代碼;然后,將中間代碼分離為詞法規(guī)則和語(yǔ)法規(guī)則,分別送 往對(duì)應(yīng)的分析程序;最后,生成解析器的C++代碼,并集成到翻譯網(wǎng)關(guān)中供其他模塊調(diào)用;
[0026] 步驟3:當(dāng)一個(gè)報(bào)文到來(lái)時(shí),首先被分類(lèi)器接收并進(jìn)行分類(lèi);分類(lèi)是根據(jù)傳輸層協(xié) 議及端口號(hào),如果能夠匹配某個(gè)應(yīng)用層協(xié)議的解析器,則調(diào)用該解析器執(zhí)行后續(xù)操作;如果 匹配到多個(gè)應(yīng)用層協(xié)議,則輪流調(diào)用其對(duì)應(yīng)的解析器,直到存在某解析器表示接受該數(shù)據(jù) 報(bào)文的格式;如果分類(lèi)器判定該數(shù)據(jù)報(bào)文不需要處理跨協(xié)議的翻譯,則跳過(guò)應(yīng)用層處理;
[0027] 步驟4:由步驟3調(diào)用的解析器對(duì)傳入的數(shù)據(jù)報(bào)文的應(yīng)用層數(shù)據(jù)進(jìn)行分析,找到所 有需要被翻譯的協(xié)議字段,包括其位置和長(zhǎng)度,并查詢(xún)流管理器來(lái)獲取翻譯之后的值,并將 這些信息傳遞給數(shù)據(jù)報(bào)文修改模塊;
[0028] 其中,對(duì)于一個(gè)數(shù)據(jù)流的不同方向,將創(chuàng)建兩個(gè)獨(dú)立的解析器分別處理,當(dāng)一個(gè)報(bào) 文處理完畢而數(shù)據(jù)流未結(jié)束時(shí),則解析器狀態(tài)被保存,等待下一個(gè)該數(shù)據(jù)流的報(bào)文到來(lái)之 后,再恢復(fù)運(yùn)行;
[0029] 步驟5:數(shù)據(jù)報(bào)文修改模塊接收步驟4中解析器所傳遞的參數(shù),并執(zhí)行其中包含的 操作;
[0030]步驟6:將修改之后的報(bào)文重新封裝并轉(zhuǎn)發(fā),并在每接收到一個(gè)新的數(shù)據(jù)報(bào)文時(shí)重 復(fù)步驟3-6。
[0031] 本發(fā)明使得IPv6單棧用戶(hù)能夠訪問(wèn)原有IPv4服務(wù),并能夠方便地支持多種應(yīng)用層 協(xié)議,從而有效實(shí)現(xiàn)IPv4與IPv6的互聯(lián)。與現(xiàn)有技術(shù)相比,本發(fā)明的有益效果是:
[0032] 1、可以使用經(jīng)過(guò)特殊設(shè)計(jì)的語(yǔ)言來(lái)定義應(yīng)用層協(xié)議的格式,從而支持多種應(yīng)用層 協(xié)議,并且此語(yǔ)言簡(jiǎn)單方便,降低了實(shí)際部署的復(fù)雜程度。
[0033] 2、針對(duì)每個(gè)單獨(dú)的數(shù)據(jù)報(bào)文進(jìn)行解析和翻譯,并應(yīng)用了更高效的修改算法,相比 于針對(duì)數(shù)據(jù)流的操作在性能上有所提升。
【附圖說(shuō)明】
[0034] 圖1是本發(fā)明通用的針對(duì)應(yīng)用層協(xié)議的IPv4/IPv6數(shù)據(jù)翻譯網(wǎng)關(guān)宏觀示意圖。
當(dāng)前第1頁(yè)
1 
2 
3