本發(fā)明涉及網(wǎng)絡(luò)通信技術(shù)領(lǐng)域,尤其涉及一種建立TCP通信連接的方法及裝置。
背景技術(shù):
隨著互聯(lián)網(wǎng)數(shù)據(jù)通信技術(shù)的高速發(fā)展,穩(wěn)定可靠的數(shù)據(jù)交互方式受到用戶的青睞,通常采用TCP通信協(xié)議對客戶端與服務(wù)端進(jìn)行數(shù)據(jù)交互傳輸。
現(xiàn)有技術(shù)中,服務(wù)端與客戶端之間建立TCP通信連接,服務(wù)端接收到來自客戶端的SYN報文后,當(dāng)服務(wù)端存在多個下一跳時,服務(wù)端通過負(fù)載分擔(dān)算法對需要回復(fù)的SYN報文選擇用于發(fā)送確認(rèn)的SYNACK報文的鏈路,通常會出現(xiàn)用于接收SYN報文的鏈路與用于發(fā)送確認(rèn)的SYNACK報文的鏈路不一致的情況,進(jìn)而導(dǎo)致客戶端與服務(wù)端無法建立TCP通信連接。
技術(shù)實現(xiàn)要素:
本發(fā)明提供一種建立TCP通信連接的方法及裝置,以解決現(xiàn)有技術(shù)中客戶端與服務(wù)端無法建立通信連接的技術(shù)問題。
為實現(xiàn)上述目的,本發(fā)明提供技術(shù)方案如下:
根據(jù)本發(fā)明的第一方面,提出了一種建立TCP通信連接的方法,包括:
通過入接口接收數(shù)據(jù)轉(zhuǎn)發(fā)設(shè)備所轉(zhuǎn)發(fā)的來自客戶端的第一數(shù)據(jù)報文;
根據(jù)所述第一數(shù)據(jù)報文建立TCP連接信息并記錄所述TCP連接信息與所述入接口之間的對應(yīng)關(guān)系;
基于所述對應(yīng)關(guān)系中的所述入接口,從所述服務(wù)端對應(yīng)的至少一個下一跳中確定第一下一跳為所述數(shù)據(jù)轉(zhuǎn)發(fā)設(shè)備;
向所述數(shù)據(jù)轉(zhuǎn)發(fā)設(shè)備發(fā)送與所述第一數(shù)據(jù)報文相對應(yīng)的第二數(shù)據(jù)報文,以使所述數(shù)據(jù)轉(zhuǎn)發(fā)設(shè)備向所述客戶端轉(zhuǎn)發(fā)所述第二數(shù)據(jù)報文;
接收所述數(shù)據(jù)轉(zhuǎn)發(fā)設(shè)備轉(zhuǎn)發(fā)的來自所述客戶端根據(jù)所述第二數(shù)據(jù)報文返回的第三數(shù)據(jù)報文。
根據(jù)本發(fā)明的第二方面,提出了一種建立TCP通信連接的裝置,包括:
第一接收模塊,用于通過入接口接收數(shù)據(jù)轉(zhuǎn)發(fā)設(shè)備所轉(zhuǎn)發(fā)的來自客戶端的第一數(shù)據(jù)報文;
關(guān)系記錄模塊,用于根據(jù)所述第一接收模塊中的所述第一數(shù)據(jù)報文建立TCP連接信息并記錄所述TCP連接信息與所述入接口之間的對應(yīng)關(guān)系;
設(shè)備確定模塊,用于基于所述關(guān)系記錄模塊所記錄的所述對應(yīng)關(guān)系中的所述入接口,從所述服務(wù)端對應(yīng)的至少一個下一跳中確定第一下一跳為所述數(shù)據(jù)轉(zhuǎn)發(fā)設(shè)備;
第一發(fā)送模塊,用于向所述設(shè)備確定模塊中確定的所述數(shù)據(jù)轉(zhuǎn)發(fā)設(shè)備發(fā)送與所述第一數(shù)據(jù)報文相對應(yīng)的第二數(shù)據(jù)報文,以使所述數(shù)據(jù)轉(zhuǎn)發(fā)設(shè)備向所述客戶端轉(zhuǎn)發(fā)所述第二數(shù)據(jù)報文;
第二接收模塊,用于接收所述數(shù)據(jù)轉(zhuǎn)發(fā)設(shè)備轉(zhuǎn)發(fā)的來自所述客戶端的第三數(shù)據(jù)報文,所述第三數(shù)據(jù)報文為所述客戶端根據(jù)所述第一發(fā)送模塊中的所述第二數(shù)據(jù)報文返回的第三數(shù)據(jù)報文。
由以上技術(shù)方案可見,當(dāng)服務(wù)端通過入接口確定第一下一跳為數(shù)據(jù)轉(zhuǎn)發(fā)設(shè)備時,服務(wù)端接收第一數(shù)據(jù)報文與發(fā)送第二數(shù)據(jù)報文經(jīng)過的鏈路相同,從而使服務(wù)端與客戶端之間可以成功建立TCP通信連接,因此通過本發(fā)明實施例可以解決現(xiàn)有技術(shù)中客戶端與服務(wù)端無法建立通信連接的技術(shù)問題。
附圖說明
圖1是應(yīng)用本發(fā)明實施例建立TCP通信連接的一個應(yīng)用場景示意圖;
圖2是本發(fā)明建立TCP通信連接的方法的一個實施例流程圖;
圖3是本發(fā)明建立TCP通信連接的方法的另一個實施例流程圖;
圖4是本發(fā)明建立TCP通信連接的方法的另一個實施例流程圖;
圖5是本發(fā)明建立TCP通信連接的方法的另一個實施例流程圖;
圖6是本發(fā)明建立TCP通信連接控制的裝置所在設(shè)備的一種硬件結(jié)構(gòu)圖;
圖7是本發(fā)明建立TCP通信連接的裝置的一個實施例框圖;
圖8是本發(fā)明建立TCP通信連接的裝置的另一個實施例框圖。
具體實施方式
這里將詳細(xì)地對示例性實施例進(jìn)行說明,其示例表示在附圖中。下面的描述涉及附圖時,除非另有表示,不同附圖中的相同數(shù)字表示相同或相似的要素。以下示例性實施例中所描述的實施方式并不代表與本發(fā)明相一致的所有實施方式。相反,它們僅是與如所附權(quán)利要求書中所詳述的、本發(fā)明的一些方面相一致的裝置和方法的例子。
在本發(fā)明使用的術(shù)語是僅僅出于描述特定實施例的目的,而非旨在限制本發(fā)明。在本發(fā)明和所附權(quán)利要求書中所使用的單數(shù)形式的“一種”、“所述”和“該”也旨在包括多數(shù)形式,除非上下文清楚地表示其他含義。還應(yīng)當(dāng)理解,本文中使用的術(shù)語“和/或”是指并包含一個或多個相關(guān)聯(lián)的列出項目的任何或所有可能組合。
應(yīng)當(dāng)理解,盡管在本發(fā)明可能采用術(shù)語第一、第二、第三等來描述各種信息,但這些信息不應(yīng)限于這些術(shù)語。這些術(shù)語僅用來將同一類型的信息彼此區(qū)分開。例如,在不脫離本發(fā)明范圍的情況下,第一信息也可以被稱為第二信息,類似地,第二信息也可以被稱為第一信息。取決于語境,如在此所使用的詞語“如果”可以被解釋成為“在……時”或“當(dāng)……時”或“響應(yīng)于確定”。
圖1是應(yīng)用本發(fā)明實施例建立TCP通信連接的一個應(yīng)用場景示意圖,如圖1所示,建立TCP通信連接的系統(tǒng)包括:安裝在個人計算機(Personal Computer,PC)上的客戶端11以及服務(wù)器12、路由器13、路由器14、防火墻15和路由器16等設(shè)備,其中,客戶端11的路由器13和服務(wù)器12的路由器14、防火墻15及路由器16通過互聯(lián)網(wǎng)17建立網(wǎng)絡(luò)連接。本領(lǐng)域技術(shù)人員可以理解的是,客戶端11安裝在PC上以及服務(wù)端為服務(wù)器12僅為示例性說明,其并不能形成對本發(fā)明的限制,客戶端11還可以安裝在手機、平板電腦、智能手表等終端設(shè)備上,也可以安裝在路由器、交換機、防火墻等網(wǎng)絡(luò)設(shè)備上,服務(wù)端可以為通過TCP協(xié)議能夠與客戶端11建立通信連接的網(wǎng)絡(luò)設(shè)備,例如,服務(wù)端可以為路由器、交換機等網(wǎng)絡(luò)設(shè)備。當(dāng)客戶端11與服務(wù)器12建立TCP通信連接時,服務(wù)器12對下一跳的路由器14、防火墻15和路由器16通過負(fù)載分擔(dān)進(jìn)行選擇。當(dāng)客戶端11通過路由器14向服務(wù)器12發(fā)送SYN報文時,如果服務(wù)器12通過負(fù)載分擔(dān)選擇的下一跳為防火墻15,則服務(wù)器12向防火墻15發(fā)送SYN報文對應(yīng)的SYNACK報文,因此SYN報文的傳輸鏈路與SYNACK報文的傳輸鏈路不一致。通常防火墻設(shè)備具備全狀態(tài)檢測功能,全狀態(tài)檢測的相關(guān)描述可以參見現(xiàn)有技術(shù),在此不再詳述。當(dāng)防火墻15接收到SYNACK報文時,對SYNACK報文進(jìn)行全狀態(tài)檢測,SYNACK報文對應(yīng)的SYN報文未曾在防火墻15上建立過TCP連接會話,即SYNACK報文在防火墻15中匹配不到SYN報文建立的TCP連接會話,因此防火墻15對SYNACK報文進(jìn)行丟棄,從而導(dǎo)致服務(wù)器12與客戶端11之間建立TCP連接失敗。本發(fā)明實施例,可以解決SYN報文的傳輸鏈路與SYNACK報文的傳輸鏈路不一致的問題,從而使客戶端11與服務(wù)器12可以正常建立TCP通信連接。
為對本發(fā)明進(jìn)行進(jìn)一步說明,提供下列實施例:
圖2是本發(fā)明建立TCP通信連接的方法的一個實施例流程圖,如圖2所示,包括如下步驟:
步驟201:通過入接口接收數(shù)據(jù)轉(zhuǎn)發(fā)設(shè)備所轉(zhuǎn)發(fā)的來自客戶端的第一數(shù)據(jù)報文。
步驟202:根據(jù)所述第一數(shù)據(jù)報文建立TCP連接信息并記錄所述TCP連接信息與所述入接口之間的對應(yīng)關(guān)系。
步驟203:基于所述對應(yīng)關(guān)系中的所述入接口,從所述服務(wù)端對應(yīng)的至少一個下一跳中確定第一下一跳為所述數(shù)據(jù)轉(zhuǎn)發(fā)設(shè)備。
步驟204:向所述數(shù)據(jù)轉(zhuǎn)發(fā)設(shè)備發(fā)送與所述第一數(shù)據(jù)報文相對應(yīng)的第二數(shù)據(jù)報文,以使所述數(shù)據(jù)轉(zhuǎn)發(fā)設(shè)備向所述客戶端轉(zhuǎn)發(fā)所述第二數(shù)據(jù)報文。
步驟205:接收所述數(shù)據(jù)轉(zhuǎn)發(fā)設(shè)備轉(zhuǎn)發(fā)的來自所述客戶端根據(jù)所述第二數(shù)據(jù)報文返回的第三數(shù)據(jù)報文。
下面結(jié)合圖1,以客戶端為客戶端11、服務(wù)端為服務(wù)器12、數(shù)據(jù)轉(zhuǎn)發(fā)設(shè)備為路由器14為例進(jìn)行示例性說明:
在步驟201中,在一實施例中,入接口為服務(wù)器12的物理入接口或者通過應(yīng)用軟件設(shè)定的虛擬入接口,一個入接口對應(yīng)一個下一跳,例如,入接口“F0/0”對應(yīng)路由器14,入接口“S0/0”對應(yīng)防火墻15,入接口“T0/0”對應(yīng)路由器16。數(shù)據(jù)轉(zhuǎn)發(fā)設(shè)備可以為路由器、交換機、防火墻等具有數(shù)據(jù)轉(zhuǎn)發(fā)功能的設(shè)備。第一數(shù)據(jù)報文為SYN報文。
在步驟202中,在一實施例中,服務(wù)器12根據(jù)SYN報文建立TCP連接信息,TCP連接信息可以包括:五元組、TCP連接狀態(tài)等,例如TCP連接信息可以包括:源IP地址、目的IP地址、源端口、目的端口和傳輸層協(xié)議等,源IP地址為客戶端11的IP地址,目的IP地址為服務(wù)器12的IP地址,源端口為客戶端11的端口,目的端口為服務(wù)器12的端口,傳輸層協(xié)議為TCP協(xié)議。
如果服務(wù)器12接收到路由器14轉(zhuǎn)發(fā)的來自客戶端11的SYN報文,如下表1所示,為TCP連接信息與路由器14的入接口的對應(yīng)關(guān)系的示例:
表1
記錄的對應(yīng)關(guān)系包括:客戶端11的IP地址為“192.168.1.1”,服務(wù)器12的IP地址為“121.14.88.76”,客戶端11的端口為“10000”,服務(wù)器12的端口為“80”,傳輸層協(xié)議為TCP協(xié)議,服務(wù)器的入接口“F0/0”對應(yīng)路由器14。
在步驟203中,在一實施例中,第一下一跳為基于對應(yīng)關(guān)系中的入接口“F0/0”從服務(wù)器12對應(yīng)的至少一個下一跳中所確定的下一跳,即所確定的下一跳為路由器14。服務(wù)器12查找路由表,路由表可以是靜態(tài)路由表也可以是動態(tài)路由表。
如下表2所示,為服務(wù)器12的路由表的示例:
表2
表2中的目的網(wǎng)段為“192.168.1.0”,子網(wǎng)掩碼為“255.255.255.0”用于劃分子網(wǎng),客戶端11的IP地址“192.168.1.1”通過匹配目的網(wǎng)段“192.168.1.0”找到對應(yīng)的三個下一跳地址(客戶端11的IP地址“192.168.1.1”如何匹配目的網(wǎng)段“192.168.1.0”的相關(guān)描述可以參見現(xiàn)有技術(shù),在此不再詳述),分別為路由器14對應(yīng)的地址“20.1.1.2”、防火墻15對應(yīng)的地址“30.1.1.2”和路由器16對應(yīng)的地址“40.1.1.2”,出接口分別為路由器14對應(yīng)的出接口“F0/0”、防火墻15對應(yīng)的出接口“S0/0”和路由器16對應(yīng)的出接口“T0/0”。本領(lǐng)域技術(shù)人員可以理解的是,表2中的出接口與表1中的入接口是針對服務(wù)器12接收報文和發(fā)送報文而言的,出接口在接收報文時也可稱為入接口,入接口在發(fā)送報文時也可稱為出接口。
在步驟204中,在一實施例中,第二數(shù)據(jù)報文為與步驟201中SYN報文對應(yīng)的SYNACK報文。
在步驟205中,在一實施例中,第三數(shù)據(jù)報文為與步驟204中SYNACK報文對應(yīng)的ACK報文,服務(wù)器12收到ACK報文后,從而與客戶端11可以正常建立TCP通信連接。
本發(fā)明實施例中,服務(wù)端接收路由器14轉(zhuǎn)發(fā)的來自客戶端的SYN報文,并根據(jù)SYN報文建立TCP連接信息,同時記錄TCP連接信息與入接口的對應(yīng)關(guān)系,服務(wù)端通過入接口確定下一跳為路由器14,從而確保了服務(wù)端用于接收SYN報文的鏈路與用于發(fā)送確認(rèn)的SYNACK報文的鏈路相一致,使得客戶端與服務(wù)端之間的TCP通信連接可以正常建立。
圖3是本發(fā)明建立TCP通信連接的方法的另一個實施例流程圖,本發(fā)明實施例結(jié)合圖1,以第一數(shù)據(jù)報文為SYN報文、第二數(shù)據(jù)報文為SYNACK報文、第三數(shù)據(jù)報文為ACK報文為例進(jìn)行示例性說明,如圖3所示,包括如下步驟:
步驟301:客戶端向數(shù)據(jù)轉(zhuǎn)發(fā)設(shè)備發(fā)送SYN報文。
步驟302:數(shù)據(jù)轉(zhuǎn)發(fā)設(shè)備向服務(wù)端轉(zhuǎn)發(fā)來自客戶端的SYN報文。
步驟303:服務(wù)端根據(jù)SYN報文建立TCP連接信息并記錄TCP連接信息與入接口的對應(yīng)關(guān)系。
步驟304:服務(wù)端根據(jù)對應(yīng)關(guān)系中的入接口,確定下一跳為數(shù)據(jù)轉(zhuǎn)發(fā)設(shè)備,并將數(shù)據(jù)轉(zhuǎn)發(fā)設(shè)備記錄在TCP連接信息中。
步驟305:服務(wù)端向數(shù)據(jù)轉(zhuǎn)發(fā)設(shè)備發(fā)送SYNACK報文。
步驟306:數(shù)據(jù)轉(zhuǎn)發(fā)設(shè)備向客戶端轉(zhuǎn)發(fā)SYNACK報文。
步驟307:客戶端向數(shù)據(jù)轉(zhuǎn)發(fā)設(shè)備發(fā)送ACK報文。
步驟308:數(shù)據(jù)轉(zhuǎn)發(fā)設(shè)備向服務(wù)端轉(zhuǎn)發(fā)來自客戶端的ACK報文。
步驟309:服務(wù)端與客戶端建立TCP通信連接。
下面結(jié)合圖1,以客戶端為客戶端11、服務(wù)端為服務(wù)器12、數(shù)據(jù)轉(zhuǎn)發(fā)設(shè)備為路由器14為例進(jìn)行示例性說明:
在上述步驟301中,客戶端11向路由器14發(fā)送SYN報文。
在上述步驟302中,路由器14向服務(wù)器12轉(zhuǎn)發(fā)來自客戶端11發(fā)送的SYN報文。
在上述步驟303中,服務(wù)器12處于連接監(jiān)聽狀態(tài),當(dāng)服務(wù)器12接收到路由器14轉(zhuǎn)發(fā)的來自客戶端11的SYN報文后,服務(wù)器12記錄SYN報文所經(jīng)過的入接口“F0/0”,服務(wù)器12根據(jù)SYN報文建立TCP連接信息,服務(wù)器12將TCP連接信息與入接口“F0/0”之間的對應(yīng)關(guān)系存儲在列表中,列表可以為鏈表、數(shù)組或隊列等數(shù)據(jù)結(jié)構(gòu)。如表1所示,TCP連接信息與路由器14的入接口“F0/0”建立的對應(yīng)關(guān)系為:客戶端11的IP地址為“192.168.1.1”,服務(wù)器的IP地址為“121.14.88.76”,客戶端的端口為“10000”,服務(wù)器的端口為“80”,傳輸層協(xié)議為TCP協(xié)議,入接口為“F0/0”。
在上述步驟304中,例如,服務(wù)器12通過客戶端11的IP地址“192.168.1.1”查找表2所示的路由表,通過匹配目的網(wǎng)段“192.168.1.0”(客戶端11的IP地址“192.168.1.1”如何匹配目的網(wǎng)段“192.168.1.0”的相關(guān)描述可以參見現(xiàn)有技術(shù),在此不再詳述)得到三個下一跳地址:路由器14對應(yīng)的地址“20.1.1.2”、防火墻15對應(yīng)的地址“30.1.1.2”和路由器16對應(yīng)的地址“40.1.1.2”。服務(wù)器12根據(jù)表1所示的對應(yīng)關(guān)系中的入接口“F0/0”,匹配三個下一跳地址中的出接口,即路由器14對應(yīng)的出接口“F0/0”、防火墻15對應(yīng)的出接口“S0/0”和路由器16對應(yīng)的出接口“T0/0”,當(dāng)服務(wù)器12匹配到路由器14對應(yīng)的出接口“F0/0”與對應(yīng)關(guān)系中所記錄的入接口“F0/0”相同時,服務(wù)器12優(yōu)先選擇與入接口相一致的“F0/0”作為出接口,進(jìn)而確定下一跳為路由器14,并將下一跳的路由器14的地址“20.1.1.2”記錄在TCP連接信息中。
在上述步驟305中,服務(wù)器12向路由器14發(fā)送SYNACK報文,服務(wù)器12用于接收SYN報文的鏈路與用于發(fā)送確認(rèn)的SYNACK報文的鏈路相一致,確保了路由器14對SYNACK報文進(jìn)行轉(zhuǎn)發(fā)。
在上述步驟306中,路由器14通過接入的互聯(lián)網(wǎng)17向客戶端11轉(zhuǎn)發(fā)SYNACK報文。
在上述步驟307中,客戶端11向路由器14發(fā)送ACK報文。
在上述步驟308中,路由器14向服務(wù)器12轉(zhuǎn)發(fā)來自客戶端11的ACK報文。
在上述步驟309中,客戶端11與服務(wù)器12建立TCP通信連接。
本發(fā)明實施例中,服務(wù)端接收路由器14轉(zhuǎn)發(fā)的來自客戶端的SYN報文,服務(wù)端根據(jù)SYN報文建立TCP連接信息并記錄TCP連接信息與入接口的對應(yīng)關(guān)系,服務(wù)端通過對應(yīng)關(guān)系中的入接口匹配至少一個下一跳中的出接口,將與入接口相同的出接口所對應(yīng)的數(shù)據(jù)轉(zhuǎn)發(fā)設(shè)備作為下一跳,因路由器14的出接口“F0/0”與入接口“F0/0”相同,即確定下一跳為路由器14,服務(wù)端向路由器14發(fā)送SYNACK報文,并通過接收路由器14轉(zhuǎn)發(fā)的來自客戶端的ACK報文,服務(wù)端與客戶端之間建立TCP通信連接。由于建立TCP通信連接的報文都是經(jīng)由路由器14轉(zhuǎn)發(fā),從而確保了服務(wù)端用于接收SYN報文的鏈路與用于發(fā)送確認(rèn)的SYNACK報文的鏈路相一致,使得客戶端與服務(wù)端之間的TCP通信連接可以正常建立。
圖4是本發(fā)明建立TCP通信連接的方法的另一個實施例流程圖,本發(fā)明實施例結(jié)合圖1,以第一數(shù)據(jù)報文為SYN報文、第二數(shù)據(jù)報文為SYNACK報文、第三數(shù)據(jù)報文為ACK報文為例進(jìn)行示例性說明,如圖4所示,包括如下步驟:
步驟401:客戶端向數(shù)據(jù)轉(zhuǎn)發(fā)設(shè)備發(fā)送SYN報文。
步驟402:數(shù)據(jù)轉(zhuǎn)發(fā)設(shè)備向服務(wù)端轉(zhuǎn)發(fā)來自客戶端的SYN報文。
步驟403:服務(wù)端記錄TCP連接信息與入接口的對應(yīng)關(guān)系。
步驟404:服務(wù)端根據(jù)負(fù)載分擔(dān)確定第二下一跳。
步驟405:服務(wù)端向第二下一跳發(fā)送SYNACK報文。
步驟406:通過第二下一跳向客戶端轉(zhuǎn)發(fā)SYNACK報文。
步驟407:客戶端向數(shù)據(jù)轉(zhuǎn)發(fā)設(shè)備發(fā)送ACK報文。
步驟408:通過數(shù)據(jù)轉(zhuǎn)發(fā)設(shè)備向服務(wù)端轉(zhuǎn)發(fā)來自客戶端的ACK報文。
步驟409:服務(wù)端與客戶端建立TCP通信連接。
下面結(jié)合圖1,以客戶端為客戶端11、服務(wù)端為服務(wù)器12、數(shù)據(jù)轉(zhuǎn)發(fā)設(shè)備為路由器14為例進(jìn)行示例性說明:
步驟401至步驟403,此處描述可以參見圖3所示步驟301至步驟303的相關(guān)描述,在此不再詳述。
在上述步驟404中,第二下一跳為服務(wù)器12根據(jù)源IP地址在至少一個下一跳中通過負(fù)載分擔(dān)選擇的下一跳。例如,服務(wù)器12根據(jù)TCP連接信息中的源IP地址“192.168.1.1”在表2所示的路由表中查找下一跳,下一跳可以是路由器14、防火墻15或者路由器16,當(dāng)服務(wù)器12根據(jù)對應(yīng)關(guān)系中的源IP地址“192.168.1.1”未查找到對應(yīng)的入接口“F0/0”時,則服務(wù)器12通過負(fù)載分擔(dān)選擇下一跳,即第二下一跳,其中,負(fù)載分擔(dān)可以基于源IP的算法或者基于源IP加目的IP的算法來實現(xiàn),此處可參照現(xiàn)有技術(shù)。
在步驟405-步驟406中,以服務(wù)器12通過負(fù)載分擔(dān)選擇的下一跳為路由器16進(jìn)行示例性說明,例如,服務(wù)器12通過出接口“T0/0”向路由器16發(fā)送SYNACK報文,路由器16接收到服務(wù)器12發(fā)送的SYNACK報文,當(dāng)路由器16未攔截SYNACK報文時,則路由器16向客戶端11轉(zhuǎn)發(fā)SYNACK報文。
在步驟407-步驟409中,基于步驟401客戶端11向路由器14發(fā)送SYN報文,通常客戶端11仍會通過路由器14發(fā)送ACK報文(此處可參照現(xiàn)有技術(shù)),客戶端11通過路由器13接入互聯(lián)網(wǎng)17中,客戶端11通過互聯(lián)網(wǎng)17中的路由器(圖1中并未示出)向路由器14發(fā)送ACK報文,路由器14接收到ACK報文并向服務(wù)器12轉(zhuǎn)發(fā)來自客戶端11的ACK報文,從而客戶端11與服務(wù)器12建立TCP通信通信連接。
本發(fā)明實施例中,當(dāng)服務(wù)端未查找到有與入接口相一致的出接口時,服務(wù)端根據(jù)負(fù)載分擔(dān)選擇下一跳,如果下一跳未對SYNACK報文進(jìn)行攔截,則客戶端與服務(wù)端之間可以正常建立TCP通信連接。
圖5是本發(fā)明建立TCP通信連接的方法的另一個實施例流程圖,本發(fā)明實施例基于圖2-圖3所示的建立TCP通信連接的方法的實施例流程,結(jié)合圖1以第一數(shù)據(jù)報文為SYN報文、第二數(shù)據(jù)報文為SYNACK報文、第三數(shù)據(jù)報文為ACK報文、為例,即服務(wù)端接收數(shù)據(jù)轉(zhuǎn)發(fā)設(shè)備轉(zhuǎn)發(fā)的來自客戶端根據(jù)SYNACK報文返回的ACK報文步驟之后,對客戶端與服務(wù)端之間的數(shù)據(jù)通信過程進(jìn)行示例性描述,如圖5所示,包括如下步驟:
步驟501:客戶端向數(shù)據(jù)轉(zhuǎn)發(fā)設(shè)備發(fā)送業(yè)務(wù)請求。
步驟502:數(shù)據(jù)轉(zhuǎn)發(fā)設(shè)備向服務(wù)端轉(zhuǎn)發(fā)來自客戶端的業(yè)務(wù)請求。
步驟503:服務(wù)端根據(jù)接收業(yè)務(wù)請求時的入接口在TCP連接信息中查找數(shù)據(jù)轉(zhuǎn)發(fā)設(shè)備。
步驟504:服務(wù)端向數(shù)據(jù)轉(zhuǎn)發(fā)設(shè)備發(fā)送第一業(yè)務(wù)數(shù)據(jù)。
步驟505:數(shù)據(jù)轉(zhuǎn)發(fā)設(shè)備向客戶端轉(zhuǎn)發(fā)第一業(yè)務(wù)數(shù)據(jù)。
下面結(jié)合圖1,以客戶端為客戶端11、服務(wù)端為服務(wù)器12、數(shù)據(jù)轉(zhuǎn)發(fā)設(shè)備為路由器14為例進(jìn)行示例性說明:
在步驟501中,客戶端11向路由器14發(fā)送業(yè)務(wù)請求,業(yè)務(wù)請求可以為遠(yuǎn)程登錄協(xié)議(Teletype Network,TELNET)、超文本傳輸協(xié)議(HyperText Transfer Protocol,HTTP)和安全外殼協(xié)議(Secure Shell,SSH)等協(xié)議中攜帶的客戶端11發(fā)送的業(yè)務(wù)請求。
在步驟502中,路由器14向服務(wù)器12轉(zhuǎn)發(fā)來自客戶端11的業(yè)務(wù)請求。
在步驟503中,接收業(yè)務(wù)請求時的入接口為建立TCP連接時,TCP連接信息中記錄的入接口,如圖3所示實施例的步驟303以及步驟304,服務(wù)器12在TCP連接信息中記錄的入接口為“F0/0”且記錄的下一跳為路由器14的地址“20.1.1.2”,即服務(wù)器12根據(jù)接收業(yè)務(wù)請求時的入接口“F0/0”在TCP連接信息中查找到與入接口“F0/0”對應(yīng)的下一跳為路由器14,服務(wù)器12優(yōu)先選擇路由器14作為下一跳。
在步驟504中,服務(wù)器12向路由器14發(fā)送第一業(yè)務(wù)數(shù)據(jù),第一業(yè)務(wù)數(shù)據(jù)為服務(wù)器12根據(jù)客戶端11發(fā)送的業(yè)務(wù)請求所對應(yīng)的業(yè)務(wù)數(shù)據(jù)。
在步驟505中,路由器14向客戶端11轉(zhuǎn)發(fā)業(yè)務(wù)數(shù)據(jù)。
本發(fā)明實施例中,在服務(wù)端接收路由器14轉(zhuǎn)發(fā)的來自客戶端根據(jù)SYNACK報文返回的ACK報文步驟之后,即服務(wù)端與客戶端建立TCP連接,客戶端向服務(wù)端發(fā)送業(yè)務(wù)請求,服務(wù)端根據(jù)TCP連接信息中所記錄的路由器14優(yōu)先作為下一跳向客戶端發(fā)送業(yè)務(wù)請求所對應(yīng)的業(yè)務(wù)數(shù)據(jù),使得建立TCP連接的鏈路與數(shù)據(jù)傳輸?shù)逆溌繁3忠恢拢瑥亩岣吡薚CP通信連接的穩(wěn)定性和安全性。
可選的,基于圖2-圖3所示的建立TCP通信連接的方法的實施例流程并結(jié)合圖1對本發(fā)明實施例進(jìn)行示例性說明,其中,第一數(shù)據(jù)報文為SYN報文、第二數(shù)據(jù)報文為SYNACK報文、第三數(shù)據(jù)報文為ACK報文、客戶端為客戶端11、服務(wù)端為服務(wù)器12、數(shù)據(jù)轉(zhuǎn)發(fā)設(shè)備為路由器14。本發(fā)明實施例對服務(wù)端接收數(shù)據(jù)轉(zhuǎn)發(fā)設(shè)備轉(zhuǎn)發(fā)的來自客戶端根據(jù)SYNACK報文返回的ACK報文步驟之后,客戶端與服務(wù)端之間的數(shù)據(jù)通信過程進(jìn)行示例性描述:服務(wù)器12接收路由器14轉(zhuǎn)發(fā)的來自客戶端11根據(jù)SYNACK報文返回的ACK報文步驟之后,即服務(wù)器12與客戶端11建立TCP連接,觸發(fā)服務(wù)器12通過TCP連接信息中記錄的路由器14優(yōu)先作為下一跳向所述客戶端11發(fā)送第二業(yè)務(wù)數(shù)據(jù),第二業(yè)務(wù)數(shù)據(jù)為服務(wù)器12直接通過TCP連接信息中記錄的路由器14向客戶端11發(fā)送的業(yè)務(wù)數(shù)據(jù)。
本發(fā)明實施例中,在服務(wù)端與客戶端建立TCP連接時,觸發(fā)服務(wù)端通過TCP連接信息中記錄的路由器14優(yōu)先作為下一跳向客戶端發(fā)送業(yè)務(wù)數(shù)據(jù),確保了建立TCP連接的鏈路與數(shù)據(jù)傳輸?shù)逆溌繁3忠恢拢行岣吡薚CP通信連接的穩(wěn)定性和安全性。
對應(yīng)于上述的建立TCP通信連接的方法,本發(fā)明還提出了圖6所示的服務(wù)器的硬件結(jié)構(gòu)圖。請參考圖6,在硬件層面,該服務(wù)器包括處理器、內(nèi)部總線、網(wǎng)絡(luò)接口、內(nèi)存以及非易失性存儲器,當(dāng)然還可能包括其他業(yè)務(wù)所需要的硬件。處理器從非易失性存儲器中讀取對應(yīng)的計算機程序到內(nèi)存中然后運行,在邏輯層面上形成建立TCP通信連接的裝置。當(dāng)然,除了軟件實現(xiàn)方式之外,本發(fā)明并不排除其他實現(xiàn)方式,比如邏輯器件抑或軟硬件結(jié)合的方式等等,也就是說以下處理流程的執(zhí)行主體并不限定于各個邏輯單元,也可以是硬件或邏輯器件。
圖7是本發(fā)明建立TCP通信連接的裝置的一個實施例框圖,如圖7所示,該建立TCP通信連接的裝置可以包括:第一接收模塊71、關(guān)系記錄模塊72、設(shè)備確定模塊73、第一發(fā)送模塊74以及第二接收模塊75,其中:
第一接收模塊71,用于通過入接口接收數(shù)據(jù)轉(zhuǎn)發(fā)設(shè)備所轉(zhuǎn)發(fā)的來自客戶端的第一數(shù)據(jù)報文;
關(guān)系記錄模塊72,用于根據(jù)所述第一接收模塊71中的所述第一數(shù)據(jù)報文建立TCP連接信息并記錄所述TCP連接信息與所述入接口之間的對應(yīng)關(guān)系;
設(shè)備確定模塊73,用于基于所述關(guān)系記錄模塊72所記錄的所述對應(yīng)關(guān)系中的所述入接口,從所述服務(wù)端對應(yīng)的至少一個下一跳中確定第一下一跳為所述數(shù)據(jù)轉(zhuǎn)發(fā)設(shè)備;
第一發(fā)送模塊74,用于向所述設(shè)備確定模塊73中確定的所述數(shù)據(jù)轉(zhuǎn)發(fā)設(shè)備發(fā)送與所述第一數(shù)據(jù)報文相對應(yīng)的第二數(shù)據(jù)報文,以使所述數(shù)據(jù)轉(zhuǎn)發(fā)設(shè)備向所述客戶端轉(zhuǎn)發(fā)所述第二數(shù)據(jù)報文;
第二接收模塊75,用于接收所述數(shù)據(jù)轉(zhuǎn)發(fā)設(shè)備轉(zhuǎn)發(fā)的來自所述客戶端的第三數(shù)據(jù)報文,所述第三數(shù)據(jù)報文為所述客戶端根據(jù)所述第一發(fā)送模塊71中的所述第二數(shù)據(jù)報文返回的第三數(shù)據(jù)報文。
圖8是本發(fā)明建立TCP通信連接的裝置的另一個實施例框圖,如圖8所示,在上述圖8所示實施例的基礎(chǔ)上,設(shè)備確定模塊73可包括:
第一查找單元731,用于在所述服務(wù)端的路由表中查找是否有與所述關(guān)系記錄模塊72建立的所述TCP連接信息中的源IP地址相對應(yīng)的至少一個下一跳;
第二查找單元732,用于當(dāng)從所述第一查找單元中查找到所述至少一個下一跳時,對所述至少一個下一跳中記錄的出接口與所述關(guān)系記錄模塊72中記錄的所述入接口進(jìn)行匹配,查找是否有與所述入接口相一致的出接口;
設(shè)備確定單元733,用于當(dāng)從所述第二查找單元732中查找到有與所述入接口相一致的出接口時,將所述出接口對應(yīng)的所述數(shù)據(jù)轉(zhuǎn)發(fā)設(shè)備確定為第一下一跳,并將所述數(shù)據(jù)轉(zhuǎn)發(fā)設(shè)備記錄在所述關(guān)系記錄模塊72建立的所述TCP連接信息中。
在一實施例中,建立TCP通信連接的裝置還包括:
設(shè)備選擇模塊76,用于當(dāng)從所述第二查找單元732中未查找到有與所述入接口相一致的出接口時,基于負(fù)載分擔(dān)算法選擇第二下一跳;
第二發(fā)送模塊77,用于向所述設(shè)備選擇模塊76中選擇的所述第二下一跳發(fā)送與所述第一數(shù)據(jù)報文相對應(yīng)的第二數(shù)據(jù)報文,以使在所述第二下一跳未攔截所述第二數(shù)據(jù)報文時所述第二下一跳向所述客戶端轉(zhuǎn)發(fā)所述第二數(shù)據(jù)報文;
第三接收模塊78,用于接收所述數(shù)據(jù)轉(zhuǎn)發(fā)設(shè)備轉(zhuǎn)發(fā)的來自所述客戶端的第三數(shù)據(jù)報文,所述第三數(shù)據(jù)報文為所述客戶端根據(jù)所述第二發(fā)送模塊77中的所述第二數(shù)據(jù)報文返回的第三數(shù)據(jù)報文。
在一實施例中,建立TCP通信連接的裝置還包括:
第四接收模塊79,用于所述第二接收模塊75接收所述第三數(shù)據(jù)報文后,通過所述第一接收模塊71中的所述入接口接收所述數(shù)據(jù)轉(zhuǎn)發(fā)設(shè)備轉(zhuǎn)發(fā)的來自所述客戶端的業(yè)務(wù)請求;
第三查找模塊80,用于根據(jù)所述入接口查找所述設(shè)備確定單元733中所述TCP連接信息中所記錄的所述數(shù)據(jù)轉(zhuǎn)發(fā)設(shè)備;
第三發(fā)送模塊81,用于向所述第三查找模塊80查找到的所述數(shù)據(jù)轉(zhuǎn)發(fā)設(shè)備發(fā)送與所述業(yè)務(wù)請求相對應(yīng)的第一業(yè)務(wù)數(shù)據(jù),以使所述數(shù)據(jù)轉(zhuǎn)發(fā)設(shè)備向所述客戶端轉(zhuǎn)發(fā)所述第一業(yè)務(wù)數(shù)據(jù)。
在一實施例中,建立TCP通信連接的裝置還包括:
第四發(fā)送模塊82,用于所述第二接收模塊75接收所述第三數(shù)據(jù)報文后,通過所述設(shè)備確定單元733中所述TCP連接信息中記錄的所述數(shù)據(jù)轉(zhuǎn)發(fā)設(shè)備向所述客戶端發(fā)送第二業(yè)務(wù)數(shù)據(jù)。
上述裝置中各個單元的功能和作用的實現(xiàn)過程具體詳見上述方法中對應(yīng)步驟的實現(xiàn)過程,在此不再贅述。
對于裝置實施例而言,由于其基本對應(yīng)于方法實施例,所以相關(guān)之處參見方法實施例的部分說明即可。以上所描述的裝置實施例僅僅是示意性的,其中所述作為分離部件說明的單元可以是或者也可以不是物理上分開的,作為單元顯示的部件可以是或者也可以不是物理單元,即可以位于一個地方,或者也可以分布到多個網(wǎng)絡(luò)單元上??梢愿鶕?jù)實際的需要選擇其中的部分或者全部模塊來實現(xiàn)本發(fā)明方案的目的。本領(lǐng)域普通技術(shù)人員在不付出創(chuàng)造性勞動的情況下,即可以理解并實施。
由上述實施例可見,當(dāng)服務(wù)端查找到與入接口相匹配的出接口時,確定下一跳為數(shù)據(jù)轉(zhuǎn)發(fā)設(shè)備,使服務(wù)端接收SYN報文與發(fā)送SYNACK報文經(jīng)過的鏈路相同,服務(wù)端與客戶端之間可以成功建立TCP通信連接;當(dāng)服務(wù)器未查找與入接口相匹配的出接口時,服務(wù)端通過負(fù)載分擔(dān)選擇下一跳,且下一跳未攔截第二數(shù)據(jù)報文時,服務(wù)端通過下一跳向客戶端發(fā)送SYNACK報文,從而使客戶端與服務(wù)端可以建立TCP通信連接。通過本發(fā)明實施例,解決了客戶端與服務(wù)端無法建立通信連接的技術(shù)問題,確保了服務(wù)端與客戶端之間可以正常建立TCP通信連接。
本領(lǐng)域技術(shù)人員在考慮說明書及實踐這里公開的發(fā)明后,將容易想到本發(fā)明的其它實施方案。本發(fā)明旨在涵蓋本發(fā)明的任何變型、用途或者適應(yīng)性變化,這些變型、用途或者適應(yīng)性變化遵循本發(fā)明的一般性原理并包括本發(fā)明未公開的本技術(shù)領(lǐng)域中的公知常識或慣用技術(shù)手段。說明書和實施例僅被視為示例性的,本發(fā)明的真正范圍和精神由下面的權(quán)利要求指出。
還需要說明的是,術(shù)語“包括”、“包含”或者其任何其他變體意在涵蓋非排他性的包含,從而使得包括一系列要素的過程、方法、商品或者設(shè)備不僅包括那些要素,而且還包括沒有明確列出的其他要素,或者是還包括為這種過程、方法、商品或者設(shè)備所固有的要素。在沒有更多限制的情況下,由語句“包括一個……”限定的要素,并不排除在包括所述要素的過程、方法、商品或者設(shè)備中還存在另外的相同要素。
以上所述僅為本發(fā)明的較佳實施例而已,并不用以限制本發(fā)明,凡在本發(fā)明的精神和原則之內(nèi),所做的任何修改、等同替換、改進(jìn)等,均應(yīng)包含在本發(fā)明保護(hù)的范圍之內(nèi)。