陳康先,陳文杰,康書芳,劉 霞/Chen Kangxian,Chen Wenjie,Kang Shufang,Liu Xia
(1.華南理工大學(xué) 廣州510640;2.廣州杰賽科技股份有限公司技術(shù)中心 廣州510310;3.廣州軍區(qū)空軍指揮自動(dòng)化工作站 廣州510071)
隨著移動(dòng)互聯(lián)網(wǎng)的快速發(fā)展,智能終端的數(shù)量呈爆發(fā)式增長,加速了IPv4 地址的枯竭,使人們對(duì)IPv6的期待日益迫切。為了保護(hù)既有的投資,實(shí)現(xiàn)從IPv4到IPv6的跨越還需要較長的過渡期。在過渡期內(nèi),為保障IPv4網(wǎng)絡(luò)和IPv6網(wǎng)絡(luò)之間的互通,互通網(wǎng)關(guān)設(shè)備將會(huì)扮演非常重要的角色。
目前主流設(shè)備商普遍采用高速網(wǎng)絡(luò)處理器和高性能通用計(jì)算平臺(tái)組成硬件平臺(tái),在高速網(wǎng)絡(luò)處理器上實(shí)現(xiàn)大吞吐量的IPv4 和IPv6網(wǎng)絡(luò)數(shù)據(jù)的收發(fā),在高性能通用計(jì)算平臺(tái)上運(yùn)行IPv4、IPv6 互通協(xié)議和一些應(yīng)用網(wǎng)關(guān)、網(wǎng)絡(luò)管理等功能的軟件,從而形成IPv4/IPv6 互通網(wǎng)關(guān)。為了實(shí)現(xiàn)高可用性和高效性,目前網(wǎng)關(guān)都采取多計(jì)算板的方式進(jìn)行冗余備份以及均衡負(fù)載設(shè)計(jì)。IPv4 和IPv6 互通網(wǎng)關(guān)架構(gòu)如圖1所示。
IPv4/IPv6 互通網(wǎng)關(guān)的DNS 服務(wù)器和普通的純IPv4 或IPv6 服務(wù)器不同,其需要在解析或者逆解析時(shí)對(duì)IP 地址進(jìn)行特殊處理,所以一般轉(zhuǎn)換協(xié)議的DNS服務(wù)器都會(huì)部署在網(wǎng)關(guān)上。目前IPv4/IPv6 互通網(wǎng)關(guān)普遍采用單個(gè)或多個(gè)CPU 進(jìn)行計(jì)算,CPU的單計(jì)算能力雖然強(qiáng)大,但其同時(shí)支持的線程數(shù)不多,而IPv4/IPv6互通網(wǎng)關(guān)經(jīng)常有大流量并發(fā)的情況,所以一般IPv4/IPv6 互通網(wǎng)關(guān)在部署轉(zhuǎn)換協(xié)議和其需要的DNS 服務(wù)器時(shí),為了高效率地處理多用戶的并發(fā)情況,一般采用分布式部署(即轉(zhuǎn)換協(xié)議在一塊計(jì)算板上,其所需要的DNS 服務(wù)器在另外一塊計(jì)算板上)。如果要實(shí)現(xiàn)網(wǎng)關(guān)的高可用性,則需要另外2 塊計(jì)算板作為轉(zhuǎn)換協(xié)議和DNS 服務(wù)器的備份,占用較多的硬件資源。
圖1 IPv4 和IPv6 互通網(wǎng)關(guān)架構(gòu)
另外,IPv4/IPv6 互通網(wǎng)關(guān)在過渡協(xié)議運(yùn)算過程中,需要進(jìn)行大量計(jì)算,如果是多用戶并發(fā)的情況下,需要同時(shí)耗費(fèi)大量的計(jì)算資源,而通用CPU 采用的是串行計(jì)算方式,處理能力有限,導(dǎo)致同時(shí)支持的連接數(shù)量有限。當(dāng)今互聯(lián)網(wǎng)接入設(shè)備眾多,加上各類需要高數(shù)據(jù)流量的業(yè)務(wù)應(yīng)用,網(wǎng)絡(luò)上通過的數(shù)據(jù)流量每年都在急劇增加,必然導(dǎo)致IPv4 和IPv6 互通網(wǎng)關(guān)需要進(jìn)行大量DNS 解析和轉(zhuǎn)換計(jì)算,在網(wǎng)關(guān)CPU 處理能力不足的情況下,將導(dǎo)致網(wǎng)絡(luò)擁塞,降低服務(wù)質(zhì)量。
針對(duì)這些問題,本文基于GPU 資源及其并發(fā)運(yùn)算的能力,在保證轉(zhuǎn)換協(xié)議和DNS 解析協(xié)議性能的情況下,將原本需要2 塊計(jì)算板進(jìn)行的工作集合在一塊計(jì)算板上,降低了網(wǎng)關(guān)設(shè)備的硬件成本,在同樣的硬件資源下,可以做更多冗余備份工作,提高設(shè)備的總體可用性。應(yīng)用GPU 在降低CPU的計(jì)算負(fù)載的同時(shí),提高了IPv4/IPv6 互通網(wǎng)關(guān)單片計(jì)算板的并發(fā)處理能力,可以更好地應(yīng)對(duì)并發(fā)數(shù)據(jù)。
本文提出的解決方案可用于IPv4/IPv6 互通網(wǎng)關(guān)或類似裝置中,該互通網(wǎng)關(guān)在網(wǎng)絡(luò)中的位置如圖1所示,其一端連接IPv4網(wǎng)絡(luò),另一端連接IPv6網(wǎng)絡(luò),IPv4網(wǎng)絡(luò)和IPv6網(wǎng)絡(luò)可以通過該網(wǎng)關(guān)實(shí)現(xiàn)互通的功能。IPv4/IPv6 互通網(wǎng)關(guān)或類似裝置主要是由高性能計(jì)算平臺(tái)和網(wǎng)絡(luò)處理平臺(tái)構(gòu)成,硬件平臺(tái)上部署多塊高性能計(jì)算板,交換板主要用于內(nèi)部對(duì)外的數(shù)據(jù)交換。
基于此,為解決現(xiàn)有的IPv4/IPv6 互通網(wǎng)關(guān)DNS解析存在的問題,本文提出一種基于GPU的DNS 解析方法,利用GPU的并行運(yùn)算能力,在多用戶并發(fā)的情況下,通過GPU 進(jìn)行IPv4/IPv6 互通網(wǎng)關(guān)的DNS 解析運(yùn)算。
在獲取DNS 查詢報(bào)文后,首先對(duì)其進(jìn)行預(yù)處理,生成GPU 可識(shí)別的DNS 查詢數(shù)據(jù)。然后將這些DNS查詢數(shù)據(jù)按并行隊(duì)列寫入CPU 與GPU的第一共享內(nèi)存中。通過GPU 從第一共享內(nèi)存中讀取DNS 查詢數(shù)據(jù),并利用GPU 根據(jù)DNS 查詢數(shù)據(jù)進(jìn)行DNS 解析,生成DNS 解析數(shù)據(jù)分組,將DNS 解析數(shù)據(jù)分組按并行隊(duì)列寫入CPU 與GPU的第二共享內(nèi)存中。最后,從第二共享內(nèi)存中讀取DNS 解析數(shù)據(jù)分組,合并處理DNS解析數(shù)據(jù)分組,重整為網(wǎng)絡(luò)格式數(shù)據(jù)并發(fā)送??傮w框架與流程如圖2所示。
具體流程如下:
①網(wǎng)卡將接收到的報(bào)文放入網(wǎng)卡緩存隊(duì)列中,CPU 會(huì)從該緩存隊(duì)列中過濾出DNS 查詢報(bào)文,并放入DNS 報(bào)文接收隊(duì)列;
②將DNS 報(bào)文接收隊(duì)列中的報(bào)文取出并進(jìn)行預(yù)處理,將報(bào)文整理成GPU 可識(shí)別格式。因?yàn)榫W(wǎng)卡報(bào)文的數(shù)據(jù)都是一維的,為了提高GPU的運(yùn)算效率,GPU處理格式一般是多維格式,所以需要預(yù)先將網(wǎng)絡(luò)報(bào)文處理成多維數(shù)據(jù)格式;
③將預(yù)處理完的報(bào)文放入并行隊(duì)列,等待寫入CPU 和GPU的共享內(nèi)存中,由于CPU 和GPU 在處理數(shù)據(jù)時(shí)的區(qū)別是單核CPU 采用串行的方式而GPU 采用多線程并行的方式,因此,為了充分利用GPU的優(yōu)勢(shì),將需要處理的數(shù)據(jù)報(bào)文并行排列;
④將已經(jīng)預(yù)處理好的并行隊(duì)列統(tǒng)一寫入CPU 與GPU的共享內(nèi)存中,由于CPU 和GPU 數(shù)據(jù)交互部分在整個(gè)過程中會(huì)占用較多時(shí)間,所以會(huì)把數(shù)據(jù)緩沖區(qū)填滿后才進(jìn)行寫入操作;
⑤CPU 將數(shù)據(jù)寫入共享內(nèi)存后,就可以執(zhí)行其他任務(wù),DNS 解析和轉(zhuǎn)換的工作則交由GPU 并行處理,可以有效地利用GPU 空閑資源并節(jié)省CPU 資源;
⑥GPU 獲取到共享內(nèi)存中的隊(duì)列信息后,并行對(duì)各隊(duì)列的DNS 進(jìn)行解析,已經(jīng)解析過的DNS 信息會(huì)預(yù)先保存在GPU 自身的內(nèi)存中,可以提高查詢效率;
圖2 總體框架與流程
⑦對(duì)于還未解析過的DNS 信息,則會(huì)詢問上一級(jí)DNS 進(jìn)行查詢,并將接收到的IPv4 地址根據(jù)轉(zhuǎn)換協(xié)議的轉(zhuǎn)換規(guī)則生成對(duì)應(yīng)的IPv6 地址,并以一定格式保存在GPU的DNS 緩存中。以過渡協(xié)議中的Nat64 和百度域名為例,域名信息和IPv4、IPv6 地址對(duì)應(yīng)關(guān)系見表1 所列。
表1 域名信息和IPv4、IPv6 地址對(duì)應(yīng)關(guān)系
⑧將已經(jīng)處理完成的DNS 解析結(jié)果放入并行隊(duì)列中,并寫入CPU 和GPU的第二塊共享內(nèi)存中;
⑨CPU 在共享內(nèi)存中讀取已處理的結(jié)果,將GPU處理后的數(shù)據(jù)重整為網(wǎng)絡(luò)報(bào)文格式,合并隊(duì)列中的數(shù)據(jù)寫入待發(fā)送隊(duì)列;
⑩網(wǎng)卡接口讀取發(fā)送隊(duì)列中的信息,根據(jù)路由路徑將各數(shù)據(jù)分組通過物理網(wǎng)卡分發(fā)出去。
GPU 在進(jìn)行DNS 解析運(yùn)算時(shí),優(yōu)先在自身GPU內(nèi)存中的DNS 列表中進(jìn)行查詢,若查詢到對(duì)應(yīng)的DNS信息,直接生成解析結(jié)果;若未查詢到對(duì)應(yīng)的DNS 信息時(shí),則訪問上一級(jí)的DNS 服務(wù)器,在上一級(jí)服務(wù)器中獲取DNS 信息,由該DNS 信息生成DNS 解析數(shù)據(jù)分組。DNS 信息通常保存在GPU 內(nèi)存的DNS 列表中,以方便下一次解析運(yùn)算。
GPU 處理流程如圖3所示。
①判斷DNS 請(qǐng)求的類型(如A、AAAA、PTR 等),A表示IPv4 正向解析,即由域名查詢IPv4 地址;AAAA表示IPv6 正向解析,即由域名查詢IPv6 地址;PTR 為方向解析請(qǐng)求。
②判斷DNS 請(qǐng)求是正向解析還是反向解析,然后根據(jù)域名或者IP 地址對(duì)GPU中已有緩存DNS 進(jìn)行查詢。
③如果在緩存中沒有查詢到DNS 記錄,則向上一級(jí)DNS 進(jìn)行請(qǐng)求并將獲取到的DNS 根據(jù)過渡協(xié)議的規(guī)則進(jìn)行轉(zhuǎn)換,并保存到緩存中。如NAT64中的DNS規(guī)則為前綴為2001:da8:ff::/96,則將180.97.33.67 轉(zhuǎn)換為2001:da8:ff::b461:2143。
④根據(jù)類型返回相應(yīng)的處理結(jié)果,并將處理完的數(shù)據(jù)分組放入并行隊(duì)列中。
⑤等隊(duì)列緩沖區(qū)滿后,將處理后的信息寫入共享內(nèi)存中。
IPv4/IPv6 互通網(wǎng)關(guān)上的GPU 資源,通過GPU 編程接口將網(wǎng)關(guān)或類似裝置的DNS 放置到GPU 上運(yùn)行,因?yàn)镚PU 采用的是多線程并行處理的方式,這些方法可以提高IPv4/IPv6 互通網(wǎng)關(guān)在應(yīng)對(duì)多用戶并發(fā)時(shí)的處理能力。
同時(shí),利用了GPU 自身的內(nèi)存資源(顯示內(nèi)存),將DNS 列表放置在顯示內(nèi)存中,在不影響計(jì)算機(jī)CPU所占用內(nèi)存的情況下提高DNS的查詢速度。在保證轉(zhuǎn)換協(xié)議和DNS 解析協(xié)議性能的情況下,將原本需要2 塊計(jì)算板進(jìn)行的工作集合在一塊計(jì)算板上,降低了網(wǎng)關(guān)設(shè)備的硬件成本,在同樣硬件資源的條件下可以做更多冗余備份工作,進(jìn)而提高設(shè)備的總體可用性。
圖3 GPU 處理流程
1 Despres R.IPv6 Rapid Deployment on IPv4 Infrastructures(6rd).http://www.rfc-editor.org/rfc/rfc5569.txt,2010
2 Bao C,Huitema C,Bagnulo M,et al.IPv6 Addressing of IPv4/IPv6 Translators.http://www.rfc-editor.org/rfc/rfc6052.txt,2010
3 Durand A,Droms R,Woodyatt J,et al.Dual-Stack Lite Broadband Deployments Following IPv4 Exhaustion.http://www.rfc-editor.org/rfc/rfc6333.txt,2011
4 Li X,Bao C,Chen M,et al.The China Education and Research Network (CERNET) IVI Translation Design and Deployment for the IPv4/IPv6 Coexistence and Transition.http://www.rfc-editor.org/rfc/rfc6219.txt,2011
5 Bagnulo M,Matthews P,Van Beijnum,et al.Stateful NAT64: Network Address and Protocol Translation from IPv6 Clients to IPv4 Servers.http://www.rfc-editor.org/rfc/rfc6146.txt,2011
6 Bi Jun,Wu Jianping,Leng Xiaoxiang.IPv4/IPv6 Transition Technologies and Univer6 Architecture.Internation Journal of Computer Science and Network Security,2007,7(1):232~242
7 吳賢國,劉敏,李忠誠.面向NAT用戶的IPv6 隧道技術(shù)研究.計(jì)算機(jī)學(xué)報(bào),2007(1):1~9
8 田野,張玉軍,張瀚文等.移動(dòng)IPv6網(wǎng)絡(luò)基于身份的層次化接入認(rèn)證機(jī)制.計(jì)算機(jī)學(xué)報(bào),2007(6):905~909
9 馬同杰,陳蜀宇,陳孝文.基于層次化管理的移動(dòng)IPv6網(wǎng)絡(luò)接入認(rèn)證研究.計(jì)算機(jī)技術(shù)與發(fā)展,2009(10):22~25
10 吳建平,崔勇,李星等.基于軟件線的互聯(lián)網(wǎng)IPv6 過渡技術(shù)構(gòu)架.電信科學(xué),2008(10):23~29