一种创建TCP连接的方法及装置与流程

文档序号:16007809发布日期:2018-11-20 20:17阅读:274来源:国知局

本发明涉及网络通信技术领域,特别涉及一种创建TCP连接的方法及装置。



背景技术:

CDN的全称是Content Delivery Network,即内容分发网络。其基本思路是通过在网络各处放置CDN节点服务器(以下简称CDN节点),以通过CDN节点构成的在现有的互联网基础之上的一层智能虚拟网络,从而避开互联网上可能的速度瓶颈和不稳定的网络环节,使内容传输的更快、更稳定。

在传统的CDN系统中,如图1所示,客户端通过智能DNS解析到距离其最近的CDN节点,客户端向CDN节点发送请求消息,CDN节点先在缓存中查找是否有该请求消息的响应,如果有,则将该响应反馈给客户端;如果在缓存中没有该响应,则与服务端建立TCP(Transmission Control Protocol,传输控制协议)连接,成功连接后,将请求消息转发给服务端,并将服务端的响应发送回客户端。

CDN节点与服务端建立TCP连接时,需要先确定CDN节点中连接所需的源地址和源端口,以及服务端的目的地址和目的端口,再基于源地址、源端口、目的地址和目的端口建立TCP连接。如图1所示,每个CDN节点可以配置有多个可以作为源地址的IP(Internet Protocol,互联网协议)地址,对于同一服务,每个IP地址可以通过不同的端口最多建立65535个连接,同一服务对应的目的地址和目的端口的组合相同,也就是说,每个IP与同一目的地址和目的端口的组合之间的连接数最多是65535个。通常CDN节点利用bind(捆绑)接口绑定其中一个IP地址作为源地址,用于与服务端进行TCP连接。在利用bind接口选取源地址时,会出现IP地址之间的连接数差异较大的问题,并且可能会出现这一情况:对于同一服务,已经存在65535个连接的IP地址,仍然被选作新连接的源地址,这样会导致新连接失败。



技术实现要素:

为了解决现有技术的问题,本发明实施例提供了一种创建TCP连接的方法及装置。所述技术方案如下:

第一方面,提供了一种创建TCP连接的方法,所述方法应用于CDN节点中,所述方法包括:

在根据接收到的请求消息确定出需要与服务端建立TCP连接后,根据所述请求消息确定所述服务端的目的地址和目的端口;

确定源地址,其中,所述源地址为当前连接数最少的IP地址;

确定源端口,其中,所述源端口处于空闲状态;

基于所述源地址、所述源端口、所述目的地址以及所述目的端口创建TCP连接,并将所述源地址的连接数加一。

可选的,所述根据所述请求消息确定所述服务端的目的地址和目的端口之前,包括:

确定本机的各个IP地址,并初始化每个所述IP地址的连接数。

可选的,所述确定本机的各个IP地址,包括:

通过proc文件系统确定本机的各个IP地址。

可选的,所述确定源地址,包括:

通过proc文件系统确定各个IP地址的连接数;

利用setsockopt接口选取当前连接数最少的IP地址作为源地址。

可选的,所述确定源端口,包括:

从端口集合中确定源端口,所述端口集合中的端口为所述源地址、所述目的地址以及所述目的端口的组合对应的端口。

可选的,所述确定源端口,还包括:

利用connect接口,从所述端口集合中确定源端口。

可选的,所述方法还包括:

在断开所述TCP连接后,将所述源地址的连接数减一。

第二方面,提供了一种创建TCP连接的装置,所述装置包括:

第一确定单元,用于在根据接收到的请求消息确定出需要与服务端建立TCP连接后,根据所述请求消息确定所述服务端的目的地址和目的端口;

第二确定单元,用于确定源地址,其中,所述源地址为当前连接数最少的IP地址;

第三确定单元,用于确定源端口,其中,所述源端口处于空闲状态;

创建单元,用于基于所述源地址、所述源端口、所述目的地址以及所述目的端口创建TCP连接,并将所述源地址的连接数加一。

可选的,所述第二确定单元,还用于在根据所述请求消息确定所述服务端的目的地址和目的端口之前,确定本机的各个IP地址,并初始化每个所述IP地址的连接数。

可选的,所述第二确定单元,具体用于通过proc文件系统确定本机的各个IP地址。

