传输控制协议代理方法、存储介质及服务器与流程

文档序号:17536155发布日期:2019-04-29 14:00阅读:184来源:国知局
传输控制协议代理方法、存储介质及服务器与流程

本发明涉及网络通信技术领域,特别是涉及一种传输控制协议(tcp,transmissioncontrolprotocol)代理方法、存储介质及服务器。



背景技术:

tcp是一种面向连接的、可靠的、基于字节流的传输层通信协议,主要完成第四层传输层所指定的功能,实现不同主机的应用层之间可靠的数据传输。tcp代理技术,是指在端与端网络之间增加一个tcp代理设备,其模拟部分tcp协议功能,以提高慢启动速度和重传效率,从而达到提升网络中tcp数据传输性能。

如图1所示,用户向服务器发起tcp连接,tcp代理设备首先模拟代理服务器与用户终结,形成tcp代理连接1,然后tcp代理设备模拟代理客户端向服务器发起新连接,形成tcp代理连接2。用户与服务器之间的报文数据转发通过两个tcp代理连接完成,在转发过程中,报文数据被依次缓存到如图2所示的tcp代理两端的接收缓存区、发送缓存区和tcp代理之间的转发缓存区。

现有技术中通过拷贝方式实现报文数据的缓存,在一次tcp代理中,一个报文数据从接收到发送被拷贝了三次。在大量tcp连接转发的网络场景下,现有的拷贝报文数据的方式,需要占用大部分的内存资源作为缓存区,使tcp代理过程的转发效率较低,无法达到提升网络中tcp数据传输性能的目的。



技术实现要素:

本发明提供一种传输控制协议代理方法、存储介质及服务器,用以解决现有技术需要占用大部分的内存资源作为缓存区,使tcp代理过程的转发效率较低,无法达到提升网络中tcp数据传输性能的目的的问题。

为解决上述技术问题,一方面,本发明提供一种传输控制协议代理方法,包括:将接收到的报文数据缓存在接口缓冲器(buffer)中;创建链表节点,并将所述链表节点挂在接收缓存链表中的第一预定位置,其中,所述链表节点的内容至少包括所述接口buffer的首地址;在所述链表节点移动到第二预定位置时,将所述链表节点从所述接收缓存链表中进行摘链,并挂在发送缓存列表中的第三预定位置;在所述链表节点移动到第四预定位置时,根据所述链表节点中接口buffer的首地址获取所述接口buffer中缓存的报文数据,并发送所述报文数据。

进一步,将所述链表节点从所述接收缓存链表中进行摘链,并挂在发送缓存列表中的第三预定位置,包括:将所述链表节点从所述接收缓存链表中的所述第二预定位置进行摘链,并挂在转发缓存链表中的第五预定位置;在所述链表节点移动到第六预定位置时,将所述链表节点从所述转发缓存链表中的所述第六预定位置进行摘链,并挂在发送缓存列表中的所述第三预定位置。

进一步,所述将接收到的报文数据缓存在接口缓冲器buffer中,包括:判断接口buffer池中是否存在空闲接口buffer;在存在空闲接口buffer的情况下,将接收到的报文数据缓存在所述空闲接口buffer中。

进一步,将接收到的报文数据缓存在所述空闲接口buffer中之后,还包括:从硬件buffer池中置换一个空闲的硬件buffer至接口buffer池。

进一步,发送所述报文数据之后,还包括:将所述接口buffer释放回硬件buffer池。

进一步,发送所述报文数据,包括:判断所述报文数据的长度是否小于最大报文段长度mss;在所述报文数据的长度小于所述mss的情况下,将所述报文数据与所述链表节点相邻的下一个链表节点对应的报文数据合并发送,其中,所述下一个链表节点对应的报文数据为所述下一个链表节点对应的接口buffer中存储的预设长度的报文数据,所述预设长度为mss值与所述报文数据的长度的差值。

