一种建立TCP通信连接的方法及装置转让专利

申请号 : CN201610605706.X

文献号 : CN106254433A

文献日 :

基本信息:

PDF:

法律信息:

相似专利:

发明人 : 王富涛

申请人 : 杭州迪普科技有限公司

摘要 :

本发明提供一种建立TCP通信连接的方法及装置,方法包括:通过入接口接收数据转发设备所转发的来自客户端的第一数据报文;根据第一数据报文建立TCP连接信息并记录TCP连接信息与入接口之间的对应关系;基于对应关系中的入接口,从服务端对应的至少一个下一跳中确定第一下一跳为数据转发设备;向数据转发设备发送与第一数据报文相对应的第二数据报文,以使数据转发设备向客户端转发第二数据报文;接收数据转发设备转发的来自客户端根据第二数据报文返回的第三数据报文。应用本发明实施例,可以避免服务端接收第一数据报文的链路与发送第二数据报文的链路不一致,从而使客户端与服务器可以正常建立TCP通信连接。

权利要求 :

1.一种建立TCP通信连接的方法,其特征在于,所述方法包括:通过入接口接收数据转发设备所转发的来自客户端的第一数据报文;

根据所述第一数据报文建立TCP连接信息并记录所述TCP连接信息与所述入接口之间的对应关系;

基于所述对应关系中的所述入接口,从所述服务端对应的至少一个下一跳中确定第一下一跳为所述数据转发设备;

向所述数据转发设备发送与所述第一数据报文相对应的第二数据报文,以使所述数据转发设备向所述客户端转发所述第二数据报文;

接收所述数据转发设备转发的来自所述客户端根据所述第二数据报文返回的第三数据报文。

2.根据权利要求1所述的建立TCP通信连接的方法,其特征在于,所述基于所述对应关系中的所述入接口,从所述服务端对应的至少一个下一跳中确定第一下一跳为所述数据转发设备,包括:在所述服务端的路由表中查找是否有与所述TCP连接信息中的源IP地址相对应的至少一个下一跳;

当查找到所述至少一个下一跳时,对所述至少一个下一跳中记录的出接口与所述入接口进行匹配,查找是否有与所述入接口相一致的出接口;

当查找到有与所述入接口相一致的出接口时,将所述出接口对应的所述数据转发设备确定为第一下一跳,并将所述数据转发设备记录在所述TCP连接信息中。

3.根据权利要求2所述的建立TCP通信连接的方法,其特征在于,所述方法还包括:当未查找到有与所述入接口相一致的出接口时,基于负载分担算法选择第二下一跳;

向所述第二下一跳发送与所述第一数据报文相对应的第二数据报文,以使在所述第二下一跳未拦截所述第二数据报文时所述第二下一跳向所述客户端转发所述第二数据报文;

接收所述数据转发设备转发的来自所述客户端根据所述第二数据报文返回的第三数据报文。

4.根据权利要求2所述的建立TCP通信连接的方法,其特征在于,所述接收所述数据转发设备转发的来自所述客户端根据所述第二数据报文返回的第三数据报文步骤之后,所述方法还包括:通过所述入接口接收所述数据转发设备转发的来自所述客户端的业务请求;

根据所述入接口查找所述TCP连接信息中记录的所述数据转发设备;

向所述数据转发设备发送与所述业务请求相对应的第一业务数据,以使所述数据转发设备向所述客户端转发所述第一业务数据。

5.根据权利要求2所述的建立TCP通信连接的方法,其特征在于,所述接收所述数据转发设备转发的来自所述客户端根据所述第二数据报文返回的第三数据报文步骤之后,所述方法还包括:通过所述TCP连接信息中记录的所述数据转发设备向所述客户端发送第二业务数据。

6.一种建立TCP通信连接的装置,其特征在于,所述装置包括:第一接收模块,用于通过入接口接收数据转发设备所转发的来自客户端的第一数据报文;

关系记录模块,用于根据所述第一接收模块中的所述第一数据报文建立TCP连接信息并记录所述TCP连接信息与所述入接口之间的对应关系;

设备确定模块,用于基于所述关系记录模块所记录的所述对应关系中的所述入接口,从所述服务端对应的至少一个下一跳中确定第一下一跳为所述数据转发设备;

第一发送模块,用于向所述设备确定模块中确定的所述数据转发设备发送与所述第一数据报文相对应的第二数据报文,以使所述数据转发设备向所述客户端转发所述第二数据报文;