可选的,所述第二确定单元,具体用于:

通过proc文件系统确定各个IP地址的连接数;

利用setsockopt接口选取当前连接数最少的IP地址作为源地址。

可选的,所述第三确定单元,具体用于从端口集合中确定源端口,所述端口集合中的端口为所述源地址、所述目的地址以及所述目的端口的组合对应的端口。

可选的,所述第三确定单元,具体用于利用connect接口,从所述端口集合中确定源端口。

可选的,所述第二确定单元,还用于在断开所述TCP连接后,将所述源地址的连接数减一。

第三方面,提供了一种CDN节点,所述CDN节点包括处理器和存储器,所述存储器中存储有至少一条指令、至少一段程序、代码集或指令集,所述至少一条指令、所述至少一段程序、所述代码集或指令集由所述处理器加载并执行以实现第一方面的方法。

本发明实施例提供的创建TCP连接的方法,能够实时记录每个IP地址的连接数,在建立TCP连接时,可以选取当前连接数最少的IP地址作为源地址进行连接,所以能够均衡每个IP地址的连接数,降低连接失败的次数。

附图说明

为了更清楚地说明本发明实施例中的技术方案,下面将对实施例描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。

图1是本发明实施例提供的一种网络框架示意图;

图2是本发明实施例提供的另一种网络框架示意图;

图3是本发明实施例提供的一种创建TCP连接的方法流程图;

图4是本发明实施例提供的一种创建TCP连接的装置的结构框图;

图5是为本发明实施例提供的一种CDN节点的结构示意图。

具体实施方式

为使本发明的目的、技术方案和优点更加清楚,下面将结合附图对本发明实施方式作进一步地详细描述。

本发明实施例提供了一种创建TCP连接的方法,该方法可以应用于图1所示的网络框架中。该网络框架包括CDN节点以及服务端。当CDN节点接收到客户端发送的请求消息,并且在缓存中没有查找到该请求消息的响应时,开始创建与服务端的TCP连接。本发明实施例中的服务端可以包括CDN节点以及源站点。

本发明实施例提供的方法还可以应用于图2所示的网络框架中。如图2所示,当CDN节点1接收到客户端发送的请求消息,并且在缓存中没有查找到该请求消息的响应时,向CDN节点2转发该请求信息,则在该种情况下,CDN节点1与CDN节点2进行TCP连接,CDN节点2即可以作为服务端。再例如,当CDN节点2接收到CDN节点1发送的请求消息,并且在缓存中没有查找到该请求消息的响应时,可以向源站点转发该请求信息,则在该种情况下,CDN节点2与源站点进行TCP连接,源站点即可以作为服务端。在具体实施中,客户端发送的请求消息可以经过多个CDN节点的转发,而获取请求消息的响应。CDN节点在每次转发请求消息之前,均需与下一个接收端建立TCP连接,请求消息的接收端即可以作为发送端的服务端。

参见图3,为本发明实施例提供的一种创建TCP连接的方法的流程图,该方法具体应用于CDN节点中,也即由CDN节点来执行,该方法具体可以包括以下步骤。

步骤301,确定本机的各个IP地址,并初始化每个所述IP地址的连接数。

CDN节点在开始与服务端建立TCP连接之前,可以先对本机所包括的IP地址进行初始化。优选地,可以在CDN节点开机时,对本机所包括的IP地址进行初始化。对本机所包括的IP地址进行初始化包括确定本机的各个IP地址,并初始化每个所述IP地址的连接数。一个CDN节点包括多个IP地址,在确定本机的各个IP地址时,可以通过内核中proc文件系统提供的接口确定本机所包含的IP地址。在确定出本机的各个IP地址之后,可以将各个IP地址存储在内核中,并在内核中初始化每个IP地址的连接数。在初始化每个所述IP地址的连接数时,可以将每个IP地址的连接数初始化为零。当使用IP地址建立TCP连接时,该IP地址的连接数可以加一,当该TCP连接断开时,该IP地址的连接数可以减一,从而实时记录每个IP地址的连接数。

CDN节点对本机所包括的IP地址进行初始化之后,可以开始用于与服务端建立TCP连接。以下详细说明CDN节点与服务端建立TCP连接的过程。

步骤302,在根据接收到的请求消息确定出需要与服务端建立TCP连接后,根据所述请求消息确定所述服务端的目的地址和目的端口。