另一方面,本发明还提供一种存储介质,存储有计算机程序,其特征在于,所述计算机程序被处理器执行时实现如下步骤:将接收到的报文数据缓存在接口缓冲器buffer中;创建链表节点,并将所述链表节点挂在接收缓存链表中的第一预定位置,其中,所述链表节点的内容至少包括所述接口buffer的首地址;在所述链表节点移动到第二预定位置时,将所述链表节点从所述接收缓存链表中进行摘链,并挂在发送缓存列表中的第三预定位置;在所述链表节点移动到第四预定位置时,根据所述链表节点中接口buffer的首地址获取所述接口buffer中缓存的报文数据,并发送所述报文数据。

进一步,所述计算机程序在被所述处理器执行将所述链表节点从所述接收缓存链表中进行摘链,并挂在发送缓存列表中的第三预定位置的步骤时,具体实现如下步骤:将所述链表节点从所述接收缓存链表中的所述第二预定位置进行摘链,并挂在转发缓存链表中的第五预定位置;在所述链表节点移动到第六预定位置时,将所述链表节点从所述转发缓存链表中的所述第六预定位置进行摘链,并挂在发送缓存列表中的所述第三预定位置。

进一步,所述计算机程序在被所述处理器执行将接收到的报文数据缓存在接口缓冲器buffer中的步骤时,具体实现如下步骤:判断接口buffer池中是否存在空闲接口buffer;在存在空闲接口buffer的情况下,将接收到的报文数据缓存在所述空闲接口buffer中。

进一步,所述计算机程序在被所述处理器执行将接收到的报文数据缓存在所述空闲接口buffer中的步骤之后,还被所述处理器执行以下步骤:从硬件buffer池中置换一个空闲的硬件buffer至接口buffer池。

进一步,所述计算机程序在被所述处理器执行发送所述报文数据的步骤之后,还被所述处理器执行以下步骤:将所述接口buffer释放回硬件buffer池。

进一步,所述计算机程序在被所述处理器执行发送所述报文数据的步骤时,具体实现如下步骤:判断所述报文数据的长度是否小于最大报文段长度mss;在所述报文数据的长度小于所述mss的情况下,将所述报文数据与所述链表节点相邻的下一个链表节点对应的报文数据合并发送,其中,所述下一个链表节点对应的报文数据为所述下一个链表节点对应的接口buffer中存储的预设长度的报文数据,所述预设长度为mss值与所述报文数据的长度的差值。

另一方面,本发明还提供一种服务器,包括上述的存储介质。

本发明通过接口buffer缓存接收到的报文数据,使用链表管理方式对接口buffer的内存地址进行管理,在发送时直接根据内存地址获取并发送接口buffer中缓存的报文数据。由于在tcp代理过程中,一直被操作的是包含有接口buffer的内存地址的链表节点,减少了报文数据的拷贝处理,进而节省了内存资源,提升了tcp代理的转发效率,解决了现有技术中需要占用大部分的内存资源作为缓存区,使tcp代理过程的转发效率较低,无法达到提升网络中tcp数据传输性能的目的的问题。

附图说明

图1是本发明现有技术中tcp代理示意图;

图2是本发明现有技术中报文数据的缓存示意图;

图3是本发明第一实施例中tcp代理方法的流程图;

图4是本发明第三实施例中服务器的代理过程示意图。

具体实施方式

为了解决现有技术需要占用大部分的内存资源作为缓存区,使tcp代理过程的转发效率较低,无法达到提升网络中tcp数据传输性能的目的的问题,本发明提供了一种tcp代理方法、存储介质及服务器,以下结合附图以及实施例,对本发明进行进一步详细说明。应当理解,此处所描述的具体实施例仅仅用以解释本发明,并不限定本发明。

本发明第一实施例提供了一种tcp代理方法,其流程图如图3所示,具体包括步骤s301至s304:

s301,将接收到的报文数据缓存在接口buffer中;

s302,创建链表节点,并将链表节点挂在接收缓存链表中的第一预定位置,其中,链表节点的内容至少包括接口buffer的首地址;

s303,在链表节点移动到第二预定位置时,将链表节点从接收缓存链表中进行摘链,并挂在发送缓存列表中的第三预定位置;

s304,在链表节点移动到第四预定位置时,根据链表节点中接口buffer的首地址获取接口buffer中缓存的报文数据,并发送报文数据。