第二接收模块,用于接收所述数据转发设备转发的来自所述客户端的第三数据报文,所述第三数据报文为所述客户端根据所述第一发送模块中的所述第二数据报文返回的第三数据报文。

7.根据权利要求6所述的建立TCP通信连接的装置,其特征在于,所述设备确定模块包括:第一查找单元,用于在所述服务端的路由表中查找是否有与所述关系记录模块建立的所述TCP连接信息中的源IP地址相对应的至少一个下一跳;

第二查找单元,用于当从所述第一查找单元中查找到所述至少一个下一跳时,对所述至少一个下一跳中记录的出接口与所述关系记录模块中记录的所述入接口进行匹配,查找是否有与所述入接口相一致的出接口;

设备确定单元,用于当从所述第二查找单元中查找到有与所述入接口相一致的出接口时,将所述出接口对应的所述数据转发设备确定为第一下一跳,并将所述数据转发设备记录在所述关系记录模块建立的所述TCP连接信息中。

8.根据权利要求7所述的建立TCP通信连接的装置,其特征在于,所述装置还包括:设备选择模块,用于当从所述第二查找单元中未查找到有与所述入接口相一致的出接口时,基于负载分担算法选择第二下一跳;

第二发送模块,用于向所述设备选择模块中选择的所述第二下一跳发送与所述第一数据报文相对应的第二数据报文,以使在所述第二下一跳未拦截所述第二数据报文时所述第二下一跳向所述客户端转发所述第二数据报文;

第三接收模块,用于接收所述数据转发设备转发的来自所述客户端的第三数据报文,所述第三数据报文为所述客户端根据所述第二发送模块中的所述第二数据报文返回的第三数据报文。

9.根据权利要求7所述的建立TCP通信连接的装置,其特征在于,所述装置还包括:第四接收模块,用于所述第二接收模块接收所述第三数据报文后,通过所述第一接收模块中的所述入接口接收所述数据转发设备转发的来自所述客户端的业务请求;

第三查找模块,用于根据所述入接口查找所述设备确定单元中所述TCP连接信息中所记录的所述数据转发设备;

第三发送模块,用于向所述第三查找模块查找到的所述数据转发设备发送与所述业务请求相对应的第一业务数据,以使所述数据转发设备向所述客户端转发所述第一业务数据。

10.根据权利要求7所述的建立TCP通信连接的装置,其特征在于,所述装置还包括:第四发送模块,用于所述第二接收模块接收所述第三数据报文后,通过所述设备确定单元中所述TCP连接信息中记录的所述数据转发设备向所述客户端发送第二业务数据。

说明书 :

一种建立TCP通信连接的方法及装置

技术领域

[0001] 本发明涉及网络通信技术领域,尤其涉及一种建立TCP通信连接的方法及装置。

背景技术

[0002] 随着互联网数据通信技术的高速发展,稳定可靠的数据交互方式受到用户的青睐,通常采用TCP通信协议对客户端与服务端进行数据交互传输。
[0003] 现有技术中,服务端与客户端之间建立TCP通信连接,服务端接收到来自客户端的SYN报文后,当服务端存在多个下一跳时,服务端通过负载分担算法对需要回复的SYN报文选择用于发送确认的SYNACK报文的链路,通常会出现用于接收SYN报文的链路与用于发送确认的SYNACK报文的链路不一致的情况,进而导致客户端与服务端无法建立TCP通信连接。

发明内容

[0004] 本发明提供一种建立TCP通信连接的方法及装置,以解决现有技术中客户端与服务端无法建立通信连接的技术问题。
[0005] 为实现上述目的,本发明提供技术方案如下:
[0006] 根据本发明的第一方面,提出了一种建立TCP通信连接的方法,包括:
[0007] 通过入接口接收数据转发设备所转发的来自客户端的第一数据报文;
[0008] 根据所述第一数据报文建立TCP连接信息并记录所述TCP连接信息与所述入接口之间的对应关系;
[0009] 基于所述对应关系中的所述入接口,从所述服务端对应的至少一个下一跳中确定第一下一跳为所述数据转发设备;
[0010] 向所述数据转发设备发送与所述第一数据报文相对应的第二数据报文,以使所述数据转发设备向所述客户端转发所述第二数据报文;
[0011] 接收所述数据转发设备转发的来自所述客户端根据所述第二数据报文返回的第三数据报文。
[0012] 根据本发明的第二方面,提出了一种建立TCP通信连接的装置,包括:
[0013] 第一接收模块,用于通过入接口接收数据转发设备所转发的来自客户端的第一数据报文;
[0014] 关系记录模块,用于根据所述第一接收模块中的所述第一数据报文建立TCP连接信息并记录所述TCP连接信息与所述入接口之间的对应关系;
[0015] 设备确定模块,用于基于所述关系记录模块所记录的所述对应关系中的所述入接口,从所述服务端对应的至少一个下一跳中确定第一下一跳为所述数据转发设备;
[0016] 第一发送模块,用于向所述设备确定模块中确定的所述数据转发设备发送与所述第一数据报文相对应的第二数据报文,以使所述数据转发设备向所述客户端转发所述第二数据报文;
[0017] 第二接收模块,用于接收所述数据转发设备转发的来自所述客户端的第三数据报文,所述第三数据报文为所述客户端根据所述第一发送模块中的所述第二数据报文返回的第三数据报文。
[0018] 由以上技术方案可见,当服务端通过入接口确定第一下一跳为数据转发设备时,服务端接收第一数据报文与发送第二数据报文经过的链路相同,从而使服务端与客户端之间可以成功建立TCP通信连接,因此通过本发明实施例可以解决现有技术中客户端与服务端无法建立通信连接的技术问题。

