基于rb樹和位圖混合的網(wǎng)絡(luò)地址端口轉(zhuǎn)換池管理方法
【專利摘要】本發(fā)明公開一種基于RB樹和位圖混合的網(wǎng)絡(luò)地址端口轉(zhuǎn)換池管理方法,融合紅黑樹和位圖兩種數(shù)據(jù)結(jié)構(gòu),實現(xiàn)有效的網(wǎng)絡(luò)地址端口轉(zhuǎn)換池(NAPTPool)管理,設(shè)置網(wǎng)絡(luò)地址端口轉(zhuǎn)換池?fù)碛?4KB大小的端口資源,每個IP地址對應(yīng)于一棵RB樹;整個RB樹初始化為一個根結(jié)點;遍歷RB樹查找具有可分配端口資源的結(jié)點;對于每個RB樹結(jié)點,采用位圖的結(jié)構(gòu)儲存端口號信息,每個bit位對應(yīng)于一個端口號。在相應(yīng)的結(jié)點中線性查找256bits位圖,直至找到可用的端口號返回;當(dāng)端口號隨機(jī)被分配與釋放,更新RB樹。本發(fā)明在接入廣域網(wǎng)中虛擬網(wǎng)關(guān)服務(wù)產(chǎn)品中,可以實現(xiàn)有效的網(wǎng)絡(luò)地址端口轉(zhuǎn)換,使得在不影響端口地址轉(zhuǎn)換性能的前提下,節(jié)省內(nèi)存資源。
【專利說明】基于RB樹和位圖混合的網(wǎng)絡(luò)地址端口轉(zhuǎn)換池管理方法
[0001]
【技術(shù)領(lǐng)域】
[0002]本發(fā)明涉及一種基于RB樹和位圖混合的網(wǎng)絡(luò)地址端口轉(zhuǎn)換池管理方法,應(yīng)用于接入廣域網(wǎng)(WAN)中虛擬網(wǎng)關(guān)服務(wù)產(chǎn)品,籍由融合紅黑(RB)樹和位圖兩種數(shù)據(jù)結(jié)構(gòu),實現(xiàn)有效的網(wǎng)絡(luò)地址端口轉(zhuǎn)換池(NAPT Pool)管理方法,使得在不影響端口地址轉(zhuǎn)換性能的前提下,節(jié)省內(nèi)存資源,屬于計算機(jī)網(wǎng)絡(luò)領(lǐng)域。
【背景技術(shù)】
[0003]網(wǎng)絡(luò)地址轉(zhuǎn)換(Network Address Translation, NAT)屬于接入廣域網(wǎng)(WAN)技術(shù),一種將私有(內(nèi)網(wǎng))IP地址映射為公有(外網(wǎng))IP地址的轉(zhuǎn)換技術(shù),它被廣泛應(yīng)用于各種類型Internet接入方式的網(wǎng)絡(luò)中。NAT不僅可以有效地解決IPv4地址資源短缺的問題,而且能夠有效地避免外部網(wǎng)絡(luò)的攻擊,隱藏保護(hù)內(nèi)網(wǎng)的計算機(jī)。
[0004]NAT的實現(xiàn)方法分為靜態(tài)轉(zhuǎn)換(Static NAT)、動態(tài)轉(zhuǎn)換(Dynamic NAT)和端口地址轉(zhuǎn)換NAPT (Port - Level NAT)三種。靜態(tài)轉(zhuǎn)換是將內(nèi)網(wǎng)私有IP地址轉(zhuǎn)換為公有IP地址,其IP地址是一一對應(yīng)的,是最簡單、最容易實現(xiàn)的方式。動態(tài)轉(zhuǎn)換是將可用的外網(wǎng)IP地址集成NAT池(NAT Pool ),內(nèi)網(wǎng)IP地址可動態(tài)映射到NAT池中的某個IP地址。端口地址轉(zhuǎn)換(Network Address Port Translation, NAPT)采用端口多路復(fù)用方式,內(nèi)網(wǎng)地址映射到可共享的一個外網(wǎng)IP地址的不同端口上,從而最大限度地節(jié)約IP地址資源,因此,端口地址轉(zhuǎn)換NAPT也是網(wǎng)絡(luò)中應(yīng)用最多的地址轉(zhuǎn)換方式。但是NAPT需要考慮如何有效地管理端口資源,提高地址端口轉(zhuǎn)換性能的問題。
[0005]隨著網(wǎng)絡(luò)應(yīng)用不斷涌現(xiàn),越來越多的網(wǎng)絡(luò)服務(wù)供應(yīng)商(Service Provider, SP)擴(kuò)展其增值服務(wù),如虛擬網(wǎng)關(guān)等。通過虛擬化單個服務(wù)供應(yīng)商,提高其網(wǎng)關(guān)的可擴(kuò)展性,支持?jǐn)?shù)千個中小企業(yè)客戶。NAPT是一種虛擬網(wǎng)關(guān)服務(wù),網(wǎng)絡(luò)地址端口轉(zhuǎn)換池(NAPT Pool)需要為成百上千的客戶提供網(wǎng)絡(luò)服務(wù)。目前,大多數(shù)服務(wù)供應(yīng)商SP要求單個NAPT設(shè)備支持2000-4000個IP NAPT Pool,可擴(kuò)展性問題成為所有網(wǎng)關(guān)產(chǎn)品的巨大挑戰(zhàn)?,F(xiàn)有的NAPTPool管理方法可分為基于紅黑(Red Black, RB)樹和基于位圖?;赗B樹的NAPT Pool管理方法可以提供很好性能,滿足端口地址轉(zhuǎn)換的需求。然而,其需要的高內(nèi)存占用率將大大影響系統(tǒng)的性能?;谖粓D的管理方法需要依賴于硬件系統(tǒng),如ASIC、FPGA等,占用的內(nèi)存資源少,但是軟件實現(xiàn)的性能較低。
[0006]綜上所述,如何在接入廣域網(wǎng)(WAN)中虛擬網(wǎng)關(guān)服務(wù)產(chǎn)品中,實現(xiàn)有效的網(wǎng)絡(luò)地址端口轉(zhuǎn)換池(NAPT Pool)管理方法,使得在不影響端口地址轉(zhuǎn)換性能的前提下,節(jié)省內(nèi)存資源,是需要解決的重要問題。
【發(fā)明內(nèi)容】
[0007]發(fā)明目的:針對現(xiàn)有技術(shù)中存在的問題,本發(fā)明提供一種基于RB樹和位圖混合的網(wǎng)絡(luò)地址端口轉(zhuǎn)換池管理方法,解決NAPT Pool端口地址轉(zhuǎn)換時性能和內(nèi)存占用之間的矛盾,在不影響端口地址轉(zhuǎn)換性能的前提下,節(jié)省內(nèi)存資源。
[0008]技術(shù)方案:一種基于RB樹和位圖混合的網(wǎng)絡(luò)地址端口轉(zhuǎn)換池管理方法,包括:
1、構(gòu)建基于RB樹和位圖混合的網(wǎng)絡(luò)地址端口轉(zhuǎn)換池
目前,NAPT支持64K并發(fā)的TCP/UDP鏈接,也就是說每個IP網(wǎng)絡(luò)地址端口轉(zhuǎn)換池(NAPTPool)有64Kbits大小的端口資源。
[0009]具體步驟如下:
步驟1:NAPT Pool中每個IP地址對應(yīng)于一棵RB樹,一棵RB樹占用64Kbits存儲空間。因此,每個IP地址端口轉(zhuǎn)換池(NAPT Pool)擁有64KB大小的端口資源。
[0010]步驟2:初始化RB樹。初始階段,整個RB樹初始化為一個結(jié)點,并作為根結(jié)點。
[0011]2、在基于RB樹和位圖混合的網(wǎng)絡(luò)地址端口轉(zhuǎn)換池查找可用的端口
步驟3:遍歷RB樹查找具有可分配端口資源的結(jié)點。在獲取可用端口資源時,所有操作都可以通過RB樹遍歷,找到可以分配端口資源的節(jié)點。
[0012]步驟4:在RB結(jié)點中分配端口號。在RB樹中,每個結(jié)點占用256bits的儲存空間。對于每個RB樹結(jié)點,采用位圖的結(jié)構(gòu)儲存端口號信息,每個bit位對應(yīng)于一個端口號。若某個bit的值為“ I ”,表示其代表的端口是可用的,未分配;若其值為“0”,表示其代表的端口已分配。也就是說,在RB樹中,每個RB樹結(jié)點管理256個端口,一個256bits位圖對應(yīng)于一個RB樹結(jié)點。一棵RB樹的最大結(jié)點數(shù)是64KB/256 =256。
[0013]因此,在相應(yīng)的結(jié)點中線性查找256bits位圖,直至找到某bit的值為“I”即可,此bit的位置作為可用的端口號返回。為了進(jìn)一步減少CPU時間,提高可用端口資源查找效率,用一個16bits全為“I”的整數(shù),通過“按位與”運(yùn)算,將16bits位的整數(shù)映射為256bits位圖的端口號,快速找到可用的端口號。
[0014]3、當(dāng)端口號隨機(jī)被分配與釋放,更新RB樹。
[0015]步驟5a:若分配的端口號P屬于某個RB樹結(jié)點i可管理的端口號范圍內(nèi),則將結(jié)點i所存儲的位圖對應(yīng)的bit值置為“O”。端口號被分配后,資源被占用,不可用再分配。
[0016]步驟5b:若某個RB樹結(jié)點中對應(yīng)的某個端口號被釋放,則將其結(jié)點對應(yīng)位圖的bit值置為“ I ”。端口資源釋放后,端口號可以被分配。
[0017]步驟5c:若某個RB樹結(jié)點中所對應(yīng)的256端口都已分配完畢,即所有bit值都為“0”,則將該結(jié)點從RB樹中刪除,并動態(tài)調(diào)整RB樹。
[0018]4、性能分析
(I)內(nèi)存空間占用情況
對于基于RB樹和位圖混合的網(wǎng)絡(luò)地址端口轉(zhuǎn)換池管理方法,一個IP端口地址轉(zhuǎn)換池對應(yīng)于一棵RB樹,一棵RB樹占用64Kbits存儲空間,一個IP NAPT Pool擁有64KB大小的端口資源。在RB樹中,每個結(jié)點占用256bits的儲存空間,一棵RB樹最多有256個結(jié)點。因此,在最壞情況下,一個IP NAPT Pool最多需要占用16KB (256bitsX 256)內(nèi)存空間。
[0019]基于RB樹的算法需要為每個IP地址預(yù)分配640KB的存儲空間,基于位圖的算法需要占用8KB的內(nèi)存空間。基于RB樹和位圖的混合算法可以大大地減少內(nèi)存空間的需求,占用的內(nèi)存空間是基于RB樹算法的1/40,是基于位圖算法的2倍。若系統(tǒng)需要支持2048個IP端口地址轉(zhuǎn)換池,采用基于RB樹和位圖的混合算法僅僅需要(2048 X 16KB)32MB存儲空間,這對大多數(shù)的防火墻/網(wǎng)關(guān)系統(tǒng)是可以承受的。
[0020]( 2 )端口資源分配CPU效率
基于RB樹和位圖的混合算法的RB樹最多有256個結(jié)點,原有基于RB樹算法的RB樹最多有32K個結(jié)點,因此,在遍歷RB樹查找具有可分配端口資源時,基于RB樹和位圖的混合算法在CPU效率上可以大幅度提高。此外,基于RB樹和位圖的混合算法的RB樹要求每個結(jié)點存儲256個端口資源使用情況,當(dāng)端口資源的分配與回收后,刪除或增加RB樹結(jié)點的概率大大減少,降低了維護(hù)RB樹的成本。在遍歷RB樹方面,基于RB樹和位圖的混合算法的CPU效率要高于原有的基于RB樹的算法。
[0021]由此可見,本發(fā)明提出的基于RB樹和位圖混合的網(wǎng)絡(luò)地址端口轉(zhuǎn)換池管理方法結(jié)合了基于RB樹和基于位圖方法的優(yōu)點,不僅可以取得與基于RB樹算法相同的性能,占用的內(nèi)存空間大小是基于位圖方法的2倍,是基于RB樹算法的1/40。如果一個虛擬網(wǎng)關(guān)設(shè)備需要支持2048個網(wǎng)絡(luò)地址端口轉(zhuǎn)換池,若采用基于RB樹的方法,單個設(shè)備需要預(yù)分配
1.28GB內(nèi)存空間,而基于RB樹和位圖混合的方法只需要預(yù)分配32MB內(nèi)存空間即可達(dá)到相同的性能。因此,在接入廣域網(wǎng)(WAN)中虛擬網(wǎng)關(guān)服務(wù)產(chǎn)品中,基于RB樹和位圖混合的網(wǎng)絡(luò)地址端口轉(zhuǎn)換池管理方法,可以實現(xiàn)有效的網(wǎng)絡(luò)地址端口轉(zhuǎn)換,使得在不影響端口地址轉(zhuǎn)換性能的前提下,節(jié)省內(nèi)存資源。
【專利附圖】
【附圖說明】
[0022]圖1為本發(fā)明實施例的方法流程圖;
圖2為本發(fā)明實施例的一個初始化的RB樹;
圖3為本發(fā)明實施例中分配端口號I后的RB樹;
圖4為本發(fā)明實施例中分配端口號2、4、6、9后的RB樹。
【具體實施方式】
[0023]下面結(jié)合具體實施例,進(jìn)一步闡明本發(fā)明,應(yīng)理解這些實施例僅用于說明本發(fā)明而不用于限制本發(fā)明的范圍,在閱讀了本發(fā)明之后,本領(lǐng)域技術(shù)人員對本發(fā)明的各種等價形式的修改均落于本申請所附權(quán)利要求所限定的范圍。
[0024]如圖1所示,結(jié)合一個具體實施例介紹本發(fā)明的技術(shù)方案,包括如下步驟:
步驟1:設(shè)置每個IP網(wǎng)絡(luò)地址端口轉(zhuǎn)換池(NAPT Pool)有64Kbits大小的端口資源。NAPT Pool中每個IP地址對應(yīng)于一棵RB樹,一棵RB樹占用64Kbits存儲空間。因此,每個IP地址端口轉(zhuǎn)換池(NAPT Pool)擁有64KB大小的端口資源。
[0025]步驟2:初始化RB樹。初始階段,整個RB樹初始化為一個結(jié)點,并作為根結(jié)點,如附圖2所示。
[0026]步驟3:遍歷RB樹查找具有可分配端口資源的結(jié)點。在獲取可用端口資源時,所有操作都可以通過RB樹遍歷,找到可以分配端口資源的節(jié)點。
[0027]步驟4:分配端口號。在RB樹中,每個結(jié)點占用256bits的儲存空間。對于每個RB樹結(jié)點,采用位圖的結(jié)構(gòu)儲存端口號信息,每個bit位對應(yīng)于一個端口號。若某個bit的值為“1”,表示其代表的端口是可用的,未分配;若其值為“0”,表示其代表的端口已分配。也就是說,在RB樹中,每個RB樹結(jié)點管理256個端口,一個256bits位圖對應(yīng)于一個RB樹結(jié)點。一棵RB樹的最大結(jié)點數(shù)是64K/256 =256。在相應(yīng)的結(jié)點中線性查找256bits位圖,直至找到某bit的值為“I”即可,此bit的位置作為可用的端口號返回。為了進(jìn)一步減少CPU時間,提高可用端口資源查找效率,用一個16bits全為“I”的整數(shù),通過“按位與”運(yùn)算,將16bits位的整數(shù)映射為256bits位圖的端口號,快速找到可用的端口號。端口號I被分配后的RB樹,如圖3所不。
[0028]相對于原有基于RB樹的網(wǎng)絡(luò)地址端口轉(zhuǎn)換池構(gòu)建方法,基于RB樹和位圖混合的網(wǎng)絡(luò)地址端口轉(zhuǎn)換池方法中的RB樹結(jié)點只代表其一段連續(xù)的、未分配的端口號范圍。
[0029]步驟5:當(dāng)端口號隨機(jī)被分配與釋放,得到的RB樹也隨之動態(tài)變化。
[0030]步驟5a:若分配的端口號P屬于某個RB樹結(jié)點i可管理的端口號范圍內(nèi),則將結(jié)點i所存儲的位圖對應(yīng)的bit值置為“O”。如附圖4所示,RB樹結(jié)點A管理的端口號范圍為[0,255],端口號2、4、6、9依次被分配后,使之不可用。
[0031]步驟5b:若某個RB樹結(jié)點中對應(yīng)的某個端口號被釋放,則將其結(jié)點對應(yīng)位圖的bit值置為“I”。
[0032]步驟5c:若某個RB樹結(jié)點中所對應(yīng)的256端口都已分配完畢,即所有bit值都為“0”,則將該結(jié)點從RB樹中刪除。
【權(quán)利要求】
1.一種基于RB樹和位圖混合的網(wǎng)絡(luò)地址端口轉(zhuǎn)換池管理方法,其特征在于,包括以下處理步驟: 步驟1:設(shè)置NAPT Pool中每個IP地址對應(yīng)于一棵RB樹,一棵RB樹占用64Kbits存儲空間,每個IP地址端口轉(zhuǎn)換池(NAPT Pool)擁有64KB大小的端口資源; 步驟2:初始化RB樹;初始階段,整個RB樹初始化為一個結(jié)點,并作為根結(jié)點; 步驟3:遍歷RB樹查找具有可分配端口資源的結(jié)點;在獲取可用端口資源時,所有操作都可以通過RB樹遍歷,找到可以分配端口資源的節(jié)點; 步驟4:在RB結(jié)點中分配端口號;在RB樹中,對于每個RB樹結(jié)點,采用位圖的結(jié)構(gòu)儲存端口號信息,每個bit位對應(yīng)于一個端口號;每個RB樹結(jié)點管理256個端口,一個256bits位圖對應(yīng)于一個RB樹結(jié)點;一棵RB樹的最大結(jié)點數(shù)是64KB/256 =256 ; 在相應(yīng)的結(jié)點中線性查找256bits位圖,直至找到可用端口 ; 步驟5:當(dāng)端口號隨機(jī)被分配與釋放,更新RB樹。
2.根據(jù)權(quán)利要求1所述的基于RB樹和位圖混合的網(wǎng)絡(luò)地址端口轉(zhuǎn)換池管理方法,其特征在于,所述步驟4中,對于每個RB樹結(jié)點,采用位圖的結(jié)構(gòu)儲存端口號信息,每個bit位對應(yīng)于一個端口號;若某個bit的值為“1”,表示其代表的端口是可用的,未分配;若其值為“0”,表示其代表的端口已分配;在相應(yīng)的結(jié)點中線性查找256bits位圖,直至找到某bit的值為“I”即可,此bit的位置作為可用的端口號返回;為了進(jìn)一步提高可用端口資源查找效率,通過一個16bits的整數(shù),映射為256bits位圖的端口號,快速找到可用的端口號。
3.根據(jù)權(quán)利要求2所述的基于RB樹和位圖混合的網(wǎng)絡(luò)地址端口轉(zhuǎn)換池管理方法,其特征在于,所述步驟5中端口號隨機(jī)分配與釋放時,更新RB樹的具體步驟如下: 步驟5a:若分配的端口號P屬于某個RB樹結(jié)點i可管理的端口號范圍內(nèi),則將結(jié)點i所存儲的位圖對應(yīng)的bit值置為“O”;端口號被分配后,資源被占用,不可用再分配; 步驟5b:若某個RB樹結(jié)點中對應(yīng)的某個端口號被釋放,則將其結(jié)點對應(yīng)位圖的bit值置為“ I ” ;端口資源釋放后,端口號可以被分配; 步驟5c:若某個RB樹結(jié)點中所對應(yīng)的256端口都已分配完畢,即所有bit值都為“0”,則將該結(jié)點從RB樹中刪除,并動態(tài)調(diào)整RB樹。
【文檔編號】H04L29/12GK103685600SQ201310676682
【公開日】2014年3月26日 申請日期:2013年12月11日 優(yōu)先權(quán)日:2013年12月11日
【發(fā)明者】毛鶯池, 朱瀝瀝, 接青, 王久龍, 顧剛 申請人:河海大學(xué)