应当了解的是,一个链表节点至少包括接口buffer的首地址,根据首地址可以获取该地址对应的报文数据。在tcp代理过程中,被操作的实际上是链表节点,当报文数据刚被接收时,该链表节点首先被挂在接收缓存链表的末尾,即第一预定位置,随着接收缓存链表中该链表节点之前的链表节点不断地被摘链,该链表节点在一段时间后移动到接收缓存链表的首位,即第二预定位置,此时,将该链表节点从接收缓存链表中摘链,挂在发送缓存链表的末尾,即第三预定位置。在发送缓存链表中,随着该链表节点之前的链表节点对应的报文数据不断地被发送,其对应的接口buffer不断地被释放,链表节点也不断地被清空、从发送缓存链表中摘链,该链表节点在一段时间后移动到发送缓存链表的首位,在上一个报文数据发送完毕后,根据该链表节点中的接口buffer首地址,获取接口buffer中缓存的报文数据,并发送该报文数据。

本实施例通过接口buffer缓存接收到的报文数据,使用链表管理方式对接口buffer的内存地址进行管理,在发送时直接根据内存地址获取并发送接口buffer中缓存的报文数据。由于在tcp代理过程中,一直被操作的是包含有接口buffer的内存地址的链表节点,减少了报文数据的拷贝处理,进而节省了内存资源,提升了tcp代理的转发效率,解决了现有技术中需要占用大部分的内存资源作为缓存区,使tcp代理过程的转发效率较低,无法达到提升网络中tcp数据传输性能的目的的问题。

实际操作中,由于网络状况的不确定,可能存在接收报文数据的通道通畅,但发送报文数据的通道堵塞的情况,此时发送缓存链表中的链表节点对应的报文数据发送缓慢,从接收缓存链表中摘下的链表节点可能存在无法挂载到发送缓存链表的情况。因此在接收缓存链表和发送缓存链表中建立转发缓存链表,将链表节点从接收缓存链表中的第二预定位置进行摘链,并挂在转发缓存链表的末尾,即第五预定位置;在链表节点移动到转发缓存链表的首位,即第六预定位置时,将链表节点从转发缓存链表中的第六预定位置进行摘链,并挂在发送缓存列表中的第三预定位置。

在发送报文数据时,首先判断报文数据的长度是否小于最大报文段长度(mss,managementsupportsystem),其中,mss是在tcp连接建立时,收发双方协商通信时每一个报文段所能承载的最大数据长度,在每次发送的报文数据长度为mss时,可以保证网络资源被最大程度的利用。因此,链表节点中还可包以含对应的接口buffer中缓存的报文数据的长度,方便在发送时做出判断。

在报文数据的长度小于mss的情况下,将报文数据与当前链表节点在发送缓存链表中相邻的下一个链表节点对应的报文数据合并发送,其中,下一个链表节点对应的报文数据为下一个链表节点对应的接口buffer中存储的预设长度的报文数据,预设长度即为mss值与报文数据的长度的差值。例如,mss值经协商为3000字节,链表节点1对应的报文数据长度为2000字节,链表节点2对应的报文数据长度同样为2000字节,在发送链表节点1对应的报文数据时,判断没有达到mss,则将链表节点2对应的报文数据取前1000字节与链表节点1对应的报文数据合并进行发送。进一步地,链表节点2中包含的接口buffer的内存地址调整为对应的报文数据的第1001字节的地址,报文长度调整为1000字节,再次进行报文数据的发送时,则从调整后的链表节点2中包含的内存地址获取对应的报文数据。

在本实施例中,一段报文数据在被接收之前,首先判断接口buffer池中是否存在空闲的接口buffer,在存在空闲接口buffer的情况下,将该数据报文缓存在空闲接口buffer中,由于接口buffer池在申请时存在申请的上限,当接口buffer池中的接口buffer被耗空,没有空闲接口buffer来缓存数据时,造成因无法接收数据而引起丢包的情况。为了保证存在足够的接口buffer来缓存接收到的报文数据,不至于出现空闲接口buffer不够的情况,在每分配一个接口buffer缓存数据时,从预先申请的的另一个硬件buffer池中置换一个空闲的buffer给接口buffer池,等待报文数据发送后,该报文数据占用的接口buffer被释放至硬件buffer池,使接口buffer池内接口buffer的数目不变且一直存在空闲接口buffer进行报文数据的缓存,避免了因无法接收数据而造成的丢包情况,同时,buffer资源得到了循环利用。