附图说明

[0019] 图1是应用本发明实施例建立TCP通信连接的一个应用场景示意图;
[0020] 图2是本发明建立TCP通信连接的方法的一个实施例流程图;
[0021] 图3是本发明建立TCP通信连接的方法的另一个实施例流程图;
[0022] 图4是本发明建立TCP通信连接的方法的另一个实施例流程图;
[0023] 图5是本发明建立TCP通信连接的方法的另一个实施例流程图;
[0024] 图6是本发明建立TCP通信连接控制的装置所在设备的一种硬件结构图;
[0025] 图7是本发明建立TCP通信连接的装置的一个实施例框图;
[0026] 图8是本发明建立TCP通信连接的装置的另一个实施例框图。

具体实施方式

[0027] 这里将详细地对示例性实施例进行说明,其示例表示在附图中。下面的描述涉及附图时,除非另有表示,不同附图中的相同数字表示相同或相似的要素。以下示例性实施例中所描述的实施方式并不代表与本发明相一致的所有实施方式。相反,它们仅是与如所附权利要求书中所详述的、本发明的一些方面相一致的装置和方法的例子。
[0028] 在本发明使用的术语是仅仅出于描述特定实施例的目的,而非旨在限制本发明。在本发明和所附权利要求书中所使用的单数形式的“一种”、“所述”和“该”也旨在包括多数形式,除非上下文清楚地表示其他含义。还应当理解,本文中使用的术语“和/或”是指并包含一个或多个相关联的列出项目的任何或所有可能组合。
[0029] 应当理解,尽管在本发明可能采用术语第一、第二、第三等来描述各种信息,但这些信息不应限于这些术语。这些术语仅用来将同一类型的信息彼此区分开。例如,在不脱离本发明范围的情况下,第一信息也可以被称为第二信息,类似地,第二信息也可以被称为第一信息。取决于语境,如在此所使用的词语“如果”可以被解释成为“在……时”或“当……时”或“响应于确定”。
[0030] 图1是应用本发明实施例建立TCP通信连接的一个应用场景示意图,如图1所示,建立TCP通信连接的系统包括:安装在个人计算机(Personal Computer,PC)上的客户端11以及服务器12、路由器13、路由器14、防火墙15和路由器16等设备,其中,客户端11的路由器13和服务器12的路由器14、防火墙15及路由器16通过互联网17建立网络连接。本领域技术人员可以理解的是,客户端11安装在PC上以及服务端为服务器12仅为示例性说明,其并不能形成对本发明的限制,客户端11还可以安装在手机、平板电脑、智能手表等终端设备上,也可以安装在路由器、交换机、防火墙等网络设备上,服务端可以为通过TCP协议能够与客户端11建立通信连接的网络设备,例如,服务端可以为路由器、交换机等网络设备。当客户端11与服务器12建立TCP通信连接时,服务器12对下一跳的路由器14、防火墙15和路由器16通过负载分担进行选择。当客户端11通过路由器14向服务器12发送SYN报文时,如果服务器12通过负载分担选择的下一跳为防火墙15,则服务器12向防火墙15发送SYN报文对应的SYNACK报文,因此SYN报文的传输链路与SYNACK报文的传输链路不一致。通常防火墙设备具备全状态检测功能,全状态检测的相关描述可以参见现有技术,在此不再详述。当防火墙15接收到SYNACK报文时,对SYNACK报文进行全状态检测,SYNACK报文对应的SYN报文未曾在防火墙15上建立过TCP连接会话,即SYNACK报文在防火墙15中匹配不到SYN报文建立的TCP连接会话,因此防火墙15对SYNACK报文进行丢弃,从而导致服务器12与客户端11之间建立TCP连接失败。本发明实施例,可以解决SYN报文的传输链路与SYNACK报文的传输链路不一致的问题,从而使客户端11与服务器12可以正常建立TCP通信连接。
[0031] 为对本发明进行进一步说明,提供下列实施例:
[0032] 图2是本发明建立TCP通信连接的方法的一个实施例流程图,如图2所示,包括如下步骤:
[0033] 步骤201:通过入接口接收数据转发设备所转发的来自客户端的第一数据报文。
[0034] 步骤202:根据所述第一数据报文建立TCP连接信息并记录所述TCP连接信息与所述入接口之间的对应关系。
[0035] 步骤203:基于所述对应关系中的所述入接口,从所述服务端对应的至少一个下一跳中确定第一下一跳为所述数据转发设备。
[0036] 步骤204:向所述数据转发设备发送与所述第一数据报文相对应的第二数据报文,以使所述数据转发设备向所述客户端转发所述第二数据报文。
[0037] 步骤205:接收所述数据转发设备转发的来自所述客户端根据所述第二数据报文返回的第三数据报文。
[0038] 下面结合图1,以客户端为客户端11、服务端为服务器12、数据转发设备为路由器14为例进行示例性说明:
[0039] 在步骤201中,在一实施例中,入接口为服务器12的物理入接口或者通过应用软件设定的虚拟入接口,一个入接口对应一个下一跳,例如,入接口“F0/0”对应路由器14,入接口“S0/0”对应防火墙15,入接口“T0/0”对应路由器16。数据转发设备可以为路由器、交换机、防火墙等具有数据转发功能的设备。第一数据报文为SYN报文。
[0040] 在步骤202中,在一实施例中,服务器12根据SYN报文建立TCP连接信息,TCP连接信息可以包括:五元组、TCP连接状态等,例如TCP连接信息可以包括:源IP地址、目的IP地址、源端口、目的端口和传输层协议等,源IP地址为客户端11的IP地址,目的IP地址为服务器12的IP地址,源端口为客户端11的端口,目的端口为服务器12的端口,传输层协议为TCP协议。
[0041] 如果服务器12接收到路由器14转发的来自客户端11的SYN报文,如下表1所示,为TCP连接信息与路由器14的入接口的对应关系的示例:
[0042] 表1
[0043]
[0044] 记录的对应关系包括:客户端11的IP地址为“192.168.1.1”,服务器12的IP地址为“121.14.88.76”,客户端11的端口为“10000”,服务器12的端口为“80”,传输层协议为TCP协议,服务器的入接口“F0/0”对应路由器14。
[0045] 在步骤203中,在一实施例中,第一下一跳为基于对应关系中的入接口“F0/0”从服务器12对应的至少一个下一跳中所确定的下一跳,即所确定的下一跳为路由器14。服务器12查找路由表,路由表可以是静态路由表也可以是动态路由表。
[0046] 如下表2所示,为服务器12的路由表的示例:
[0047] 表2
[0048]
[0049] 表2中的目的网段为“192.168.1.0”,子网掩码为“255.255.255.0”用于划分子网,客户端11的IP地址“192.168.1.1”通过匹配目的网段“192.168.1.0”找到对应的三个下一跳地址(客户端11的IP地址“192.168.1.1”如何匹配目的网段“192.168.1.0”的相关描述可以参见现有技术,在此不再详述),分别为路由器14对应的地址“20.1.1.2”、防火墙15对应的地址“30.1.1.2”和路由器16对应的地址“40.1.1.2”,出接口分别为路由器14对应的出接口“F0/0”、防火墙15对应的出接口“S0/0”和路由器16对应的出接口“T0/0”。本领域技术人员可以理解的是,表2中的出接口与表1中的入接口是针对服务器12接收报文和发送报文而言的,出接口在接收报文时也可称为入接口,入接口在发送报文时也可称为出接口。
[0050] 在步骤204中,在一实施例中,第二数据报文为与步骤201中SYN报文对应的SYNACK报文。
[0051] 在步骤205中,在一实施例中,第三数据报文为与步骤204中SYNACK报文对应的ACK报文,服务器12收到ACK报文后,从而与客户端11可以正常建立TCP通信连接。
[0052] 本发明实施例中,服务端接收路由器14转发的来自客户端的SYN报文,并根据SYN报文建立TCP连接信息,同时记录TCP连接信息与入接口的对应关系,服务端通过入接口确定下一跳为路由器14,从而确保了服务端用于接收SYN报文的链路与用于发送确认的SYNACK报文的链路相一致,使得客户端与服务端之间的TCP通信连接可以正常建立。
[0053] 图3是本发明建立TCP通信连接的方法的另一个实施例流程图,本发明实施例结合图1,以第一数据报文为SYN报文、第二数据报文为SYNACK报文、第三数据报文为ACK报文为例进行示例性说明,如图3所示,包括如下步骤:
[0054] 步骤301:客户端向数据转发设备发送SYN报文。
[0055] 步骤302:数据转发设备向服务端转发来自客户端的SYN报文。
[0056] 步骤303:服务端根据SYN报文建立TCP连接信息并记录TCP连接信息与入接口的对应关系。
[0057] 步骤304:服务端根据对应关系中的入接口,确定下一跳为数据转发设备,并将数据转发设备记录在TCP连接信息中。
[0058] 步骤305:服务端向数据转发设备发送SYNACK报文。
[0059] 步骤306:数据转发设备向客户端转发SYNACK报文。
[0060] 步骤307:客户端向数据转发设备发送ACK报文。
[0061] 步骤308:数据转发设备向服务端转发来自客户端的ACK报文。
[0062] 步骤309:服务端与客户端建立TCP通信连接。
[0063] 下面结合图1,以客户端为客户端11、服务端为服务器12、数据转发设备为路由器14为例进行示例性说明:
[0064] 在上述步骤301中,客户端11向路由器14发送SYN报文。
[0065] 在上述步骤302中,路由器14向服务器12转发来自客户端11发送的SYN报文。
[0066] 在上述步骤303中,服务器12处于连接监听状态,当服务器12接收到路由器14转发的来自客户端11的SYN报文后,服务器12记录SYN报文所经过的入接口“F0/0”,服务器12根据SYN报文建立TCP连接信息,服务器12将TCP连接信息与入接口“F0/0”之间的对应关系存储在列表中,列表可以为链表、数组或队列等数据结构。如表1所示,TCP连接信息与路由器14的入接口“F0/0”建立的对应关系为:客户端11的IP地址为“192.168.1.1”,服务器的IP地址为“121.14.88.76”,客户端的端口为“10000”,服务器的端口为“80”,传输层协议为TCP协议,入接口为“F0/0”。
[0067] 在上述步骤304中,例如,服务器12通过客户端11的IP地址“192.168.1.1”查找表2所示的路由表,通过匹配目的网段“192.168.1.0”(客户端11的IP地址“192.168.1.1”如何匹配目的网段“192.168.1.0”的相关描述可以参见现有技术,在此不再详述)得到三个下一跳地址:路由器14对应的地址“20.1.1.2”、防火墙15对应的地址“30.1.1.2”和路由器16对应的地址“40.1.1.2”。服务器12根据表1所示的对应关系中的入接口“F0/0”,匹配三个下一跳地址中的出接口,即路由器14对应的出接口“F0/0”、防火墙15对应的出接口“S0/0”和路由器16对应的出接口“T0/0”,当服务器12匹配到路由器14对应的出接口“F0/0”与对应关系中所记录的入接口“F0/0”相同时,服务器12优先选择与入接口相一致的“F0/0”作为出接口,进而确定下一跳为路由器14,并将下一跳的路由器14的地址“20.1.1.2”记录在TCP连接信息中。
[0068] 在上述步骤305中,服务器12向路由器14发送SYNACK报文,服务器12用于接收SYN报文的链路与用于发送确认的SYNACK报文的链路相一致,确保了路由器14对SYNACK报文进行转发。
[0069] 在上述步骤306中,路由器14通过接入的互联网17向客户端11转发SYNACK报文。
[0070] 在上述步骤307中,客户端11向路由器14发送ACK报文。
[0071] 在上述步骤308中,路由器14向服务器12转发来自客户端11的ACK报文。
[0072] 在上述步骤309中,客户端11与服务器12建立TCP通信连接。
[0073] 本发明实施例中,服务端接收路由器14转发的来自客户端的SYN报文,服务端根据SYN报文建立TCP连接信息并记录TCP连接信息与入接口的对应关系,服务端通过对应关系中的入接口匹配至少一个下一跳中的出接口,将与入接口相同的出接口所对应的数据转发设备作为下一跳,因路由器14的出接口“F0/0”与入接口“F0/0”相同,即确定下一跳为路由器14,服务端向路由器14发送SYNACK报文,并通过接收路由器14转发的来自客户端的ACK报文,服务端与客户端之间建立TCP通信连接。由于建立TCP通信连接的报文都是经由路由器14转发,从而确保了服务端用于接收SYN报文的链路与用于发送确认的SYNACK报文的链路相一致,使得客户端与服务端之间的TCP通信连接可以正常建立。
[0074] 图4是本发明建立TCP通信连接的方法的另一个实施例流程图,本发明实施例结合图1,以第一数据报文为SYN报文、第二数据报文为SYNACK报文、第三数据报文为ACK报文为例进行示例性说明,如图4所示,包括如下步骤:
[0075] 步骤401:客户端向数据转发设备发送SYN报文。
[0076] 步骤402:数据转发设备向服务端转发来自客户端的SYN报文。
[0077] 步骤403:服务端记录TCP连接信息与入接口的对应关系。
[0078] 步骤404:服务端根据负载分担确定第二下一跳。
[0079] 步骤405:服务端向第二下一跳发送SYNACK报文。
[0080] 步骤406:通过第二下一跳向客户端转发SYNACK报文。
[0081] 步骤407:客户端向数据转发设备发送ACK报文。
[0082] 步骤408:通过数据转发设备向服务端转发来自客户端的ACK报文。
[0083] 步骤409:服务端与客户端建立TCP通信连接。
[0084] 下面结合图1,以客户端为客户端11、服务端为服务器12、数据转发设备为路由器14为例进行示例性说明:
[0085] 步骤401至步骤403,此处描述可以参见图3所示步骤301至步骤303的相关描述,在此不再详述。
[0086] 在上述步骤404中,第二下一跳为服务器12根据源IP地址在至少一个下一跳中通过负载分担选择的下一跳。例如,服务器12根据TCP连接信息中的源IP地址“192.168.1.1”在表2所示的路由表中查找下一跳,下一跳可以是路由器14、防火墙15或者路由器16,当服务器12根据对应关系中的源IP地址“192.168.1.1”未查找到对应的入接口“F0/0”时,则服务器12通过负载分担选择下一跳,即第二下一跳,其中,负载分担可以基于源IP的算法或者基于源IP加目的IP的算法来实现,此处可参照现有技术。
[0087] 在步骤405-步骤406中,以服务器12通过负载分担选择的下一跳为路由器16进行示例性说明,例如,服务器12通过出接口“T0/0”向路由器16发送SYNACK报文,路由器16接收到服务器12发送的SYNACK报文,当路由器16未拦截SYNACK报文时,则路由器16向客户端11转发SYNACK报文。
[0088] 在步骤407-步骤409中,基于步骤401客户端11向路由器14发送SYN报文,通常客户端11仍会通过路由器14发送ACK报文(此处可参照现有技术),客户端11通过路由器13接入互联网17中,客户端11通过互联网17中的路由器(图1中并未示出)向路由器14发送ACK报文,路由器14接收到ACK报文并向服务器12转发来自客户端11的ACK报文,从而客户端11与服务器12建立TCP通信通信连接。
[0089] 本发明实施例中,当服务端未查找到有与入接口相一致的出接口时,服务端根据负载分担选择下一跳,如果下一跳未对SYNACK报文进行拦截,则客户端与服务端之间可以正常建立TCP通信连接。
[0090] 图5是本发明建立TCP通信连接的方法的另一个实施例流程图,本发明实施例基于图2-图3所示的建立TCP通信连接的方法的实施例流程,结合图1以第一数据报文为SYN报文、第二数据报文为SYNACK报文、第三数据报文为ACK报文、为例,即服务端接收数据转发设备转发的来自客户端根据SYNACK报文返回的ACK报文步骤之后,对客户端与服务端之间的数据通信过程进行示例性描述,如图5所示,包括如下步骤:
[0091] 步骤501:客户端向数据转发设备发送业务请求。
[0092] 步骤502:数据转发设备向服务端转发来自客户端的业务请求。
[0093] 步骤503:服务端根据接收业务请求时的入接口在TCP连接信息中查找数据转发设备。
[0094] 步骤504:服务端向数据转发设备发送第一业务数据。
[0095] 步骤505:数据转发设备向客户端转发第一业务数据。
[0096] 下面结合图1,以客户端为客户端11、服务端为服务器12、数据转发设备为路由器14为例进行示例性说明:
[0097] 在步骤501中,客户端11向路由器14发送业务请求,业务请求可以为远程登录协议(Teletype Network,TELNET)、超文本传输协议(HyperText Transfer Protocol,HTTP)和安全外壳协议(Secure Shell,SSH)等协议中携带的客户端11发送的业务请求。
[0098] 在步骤502中,路由器14向服务器12转发来自客户端11的业务请求。
[0099] 在步骤503中,接收业务请求时的入接口为建立TCP连接时,TCP连接信息中记录的入接口,如图3所示实施例的步骤303以及步骤304,服务器12在TCP连接信息中记录的入接口为“F0/0”且记录的下一跳为路由器14的地址“20.1.1.2”,即服务器12根据接收业务请求时的入接口“F0/0”在TCP连接信息中查找到与入接口“F0/0”对应的下一跳为路由器14,服务器12优先选择路由器14作为下一跳。
[0100] 在步骤504中,服务器12向路由器14发送第一业务数据,第一业务数据为服务器12根据客户端11发送的业务请求所对应的业务数据。
[0101] 在步骤505中,路由器14向客户端11转发业务数据。
[0102] 本发明实施例中,在服务端接收路由器14转发的来自客户端根据SYNACK报文返回的ACK报文步骤之后,即服务端与客户端建立TCP连接,客户端向服务端发送业务请求,服务端根据TCP连接信息中所记录的路由器14优先作为下一跳向客户端发送业务请求所对应的业务数据,使得建立TCP连接的链路与数据传输的链路保持一致,从而提高了TCP通信连接的稳定性和安全性。
[0103] 可选的,基于图2-图3所示的建立TCP通信连接的方法的实施例流程并结合图1对本发明实施例进行示例性说明,其中,第一数据报文为SYN报文、第二数据报文为SYNACK报文、第三数据报文为ACK报文、客户端为客户端11、服务端为服务器12、数据转发设备为路由器14。本发明实施例对服务端接收数据转发设备转发的来自客户端根据SYNACK报文返回的ACK报文步骤之后,客户端与服务端之间的数据通信过程进行示例性描述:服务器12接收路由器14转发的来自客户端11根据SYNACK报文返回的ACK报文步骤之后,即服务器12与客户端11建立TCP连接,触发服务器12通过TCP连接信息中记录的路由器14优先作为下一跳向所述客户端11发送第二业务数据,第二业务数据为服务器12直接通过TCP连接信息中记录的路由器14向客户端11发送的业务数据。
[0104] 本发明实施例中,在服务端与客户端建立TCP连接时,触发服务端通过TCP连接信息中记录的路由器14优先作为下一跳向客户端发送业务数据,确保了建立TCP连接的链路与数据传输的链路保持一致,有效提高了TCP通信连接的稳定性和安全性。
[0105] 对应于上述的建立TCP通信连接的方法,本发明还提出了图6所示的服务器的硬件结构图。请参考图6,在硬件层面,该服务器包括处理器、内部总线、网络接口、内存以及非易失性存储器,当然还可能包括其他业务所需要的硬件。处理器从非易失性存储器中读取对应的计算机程序到内存中然后运行,在逻辑层面上形成建立TCP通信连接的装置。当然,除了软件实现方式之外,本发明并不排除其他实现方式,比如逻辑器件抑或软硬件结合的方式等等,也就是说以下处理流程的执行主体并不限定于各个逻辑单元,也可以是硬件或逻辑器件。
[0106] 图7是本发明建立TCP通信连接的装置的一个实施例框图,如图7所示,该建立TCP通信连接的装置可以包括:第一接收模块71、关系记录模块72、设备确定模块73、第一发送模块74以及第二接收模块75,其中:
[0107] 第一接收模块71,用于通过入接口接收数据转发设备所转发的来自客户端的第一数据报文;
[0108] 关系记录模块72,用于根据所述第一接收模块71中的所述第一数据报文建立TCP连接信息并记录所述TCP连接信息与所述入接口之间的对应关系;
[0109] 设备确定模块73,用于基于所述关系记录模块72所记录的所述对应关系中的所述入接口,从所述服务端对应的至少一个下一跳中确定第一下一跳为所述数据转发设备;
[0110] 第一发送模块74,用于向所述设备确定模块73中确定的所述数据转发设备发送与所述第一数据报文相对应的第二数据报文,以使所述数据转发设备向所述客户端转发所述第二数据报文;
[0111] 第二接收模块75,用于接收所述数据转发设备转发的来自所述客户端的第三数据报文,所述第三数据报文为所述客户端根据所述第一发送模块71中的所述第二数据报文返回的第三数据报文。
[0112] 图8是本发明建立TCP通信连接的装置的另一个实施例框图,如图8所示,在上述图8所示实施例的基础上,设备确定模块73可包括:
[0113] 第一查找单元731,用于在所述服务端的路由表中查找是否有与所述关系记录模块72建立的所述TCP连接信息中的源IP地址相对应的至少一个下一跳;
[0114] 第二查找单元732,用于当从所述第一查找单元中查找到所述至少一个下一跳时,对所述至少一个下一跳中记录的出接口与所述关系记录模块72中记录的所述入接口进行匹配,查找是否有与所述入接口相一致的出接口;
[0115] 设备确定单元733,用于当从所述第二查找单元732中查找到有与所述入接口相一致的出接口时,将所述出接口对应的所述数据转发设备确定为第一下一跳,并将所述数据转发设备记录在所述关系记录模块72建立的所述TCP连接信息中。
[0116] 在一实施例中,建立TCP通信连接的装置还包括:
[0117] 设备选择模块76,用于当从所述第二查找单元732中未查找到有与所述入接口相一致的出接口时,基于负载分担算法选择第二下一跳;
[0118] 第二发送模块77,用于向所述设备选择模块76中选择的所述第二下一跳发送与所述第一数据报文相对应的第二数据报文,以使在所述第二下一跳未拦截所述第二数据报文时所述第二下一跳向所述客户端转发所述第二数据报文;
[0119] 第三接收模块78,用于接收所述数据转发设备转发的来自所述客户端的第三数据报文,所述第三数据报文为所述客户端根据所述第二发送模块77中的所述第二数据报文返回的第三数据报文。
[0120] 在一实施例中,建立TCP通信连接的装置还包括:
[0121] 第四接收模块79,用于所述第二接收模块75接收所述第三数据报文后,通过所述第一接收模块71中的所述入接口接收所述数据转发设备转发的来自所述客户端的业务请求;
[0122] 第三查找模块80,用于根据所述入接口查找所述设备确定单元733中所述TCP连接信息中所记录的所述数据转发设备;
[0123] 第三发送模块81,用于向所述第三查找模块80查找到的所述数据转发设备发送与所述业务请求相对应的第一业务数据,以使所述数据转发设备向所述客户端转发所述第一业务数据。
[0124] 在一实施例中,建立TCP通信连接的装置还包括:
[0125] 第四发送模块82,用于所述第二接收模块75接收所述第三数据报文后,通过所述设备确定单元733中所述TCP连接信息中记录的所述数据转发设备向所述客户端发送第二业务数据。
[0126] 上述装置中各个单元的功能和作用的实现过程具体详见上述方法中对应步骤的实现过程,在此不再赘述。
[0127] 对于装置实施例而言,由于其基本对应于方法实施例,所以相关之处参见方法实施例的部分说明即可。以上所描述的装置实施例仅仅是示意性的,其中所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部模块来实现本发明方案的目的。本领域普通技术人员在不付出创造性劳动的情况下,即可以理解并实施。
[0128] 由上述实施例可见,当服务端查找到与入接口相匹配的出接口时,确定下一跳为数据转发设备,使服务端接收SYN报文与发送SYNACK报文经过的链路相同,服务端与客户端之间可以成功建立TCP通信连接;当服务器未查找与入接口相匹配的出接口时,服务端通过负载分担选择下一跳,且下一跳未拦截第二数据报文时,服务端通过下一跳向客户端发送SYNACK报文,从而使客户端与服务端可以建立TCP通信连接。通过本发明实施例,解决了客户端与服务端无法建立通信连接的技术问题,确保了服务端与客户端之间可以正常建立TCP通信连接。
[0129] 本领域技术人员在考虑说明书及实践这里公开的发明后,将容易想到本发明的其它实施方案。本发明旨在涵盖本发明的任何变型、用途或者适应性变化,这些变型、用途或者适应性变化遵循本发明的一般性原理并包括本发明未公开的本技术领域中的公知常识或惯用技术手段。说明书和实施例仅被视为示例性的,本发明的真正范围和精神由下面的权利要求指出。
[0130] 还需要说明的是,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、商品或者设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、商品或者设备所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括所述要素的过程、方法、商品或者设备中还存在另外的相同要素。
[0131] 以上所述仅为本发明的较佳实施例而已,并不用以限制本发明,凡在本发明的精神和原则之内,所做的任何修改、等同替换、改进等,均应包含在本发明保护的范围之内。