用于多核轉(zhuǎn)發(fā)網(wǎng)絡(luò)地址端口轉(zhuǎn)換的端口分配方法和裝置的制造方法
【技術(shù)領(lǐng)域】
[0001]本發(fā)明涉及網(wǎng)絡(luò)通信技術(shù)領(lǐng)域,尤其涉及一種多核轉(zhuǎn)發(fā)網(wǎng)絡(luò)地址端口轉(zhuǎn)換(Network Address Port Translat1n,NAPT)的端口分配方法和裝置。
【背景技術(shù)】
[0002]NAPT是將數(shù)據(jù)包的源互聯(lián)網(wǎng)協(xié)議(Internet Protocol,IP)地址轉(zhuǎn)換成另一個(gè)指定的IP地址,同時(shí)對初始源端口進(jìn)行端口地址轉(zhuǎn)換(Port Address Translat1n,PAT),主要作用于從防火墻內(nèi)部網(wǎng)絡(luò)訪問外部網(wǎng)絡(luò)的情況,隱藏內(nèi)部網(wǎng)絡(luò)使用的IP地址,一定程度上保障私有網(wǎng)絡(luò)安全。
[0003]對于網(wǎng)絡(luò)安全廠商,NAPT的實(shí)現(xiàn)主要就是在網(wǎng)絡(luò)地址轉(zhuǎn)換(Network AddressTranslat1n,NAT)的IP資源池中選擇一個(gè)合法IP地址,并選擇一個(gè)未用的端口號(1024-65535)。如何高性能的查找未用端口號,就是NAPT的性能關(guān)鍵點(diǎn)。
[0004]隨著科技的不斷發(fā)展,現(xiàn)在的防火墻已普遍使用多核處理器。相關(guān)技術(shù)中,在多核轉(zhuǎn)發(fā)場景下都是使用加鎖的方式和普通的查找算法來確定NAPT的端口分配策略,但是,這種端口分配策略使得多核轉(zhuǎn)發(fā)NAPT性能有待提升。
【發(fā)明內(nèi)容】
[0005]本發(fā)明旨在至少在一定程度上解決相關(guān)技術(shù)中的技術(shù)問題之一。
[0006]為此,本發(fā)明的一個(gè)目的在于提出一種用于多核轉(zhuǎn)發(fā)NAPT的端口分配方法,該方法可以提升多核轉(zhuǎn)發(fā)NAPT的性能。
[0007]本發(fā)明的另一個(gè)目的在于提出一種用于多核轉(zhuǎn)發(fā)NAPT的端口分配裝置。
[0008]為達(dá)到上述目的,本發(fā)明第一方面實(shí)施例提出的用于多核轉(zhuǎn)發(fā)NAPT的端口分配方法,包括:接收到報(bào)文后,在CHJ獨(dú)立占用的獨(dú)立資源池中查找是否存在未分配的端口號;如果所述獨(dú)立資源池中存在未分配的端口號,則在所述未分配的端口號中確定匹配的端口號,并將所述匹配的端口號分配給所述報(bào)文;如果所述獨(dú)立資源池中不存在未分配的端口號,則在多核共有的共有資源池中查找是否存在未分配的端口號;如果所述共有資源池中存在未分配的端口號,則在所述未分配的端口號中確定匹配的端口號,并將所述匹配的端口號分配給所述報(bào)文;如果所述共有資源池中不存在未分配的端口號,選擇可用CPU,并將所述報(bào)文轉(zhuǎn)發(fā)給所述可用CHJ進(jìn)行處理。
[0009]本發(fā)明第一方面實(shí)施例提出的用于多核轉(zhuǎn)發(fā)NAPT的端口分配方法,通過為每個(gè)CPU分配獨(dú)立資源池,可以使得多核之間在NAPT資源分配時(shí)互不干擾,性能達(dá)到每核線性增長;通過在獨(dú)立資源池中的資源不足時(shí)再從共有資源池中分配端口號,可以通過較低的復(fù)雜度實(shí)現(xiàn)端口資源的分配,保證連接可以被及時(shí)分配到可用的資源,從而提升多核轉(zhuǎn)發(fā)NAPT性能。
[0010]為達(dá)到上述目的,本發(fā)明第二方面實(shí)施例提出的用于多核轉(zhuǎn)發(fā)NAPT的端口分配裝置,包括:第一查找模塊,用于接收到報(bào)文后,在CHJ獨(dú)立占用的獨(dú)立資源池中查找是否存在未分配的端口號;第一分配模塊,用于在所述獨(dú)立資源池中存在未分配的端口號時(shí),在所述未分配的端口號中確定匹配的端口號,并將所述匹配的端口號分配給所述報(bào)文;第二查找模塊,用于在所述獨(dú)立資源池中不存在未分配的端口號時(shí),在多核共有的共有資源池中查找是否存在未分配的端口號;第二分配模塊,用于在所述共有資源池中存在未分配的端口號時(shí),在所述未分配的端口號中確定匹配的端口號,并將所述匹配的端口號分配給所述報(bào)文;轉(zhuǎn)發(fā)模塊,用于在所述共有資源池中不存在未分配的端口號時(shí),選擇可用CPU,并將所述報(bào)文轉(zhuǎn)發(fā)給所述可用CHJ進(jìn)行處理。
[0011]本發(fā)明第二方面實(shí)施例提出的用于多核轉(zhuǎn)發(fā)NAPT的端口分配裝置,通過為每個(gè)CPU分配獨(dú)立資源池,可以使得多核之間在NAPT資源分配時(shí)互不干擾,性能達(dá)到每核線性增長;通過在獨(dú)立資源池中的資源不足時(shí)再從共有資源池中分配端口號,可以通過較低的復(fù)雜度實(shí)現(xiàn)端口資源的分配,保證連接可以被及時(shí)分配到可用的資源,從而提升多核轉(zhuǎn)發(fā)NAPT性能。
[0012]本發(fā)明附加的方面和優(yōu)點(diǎn)將在下面的描述中部分給出,部分將從下面的描述中變得明顯,或通過本發(fā)明的實(shí)踐了解到。
【附圖說明】
[0013]本發(fā)明上述的和/或附加的方面和優(yōu)點(diǎn)從下面結(jié)合附圖對實(shí)施例的描述中將變得明顯和容易理解,其中:
[0014]圖1是本發(fā)明一實(shí)施例提出的用于多核轉(zhuǎn)發(fā)NAPT的端口分配方法的流程示意圖;
[0015]圖2是本發(fā)明實(shí)施例中在未分配的端口號中確定匹配的端口號的流程示意圖;
[0016]圖3是本發(fā)明實(shí)施例中判斷是否在局部域中分配端口號的流程示意圖;
[0017]圖4是本發(fā)明另一實(shí)施例提出的用于多核轉(zhuǎn)發(fā)NAPT的端口分配方法的流程示意圖;
[0018]圖5是本發(fā)明另一方面實(shí)施例提出的用于多核轉(zhuǎn)發(fā)NAPT的端口分配裝置的結(jié)構(gòu)示意圖;
[0019]圖6是本發(fā)明另一方面實(shí)施例提出的用于多核轉(zhuǎn)發(fā)NAPT的端口分配裝置的結(jié)構(gòu)示意圖。
【具體實(shí)施方式】
[0020]下面詳細(xì)描述本發(fā)明的實(shí)施例,所述實(shí)施例的示例在附圖中示出,其中自始至終相同或類似的標(biāo)號表示相同或類似的模塊或具有相同或類似功能的模塊。下面通過參考附圖描述的實(shí)施例是示例性的,僅用于解釋本發(fā)明,而不能理解為對本發(fā)明的限制。相反,本發(fā)明的實(shí)施例包括落入所附加權(quán)利要求書的精神和內(nèi)涵范圍內(nèi)的所有變化、修改和等同物。
[0021]圖1是本發(fā)明一實(shí)施例提出的用于多核轉(zhuǎn)發(fā)NAPT的端口分配方法的流程示意圖,該方法包括:
[0022]S11:接收到報(bào)文后,在CPU獨(dú)立占用的獨(dú)立資源池中查找是否存在未分配的端口號。
[0023]例如,對應(yīng)多核中的每個(gè)中央處理器(Central Processing Unit,CPU),該CPU接收到報(bào)文后,可以先在自身對應(yīng)的獨(dú)立資源池中查找是否存在未分配的端口號。
[0024]本實(shí)施例中,資源池可以包括:獨(dú)立資源池和共有資源池。獨(dú)立資源池的個(gè)數(shù)與CHJ的總數(shù)相同,分別與每個(gè)CPU對應(yīng)。共有資源池是一個(gè),是多個(gè)CPU共有的資源池。
[0025]端口號的范圍是0到65535,但是,由于相關(guān)規(guī)定中已將0到1023這個(gè)范圍分配給指定服務(wù)。故而對于NAPT而言,實(shí)際上可以用來分配的端口號是1024到65535這一范圍。
[0026]本實(shí)施例中,將1024到65535這一范圍分為獨(dú)立資源池和共有資源池,且獨(dú)立資源池中占用的端口號的個(gè)數(shù)相同。
[0027]假設(shè)參與轉(zhuǎn)發(fā)的CPU個(gè)數(shù)為4個(gè),分別為CPU0-CPU3,他們可以分配并使用的端口號為1024-65536,共有64512個(gè),假設(shè)共有資源池中端口號是15360個(gè),除此之外的端口號共49152個(gè),四個(gè)CPU均被分配12288個(gè),因此,每個(gè)資源池內(nèi)的端口號的情況分別是:
[0028]CPU0對應(yīng)的獨(dú)立資源池:1024-13111;
[0029]CPU1對應(yīng)的獨(dú)立資源池:13312-25599;
[0030]CPU2對應(yīng)的獨(dú)立資源池:25600-37887 ;
[0031 ] CPU3對應(yīng)的獨(dú)立資源池:37888-50175 ;
[0032]共有資源池:50176-65536。
[0033]因此,假設(shè)CPU0接收到報(bào)文后,可以先在CPU0對應(yīng)的獨(dú)立資源池(端口號是13312-25599)中查找是否存在未分配的端口號。
[0034]S12:如果所述獨(dú)立資源池中存在未分配的端口號,則在所述未分配的端口號中確定匹配的端口號,并將所述匹配的端口號分配給所述報(bào)文。
[0035]例如,CPU0經(jīng)過查找判斷出在13312-25599這一范圍內(nèi)存在未分配的端口號,則可以從中選擇出一個(gè)未分配的端口號分配給報(bào)文。
[0036]—些實(shí)施例中,參見圖2,在所述未分配的端口號中確定匹配的端口號,包括:
[0037]S21:獲取上次分配的端口號,確定與所述上次分配的端口號相鄰的下一個(gè)端口號。
[0038]例如,可以對每次分配的端口號進(jìn)行記錄,因此在記錄信息中可以獲取上次分配的端口號。初始時(shí)可以從每個(gè)CPU對應(yīng)的獨(dú)立資源池的最小端口號開始分配。
[0039]例如,CPU0獲取上次分配的端口號是1024,則與上次分配的端口號相鄰的