本發(fā)明屬于數(shù)據(jù)通信和網(wǎng)絡(luò)安全領(lǐng)域,尤其涉及一種基于分布式系統(tǒng)的NAT會話管理方法。
背景技術(shù):
隨著互聯(lián)網(wǎng)技術(shù)的迅猛發(fā)展,越來越多的用戶進入互聯(lián)網(wǎng)獲取各種信息,包括當(dāng)前熱門的物聯(lián)網(wǎng)技術(shù)也離不開互聯(lián)網(wǎng)的支撐。但是傳統(tǒng)IPv4網(wǎng)絡(luò)的地址僅有32bit,只能分配給有限的用戶,而IPv6的出現(xiàn)也正是為了解決這個地址資源瓶頸問題。
當(dāng)前傳統(tǒng)IPv4網(wǎng)絡(luò)發(fā)展已經(jīng)相當(dāng)成熟,完全過渡到IPv6還需要一段較長時間。為了解決IPv4網(wǎng)絡(luò)中地址資源瓶頸問題,NAT(Network Address Translation)技術(shù)應(yīng)運而生,該技術(shù)能將多個私網(wǎng)地址映射到一個或多個公網(wǎng)地址,實現(xiàn)網(wǎng)絡(luò)地址的高度重用,解決地址資源瓶頸問題。
分布式系統(tǒng)通常包括多塊控制板卡、多塊業(yè)務(wù)板卡和交換板卡等,每張板卡都是一個獨立的子系統(tǒng),整個系統(tǒng)的正常運行依賴于每個子系統(tǒng)的互相協(xié)作。在網(wǎng)絡(luò)通信設(shè)備中,控制板卡主要用于運行各種路由協(xié)議、各種表項以及規(guī)則的產(chǎn)生和下發(fā)。業(yè)務(wù)板卡主要用于接收控制板卡下發(fā)的各種表項及規(guī)則,并根據(jù)這些表項和規(guī)則進行網(wǎng)絡(luò)數(shù)據(jù)流處理和轉(zhuǎn)發(fā)。交換板卡主要用于連接控制板卡和業(yè)務(wù)板卡,實現(xiàn)高速無阻塞數(shù)據(jù)交換傳遞功能。
NAT技術(shù)廣泛應(yīng)用于基于分布式系統(tǒng)的網(wǎng)絡(luò)通信設(shè)備中,其實現(xiàn)關(guān)鍵在于會話的使用和管理,尋找一種以較低的管理復(fù)雜度使得NAT在分布式系統(tǒng)中高效運行的會話管理方法至關(guān)重要。
專利201510056361.2中通過信息樹數(shù)據(jù)結(jié)構(gòu)對會話進行老化管理:當(dāng)IP信息發(fā)生改變后,將改變前的IP信息以節(jié)點的形式插入到預(yù)設(shè)的IP信息樹型存儲結(jié)構(gòu)的等待樹中,根據(jù)等待樹中的IP節(jié)點數(shù)量,以及老化定時時間,確定是否對流表和NAT會話表進行老化,本方案中采用了樹形結(jié)構(gòu)進行老化管理,實現(xiàn)較為復(fù)雜。
專利200610140776.9中通過單獨創(chuàng)建會話保活報文的方式對會話表項進行保持更新。該方法由于要單獨創(chuàng)建保活報文,帶來了額外的管理開銷。
綜上,分布式系統(tǒng)中的NAT技術(shù)對會話管理的依賴較強,要實現(xiàn)該技術(shù),需要找到一種簡單、高效的會話管理方法。
技術(shù)實現(xiàn)要素:
本發(fā)明所要解決的技術(shù)問題是提供一種基于分布式系統(tǒng)的NAT會話管理方法,該方法有效提高會話鍵值查找速度及會話的老化和查詢效率。
本發(fā)明解決上述技術(shù)問題的技術(shù)方案如下:
一種基于分布式系統(tǒng)的NAT會話管理方法,包括以下步驟:
(1)創(chuàng)建NAT會話:將會話發(fā)起方向IP報文中的五元組信息作為會話發(fā)起方向鍵值,結(jié)合NAT規(guī)則計算出會話回應(yīng)方向鍵值;根據(jù)發(fā)起方向鍵值和回應(yīng)方向鍵值分別計算出hash桶索引,再將發(fā)起方向鍵值和回應(yīng)方向鍵值分別加入到對應(yīng)hash桶中,形成NAT會話;最后將該NAT會話加入到一個雙向鏈表中,完成NAT會話的創(chuàng)建;
(2)對創(chuàng)建的NAT會話進行保持更新:將收到IP報文中的五元組信息作為查詢鍵值,并由該查詢鍵值計算出hash桶索引值,再到對應(yīng)hash桶中查詢對應(yīng)的會話鍵值;通過查詢到的會話鍵值得到對應(yīng)的NAT會話,將會話中當(dāng)前時間更新為系統(tǒng)時間,完成對已創(chuàng)建NAT會話的保持更新,以確保該會話在有通信流量時不被老化刪除;
(3)對更新后的NAT會話進行老化操作:采用一個老化指示指針指向雙向鏈表開始處,并每間隔一段時間從指針指示處延著該雙向鏈表對其中的NAT會話進行老化檢查;在檢查每條會話時,將當(dāng)前時間加上老化時間大于系統(tǒng)時間的會話進行老化處理,同時保留其他會話,并更新所述指示指針位置,完成對更新后的NAT會話的老化操作;
(4)查詢老化操作后的NAT會話:采用一個查詢指示指針指向雙向鏈表開始處,并每間隔一段時間判斷是否有查詢動作需要執(zhí)行;如果需要執(zhí)行查詢動作,便從指針指示處延著雙向鏈表對其中的NAT會話進行查詢,更新所述指示指針位置,完成對老化檢查后的NAT會話的查詢操作。
本發(fā)明的有益效果是:本方法有效提高了會話鍵值查找速度,以及提高了會話的老化和查詢效率。
在上述技術(shù)方案的基礎(chǔ)上,本發(fā)明還可以做如下改進。
進一步,所述步驟(1)的創(chuàng)建NAT會話的具體方法為,
(11)NAT設(shè)備接收到報文時,提取出報文中的IP五元組信息作為會話發(fā)起方向鍵值,并將其保存到會話發(fā)起方向鍵值中,所述IP五元組為源IP、目的IP、源端口、目的端口和協(xié)議號;
(12)對接收到的報文使用會話進行NAT規(guī)則匹配;
(13)根據(jù)NAT規(guī)則匹配結(jié)果,判斷該報文是否需要進行NAT轉(zhuǎn)換,如果不需要做NAT轉(zhuǎn)換,則進入正常轉(zhuǎn)發(fā)流程;如果需要進行NAT轉(zhuǎn)換,則進入下一步;
(14)根據(jù)NAT轉(zhuǎn)換規(guī)則對IP五元組中的源IP、源端口或目的IP、目的端口進行轉(zhuǎn)換,選擇轉(zhuǎn)化后的IP和端口,通過選擇的IP和端口得到該報文對應(yīng)的會話回應(yīng)方向鍵值;
(15)根據(jù)會話發(fā)起方向鍵值和會話回應(yīng)方向鍵值分別計算出hash桶索引值會話發(fā)起方向hash索引和會話回應(yīng)方向hash索引;
(16)根據(jù)計算出的hash桶索引,分別將會話發(fā)起方向鍵值和會話回應(yīng)方向鍵值加入到對應(yīng)的hash桶中;
(17)將會話發(fā)起方向鍵值和會話回應(yīng)方向鍵值對應(yīng)的會話加入到雙向鏈表中,便于老化和查詢操作。
采用上述進一步方案的有益效果是:根據(jù)IP報文五元組信息將所有會話發(fā)起方向鍵值和回應(yīng)方向鍵值分開,并均勻散列到不同的hash桶中,可有效減少同一會話中兩個方向的報文流量以及不同會話流量間的hash訪問沖突,提高報文轉(zhuǎn)發(fā)時查詢會話鍵值的效率。
進一步,所述步驟(2)對創(chuàng)建的NAT會話進行保持更新方法為,
(21)NAT設(shè)備接收到報文時,提取報文中的IP五元組信息作為會話鍵值,并保存到會話鍵值中;
(22)用會話鍵值計算出hash桶索引值,并到該hash桶中查詢該會話鍵值;
(23)判斷該hash桶中是否查詢到該會話鍵值,如果未查詢到該會話鍵值,則返回會話創(chuàng)建流程,重新創(chuàng)建NAT會話;如果查詢到該會話鍵值,則進入下一步;
(24)獲取當(dāng)前系統(tǒng)時間,并將該會話鍵值對應(yīng)會話中的當(dāng)前時間更新為當(dāng)前系統(tǒng)時間,保證會話不被老化刪除。
采用上述進一步方案的有益效果是:在NAT報文轉(zhuǎn)發(fā)查詢會話鍵值的同時,采用捎帶更新的方式對會話進行保持更新,避免了對會話鍵值的二次查詢,簡化更新流程、提高會話更新效率。
進一步,所述步驟(3)對更新后的NAT會話進行老化操作方法為,
(31)將老化指示指針指向雙向鏈表開始處;
(32)將每次老化檢查的會話條數(shù)最大值設(shè)置為max,將已檢查會話條數(shù)設(shè)置為0;
(33)判斷進行老化檢查的會話條數(shù)是否大于等于最大值max或雙向鏈表中是否已無會話;如果是,則進入步驟(34);如果否,則進入步驟(35);
(34)延時一段時間后返回步驟(32)進行下一次老化檢查;
(35)獲取老化指示指針?biāo)赶驎挼漠?dāng)前時間、老化時間和系統(tǒng)時間;
(36)判斷會話當(dāng)前時間與會話老化時間之和是否小于系統(tǒng)時間,如果是,則進入步驟(37);如果否,則進入步驟(38)說明該會話已較長時間無流量通過,
(37)將該會話老化刪除,并釋放相關(guān)資源,更新老化指示指針,使老化指示指針指向雙向鏈表中的下一條會話;
(38)不對該會話進行老化刪除操作,直接更新老化指示指針,使老化指示指針指向雙向鏈表中的下一條會話;
(39)返回步驟(33),循環(huán)對會話進行老化檢查操作。
采用上述進一步方案的有益效果是:采用單獨的雙向鏈表和老化指示指針結(jié)合的方式完成對NAT會話的老化操作,避免了在會話老化查詢過程中對hash桶二次加鎖,在提高會話老化效率的同時不影響NAT報文的轉(zhuǎn)發(fā)效率。
進一步,所述步驟(4)查詢老化操作后的NAT會話方法為,
(41)將會話查詢指示指針指向雙向鏈表開始處;
(42)判斷當(dāng)前是否需要進行查詢操作,如果不需要執(zhí)行查詢操作,則進入步驟(43);如果需要執(zhí)行查詢操作,則進入步驟(44);
(43)延時一段時間后返回步驟(42);
(44)設(shè)置每次能查詢的會話條數(shù)最大值為max,設(shè)置已查詢的會話條數(shù)為0;
(45)判斷已查詢會話條數(shù)是否大于等于最大值max或雙向鏈表中是否已無會話,如果是,則返回步驟(43);如果否,則進入步驟(46);
(46)獲取查詢指示指針當(dāng)前所指向會話的信息,完成當(dāng)前會話的查詢;
(47)更新查詢指示指針,使其指向雙向鏈表中的下一條會話;
(48)返回步驟(45),對雙向鏈表中的其他會話進行查詢。
采用上述進一步方案的有益效果是:采用單獨的雙向鏈表和查詢指示指針結(jié)合的方式完成對NAT會話的查詢操作,避免了在會話查詢過程中對hash桶二次加鎖,在提高會話查詢效率的同時不影響NAT報文的轉(zhuǎn)發(fā)效率。
附圖說明
圖1是分布式系統(tǒng)通用架構(gòu)圖;
圖2是本發(fā)明實施例中的會話結(jié)構(gòu)圖;
圖3是本發(fā)明實施例中的hash桶會話管理結(jié)構(gòu)圖;
圖4是本發(fā)明實施例中的會話創(chuàng)建流程圖;
圖5是本發(fā)明實施例中的會話保持更新流程圖;
圖6是本發(fā)明實施例中的會話老化流程圖;
圖7是本發(fā)明實施例中的會話查詢流程圖。
具體實施方式
以下結(jié)合附圖對本發(fā)明的原理和特征進行描述,所舉實例只用于解釋本發(fā)明,并非用于限定本發(fā)明的范圍。
圖1是分布式系統(tǒng)通用架構(gòu),包括控制板卡、交換板卡和業(yè)務(wù)板卡。本發(fā)明實施例中重點關(guān)注的是業(yè)務(wù)板卡,NAT模塊運行在業(yè)務(wù)板卡上。每張業(yè)務(wù)板卡都是多CPU系統(tǒng),可根據(jù)實際情況進行功能定制,并不局限于本實施例。如本實施例中,業(yè)務(wù)板卡的CPU0用于完成會話的老化檢查和查詢工作,其他CPU用于完成數(shù)據(jù)業(yè)務(wù)的轉(zhuǎn)發(fā)、NAT會話創(chuàng)建和保持更新功能。
圖2是本發(fā)明實施例中的會話結(jié)構(gòu)圖,圖中每條會話結(jié)構(gòu)中都含有一個會話發(fā)起方向鍵值、會話回應(yīng)方向鍵值、雙向鏈表節(jié)點及其他信息。會話發(fā)起方向鍵值中保存會話發(fā)起方向報文的IP五元組信息,包括報文的源IP、源端口、目的IP、目的端口和協(xié)議號,會話回應(yīng)方向鍵值保存了會話回應(yīng)方向報文的IP五元組信息,雙向鏈表節(jié)點用于將新創(chuàng)建會話加入到雙向鏈表中。
圖3是本發(fā)明實施例中的hash桶會話管理結(jié)構(gòu)圖,hash桶大小為N,采用hash鏈表結(jié)構(gòu)處理hash沖突。桶中存放會話的IP五元組信息,稱為會話鍵值,包括會話中的發(fā)起方向鍵值和回應(yīng)方向鍵值。
為了解決分布式系統(tǒng)NAT技術(shù)中的會話管理問題,本發(fā)明提出一種NAT會話管理方法,其中包括:NAT會話的創(chuàng)建方法;NAT會話的保持更新方法;NAT會話的老化方法;NAT會話的查詢方法。
在NAT設(shè)備內(nèi)部,每個報文根據(jù)IP五元組被歸類到不同的報文流中,每一種報文流將對應(yīng)一條NAT會話。
對于NAT會話的創(chuàng)建方法如下:當(dāng)NAT設(shè)備收到需要做NAT的報文流第一個報文時,提取出報文中的IP五元組信息在會話發(fā)起方向鍵值中保存,同時可根據(jù)NAT轉(zhuǎn)換規(guī)則對IP五元組中的源IP、源端口或目的IP、目的端口進行轉(zhuǎn)換,將轉(zhuǎn)換后的IP五元組作為hash算法輸入?yún)?shù),計算出一個會話發(fā)起方向hash值。同時,通過NAT中的源IP和源端口轉(zhuǎn)換模塊可以得到該報文流的響應(yīng)報文IP五元組信息在會話回應(yīng)方向鍵值中保存,同樣的方式進行hash計算得到會話響應(yīng)方向的hash值,通過計算出的兩個會話hash值分別將該會話兩個方向的IP五元組信息會話發(fā)起方向鍵值和會話回應(yīng)方向鍵值存入對應(yīng)的hash桶中,對于hash沖突可采用hash鏈表結(jié)構(gòu)解決,也可以采用其他方式解決。如果hash桶大小及hash算法設(shè)置合適,可將會話鍵值均勻散列到不同的hash桶中,加快會話的插入、查詢、刪除等操作,在較大程度上提升NAT性能。
圖4是本發(fā)明實施例中的會話創(chuàng)建流程圖,NAT模塊啟動后從使能了NAT功能的接口接收報文,進入102流程提取報文中的IP五元組信息,并將其保存到會話發(fā)起方向鍵值中;具體地,報文進入103流程使用會話進行NAT規(guī)則匹配;然后進入判斷單元104,通過NAT規(guī)則匹配結(jié)果判斷該報文是否需要做NAT轉(zhuǎn)換,如果不需做NAT轉(zhuǎn)換則進入105,走普通轉(zhuǎn)發(fā)流程;如果需要做NAT轉(zhuǎn)換,進入106模塊進行IP和端口選擇,通過選擇出的IP和端口可以得到該報文對應(yīng)的會話回應(yīng)方向鍵值;然后進入到107流程,使用會話發(fā)起方向鍵值和會話回應(yīng)方向鍵值分別計算出hash桶索引值會話發(fā)起方向hash索引和會話回應(yīng)方向hash索引;進入108流程后,根據(jù)計算出的hash桶索引分別將會話發(fā)起方向鍵值和會話回應(yīng)方向鍵值加入到對應(yīng)的hash桶中;進入109流程后,將會話發(fā)起方向鍵值和會話回應(yīng)方向鍵值對應(yīng)的會話加入到雙向鏈表中,便于老化和查詢操作。
對于NAT會話的保持更新方法如下:當(dāng)某個報文流對應(yīng)的會話在NAT設(shè)備中已經(jīng)建立時,需要對會話時間進行不斷更新以確保該會話在有通信流量時不被老化刪除。具體方法是:系統(tǒng)或NAT模塊運行一個時鐘,該時鐘能自動更新當(dāng)前時間,當(dāng)NAT設(shè)備從使能了NAT功能的接口接收到報文時,同樣提取出報文的IP五元組進行hash計算,進一步地在該hash值對應(yīng)的hash桶中可查找到是否有該報文對應(yīng)的會話,如果有便將該NAT會話的當(dāng)前時間更新為時鐘的當(dāng)前時間,以便在老化流程中不被老化刪除。
圖5是本發(fā)明實施例中的會話保持更新流程圖,NAT模塊啟動后從使能了NAT功能的接口接收報文,進入202流程提取報文的IP五元組信息,并保存到會話鍵值中;進入203流程用會話鍵值計算出hash桶索引值,并到該hash桶中查詢該會話鍵值;進入204判斷單元,如果在該hash桶中沒有查詢到該會話鍵值,則繼續(xù)走205會話創(chuàng)建流程;如果查詢到了,則獲取當(dāng)前系統(tǒng)時間,并將該會話鍵值對應(yīng)會話中的當(dāng)前時間更新為當(dāng)前系統(tǒng)時間,保證會話不被老化刪除。
對于NAT會話的老化方法如下:由于前期創(chuàng)建的NAT會話被分插到了不同的hash桶中,要對會話進行老化操作,需要對某個hash桶進行加鎖操作,但這樣勢必引起hash桶頻繁加鎖,降低NAT性能。為了解決該問題,本發(fā)明提出將新創(chuàng)建的會話在加入到hash桶的同時,也都同時加入到一個雙向鏈表中,初始化時用一個老化指示指針指向該雙向鏈表頭部。NAT模塊啟動一個老化定時器,每間隔一段時間便從老化指示指針處開始延著雙向鏈表,對其中的會話進行老化檢查操作。檢查方法是獲取當(dāng)前系統(tǒng)時間、會話中保存的當(dāng)前時間和會話老化時間,如果會話保存的當(dāng)前時間+會話老化時間<當(dāng)前系統(tǒng)時間,則將會話老化掉,反之則不進行老化操作,保留會話。最后更新老化指示指針指向位置,保存下一次老化檢查開始處。
圖6是本發(fā)明實施例中的會話老化流程圖,NAT模塊啟動后,進入302初始化階段,將老化指示指針指向雙向鏈表開始處。然后進入303,將每次最多老化檢查的會話條數(shù)設(shè)置為max,將已檢查會話數(shù)設(shè)置為0;然后進入304判斷單元,如果進行老化檢查的會話條數(shù)大于等于最大值max或雙向鏈表中已無會話,則進入305,延時一段時候后進行下一次老化檢查;反之,進入306,獲取老化指示指針?biāo)赶驎挼漠?dāng)前時間、老化時間和系統(tǒng)時間。然后進入307判斷單元,如果會話當(dāng)前時間+會話老化時間<系統(tǒng)時間,說明該會話已較長時間無流量通過,進入308流程,將該會話老化刪除并釋放相關(guān)資源,然后進入309流程更新老化指示指針。反之,則不對該會話進行老化刪除操作,直接進入309流程更新老化指示指針,使老化指示指針指向雙向鏈表中的下一條會話。最后,再次進入303流程,循環(huán)對會話進行老化檢查操作。
對于NAT會話的查詢方法如下:初始時,使用一個查詢指示指針指向雙向鏈表頭部,每當(dāng)有查詢命令時,便從查詢指示指針指向處開始遍歷查詢雙向鏈表中的會話項,查詢結(jié)束后更新查詢指示指針指向位置,待下一次查詢操作。
圖7是本發(fā)明實施例中的會話查詢流程圖,NAT模塊啟動后,進入402初始化階段將會話查詢指示指針指向雙向鏈表開始處,然后進入404判斷單元,判斷當(dāng)前是否需要進行查詢操作。如果不需要則進入403,延時一段時間后再進入404判斷單元。如果需要執(zhí)行查詢操作,則進入405流程,設(shè)置每次最多能查詢的會話條數(shù)為max,設(shè)置已查詢的會話條數(shù)為0;然后進入406判斷單元,如果已查詢會話條數(shù)大于等于max或雙向鏈表中已無會話,則進入403,延時一段時間后再進入404判斷單元;反之,進入407流程,獲取查詢指示指針當(dāng)前所指向會話的信息,完成當(dāng)前會話的查詢。然后進入408流程,更新查詢指示指針,使其指向雙向鏈表中的下一條會話;最后,再次進入406判斷單元,對雙向鏈表中的其他會話進行查詢。
由于本發(fā)明提出的會話管理方法適用于分布式系統(tǒng),在分布式網(wǎng)絡(luò)通信設(shè)備中,NAT模塊通常都工作在業(yè)務(wù)板卡上,對于各個業(yè)務(wù)板卡會話的保持更新、老化和查詢方法一致。通常網(wǎng)絡(luò)通信設(shè)備中的業(yè)務(wù)板卡都是多CPU(Central Processing Unit)系統(tǒng),CPU資源可以按需進行分配和定制,視具體需求不同而不同,本發(fā)明中使用負(fù)責(zé)流量轉(zhuǎn)發(fā)的CPU對NAT會話進行創(chuàng)建和保持更新操作,另外單獨分配一個CPU或多個執(zhí)行NAT會話的老化和查詢操作,但不僅限于此分配方式。
以上所述僅為本發(fā)明的較佳實施例,并不用以限制本發(fā)明,凡在本發(fā)明的精神和原則之內(nèi),所作的任何修改、等同替換、改進等,均應(yīng)包含在本發(fā)明的保護范圍之內(nèi)。