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