通过以上的实施方式的描述,本领域的技术人员可以清楚地了解到根据上述实施例的方法可借助软件加必需的通用硬件平台的方式来实现,当然也可以通过硬件,但很多情况下前者是更佳的实施方式。基于这样的理解,本发明的技术方案本质上或者说对现有技术做出贡献的部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质(如rom/ram、磁碟、光盘)中,包括若干指令用以使得一台终端设备(可以是手机,计算机,服务器,或者网络设备等)执行本发明各个实施例所述的方法。

本发明的第二实施例还提供了一种存储介质。存储介质中存储有计算机程序,在本实施例中,计算机程序被处理器执行时实现如下步骤:

s401,将接收到的报文数据缓存在接口buffer中;

s402,创建链表节点,并将链表节点挂在接收缓存链表中的第一预定位置,其中,链表节点的内容至少包括接口buffer的首地址;

s403,在链表节点移动到第二预定位置时,将链表节点从接收缓存链表中进行摘链,并挂在发送缓存列表中的第三预定位置;

s404,在链表节点移动到第四预定位置时,根据链表节点中接口buffer的首地址获取接口buffer中缓存的报文数据,并发送报文数据。

应当了解的是,一个链表节点至少包括接口buffer的首地址,根据首地址可以获取该地址对应的报文数据。在tcp代理过程中,被操作的实际上是链表节点,当报文数据刚被接收时,该链表节点首先被挂在接收缓存链表的末尾,即第一预定位置,随着接收缓存链表中该链表节点之前的链表节点不断地被摘链,该链表节点在一段时间后移动到接收缓存链表的首位,即第二预定位置,此时,将该链表节点从接收缓存链表中摘链,挂在发送缓存链表的末尾,即第三预定位置。在发送缓存链表中,随着该链表节点之前的链表节点对应的报文数据不断地被发送,其对应的接口buffer不断地被释放,链表节点也不断地被清空、从发送缓存链表中摘链,该链表节点在一段时间后移动到发送缓存链表的首位,在上一个报文数据发送完毕后,根据该链表节点中的接口buffer首地址,获取接口buffer中缓存的报文数据,并发送该报文数据。

本实施例通过接口buffer缓存接收到的报文数据,使用链表管理方式对接口buffer的内存地址进行管理,在发送时直接根据内存地址获取并发送接口buffer中缓存的报文数据。由于在tcp代理过程中,一直被操作的是包含有接口buffer的内存地址的链表节点,减少了报文数据的拷贝处理,进而节省了内存资源,提升了tcp代理的转发效率,解决了现有技术中需要占用大部分的内存资源作为缓存区,使tcp代理过程的转发效率较低,无法达到提升网络中tcp数据传输性能的目的的问题。

实际操作中,由于网络状况的不确定,可能存在接收报文数据的通道通畅,但发送报文数据的通道堵塞的情况,此时发送缓存链表中的链表节点对应的报文数据发送缓慢,从接收缓存链表中摘下的链表节点可能存在无法挂载到发送缓存链表的情况。因此在接收缓存链表和发送缓存链表中建立转发缓存链表,将链表节点从接收缓存链表中的第二预定位置进行摘链,并挂在转发缓存链表的末尾,即第五预定位置;在链表节点移动到转发缓存链表的首位,即第六预定位置时,将链表节点从转发缓存链表中的第六预定位置进行摘链,并挂在发送缓存列表中的第三预定位置。

在发送报文数据时,首先判断报文数据的长度是否小于mss,其中,mss是在tcp连接建立时,收发双方协商通信时每一个报文段所能承载的最大数据长度,在每次发送的报文数据长度为mss时,可以保证网络资源被最大程度的利用。因此,链表节点中还可包以含对应的接口buffer中缓存的报文数据的长度,方便在发送时做出判断。