当CDN节点接收到客户端或其他CDN节点发送的请求消息,并在缓存中查找不到该请求消息的响应时,与服务端建立TCP连接,从而获取服务端发送的响应。该服务端可以是能够向该CDN节点提供响应的其他CDN节点或源站点。

当确定出本地缓存中查找不到该请求消息的响应,需要从其他设备中获取响应时,可以根据接收到的请求消息解析得到服务端中建立TCP连接所使用的目的地址以及目的端口,从而通过解析出的目的地址以及目的端口与服务端建立TCP连接。该目的地址为该服务端的一个IP地址,该目的端口为该服务端的一个处于空闲状态的端口。

步骤303,确定源地址,其中,所述源地址为当前连接数最少的IP地址。

在本发明实施例中,可以通过proc文件系统提供的接口从内核中获取各个IP地址的连接数,再利用setsockopt接口,也可以说是利用setsockopt()函数从本CDN节点所包含的IP地址中选取当前连接数最少的IP地址作为源地址。当连接数最少的IP地址不唯一时,可以选取任一连接数最少的IP地址作为源地址。

步骤304,确定源端口,其中,所述源端口处于空闲状态。

用于创建新连接的源端口必须处于空闲状态,也就是说,当前的所有的连接均没有使用该端口。在具体实施中,可以预先设置每个IP地址对应的端口,从而在IP地址对应的端口中选取源端口。

在另一种实施方式中,可以从端口集合中确定源端口,所述端口集合中的端口为所述源地址、所述目的地址以及所述目的端口的组合对应的端口。所以可以预先设置每组源地址、目的地址以及目的端口的组合对应的端口集合,在确定源端口时,可以在该端口集合中查找处于空闲状态的端口作为源端口,从而缩小了源端口的查找范围,减低了由于查找源端口所占用的CPU资源。

每组源地址、目的地址以及目的端口的组合对应的端口集合中的端口数量,可以设置为同一个服务所允许的连接数,例如65535个,从而在遍历完端口集合中的全部端口后,发现65535个端口均处于连接状态时,结束TCP连接的建立,防止同一个服务的连接数超过所允许的范围。

在本发明实施例中可以利用connect接口,也可以说是利用connect()函数,从所述端口集合中确定源端口,也就是说从所述端口集合中选取处于空闲状态的端口作为源端口。在利用connect接口确定源端口之后,可以继续利用该connect接口创建TCP连接。在现有技术中,需要先利用调用bind接口选取源端口,再利用connect接口创建基于源地址、源端口、目的地址以及目的端口的TCP连接。而本发明实施例只需调用一次connect接口即可完成源端口的选取以及对TCP连接的创建,操作更加简单。

步骤305,基于所述源地址、所述源端口、所述目的地址以及所述目的端口创建TCP连接,并将所述源地址的连接数加一。

基于所述源地址、所述源端口、所述目的地址以及所述目的端口创建TCP连接的过程为:CDN节点利用connect接口建立syn(synchronous)信息,也可以称为握手信号,并向服务端发送该syn信息,该syn信息的IP头部包含源地址和目的地址,TCP头部包含源端口和目的端口;服务端接收到该syn信息后,向CDN节点发送SYN+ACK信息;CDN节点接收到该SYN+ACK信息后,向服务端再次发送ACK信息,从而建立起CDN节点与服务端之间的TCP连接。

当服务端为其他CDN节点时,在建立起CDN节点与服务端TCP连接之后,CDN节点向服务端发送请求信息,服务端接收到该请求信息后,先在缓存中查找是否有该请求消息的响应,如果有,则将该响应反馈给CDN节点;如果在缓存中没有该响应,则可以继续与能够提供响应的下一个服务端建立TCP连接,获取请求消息的响应,与下一个服务端建立TCP连接的过程可以参考上述建立TCP连接的过程。

当服务端为源站点时,在建立起CDN节点与服务端TCP连接之后,CDN节点向服务端发送请求信息,服务端接收到该请求信息后,响应该请求信息,得到该请求信息的响应,并将该响应发送给CDN节点,以使CDN节点将该响应发送给客户端。

步骤306,在断开所述TCP连接后,将所述源地址的连接数减一。

