專利名稱:一種轉發數據的方法及網關的制作方法
技術領域:
本發明涉及通信技術領域,尤其涉及一種轉發數據的方法及網關。
背景技術:
在通信系統中,客戶端連接互聯網時,為了實現對客戶端的訪問進行控制或計費, 甚至于進行頁面適配或者廣告插入等動作,通常可以使用網關設備來完成。網關在采用不同體系結構或協議的網絡之間進行互通時,用于提供協議轉換、路由選擇、數據交換等網絡兼容功能的設施。網關可以分為顯式網關或者透明代理網關方式。以顯式網關為例,網關擁有自己的監聽地址,客戶端需要配置網關地址才能正常訪問互聯網。在現有技術中,網關轉發數據的流程可以如下所示終端直接訪問網關并將請求發送給網關,網關解析處理后將請求轉發給真正的服務器,服務器將對客戶端的響應首先返回給網關,網關處理完響應后再轉發給終端。可以看出在現有技術中,終端與服務器之間的數據交互是由網關進行轉發的,因此需要在終端上配置網關地址,甚至還需要根據不同的協議配置不同的網關地址,這就使現有技術中的數據轉發過程較為繁瑣,網關轉發數據的效率較低。
發明內容
本發明實施例提供一種轉發數據的方法及網關,以解決現有技術中數據轉發過程較為繁瑣使網關轉發數據的效率較低的問題。為解決上述技術問題,本發明實施例提供了一種轉發數據的方法,該方法包括在客戶端與服務器之間的TCP連接上接收數據報文,并依據所述數據報文的協議判斷所述數據報文是否需要在應用層轉發,如果是,則在應用層轉發所述數據報文,如果否,則在網絡層轉發所述數據報文。本發明實施例提供了一種網關,該網關包括接收模塊,用于在客戶端與服務器之間的TCP連接上接收數據報文;判斷模塊,用于依據所述數據報文的協議判斷所述數據報文是否需要在應用層轉發;轉發模塊,用于當所述判斷模塊的結果為是時,在應用層轉發所述數據報文,或者,當所述判斷模塊的結果為否時,在網絡層轉發所述數據報文。本發明實施例具有以下優點在本發明實施例中,網關可以判斷數據報文是否需要進行應用層轉發,在不需要時直接進行網絡層轉發,在需要時才進行應用層轉發,因此通過對數據報文的轉發需求的判斷,可以由網關來識別出不同協議的數據報文應該做什么樣的后續處理,并且因為本發明實施例的網關具有了識別數據報文的功能,所以就不需要在終端側來配置網關地址,使得數據轉發的過程相對簡單,因此也可以提高網絡數據的轉發效率。
為了更清楚地說明本發明實施例或現有技術中的技術方案,下面將對實施例或現有技術描述中所需要使用的附圖作簡單地介紹,顯而易見地,下面描述中的附圖僅僅是本發明的一些實施例,對于本領域普通技術人員來講,在不付出創造性勞動性的前提下,還可以根據這些附圖獲得其他的附圖。圖1是本發明的轉發數據的方法實施例一的流程圖;圖2是方法實施例一中步驟102的流程圖;圖3是本發明的轉發數據的方法實施例二的流程圖;圖4是本發明的轉發數據的方法實施例三的流程圖;圖5是本發明的網關實施例的結構示意圖;圖6是本發明的網關實施例中判斷模塊的結構示意圖;圖7是本發明的網關實施例中轉發模塊的結構示意圖。
具體實施例方式下面將結合本發明實施例中的附圖,對本發明實施例中的技術方案進行清楚、完整地描述,顯然,所描述的實施例僅僅是本發明一部分實施例,而不是全部的實施例。基于本發明中的實施例,本領域普通技術人員在沒有做出創造性勞動前提下所獲得的所有其他實施例,都屬于本發明保護的范圍。開放式系統互連(0SI,Open System Interconnec),是一種通信協議的7層抽象的參考模型,其中每一層執行某一特定任務。該模型的目的是使各種硬件在相同的層次上相互通信。這7層分別是物理層、數據鏈路層、網絡層、傳輸層、會話層、表示層和應用層。 其中,本發明實施例中涉及的應用層為最高層7層,網絡層為3層,傳輸層為4層。為使本發明實施例的上述目的、特征和優點能夠更加明顯易懂,下面結合附圖和具體實施方式
對本發明實施例作進一步詳細的說明。參考圖1,在本發明實施例一中,實現本發明實施例一所提供的方法可以包括以下步驟步驟101 網關在客戶端與服務器之間的TCP連接上接收數據報文,并依據所述數據報文的協議判斷所述數據報文是否需要在應用層轉發,如果是,則進入步驟103,如果否, 則進入步驟104。在實際應用中,客戶端與服務器之間的傳輸控制協議(TCP,Transmission Control Protocol)可以預先建立。客戶端通過網關向服務器發送SYN信息,服務器再通過網關向客戶端返回SYN ACK信息以建立TCP連接。而網關相當于通過解析并轉發客戶端和服務器之間的連接建立請求,使客戶端和服務器正常建立了 TCP連接。在建立TCP連接的過程中,網關僅保存SYN中的TCP選項,這些選項決定了建立的TCP連接的特性。網關再在建立的TCP連接上接收數據報文,并依據數據報文的協議判斷該數據報文是否需要在應用層轉發。請參考圖2所示,在步驟102中進行判斷的步驟,在實際應用中,可以包括圖2所示的流程步驟201 對所述數據報文進行協議識別,以得到所述數據報文的應用協議;
網關首先對數據報文進行協議識別,如果數據報文應用了應用層協議,則將進入步驟103執行應用層轉發。例如,網關解析出數據報文的目標地址為一個特定的網址,而這個特定的網址又設置了需要插入廣告,這種情況就需要進行應用層處理,因為無法在網絡層(即是IP層)進行頁面的廣告插入。步驟202 判斷所述應用協議是否為應用層協議,以及當前的TCP連接內容/協議內容是否能夠在應用層實現。網關得到數據報文的應用協議時,就判斷這個應用協議是否為應用層協議,并且當前的TCP連接內容以及協議內容是否能夠在應用層實現。步驟102 網關在應用層轉發所述數據報文。應用層轉發數據報文即是7層轉發,就是網關使用傳統的OSI模型在最高層應用層上轉發數據,在本發明實施例中由網關內置的TCP協議棧實現,在下一個實施例中將重點介紹TCP協議棧實現在應用層轉發數據報文的過程。步驟103 網關在網絡層轉發所述數據報文。網絡層轉發也被稱為3層轉發,即是在網絡層上轉發數據。如果數據報文不需要進行應用層轉發,本實施例中可以在網絡層直接轉發所述數據報文。本發明實施例中提及的網關可以部署在終端到服務器的路徑上,即是將網關作為一個路由設備部署,從終端到服務器的數據報文就必定先通過網關。在本實施例中,網關可以在數據報文不需要進行應用層轉發的時候,直接進行IP 層轉發,且在數據報文需要進行應用層轉發的時候才進行高性能消耗的應用層轉發,因為在應用層轉發數據報文時消耗的性能要高于數據報文在IP層轉發或在應用層轉發時消耗的性能,所以本實施例公開的在應用層轉發和IP層轉發之間的切換可以實現網關性能和功能的平衡,并且因為不需在客戶端配置網關地址,因此本發明實施例還可以提高網絡數據的轉發效率。同時,網關在正常處理業務的同時,通過IP層和應用層之間數據報文的轉發切換,能夠提高網關性能和靈活性。參考圖3,在本發明實施例二中,實現本發明實施例二所提供的方法可以包括以下步驟步驟301 網關在客戶端與服務器之間的TCP連接上接收數據報文,并依據所述數據報文的協議判斷得到所述數據報文需要在應用層轉發。步驟302 啟動TCP協議棧以及對應所述TCP連接的兩個TCP狀態機。在本實施例中,網關判斷得到數據報文需要執行應用層轉發時,首先會啟動TCP 協議棧。所述TCP協議棧內置在所述網關中,可以在需要進行應用層轉發時接管連接,即是模擬服務器端和客戶端數據報文的交互過程。在執行應用層轉發時,所有的數據報文都會被接收到應用層進行處理。內置TCP協議棧之后的網關工作在代理模式下,可以處理由客戶端發往服務器的數據報文。本實施例中的TCP協議棧可以理解為增強TCP協議棧,普通的TCP協議棧針對一條TCP連接只有一個TCP狀態機,而增強的TCP協議棧針對每個TCP連接卻有兩個TCP狀態機,該兩個TCP狀態機分別對應客戶端和服務器。當然,因為每一對客戶端和服務器都有一對TCP狀態機與之對應,所以如果客戶端和服務器大于一對,那么相應的TCP狀態機的個數也應該相應調整。因為在應用層轉發時,分別對應于客戶端和服務器的兩個TCP狀態機是不同步的,而在3層或者4層轉發時卻需要客戶端和服務器的TCP狀態機是同步的,所以本發明實施例通過對應于客戶端和服務器設置兩個TCP狀態機就能夠實現在7層轉發和3 層或者4層轉發之間的任意切換,具體實施時只需要分別轉換對應于客戶端和服務器的兩個TCP狀態機即可。所述TCP狀態機可以用來表示當前TCP連接的狀態,例如,當狀態為“CLOSED”時表示當前的TCP連接處于“關閉狀態,沒有連接活動或正在進行”,本發明實施例中的TCP狀態機可以使用一個具有11種狀態的有限狀態機(Finite State Machine)來表示,具體可以參考表1,為上述11種狀態的說明。表 1
狀態描述CLOSED關閉狀態,沒有連接活動或正在進行LISTEN監聽狀態,服務器正在等待連接進入SYN RCVD收到一個連接請求,尚未確認SYN SENT已經發出連接請求,等待確認ESTABLISHED連接建立,正常數椐傳輸狀態FIN WAIT 1(主動關閉)已經發送關閉請求,等待確認FIN WAIT 2(主動關閉)收到對方關閉確認,等待對方關閉請求TIMED WAIT完成雙向關閉,等待所有分組死掉CLOSING雙方同時嘗試關閉,等待對方確認CLOSE WAIT(被動關閉)收到對方關閉請求,已經確認LAST ACK(被動關閉)等待最后一個關閉確認, 并等待所有分組死掉步驟303 由TCP協議棧將所述數據報文在應用層進行轉發。網關啟動TCP協議棧之后,就由TCP協議棧對數據報文在應用層進行轉發,具體處理可以包括TCP重組、分包以及重傳等。步驟304 當所述TCP連接的數據報文轉發完成時,TCP協議棧從用于應用層轉發的兩個TCP狀態機切換至用于IP層轉發的TCP狀態機上。當對應于應用層轉發的任務完成時,由應用層通知TCP協議棧本次業務訪問結束,TCP協議棧將殘留在緩存中的數據發送完成之后就放棄連接的接管,TCP協議棧此時將用于應用層轉發的兩個TCP狀態機切換至用于IP層轉發的TCP狀態機上,通過TCP狀態機的切換可以實現應用層轉發到IP層轉發的切換。在本實施例中,網關內置的TCP協議棧能夠實現隨時接管和放棄TCP連接,并且通過TCP狀態機的設置能夠支持在3層轉發和7層轉發之間的切換。參考圖4,在本發明實施例三中,實現本發明實施例三所提供的方法可以包括以下步驟步驟401 在客戶端與服務器之間的TCP連接上接收數據報文,并依據所述數據報文的協議判斷得到所述數據報文不需要在應用層轉發。步驟402 在網絡IP層轉發所述數據報文。步驟403 如果所述數據報文中的TCP序號進行了修改,則將修改了 TCP序號的數據報文在傳輸層進行轉發。在本實施例中,當所述數據報文在IP層轉發之后,如果數據報文中的TCP序號發生了變化,則需要將修改了 TCP序號的數據報文在傳輸層進行轉發。傳輸層轉發即是4層轉發,在4層轉發時不修改數據報文中的數據部分,但是為了使客戶端和服務端的TCP序號對應上,網關會修改數據報文中的TCP序號部分之后再轉發出去。通過本發明實施例中的描述可知,本發明實施例中的網關內置了 TCP協議棧,且對應一個TCP連接對應設置兩個TCP狀態機分別對應客戶端和服務器,從而本發明實施例中的網關能夠實現在3層轉發、4層轉發以及7層轉發之間的切換,即是分別對應OSI中的網絡層、傳輸層和應用層,進一步提升了網關的性能和靈活性。需要說明的是,對于前述的各方法實施例,為了簡單描述,故將其都表述為一系列的動作組合,但是本領域技術人員應該知悉,本發明并不受所描述的動作順序的限制,因為依據本發明,某些步驟可以采用其他順序或者同時進行。其次,本領域技術人員也應該知悉,說明書中所描述的實施例均屬于優選實施例,所涉及的動作和模塊并不一定是本發明所必須的。與上述本發明實施例所提供的方法相對應,參見圖5,本發明實施例還提供了一種網關實施例的結構示意圖,所述網關具體可以包括接收模塊501,用于在立客戶端與服務器之間的TCP連接上接收數據報文;判斷模塊502,用于依據所述數據報文的協議判斷所述數據報文是否需要在應用層轉發;參考圖6所示,示出了判斷模塊503的結構示意圖,如圖所示,所述判斷模塊503 包括識別子模塊601,用于對所述數據報文進行協議識別,以得到所述數據報文的應用協議;判斷子模塊602,用于判斷所述應用協議是否為應用層協議,以及當前的TCP連接內容/協議內容是否能夠在應用層實現。轉發模塊503,用于當所述判斷模塊503的結果為是時,在應用層轉發所述數據報文,或者,當所述判斷模塊503的結果為否時,在網絡層轉發所述數據報文。本實施例公開的網關可以在數據報文不需要進行應用層轉發的時候,直接進行IP層轉發,且在數據報文需要進行應用層轉發的時候才進行較高性能的應用層轉發,通過數據報文在IP層轉發和應用層轉發之間的切換,以實現網關性能和功能的平衡,并且因為不需在客戶端配置網關地址,因此本發明實施例還可以提高網絡數據的轉發效率。同時,網關在正常處理業務的同時,通過IP層和應用層的數據報文轉發之間的切換,能夠提高網關性能和靈活性。在實際應用中的不同實施例中,參考圖7所示,所述轉發模塊504具體可以包括觸發子模塊701,用于啟動TCP協議棧以及對應所述TCP連接的兩個TCP狀態機, 所述TCP協議棧中一個TCP連接對應兩個TCP狀態機;TCP協議棧702,用于將所述數據報文在應用層進行轉發。在實際應用中的不同實施例中,當所述TCP連接的數據報文轉發完成時,所述TCP 協議棧702還用于從用于應用層轉發的兩個TCP狀態機切換至用于IP層轉發的TCP狀態機上。在實際應用中的不同實施例中,所述轉發模塊504具體還可以用于如果所述數據報文中的TCP序號進行了修改,則將修改了 TCP序號的數據報文在傳輸層進行轉發。需要說明的是,本說明書中的各個實施例均采用遞進的方式描述,每個實施例重點說明的都是與其他實施例的不同之處,各個實施例之間相同相似的部分互相參見即可。 對于網關類實施例而言,由于其與方法實施例基本相似,所以描述的比較簡單,相關之處參見方法實施例的部分說明即可。還需要說明的是,在本文中,術語“包括”、“包含”或者其任何其他變體意在涵蓋非排他性的包含,從而使得包括一系列要素的過程、方法、物品或者設備不僅包括那些要素, 而且還包括沒有明確列出的其他要素,或者是還包括為這種過程、方法、物品或者設備所固
有的要素。在沒有更多限制的情況下,由語句“包括一個......”限定的要素,并不排除在
包括所述要素的過程、方法、物品或者設備中還存在另外的相同要素。本領域普通技術人員可以理解上述實施例的各種方法中的全部或部分步驟是可以通過程序來指令相關的硬件來完成,該程序可以存儲于一計算機可讀存儲介質中,存儲介質可以包括ROM、RAM、磁盤或光盤等。以上對本發明實施例所提供的一種轉發數據的方法及網關進行了詳細介紹,本文中應用了具體個例對本發明的原理及實施方式進行了闡述,以上實施例的說明只是用于幫助理解本發明實施例的方法及其思想;同時,對于本領域的一般技術人員,依據本發明實施例的思想,在具體實施方式
及應用范圍上均會有改變之處,綜上所述,本說明書內容不應理解為對本發明的限制。
權利要求
1.一種轉發數據的方法,其特征在于,該方法包括在客戶端與服務器之間的TCP連接上接收數據報文,并依據所述數據報文的協議判斷所述數據報文是否需要在應用層轉發,如果是,則在應用層轉發所述數據報文,如果否,則在網絡層轉發所述數據報文。
2.根據權利要求1所述的方法,其特征在于,所述依據所述數據報文的協議判斷是否數據報文是否需要在應用層轉發,包括對所述數據報文進行協議識別,以得到所述數據報文的應用協議;判斷所述應用協議是否為應用層協議,以及當前的TCP連接內容和/或協議內容是否能夠在應用層實現。
3.根據權利要求1所述的方法,其特征在于,一個TCP連接對應兩個TCP狀態機,則所述在應用層轉發數據報文,包括啟動TCP協議棧以及對應所述TCP連接的兩個TCP狀態機,所述TCP協議棧中一個TCP 連接對應兩個TCP狀態機;由所述TCP協議棧將所述數據報文在應用層進行轉發。
4.根據權利要求3所述的方法,其特征在于,所述由TCP協議棧將所述數據報文在應用層進行轉發之后,還包括當所述TCP連接的數據報文轉發完成時,TCP協議棧從用于應用層轉發的兩個TCP狀態機切換至用于網絡層轉發的TCP狀態機上。
5.根據權利要求1所述的方法,其特征在于,所述在網絡層轉發所述數據報文之后,還包括如果所述數據報文中的TCP序號進行了修改,則將修改了 TCP序號的數據報文在傳輸層進行轉發。
6.一種網關,其特征在于,包括接收模塊,用于在客戶端與服務器之間的TCP連接上接收數據報文;判斷模塊,用于依據所述數據報文的協議判斷所述數據報文是否需要在應用層轉發;轉發模塊,用于當所述判斷模塊的結果為是時,在應用層轉發所述數據報文,或者,當所述判斷模塊的結果為否時,在網絡層轉發所述數據報文。
7.根據權利要求6所述的網關,其特征在于,所述判斷模塊包括識別子模塊,用于對所述數據報文進行協議識別,以得到所述數據報文的應用協議;判斷子模塊,用于判斷所述應用協議是否為應用層協議,以及當前的TCP連接內容/協議內容是否能夠在應用層實現。
8.根據權利要求7所述的網關,其特征在于,所述轉發模塊包括觸發子模塊,用于啟動TCP協議棧以及對應所述TCP連接的兩個TCP狀態機,所述TCP 協議棧中一個TCP連接對應兩個TCP狀態機;TCP協議棧,用于將所述數據報文在應用層進行轉發。
9.根據權利要求8所述的網關,其特征在于,當所述TCP連接的數據報文轉發完成時, 所述TCP協議棧還用于從用于應用層轉發的兩個TCP狀態機切換至用于網絡層轉發的TCP 狀態機上。
10.根據權利要求6所述的網關,其特征在于,所述轉發模塊還用于如果所述數據報文中的TCP序號進行了修改,則將修改了 TCP序號的數據報文在傳輸層進行轉發。
全文摘要
一種轉發數據的方法及網關,所述方法包括建立客戶端與服務器之間的傳輸控制協議TCP連接;在建立的TCP連接上接收數據報文,并依據所述數據報文的協議判斷所述數據報文是否需要在應用層轉發,如果是,則在應用層轉發所述數據報文,如果否,則在網絡層轉發所述數據報文。應用本發明實施例的方法及網關,可以提升網關的性能和靈活性,且提升網關轉發數據的效率。
文檔編號H04L29/08GK102215231SQ20111014952
公開日2011年10月12日 申請日期2011年6月3日 優先權日2011年6月3日
發明者周波, 甘化新, 胡軍偉 申請人:華為軟件技術有限公司