專利名稱:數據報文的雙向轉換方法
技術領域:
本發明涉及數據通信系統中數據報文的轉換方法,特別是數據報文的雙向轉換方法。
背景技術:
在數據通信系統中,有大量的數據報文需要進行雙向轉換。例如在網絡地址轉換設備(NAT)、Web流負載均衡設備、動態防火墻等需要對數據報文進行轉換的設備中,數據通信過程中對數據報文的轉換通常是雙向的,即一個方向的數據報文按照特定的轉換信息進行轉換,而反方向的數據報文也按照所述特定的轉換信息進行還原方式的轉換,以此來完成數據報文的雙向轉換任務。對于不同的數據報文其轉換信息也是不同的,例如,在數據報文轉換過程中,轉換信息可以是轉換前后IP地址的映射關系和/或轉換前后TCP/UDP端口號的映射關系。因此,對于每個不同的數據報文的轉換信息需要進行記錄,以用于后續的相同特征的數據報文的正向轉換,和反方向數據報文的還原轉換。
當數據通信系統中一些用于數據報文轉換的通信設備進行雙向的數據報文轉換時,對于同一數據報文的正反雙向的轉換,其正方向和反方向的轉換需要相同的轉換信息,而對于兩個方向而言,索引轉換信息使用的數據報文的特征是不同的。參照圖1,數據報文的轉換信息保存在樹形數據結構的葉子節點中。將一個模式為X的數據報文轉換為模式為Y的數據報文,是通過提取模式為X的數據報文中的特征來索引存放轉換信息的一個樹形數據結構,索引到對應的轉換信息,按照該轉換信息完成模式為X的數據報文轉換為模式為Y的數據報文的正向轉換;而對應的反向轉換是通過提取模式為Y的數據報文中的特征來索引存放同一轉換信息的另一個樹形數據結構,索引到對應的轉換信息,按照該轉換信息完成模式為Y的數據報文轉換為模式為X的數據報文的反向轉換。不同的數據報文包括有不同的IP地址和/或TCP/UDP端口號從而構成了不同模式的數據報文。上述用于數據報文雙向轉換的轉換信息的索引方式,是采用分別建立以模式為X的數據報文的特征進行索引和以模式為Y的數據報文的特征進行索引的兩個樹形數據結構的方式來實現的。
在上述數據報文的雙向轉換過程中,根據同一數據報文不同的轉換方向要分別索引存儲相同轉換信息的兩個樹形數據結構。而正反雙向的索引使用的數據報文的特征不同,因此兩個樹形數據結構實際上是不相關的,為此系統要同時維護兩個樹形數據結構,這樣就增加了額外的維護工作。同時對于同一數據報文的正反雙向轉換而言,兩個樹形數據結構的葉子節點處所存儲的轉換信息是相同的,即每個正向的轉換信息在反向轉換的樹形數據結構中又被重復記錄了一次,因此也會造成內存空間的極大浪費。
為了解決上述轉換信息被重復記錄的問題,可以僅在正向或反向轉換的樹形數據結構中的葉子節點處記錄一些指針,參考圖2,是在反向轉換的樹形數據結構中的葉子節點處記錄指針的情況,該指針指向正向轉換的樹形數據結構的對應葉子節點,該對應葉子節點中存儲有相應的轉換信息,這樣在數據報文進行反向轉換時,可以根據該數據報文的特征在反向樹形數據結構中索引對應于該數據報文的指針,根據指針的指向到正向轉換的樹形數據結構中索引對應于該數據報文的轉換信息,然后依據該轉換信息進行反向的數據報文轉換。上述方法可以在一定程度上解決由于重復記錄轉換信息所造成的內存資源浪費問題,然而根據反向樹形數據結構中指針的指向去索引正向樹形數據結構中的轉換信息,會增加一次對內存的操作,即造成一次額外的內存讀操作。
在數據通信系統中,用于數據報文轉換的設備特別是互聯網骨干和核心設備,其內存的使用空間是非常寶貴的;同時在進行大流量的數據報文的轉換過程中,其對內存的讀寫速度直接影響到設備的吞吐量。
綜上所述,找到一種既能節約內存占用空間又能減少對內存的操作次數的數據報文雙向轉換的方法就顯得尤其重要。
發明內容
本發明的目的在于提供一種轉換效率更高的數據報文的雙向轉換方法,使用該方法能夠節約存儲轉換信息所使用的內存空間,也能夠減少對內存的操作次數。
為了實現上述的目的,提出的具體方案如下建立一個用于存儲數據報文轉換信息的存儲結構;對每一數據報文進行正向轉換時,首先在所述存儲結構中索引是否有與該數據報文相對應的轉換信息,如果有,利用該轉換信息進行轉換;如果沒有,創建該數據報文的轉換信息存儲到所述存儲結構中,并按照創建的轉換信息進行轉換;對該數據報文進行反向轉換時,利用所述存儲結構中存儲的相應的轉換信息進行轉換。
其中所述轉換信息包括數據報文轉換前的IP地址和轉換后的IP地址和/或數據報文轉換前的協議端口號和轉換后的協議端口號,所述數據報文轉換后的IP地址和/或轉換后的協議端口號與所述存儲結構中存儲轉換信息的位置滿足對應關系。在所述數據報文反向轉換時,根據數據報文轉換后的IP地址和/或轉換后的協議端口號,通過所述的對應關系,得到所述存儲結構中存儲轉換信息的位置,讀取該位置中的轉換信息進行轉換。
采用本發明所述的數據報文的雙向轉換方法后,轉換信息在內存空間僅僅存儲了一次,節約了所占用的內存空間,同時也減少了系統的維護工作量,通過存儲結構中存儲轉換信息的位置和轉換后數據報文的特征的對應關系,數據報文反向轉換時可以快速索引到對應的轉換信息進行數據報文的反向轉換,從而避免了額外的對內存的操作,提高了數據報文的轉換速度。
圖1為現有的采用兩個樹形數據結構存儲轉換信息的數據報文的雙向轉換方法示意圖;圖2為現有的采用指針形式的兩個樹形數據結構存儲轉換信息的數據報文的雙向轉換方法示意圖;圖3是應用網絡地址轉換原理的網絡結構示意圖;圖4是NAT設備進行數據報文的雙向轉換過程示意圖;圖5是本發明所述方法的實施例流程圖;圖6是圖5所述實施例采用的轉換信息的存儲方案;圖7是圖6方案中葉子節點與轉換信息的存儲位置的對應關系圖;圖8是存儲了轉換信息的存儲結構的內存地址和轉換后數據報文的特征滿足對應關系的二維表結構。
具體實施例方式
下面以采用網絡地址轉換NAT設備對TCP/UDP數據報文進行雙向轉換為例,結合附圖對本發明的方案作進一步的詳細闡述。
對于整個互聯網來說,合法或公有的IP地址資源是十分有限的,同時,在整個互聯網上連接著大量的局域網,如果局域網內部的網絡節點也占用合法的IP地址,則更會加重合法IP地址的緊缺。因此,為了充分利用合法的IP地址,解決合法IP地址短缺的問題,通常,在一個局域網內部采用私有IP地址標識網絡節點上的各個主機。這樣在局域網內部與外部互聯網間的通信過程中,例如局域網內部向外部互聯網發送數據報文的過程中,通常利用NAT方法,即網絡地址轉換的方法把局域網內部的私有IP地址轉換為合法的IP地址后再進行數據報文的向外轉發,相反,對于一個從外面,即從互聯網進入局域網的數據報文,也要利用NAT方法把合法的IP地址轉換為對應的私有IP地址,再進行數據報文的反向發送。現在NAT方法通常用在數據通信系統的路由器、Web流均衡器和動態防火墻中,來完成私有IP地址和合法IP地址的雙向轉換,并對局域網內部的網絡結構給予安全保證。
采用上述原理的網絡結構參考圖3,在局域網接入互聯網處要設置有網絡地址轉換NAT設備,NAT設備處理所有網絡內外之間的數據報文轉換。NAT設備具有內網端口和外網端口,其中內網的端口對應私有的IP地址,外網端口對應合法的IP地址。當局域網內部的1臺主機A(其私有IP地址即數據報文轉換前的IP地址為192.168.0.1)要訪問互聯網上的服務器X(服務器X的IP地址為202.112.7.12),設定局域網內部為主機A分配的TCP/UDP端口號為1024,服務器X的TCP/UDP端口號為口號為21,此時主機A將數據報文(192.168.0.11024,202.112.7.1221)發向NAT設備,當NAT設備接收到此數據報文后,NAT設備會動態地分配1個未用的合法的TCP/UDP端口號10001替換原數據報文私有的TCP/UDP端口號1024,并分配一個合法的IP地址100.0.0.2替換原數據報文私有的IP地址192.168.0.1,這樣經NAT設備轉換后的數據報文為(100.0.0.210001,202.112.7.1221),計算數據報文的校驗然后發向互聯網。由此可以看到此數據報文中已經不含任何私有地址的信息。NAT設備進行數據報文轉換時記錄這對映射192.168.0.11024<->100.0.0.210001,并把這對映射保存到一個存儲結構中。以后當NAT設備接收到這對主機間的任何一個數據報文時,NAT設備會查詢存儲結構中是否已經記錄有該轉換信息,即上述的映射關系,如果有,再根據這條轉換信息,即映射關系使其順利通過NAT設備的正向轉換,反之亦然。
上述的私有IP地址即為數據報文轉換前的IP地址,合法IP地址即為數據報文轉換后的IP地址,私有TCP/UDP端口號即為數據報文轉換前的TCP/UDP端口號,合法TCP/UDP端口號即為數據報文轉換后的TCP/UDP端口號,以下同。
上述數據報文的雙向轉換過程參考圖4,圖中區域1為局域網內部的數據報文轉換,其中包括把私有IP地址為192.168.0.1,私有TCP/UDP端口號為1024的主機A發出的數據報文通過NAT設備轉換成用合法的IP地址100.0.0.2表示,TCP/UDP端口號為10001的數據報文,然后在互聯網間進行發送。圖4中,局域網內的主機A發送的數據報文包括轉換前的IP地址192.168.0.1,轉換前的TCP/UDP端口號1024和目的IP地址202.112.7.12,目的TCP/UDP端口號21,經過區域1的局域網內部的NAT設備把上述的數據報文進行正向轉換,轉換后的數據報文包括轉換后的IP地址100.0.0.2,轉換后的TCP/UDP端口號10001和目的IP地址202.112.7.12,目的TCP/UDP端口號21,此過程即為數據報文的正向轉換;然后在區域2內由路由器把轉換后的數據報文路由到目的IP地址202.112.7.12的服務器X。
就相反方向而言,對于這個數據報文的返回過程也如圖4,首先在區域2中的互聯網間把IP地址為202.112.7.12的數據報文路由到IP地址100.0.0.2的NAT設備,NAT設備接收到這個數據報文則要索引存儲結構中原來記錄的相應的轉換信息,根據轉換信息在區域1內進行局域網內部的反向數據報文轉換,即把上述合法的IP地址100.0.0.2轉換為私有的IP地址192.168.0.1,把上述的合法的TCP/UDP端口號10001轉換為私有的TCP/UDP端口號1024,在此過程中數據報文中始終包括目的IP地址202.112.7.12和目的TCP/UDP端口號21,這個過程就是數據報文的反向轉換。
基于上面所述,在本發明的具體實施方式
中,首先要建立用于存儲數據報文轉換信息的存儲結構,所述存儲結構實際中可以為二維表結構,也可以采用樹結構索引,將所述轉換信息存儲到樹結構的葉子節點中。如圖5所示,這樣,當NAT設備在步驟11接收到數據報文時,要在步驟12判斷該數據報文是正向數據報文(即從局域網傳送到互聯網的數據報文)還是反向數據報文(即從互聯網傳送到局域網的數據報文),如果是正向數據報文,則要在步驟13索引存儲結構中是否存儲有和該數據報文相對應的轉換信息,然后在步驟15判斷該轉換信息是否存在,如果存在,則在步驟17利用所述轉換信息進行數據報文的正向轉換;如果經步驟15判斷所述轉換信息不存在,則要在步驟16根據接收到的數據報文的特征生成轉換信息并進行存儲到存儲結構,然后按照生成的轉換信息進行該數據報文的正向轉換;如果步驟12判斷出接收到的數據報文是反向數據報文,則在步驟14直接在存儲結構中索引相應的轉換信息,在步驟18判斷該轉換信息是否存在,如果不存在轉到步驟21做丟棄該數據報文處理;如果存在執行步驟19判斷索引到的轉換信息是否有效,如果有效執行步驟20利用索引到的轉換信息進行數據報文的反向轉換,如果無效則執行步驟21做丟棄該數據報文處理。本例中所述的轉換信息包括數據報文轉換前的IP地址和轉換后的IP地址和數據報文轉換前的TCP/UDP端口號和轉換后的TCP/UDP端口號,還包括轉換信息的生成時間、更新的時間、被訪問次數、使用標志等。當然,在其它的具體實施例中,所述的轉換信息僅包括數據報文轉換前的IP地址和轉換后的IP地址也能夠完成本發明的任務,同樣,包括轉換信息的生成時間、更新的時間、被訪問次數、使用標志等也會更加有利于本發明的實施。
為使索引轉換信息的速度更快,本實施例采用連續分配存儲轉換信息的葉子節點到存儲空間的方法,即將這些內存空間按照每個葉子節點所占用的空間進行編址,上述方法的原理參考圖6和圖7。這樣,在生成轉換信息并存儲該轉換信息時,首先需要一個空閑的葉子節點地址存放這個轉換信息。在獲得了空閑葉子節點之后,根據這個葉子節點的地址,通過葉子節點的地址與數據報文轉換后的IP地址的對應關系(當包含協議端口號時,葉子節點地址與IP地址+協議端口號存在對應關系)獲得轉換后的IP地址,并存放在葉子節點中,用于后續的轉換。在接收到反方向的數據報文時,僅根據該數據報文中的IP地址和協議端口號,通過數據報文轉換后的IP地址和/或協議端口號與葉子節點地址的線性對應關系,既可直接計算出葉子節點地址,讀取該地址中的轉換信息進行反向轉換即可。為防止讀取到沒有記錄轉換信息的葉子節點,通過在葉子節點中記錄一個“有效”標志來區別已經記錄了轉換信息的葉子節點和沒有記錄轉換信息的葉子節點。更進一步的驗證可以通過使用數據報文轉換后的IP地址與葉子節點中記錄的轉換信息進行比較的手段來進行。在圖6和圖7所示的示例圖中,采用IP地址0到IP地址n表示相應的轉換信息,采用偏移量0到n表示葉子節點的地址。
下面參照圖8說明如何使多條轉換信息和其在存儲結構中存儲的位置滿足對應關系。假設有可以存放200條轉換信息的連續內存空間,為每個轉換后的IP地址分配20個連續內存空間,這樣每個轉換后的IP地址可以對應20個不同的轉換后的TCP/UDP端口號的轉換,假定轉換后的TCP/UDP端口號從10000開始,這樣對于一個轉換后的IP地址可使用的轉換后的TCP/UDP端口號即為10000~10019。
其內存地址可以是內存地址偏移量,也可以是數組的下標,現在的例子是用內存地址偏移量來表示不同內存空間的。假定存放轉換信息的內存地址從8000開始,參照圖8,偏移量為0的內存地址存放轉換后的IP地址轉換后的TCP/UDP端口號對為100.0.0.110000;偏移量為1的內存地址存放轉換后的IP地址轉換后的TCP/UDP端口號對為100.0.0.110001,這樣依此類推下去。
依照上述的規則把不同的轉換后的IP地址轉換后的TCP/UDP端口號對在不同的內存地址中進行存放,這樣轉換后的IP地址和轉換后的TCP/UDP端口號與內存地址符合下列對應關系addr(IP,Port)=(IP-100.0.0.0.1)*20+(Port-10000)+8000,式中addr表示內存地址,IP表示轉換后的IP地址,Port表示轉換后的TCP/UDP端口號。這個關系式就是所說的內存地址和數據報文轉換后的IP地址、轉換后的TCP/UDP端口號的對應關系。
當局域網內部的一個數據報文向外部轉發時,即數據報文的正向轉換,具體的說是轉換前IP地址為192.168.0.1,轉換前的TCP/UDP端口號為1024的數據報文進行正向轉換時,首先索引存儲結構中當前所存儲的轉換信息,如果索引到對應的轉換信息(即內存地址為8021,轉換信息為192.168.0.11024<->100.0.0.210001),則按照這條轉換信息進行正向轉換,即把數據報文轉換前IP地址為192.168.0.1轉換為IP地址為100.0.0.2的合法IP地址,把轉換前的TCP/UDP端口號為1024轉換為TCP/UDP端口號為10001的合法協議端口號;如果沒有索引到這個轉換信息,則需要根據該數據報文的特征創建一條轉換信息進行存儲,同時利用創建的這條轉換信息進行正向轉換。
接下來為存放這條轉換信息首先在內存空間尋找一條空閑的內存地址來進行存儲,如內存地址為8021的內存空間是空閑的,那么就在這個內存地址內添加這條新的轉換信息,即轉換前的IP地址轉換前的TCP/UDP端口號對為192.168.0.11024,轉換后的IP地址轉換后的TCP/UDP端口號對為100.0.0.210001,使192.168.0.11024和100.0.0.210001相對應,并使轉換后的IP地址轉換后的TCP/UDP端口號對為100.0.0.210001和內存地址8021符合某個對應關系。
同時為該內存地址8021記錄一個“有效”標志,使得該內存地址8021不能再被其他的轉換信息所使用,并且在后續的相同特征的數據報文進行轉換時,對該轉換信息進行索引時,能夠知道該內存地址8021是有效的。
在進行上述的數據報文的反向轉換時,即把數據報文轉換后的IP地址轉換后的TCP/UDP端口號為100.0.0.210001轉換為轉換前的IP地址轉換前的TCP/UDP端口號為192.168.0.11024,首先根據轉換后的IP地址轉換后的TCP/UDP端口號對100.0.0.210001,根據前面提及的內存地址和轉換后的IP地址、轉換后的TCP/UDP端口號的對應關系表達式add(IP,Port)=(IP-100.0.0.0.1)*20+(Port-10000)+8000,把數值100.0.0.210001帶入上式得到(100.0.0.2-100.0.0.1)*20+(10001-10000)+8000=8021,這樣就得到了存放其轉換信息的內存地址8021,直接讀取內存地址8021內存儲的轉換信息,依據這個轉換信息進行反向轉換就相應得到了轉換前的IP地址轉換前的TCP/UDP端口號對192.168.0.11024,把轉換后的數據報文送到IP地址為192.168.0.1的主機。
上述所存儲的轉換信息還可以根據具體情況給予刪除,其中刪除的方式有(1)管理員手工進行刪除;(2)轉換信息在所設置的一段時間內(如半小時)沒有被任何數據報文索引過,則刪除該轉換信息;(3)轉換信息由TCP報文的FIN(finish,完成)報文或者RST(reset,復位)報文索引過,則刪除該轉換信息。
本發明不限于以上的實施方式,只要是符合本發明的設計思想的實施方案都在本發明所保護的范圍內。
權利要求
1.一種數據報文的雙向轉換方法,具體步驟如下建立一個用于存儲數據報文轉換信息的存儲結構;對每一數據報文進行正向轉換時,首先在所述存儲結構中索引是否有與該數據報文相對應的轉換信息,如果有,利用該轉換信息進行轉換;如果沒有,創建該數據報文的轉換信息存儲到所述存儲結構中,并按照創建的轉換信息進行轉換;對該數據報文進行反向轉換時,利用所述存儲結構中存儲的相應的轉換信息進行轉換。
2.根據權利要求1所述的數據報文的雙向轉換方法,其特征在于所述轉換信息包括數據報文轉換前的IP地址和轉換后的IP地址。
3.根據權利要求2所述的數據報文的雙向轉換方法,其特征在于所述轉換信息還包括數據報文轉換前的協議端口號和轉換后的協議端口號。
4.根據權利要求3所述的數據報文的雙向轉換方法,其特征在于所述數據報文轉換后的IP地址和/或轉換后的協議端口號與所述存儲結構中存儲轉換信息的內存地址符合對應關系。
5.根據權利要求4所述的數據報文的雙向轉換方法,其特征在于所述數據報文反向轉換時,根據數據報文轉換后的IP地址和/或轉換后的協議端口號,通過所述的對應關系,得到所述存儲結構中存儲轉換信息的內存地址,讀取該內存地址中的轉換信息進行轉換。
6.根據權利要求1所述的數據報文的雙向轉換方法,其特征在于將所述轉換信息連續分配存儲到所述存儲結構的存儲空間中。
7.根據權利要求1、4、5或6所述的數據報文的雙向轉換方法,其特征在于所述的存儲結構為二維表結構或樹結構。
8.根據權利要求7所述的數據報文的雙向轉換方法,其特征在于將所述的轉換信息存儲到所述的樹結構的葉子節點中。
9.根據權利要求8所述的數據報文的雙向轉換方法,其特征在于通過在葉子節點中記錄一個“有效”標志來區別葉子節點中是否已經記錄轉換信息。
10.根據權利要求1所述的數據報文的雙向轉換方法,其特征在于所述的轉換信息在設置的一段時間內沒有被任何數據報文索引過或所述的轉換信息被TCP報文的FIN報文或者RST報文索引過,則刪除該轉換信息。
全文摘要
本發明公開了一種數據報文的雙向轉換方法,該方法首先建立一個用于存儲數據報文轉換信息的存儲結構;對每一數據報文進行正向轉換時,首先在所述存儲結構中索引是否有與該數據報文相對應的轉換信息,如果有,利用該轉換信息進行轉換;如果沒有,創建該數據報文的轉換信息并存儲到所述存儲結構中;對該數據報文進行反向轉換時,利用所述存儲結構中存儲的相應的轉換信息進行轉換。采用該數據報文的雙向轉換方法,節約了存儲轉換信息所占用的內存空間,同時也避免了額外的對內存的操作,提高了數據報文雙向轉換的效率。
文檔編號H04L12/56GK1540942SQ0312201
公開日2004年10月27日 申請日期2003年4月21日 優先權日2003年4月21日
發明者劉俊輝 申請人:華為技術有限公司