在客户端接收到请求消息的响应后,CDN节点可以断开与服务端之间的TCP连接,并将该TCP连接所使用的源地址的连接数减一,从而准确记录每个IP地址的实时连接数。

本发明实施例提供的创建TCP连接的方法,能够实时记录每个IP地址的连接数,在建立TCP连接时,可以选取当前连接数最少的IP地址作为源地址进行连接,所以能够均衡每个IP地址的连接数,降低连接失败的次数。

参照图4,为本发明实施例提供的一种创建TCP连接的装置的结构框图,该装置具体可以包括:第一确定单元401,第二确定单元402,第三确定单元403以及创建单元404。

第一确定单元401,用于在根据接收到的请求消息确定出需要与服务端建立TCP连接后,根据所述请求消息确定所述服务端的目的地址和目的端口。

第二确定单元402,用于确定源地址,其中,所述源地址为当前连接数最少的IP地址。

第三确定单元403,用于确定源端口,其中,所述源端口处于空闲状态。

创建单元404,用于基于所述源地址、所述源端口、所述目的地址以及所述目的端口创建TCP连接,并将所述源地址的连接数加一。

优选地,所述第二确定单元402,还用于在根据所述请求消息确定所述服务端的目的地址和目的端口之前,确定本机的各个IP地址,并初始化每个所述IP地址的连接数。

优选地,所述第二确定单元402,具体用于通过proc文件系统确定本机的各个IP地址。

优选地,所述第二确定单元402,具体用于:通过proc文件系统确定各个IP地址的连接数;利用setsockopt接口选取当前连接数最少的IP地址作为源地址。

优选地,所述第三确定单元403,具体用于从端口集合中确定源端口,所述端口集合中的端口为所述源地址、所述目的地址以及所述目的端口的组合对应的端口。

优选地,所述第三确定单元403,具体用于利用connect接口,从所述端口集合中确定源端口。

优选地,所述第二确定单元402,还用于在断开所述TCP连接后,将所述源地址的连接数减一。

本发明实施例提供的创建TCP连接的装置,能够实时记录每个IP地址的连接数,在建立TCP连接时,可以选取当前连接数最少的IP地址作为源地址进行连接,所以能够均衡每个IP地址的连接数,降低连接失败的次数。

需要说明的是:上述实施例提供的创建TCP连接的装置在创建连接时,仅以上述各功能单元的划分进行举例说明,实际应用中,可以根据需要而将上述功能分配由不同的功能单元完成,即将装置的内部结构划分成不同的功能单元,以完成以上描述的全部或者部分功能。另外,上述实施例提供的创建TCP连接的装置与创建TCP连接的方法的实施例属于同一构思,其具体实现过程详见方法实施例,这里不再赘述。

参见图5,为本发明实施例提供的CDN节点的结构示意图。该CDN节点500可因配置或性能不同而产生比较大的差异,可以包括一个或一个以上中央处理器522(例如,一个或一个以上处理器)和存储器532,一个或一个以上存储应用程序542或数据544的存储介质530(例如一个或一个以上海量存储设备)。其中,存储器532和存储介质530可以是短暂存储或持久存储。存储在存储介质530的程序可以包括一个或一个以上单元(图示没标出),每个单元可以包括对CDN节点中的一系列指令操作。更进一步地,中央处理器522可以设置为与存储介质530通信,在CDN节点500上执行存储介质530中的一系列指令操作。

CDN节点500还可以包括一个或一个以上电源529,一个或一个以上有线或无线网络接口550,一个或一个以上输入输出接口558,一个或一个以上键盘554,和/或,一个或一个以上操作系统541,例如Windows ServerTM,Mac OS XTM,UnixTM,LinuxTM,FreeBSDTM等等。

CDN节点500可以包括有存储器,以及一个或者一个以上的程序,其中一个或者一个以上程序存储于存储器中,且经配置以由一个或者一个以上处理器执行所述一个或者一个以上程序包含用于进行上述创建TCP连接的方法的指令。

本领域普通技术人员可以理解实现上述实施例的全部或部分步骤可以通过硬件来完成,也可以通过程序来指令相关的硬件完成,所述的程序可以存储于一种计算机可读存储介质中,上述提到的存储介质可以是只读存储器,磁盘或光盘等。

以上所述仅为本发明的较佳实施例,并不用以限制本发明,凡在本发明的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。

当前第1页1 2 3 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1