陳康先,陳文杰,康書芳,劉 霞/Chen Kangxian,Chen Wenjie,Kang Shufang,Liu Xia
(1.華南理工大學 廣州510640;2.廣州杰賽科技股份有限公司技術中心 廣州510310;3.廣州軍區空軍指揮自動化工作站 廣州510071)
隨著移動互聯網的快速發展,智能終端的數量呈爆發式增長,加速了IPv4 地址的枯竭,使人們對IPv6的期待日益迫切。為了保護既有的投資,實現從IPv4到IPv6的跨越還需要較長的過渡期。在過渡期內,為保障IPv4網絡和IPv6網絡之間的互通,互通網關設備將會扮演非常重要的角色。
目前主流設備商普遍采用高速網絡處理器和高性能通用計算平臺組成硬件平臺,在高速網絡處理器上實現大吞吐量的IPv4 和IPv6網絡數據的收發,在高性能通用計算平臺上運行IPv4、IPv6 互通協議和一些應用網關、網絡管理等功能的軟件,從而形成IPv4/IPv6 互通網關。為了實現高可用性和高效性,目前網關都采取多計算板的方式進行冗余備份以及均衡負載設計。IPv4 和IPv6 互通網關架構如圖1所示。
IPv4/IPv6 互通網關的DNS 服務器和普通的純IPv4 或IPv6 服務器不同,其需要在解析或者逆解析時對IP 地址進行特殊處理,所以一般轉換協議的DNS服務器都會部署在網關上。目前IPv4/IPv6 互通網關普遍采用單個或多個CPU 進行計算,CPU的單計算能力雖然強大,但其同時支持的線程數不多,而IPv4/IPv6互通網關經常有大流量并發的情況,所以一般IPv4/IPv6 互通網關在部署轉換協議和其需要的DNS 服務器時,為了高效率地處理多用戶的并發情況,一般采用分布式部署(即轉換協議在一塊計算板上,其所需要的DNS 服務器在另外一塊計算板上)。如果要實現網關的高可用性,則需要另外2 塊計算板作為轉換協議和DNS 服務器的備份,占用較多的硬件資源。

圖1 IPv4 和IPv6 互通網關架構
另外,IPv4/IPv6 互通網關在過渡協議運算過程中,需要進行大量計算,如果是多用戶并發的情況下,需要同時耗費大量的計算資源,而通用CPU 采用的是串行計算方式,處理能力有限,導致同時支持的連接數量有限。當今互聯網接入設備眾多,加上各類需要高數據流量的業務應用,網絡上通過的數據流量每年都在急劇增加,必然導致IPv4 和IPv6 互通網關需要進行大量DNS 解析和轉換計算,在網關CPU 處理能力不足的情況下,將導致網絡擁塞,降低服務質量。
針對這些問題,本文基于GPU 資源及其并發運算的能力,在保證轉換協議和DNS 解析協議性能的情況下,將原本需要2 塊計算板進行的工作集合在一塊計算板上,降低了網關設備的硬件成本,在同樣的硬件資源下,可以做更多冗余備份工作,提高設備的總體可用性。應用GPU 在降低CPU的計算負載的同時,提高了IPv4/IPv6 互通網關單片計算板的并發處理能力,可以更好地應對并發數據。
本文提出的解決方案可用于IPv4/IPv6 互通網關或類似裝置中,該互通網關在網絡中的位置如圖1所示,其一端連接IPv4網絡,另一端連接IPv6網絡,IPv4網絡和IPv6網絡可以通過該網關實現互通的功能。IPv4/IPv6 互通網關或類似裝置主要是由高性能計算平臺和網絡處理平臺構成,硬件平臺上部署多塊高性能計算板,交換板主要用于內部對外的數據交換。
基于此,為解決現有的IPv4/IPv6 互通網關DNS解析存在的問題,本文提出一種基于GPU的DNS 解析方法,利用GPU的并行運算能力,在多用戶并發的情況下,通過GPU 進行IPv4/IPv6 互通網關的DNS 解析運算。
在獲取DNS 查詢報文后,首先對其進行預處理,生成GPU 可識別的DNS 查詢數據。然后將這些DNS查詢數據按并行隊列寫入CPU 與GPU的第一共享內存中。通過GPU 從第一共享內存中讀取DNS 查詢數據,并利用GPU 根據DNS 查詢數據進行DNS 解析,生成DNS 解析數據分組,將DNS 解析數據分組按并行隊列寫入CPU 與GPU的第二共享內存中。最后,從第二共享內存中讀取DNS 解析數據分組,合并處理DNS解析數據分組,重整為網絡格式數據并發送。總體框架與流程如圖2所示。
具體流程如下:
①網卡將接收到的報文放入網卡緩存隊列中,CPU 會從該緩存隊列中過濾出DNS 查詢報文,并放入DNS 報文接收隊列;
②將DNS 報文接收隊列中的報文取出并進行預處理,將報文整理成GPU 可識別格式。因為網卡報文的數據都是一維的,為了提高GPU的運算效率,GPU處理格式一般是多維格式,所以需要預先將網絡報文處理成多維數據格式;
③將預處理完的報文放入并行隊列,等待寫入CPU 和GPU的共享內存中,由于CPU 和GPU 在處理數據時的區別是單核CPU 采用串行的方式而GPU 采用多線程并行的方式,因此,為了充分利用GPU的優勢,將需要處理的數據報文并行排列;
④將已經預處理好的并行隊列統一寫入CPU 與GPU的共享內存中,由于CPU 和GPU 數據交互部分在整個過程中會占用較多時間,所以會把數據緩沖區填滿后才進行寫入操作;
⑤CPU 將數據寫入共享內存后,就可以執行其他任務,DNS 解析和轉換的工作則交由GPU 并行處理,可以有效地利用GPU 空閑資源并節省CPU 資源;
⑥GPU 獲取到共享內存中的隊列信息后,并行對各隊列的DNS 進行解析,已經解析過的DNS 信息會預先保存在GPU 自身的內存中,可以提高查詢效率;