在报文数据的长度小于mss的情况下,将报文数据与当前链表节点在发送缓存链表中相邻的下一个链表节点对应的报文数据合并发送,其中,下一个链表节点对应的报文数据为下一个链表节点对应的接口buffer中存储的预设长度的报文数据,预设长度即为mss值与报文数据的长度的差值。例如,mss值经协商为3000字节,链表节点1对应的报文数据长度为2000字节,链表节点2对应的报文数据长度同样为2000字节,在发送链表节点1对应的报文数据时,判断没有达到mss,则将链表节点2对应的报文数据取前1000字节与链表节点1对应的报文数据合并进行发送。进一步地,链表节点2中包含的接口buffer的内存地址调整为对应的报文数据的第1001字节的地址,报文长度调整为1000字节,再次进行报文数据的发送时,则从调整后的链表节点2中包含的内存地址获取对应的报文数据。

在本实施例中,一段报文数据在被接收之前,首先判断接口buffer池中是否存在空闲的接口buffer,在存在空闲接口buffer的情况下,将该数据报文缓存在空闲接口buffer中,由于接口buffer池在申请时存在申请的上限,当接口buffer池中的接口buffer被耗空,没有空闲接口buffer来缓存数据时,造成因无法接收数据而引起丢包的情况。为了保证存在足够的接口buffer来缓存接收到的报文数据,不至于出现空闲接口buffer不够的情况,在每分配一个接口buffer缓存数据时,从预先申请的的另一个硬件buffer池中置换一个空闲的buffer给接口buffer池,等待报文数据发送后,该报文数据占用的接口buffer被释放至硬件buffer池,使接口buffer池内接口buffer的数目不变且一直存在空闲接口buffer进行报文数据的缓存,避免了因无法接收数据而造成的丢包情况,同时,buffer资源得到了循环利用。

可选地,在本实施例中,上述存储介质可以包括但不限于:u盘、只读存储器(rom,read-onlymemory)、随机存取存储器(ram,randomaccessmemory)、移动硬盘、磁碟或者光盘等各种可以存储程序代码的介质。可选地,在本实施例中,处理器根据存储介质中已存储的程序代码执行上述实施例记载的方法步骤。可选地,本实施例中的具体示例可以参考上述实施例及可选实施方式中所描述的示例,本实施例在此不再赘述。显然,本领域的技术人员应该明白,上述的本发明的各模块或各步骤可以用通用的计算装置来实现,它们可以集中在单个的计算装置上,或者分布在多个计算装置所组成的网络上,可选地,它们可以用计算装置可执行的程序代码来实现,从而,可以将它们存储在存储装置中由计算装置来执行,并且在某些情况下,可以以不同于此处的顺序执行所示出或描述的步骤,或者将它们分别制作成各个集成电路模块,或者将它们中的多个模块或步骤制作成单个集成电路模块来实现。这样,本发明不限制于任何特定的硬件和软件结合。

本发明的第三实施例提供了一种服务器,该服务器中包括如本发明第二实施例提供的存储介质,因此该服务器相当于tcp代理设备。下面结合图4对该服务器的代理过程进行详细说明。

s41,用户发送的报文数据通过接口到达tcp代理设备;

s42,tcp代理设备判断接口buffer池中是否存在空闲接口buffer,如若存在,则将报文数据缓存在该空闲接口buffer中,同时从硬件buffer池中置换一个空闲buffer至接口buffer池;

s43,将该接口buffer的首地址和缓存的报文数据的长度记录在对应的链表节点中,并将该链表节点挂在接收缓存链表的末尾(对应图4中接收缓存链表链表节点n之后);

s44,当该链表节点移动到接收缓存链表的首位(对应图4中接收缓存链表链表节点1的位置)时,将该链表节点从接收缓存链表中摘链,挂在转发缓存链表的末尾(对应图4中转发缓存链表链表节点n之后);

s45,当该链表节点移动到转发缓存链表的首位(对应图4中转发缓存链表链表节点1的位置)时,将该链表节点从转发缓存链表中摘链,挂在发送缓存链表的末尾(对应图4中发送缓存链表链表节点n之后);

s46,在发送时,根据链表节点中包含的接口buffer的首地址,获取接口buffer中缓存的报文数据,并将该报文数据发送至网络服务器;

s47,报文数据发送完毕后,将接口buffer释放回硬件buffer池。

尽管为示例目的,已经公开了本发明的优选实施例,本领域的技术人员将意识到各种改进、增加和取代也是可能的,因此,本发明的范围应当不限于上述实施例。

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