圖2 總體框架與流程
⑦對于還未解析過的DNS 信息,則會詢問上一級DNS 進行查詢,并將接收到的IPv4 地址根據轉換協議的轉換規則生成對應的IPv6 地址,并以一定格式保存在GPU的DNS 緩存中。以過渡協議中的Nat64 和百度域名為例,域名信息和IPv4、IPv6 地址對應關系見表1 所列。

表1 域名信息和IPv4、IPv6 地址對應關系
⑧將已經處理完成的DNS 解析結果放入并行隊列中,并寫入CPU 和GPU的第二塊共享內存中;
⑨CPU 在共享內存中讀取已處理的結果,將GPU處理后的數據重整為網絡報文格式,合并隊列中的數據寫入待發送隊列;
⑩網卡接口讀取發送隊列中的信息,根據路由路徑將各數據分組通過物理網卡分發出去。
GPU 在進行DNS 解析運算時,優先在自身GPU內存中的DNS 列表中進行查詢,若查詢到對應的DNS信息,直接生成解析結果;若未查詢到對應的DNS 信息時,則訪問上一級的DNS 服務器,在上一級服務器中獲取DNS 信息,由該DNS 信息生成DNS 解析數據分組。DNS 信息通常保存在GPU 內存的DNS 列表中,以方便下一次解析運算。
GPU 處理流程如圖3所示。
①判斷DNS 請求的類型(如A、AAAA、PTR 等),A表示IPv4 正向解析,即由域名查詢IPv4 地址;AAAA表示IPv6 正向解析,即由域名查詢IPv6 地址;PTR 為方向解析請求。
②判斷DNS 請求是正向解析還是反向解析,然后根據域名或者IP 地址對GPU中已有緩存DNS 進行查詢。
③如果在緩存中沒有查詢到DNS 記錄,則向上一級DNS 進行請求并將獲取到的DNS 根據過渡協議的規則進行轉換,并保存到緩存中。如NAT64中的DNS規則為前綴為2001:da8:ff::/96,則將180.97.33.67 轉換為2001:da8:ff::b461:2143。
④根據類型返回相應的處理結果,并將處理完的數據分組放入并行隊列中。
⑤等隊列緩沖區滿后,將處理后的信息寫入共享內存中。
IPv4/IPv6 互通網關上的GPU 資源,通過GPU 編程接口將網關或類似裝置的DNS 放置到GPU 上運行,因為GPU 采用的是多線程并行處理的方式,這些方法可以提高IPv4/IPv6 互通網關在應對多用戶并發時的處理能力。
同時,利用了GPU 自身的內存資源(顯示內存),將DNS 列表放置在顯示內存中,在不影響計算機CPU所占用內存的情況下提高DNS的查詢速度。在保證轉換協議和DNS 解析協議性能的情況下,將原本需要2 塊計算板進行的工作集合在一塊計算板上,降低了網關設備的硬件成本,在同樣硬件資源的條件下可以做更多冗余備份工作,進而提高設備的總體可用性。

圖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 隧道技術研究.計算機學報,2007(1):1~9
8 田野,張玉軍,張瀚文等.移動IPv6網絡基于身份的層次化接入認證機制.計算機學報,2007(6):905~909
9 馬同杰,陳蜀宇,陳孝文.基于層次化管理的移動IPv6網絡接入認證研究.計算機技術與發展,2009(10):22~25
10 吳建平,崔勇,李星等.基于軟件線的互聯網IPv6 過渡技術構架.電信科學,2008(10):23~29