掌桥专利:专业的专利平台
掌桥专利
首页

发送和接收互联网协议分组上的传输控制协议段的改进方法和系统

文献发布时间:2023-06-19 12:02:28


发送和接收互联网协议分组上的传输控制协议段的改进方法和系统

本申请是申请号为2019800655201、申请日为2019年10月1日、发明名称为“发送和接收互联网协议分组上的传输控制协议段的改进方法和系统”的专利申请的分案申请。

技术领域

本发明涉及数据通信,更具体地,涉及通过修改TCP中的确认机制来修改基于TCP/IP的数据通信。

背景技术

互联网协议(IP)上的传输控制协议(TCP),其更通常地被称为TCP/IP,是当前的互联网架构中使用的主要网络模型。IP是不可靠的协议。这意味着在IP中没有机制让发送节点知道特定的IP分组是否已经被递送到接收节点。因此,为了使数据传输可靠,IP与诸如TCP的另一可靠协议一起使用。TCP是IP的可靠的上层协议。TCP具有向接收节点重新传输未递送的数据或在传输期间损坏的数据的机制。TCP用于执行未递送或损坏的数据字节的重新传输的技术之一是通过从接收节点接收对接收到的数据字节的确认(或ACK)。针对发送到接收节点的每个段或一组段,发送节点期望在预定时间段(称为重新传输超时(RTO))内接收ACK。当在该时间段内未接收到ACK时,假定相应的段未被递送,然后重新传输相应的段。

未传递的段的重新传输确保了TCP的可靠性。当等待确认时,可能在TCP传输中引入大量的延迟。TCP实现通常使用累积确认或选择性确认(称为SACK)。当累积确认用于字节的可靠传输时,接收器通告期望接收的下一字节,忽略无序接收和存储的所有字节。这种现象有时被称为正累积确认。TCP报头中的32比特ACK字段用于确认,并且仅在ACK标志比特被设置时使用该32比特ACK字段的值。

当SACK用于字节的可靠传输时,接收器报告无序接收的一个或多个字节,以及可能重复(即,接收多于一次)的一个或多个接收到的字节。然而,由于在TCP报头中没有用于实现SACK的规定,所以使用TCP段中的选项(options)字段来实现SACK。

用户数据报协议(UDP)是另一种传输层协议,其通常用于传输对延迟更加敏感的数据,如,语音/视频。不同于TCP,UDP是IP的不可靠的上层协议。与包含TCP段的IP分组相比,一些联网装置或应用可以丢弃包含UDP段的IP分组或者将较低优先级给予包含UDP段的IP分组。结果,当携带UDP段的IP分组通过这样的装置时,使用UDP来传送数据的发送应用层处理可能面临将数据递送到接收应用层处理的困难。在TCP/IP协议组中,应用层处理是传输层处理的上层处理。在下文中,应用层处理被称为ULP,传输层处理被称为TLP。

图1A和图1B组合地示出了使用累积确认的现有技术TCP连接。与图1A和图1B相反,图2A至图2B示出了根据本发明的使用累积确认的TCP连接。这里仅示出了与TCP连接的数据传送阶段相相应的步骤,因为本发明中公开的修改的确认方法仅适用于TCP连接的数据传送阶段。本领域的普通技术人员将容易认识到,在不脱离实施例的范围的情况下,可以使用现有技术方法或任何将来开发的方法来实现连接建立和连接终止阶段。

与段相对应的细节(诸如,一个或多个报头字段及报头字段的值)未在图1A和图1B中示出,但是它们包括在其中。当客户端节点101的客户端ULP(CULP)103需要使用TCP向服务器节点102的服务器ULP(SULP)106发送数据时,在图1A的连接建立阶段107中,客户端TLP(CTLP)104建立与服务器TLP(STLP)105的TCP连接。

步骤108到119示出了数据传送阶段。在连接终止阶段120A中,客户端节点101和服务器节点102之间的TCP连接被终止。为了简化实施例的描述,假设用于该连接的CTLP 104和STLP 105的接收窗口大小(rwnd)都为10000字节。rwnd还被假定为在整个TCP会话中保持不变。但是没有将rwnd限制为仅具有10000字节的大小,因为它也可以大于或小于这个大小。此外,rwnd的值可以在TCP会话活动时由接收传输层处理自适应地调整。

TLP使用的每个特定端口号与特定ULP相对应。对于根据“客户端-服务器架构”的TCP连接,客户端节点101的CTLP 104可以使用包括公知端口号的任何端口号连接到服务器节点102的STLP 105。根据这种体系架构,只有客户端能够发起与服务器的连接建立。也可以使用对等的架构代替客户端-服务器架构;在这种情况下,任何节点可以发起与另一节点的TCP连接。这里公开的本发明的方法适用于任何TCP连接,而不管网络架构如何。

在步骤108,CULP 103向CTLP 104发送数据传输请求。然后,CTLP 104使用在连接建立阶段107中确定的初始序列号(ISN)值4001(为了说明的目的)来与段121一起发送第一个1000字节数据。ISN值4001仅用作示例。CTLP 104可以确定ISN具有任何其他值。段121持有从序列号4001开始到序列号5000的数据字节和具有确认号16001的确认。此外,段121的ACK标志被设置成指示段121包含ACK信息。

传输层不包括任何机制来对段进行编号,但是传输层将作为每个段的有效载荷而被发送的数据字节进行编号。诸如CTLP 104的发送TLP使用序列号(或Seq)来保持跟踪正在发送的数据字节。图中的段的标记在这里仅出于说明目的和便于描述的目的而示出。如果在RTO内没有接收到相应的ACK,则CTLP 104可以重新传输一个或多个数据字节。这种重新传输机制确保了数据的可靠递送。

CTLP 104使用段121中的用于ACK字段的值16001来确认在连接建立阶段107从服务器节点102接收的最后字节。在连接建立阶段107中接收的最后一个字节被编号为16000。在段121中设置ACK标志,以通知接收STLP 105段121包含ACK。在段121中,CTLP 104发送1000字节的数据,其小于STLP 105的rwnd。STLP 105接收段121并将其递送到SULP 106。

仍然允许CTLP 104向STLP 105发送更多数据,因为在未接收到相应的ACK的情况下发送到目前为止的数据总量是1000字节,这小于10000字节的rwnd大小。在步骤109,CULP103向CTLP 104发送数据传输请求。CTLP 104创建具有序列号5001的段122。序列号5001是在前一段121中发送的最后一个字节(即,字节编号5000)的下一个字节的编号。

另一个1000字节的数据与段122一起被发送,其编号范围是5001到6000。段122中的ACK号仍然是16001,如先前段中的一样,因为没有从服务器节点102接收到需要被确认的新数据。ACK标志也被设置在段122中,以通知作为STLP 105的接收TLP该段包含ACK。为了说明的目的,段122在传输期间丢失,并且服务器节点102未能接收到它。

本领域技术人员已知,在发送TLP可以向接收TLP发送段之前,不需要发送TLP必须从相应的发送ULP接收数据传输请求。发送TLP使用传入缓冲器来临时存储来自发送ULP的传入数据字节,并且使用传出缓冲器来临时存储用于接收TLP的传出数据字节。接收TLP向发送TLP通知发送TLP在接收到针对相应数据字节的ACK之前可以发送的数据字节的量。接收TLP的这个接收容量是rwnd。

本领域技术人员已知,不需要接收TLP必须在接收特定的段之后立即将从该段接收的数据字节提供给相应的接收ULP。接收TLP可能在将接收到的字节提供给ULP之前花费一些时间来处理接收到的字节。接收TLP使用传入缓冲器临时存储接收到的字节,使用传出缓冲器临时存储要提供给接收ULP的字节。

只要在接收ACK之前传输的字节总数小于rwnd大小,发送TLP就可以从缓冲器中发送数据字节。此外,基于rwnd大小,发送TLP可能不能向接收TLP发送与来自发送ULP的特定的数据传输请求相对应的所有的数据字节。因此,发送TLP可以向接收TLP发送与发送TLP的相同的数据传输请求相对应的多于一个段。

在步骤110,CULP 103向CTLP 104发送数据传输请求。CTLP104创建具有序列号6001的段123。序列号6001是在前一段122中发送的最后一个字节(即,字节编号6000)的下一字节的编号。仍然允许CTLP 104向STLP 105发送更多数据,因为在未接收到相应的ACK的情况下发送到目前为止的数据总量是2000字节,其小于10000字节的rwnd大小。

编号为6001到7000的另外一个1000字节的数据与段123一起被发送。类似于段122,段123中的ACK号仍然是16001,因为没有从服务器节点102接收到需要被确认的新数据。ACK标志也被设置在段123中,以通知接收STLP 105段123包含ACK。服务器节点102不能接收段123,因为段123在传输期间丢失。

在步骤111,SULP 106向STLP 105发送数据传输请求。STLP105创建具有序列号16001的段124。序列号16001是在连接建立阶段107由服务器节点102发送的最后一个字节(即,字节编号16000)的下一个字节的编号。1000字节的数据与段124一起被发送,段124的编号范围是16001到17000。ACK标志被设置,并且段124中的ACK号是5001,以确认从客户端节点101接收到达到5000的数据字节。CTLP 104接收该段并将数据字节递送到CULP 103。

仍然允许CTLP 104向STLP 105发送更多数据,因为在未接收到相应的ACK的情况下发送到目前为止的数据总量是3000字节,其小于10000字节的rwnd大小。在步骤112,CTLP104从CULP 103接收数据字节。在不知道段122和123未被递送的情况下,CTLP 104向STLP105发送段125。段125具有序列号7001,并且包含后续的300个字节,其范围为从编号7001到7300的字节数据。段125还设置有ACK标志。段125中的ACK号是17001,因为CTLP 104已经在段124中接收到达到序列号17000。STLP 105接收段125,但是不将相应的数据字节递送到SULP 106,因为还未接收到先前的数据字节(5001到7000)。

在步骤113,SULP 106向STLP 105发送数据传输请求。STLP105创建具有序列号17001的段126,因为STLP 105已经在前一段125中接收到ACK号17001。段126包含范围为从17001到18000的数据字节。ACK标志被设置,并且段126中的ACK号仍然是5001,因为服务器节点102还没有接收到与最后接收到的数据字节5000相对应的下一个数据字节。CTLP 104接收到段126并将段126携带的1000个数据字节递送到CULP 103。

在步骤114,SULP 106向STLP 105发送数据传输请求。STLP105创建具有序列号18001的段127。段127包含编号为从18001到19000的数据字节。ACK标志被设置,并且段126中的ACK号仍然是5001,因为服务器节点102还没有接收到与最后接收到的数据字节5000相对应的下一个数据字节。CTLP 104接收到该段127并将段127携带的数据字节递送到CULP103。

在步骤115,SULP 106向STLP 105发送数据传输请求。STLP105创建具有序列号19001的段128。段128包含编号为从19001到19500的500个数据字节。ACK标志被设置,并且段126中的ACK号仍然是5001,因为服务器节点102还没有接收到与最后接收到的数据字节5000相对应的下一个数据字节。CTLP 104接收段128并将段128携带的数据字节递送到CULP103。

在步骤116,CTLP 104已经接收到编号为5001的四个ACK(一个原始的ACK和三个重复的ACK)。因此,在步骤116,CTLP 104从字节编号5001开始重新传输。CTLP 104创建包含编号为5001到6000的数据字节的段129。CTLP 104不需要再次从CULP 103接收数据字节。因为没有接收到数据字节5001到6000的ACK,所以数据字节5001到6000仍然存储在与CTLP 104相对应的传出缓冲器中。段129的序列号是5001,其与段129中的第一个数据字节编号相对应。ACK标志被设置,并且段129中的ACK号是19501,以确认接收到达到19500的数据字节。STLP 105接收到段129,并将段129携带的数据字节递送到SULP 106。

在步骤117,CTLP 104继续发送没有接收到ACK的数据字节。在该步骤,CTLP 104发送来自传出缓冲器的包含编号为6001到7000的1000个数据字节的段130。段130的序列号是6001,其与段130中第一个数据字节的编号相对应。ACK标志被设置,并且段130中的ACK号仍然是19501,以确认从服务器节点102接收到达到19500的数据字节。STLP 105接收到段130,并将段130携带的数据字节递送到SULP 106。

在步骤118,CTLP 104继续发送没有接收到ACK的数据字节。在该步骤,CTLP 104发送段131。段131包含来自传出缓冲器的编号为7001到7300的300个数据字节。段131的序列号是7001,其与该段中的第一个数据相对应。ACK标志被设置,并且段131中的ACK号仍然是19501,以确认接收到达到19500的数据字节。STLP

105接收到段131,并将段131携带的数据字节递送到SULP 106。

在步骤119,STLP 105发送不包含任何数据字节的段132。但是,因为段132包含ACK,所以段132仍然具有序列号19501(最后接收到的段的最后一个字节的后续编号)。ACK标志被设置,并ACK被编号为7301以确认接收到达到7300的数据字节。

CULP 103不再有数据要发送,因此在该数据传送阶段期间不再有请求被发送到CTLP 104。CTLP 104不发送段来确认段132,因为段132不包含任何数据字节。

在连接终止阶段120A中,终止客户端节点101和服务器节点102之间的TCP连接。

本领域技术人员将理解,图1A和图1B中所示的步骤是TCP用于确认的常见技术。本领域技术人员还可以理解,这种确认技术可能不能使用所有的可用带宽。为了将本发明与已知技术区分开来,在此详细讨论了现有技术。

发明内容

根据本发明,公开了使用TCP在两个网络节点之间进行数据通信的方法和系统。本发明的目的在于加速使用TCP的数据通信,且该目的由所公开的TCP确认技术实现。

根据本发明的实施例中的一个,多个第一TCP段从第一网络节点被发送到第二网络节点。TCP段中的每一个包括具有特定序列号的特定范围的数据字节。第二网络节点接收多个第二TCP段。多个第二TCP段包括多个第一TCP段的全部或部分。当多个第二TCP段仅包括多个第一TCP段的一部分时,这表示多个第一TCP段的其他部分未被第二网络节点接收到。

根据本发明的实施例中的一个,第二网络节点发送TCP确认,该TCP确认与期望在多个第二TCP段中接收的所有的数据字节中的最后的序列号之后的下一个数据字节的序列号相对应,而不管是接收到所有的数据字节还是仅接收到一些数据字节。

根据本发明的实施例中的一个,多个第一TCP段封装一个或多个数据报。一个或多个数据报源自连接到第一网络节点的局域网(LAN)的主机。

在一个变型中,第一网络节点向第二网络节点发送多个第三TCP段,而不管从第二网络节点接收到的确认。

在另一变型中,多个第三TCP段在不等待来自第二网络节点的任何确认的情况下被发送。

附图说明

图1A示出了基于现有技术TCP实现的序列图的第一部分。

图1B示出了图1A中所示的序列图的最后部分。

图2A示出了基于本发明一个实施例的使用一个TCP会话的TCP实现的序列图。

图2B示出了基于本发明一个实施例的使用两个TCP会话的TCP实现的序列图。

图3示出了根据本发明的一个实施例的网络图,其中多个网络节点可以基于TCP实现彼此通信。

图4示出了根据本发明的一个实施例的由网络路由器执行的发送数据的步骤。

图5示出了根据本发明的一个实施例的由网络路由器执行的发送数据的步骤。

图6示出了根据本发明的一个实施例的能够发送数据的网络路由器的框图。

图7示出了PDU的封装方法的框图。

图8示出了根据本发明的一个实施例的由网络路由器执行的选择用于发送数据的协议的步骤。

图9示出了根据本发明的一个实施例的由网络路由器执行的选择用于发送数据的协议的步骤。

图10示出了根据本发明的一个实施例的由网络路由器执行的选择用于发送数据的协议的步骤。

具体实施方式

多广域网(WAN)站点到站点虚拟专用网(VPN)路由器是支持聚合多个WAN连接的带宽的路由器。这种类型的路由器在下文中被称为“多WAN带宽聚合路由器”。为了可读性,缩写“MWBAR”在下文中用于指代“多WAN带宽聚合路由器”。在MWBAR中,多个WAN连接的带宽被组合在一起以创建聚合隧道。MWBAR通常能够与使用相同或兼容的聚合隧道协议的另一远程路由器同时建立并使用多于一个的聚合隧道。除了将多个传输层会话分布到这些聚合隧道中包括的多个WAN连接之外,这些MWBAR中的一些还能够在聚合隧道中包括的多个WAN连接之间分布相同传输层会话的数据。可以单独地或以各种因素的任意组合的方式来基于各种因素(诸如,但不限于,源IP地址、目的地IP地址、源端口号、目的地端口号、应用数据的内容、应用的服务质量(QoS)需求、时间和日期、用户ID、带宽、连接的链路的延迟或跳数等)确定对特定的聚合隧道的WAN链路的选择。通常,这些MWBAR具有在数据传送期间根据需要添加或移除WAN连接的能力。确定要被包括在聚合隧道中的WAN连接可以由管理员/用户或由路由器本身根据实时需求来执行。

发送MWBAR可以在其网络接口处接收各种类型的数据报,也称为协议数据单元(PDU),诸如,但不限于,IPv4、IPv6、ICMP、IGMP、互联网协议安全(IPsec)等。然后,发送MWBAR可以用其自己的创建新的PDU的协议报头封装这些PDU,并通过聚合隧道发送它们。这些新创建的PDU在这里被称为封装分组。与MWBAR内的TLP相比,创建封装分组的处理是MWBAR内的ULP。当封装分组的接收MWBAR解封装接收到的封装分组以检索原始PDU时,该解封装处理也是接收MWBAR内的ULP。

图3示出了典型的网络拓扑3000,其中,诸如网络节点301和网络节点302的多个网络节点能够被连接在一起以实现本发明中公开的方法。这里公开的网络节点包括但不限于能够通过传输控制协议(TCP)发送和接收数据的任何计算系统,诸如,个人计算机、服务器计算机、平板PC、移动电话、IoT装置、路由器、MWBAR、防火墙等。对于可以连接在一起以实现本发明所公开的方法的这种网络节点的数量没有限制。站点307和311均分别包括至少一个这样的网络节点301和302。网络310可以包括城域网(MAN)、广域网(WAN)、无线网络、公共交换电话网(PSTN)、互联网、内联网、外联网或其他类似网络中的一个或多个。台式计算机303和膝上型计算机305分别使用LAN连接304和LAN连接306连接到网络节点301。文件服务器315和数据库服务器309分别使用LAN连接308和LAN连接313连接到网络节点302。没有限制只有个人计算机或服务器计算机可以连接到网络节点301和302。具有联网能力的任何电子装置都可以连接到网络节点301和302。

WAN连接312和314的组分别由网络节点301和网络节点302使用,以便通过网络310在聚合隧道上彼此传递信息。WAN连接312的组包括WAN连接312(1)、312(2)和312(3)。WAN连接314的组包括WAN连接314(1)和314(2)。这些WAN连接的数量仅出于说明的目的而示出。本领域技术人员将理解,任何数量和布置的WAN连接都可能被网络节点301和302适配。WAN连接312(1)、312(2)、312(3)、314(1)和314(2)可以具有相似或不同的网络特性,包括分组丢失率和带宽能力。此外,WAN连接312的组和WAN连接314的组可以包括不同类型的网络连接,诸如,WiFi、光纤、电缆、DSL、T1、3G、4G、5G、卫星连接、以太网、ATM等。还应注意,站点307和站点311可以被认为是发送方或接收方两者,并且关于任一站点的功能的讨论可以在另一站点上实现。站点307和311之间的通信可以实现为具有双向数据传送能力的对称网络。

当诸如通过实现聚合的站点到站点VPN连接来在网络节点301和302之间建立聚合连接时,可以创建多个隧道316。多个隧道316对应于站点307的WAN连接312(1)、312(2)和312(3)与站点311的WAN连接314(1)和314(2)的排列。可以通过网络装置341建立多个隧道316中的一个或多个。网络装置341包括网络装置341(a)、341(b)和341(c),其可以中断UDP段的传输或完全阻止UDP段通过。这种中断和阻止是不希望的。网络装置341(a)、341(b)和341(c)可以是网络防火墙、路由器、深度分组检测(DPI)装置,或者是能够识别传输层段并决定丢弃、延迟、分配较低优先级或允许它们的任何类型的电子或计算装置。

不限制必须仅通过如图3的网络316中所示的三个网络装置来建立多个隧道316。多个隧道316可以通过任意数量的网络装置341传送数据。

呈现以下描述以使得本领域的技术人员能够进行和使用所述实施例。具体实施例和应用的描述仅作为示例提供,并且各种修改对于本领域的技术人员将是显而易见的。在不脱离实施例的范围的情况下,本文描述的一般原理可以应用于其它应用。因此,实施例不限于所示出的那些,而是符合与本文描述的原理和特征一致的最宽范围。应当理解,在不背离所附权利要求中阐述的本发明的精神和范围的情况下,可以对元件的功能和布置进行各种改变。为了清楚起见,本文没有描述与实施例相关的技术领域中已知的技术材料有关的细节。

尽管已经详细描述了本发明的实施例及其优点,但是应当理解,在不背离由所附权利要求限定的本发明的精神和范围的情况下,可以在本文中进行各种改变、替换和变更。此外,本申请的范围不旨在限于说明书中描述的处理、机器、制造、物质组成、装置、方法和步骤的特定实施例。如本领域的普通技术人员从本发明的公开内容中将容易理解的,根据本发明,可以利用目前存在的或以后将开发的、执行与本文所述的相应的实施例基本相同的功能或实现与本文所述的相应的实施例基本相同的结果的处理、机器、制造、物质组成、装置、方法或步骤。因此,所附权利要求旨在将这些处理、机器、制造、物质组成、装置、方法或步骤包括在其范围内。

在以下描述中给出了具体细节以提供对实施例的透彻理解。然而,本领域的普通技术人员将理解,可以在没有这些具体细节的情况下实践实施例。例如,可以在框图中示出电路,以免不必要的细节使实施例模糊。在其它实例中,可以示出公知的电路、处理、算法、结构和技术而不具有不必要的细节,以避免使实施例模糊。

此外,应注意,可以将实施例描述为处理,该处理被描绘为流程图、流图、数据流图、结构图、框图、序列图、时序图或这些图的任何组合。尽管流程图可以将操作描述为顺序过程,但是一些操作可以并行或同时执行。另外,可以重新安排操作的顺序。当完成处理的操作时,处理被终止,但处理可以具有未包括在图中的附加步骤。处理可以与方法、函数、过程、子例程、子程序等相对应。当处理与函数相对应时,处理的终止与该函数返回到调用函数或主函数相对应。

实施例或实施例的部分可以体现在程序指令中,该程序指令可以在处理单元上操作以执行如本文所述的功能和操作。构成各种实施例的程序指令可以存储在非暂时性存储介质中。此外,如本文所公开的,术语“非暂时性存储介质”可以表示用于存储数据的一个或多个装置,包括只读存储器(ROM)、可编程只读存储器(PROM)、可擦除可编程只读存储器(EPROM)、随机存取存储器(RAM)、磁RAM、核心存储器、软盘、软磁盘、硬盘、磁带、CD-ROM、闪速存储器装置、存储卡和/或用于存储信息的其他机器可读介质。术语“机器可读介质”包括但不限于便携式或固定式存储装置、光存储介质、磁介质、存储器芯片或磁带盒、无线信道和能够存储、包含或携带(一个或多个)指令和/或数据的各种其它介质。机器可读介质可以通过虚拟化来实现,并且可以是虚拟机可读介质,其包括基于云的实例中的虚拟机可读介质。

如本文所使用的术语“非暂时性计算机可读介质”、“主存储器”或“辅助存储装置”是指参与向处理单元提供指令以供执行的任何介质。计算机可读介质仅仅是机器可读介质的一个示例,其可以承载用于实现本文描述的任何方法和/或技术的指令。这种介质可以采取许多形式,包括但不限于非易失性介质、易失性介质和传输介质。非易失性介质包括,例如,光盘或磁盘。易失性介质包括动态存储器。传输介质包括同轴电缆、铜线和光纤。传输介质还可以采取声波或光波的形式,诸如,在无线电波和红外数据通信期间生成的那些。

易失性存储装置可以用于在处理器/处理单元执行指令期间存储临时变量或其他中间信息。非易失性存储装置或静态存储装置可以用于存储处理器的静态信息和指令,以及各种系统配置参数。

存储介质可以包括多个软件模块,这些软件模块可以被实现为将由处理单元使用任何合适的计算机指令类型来执行的软件代码。软件代码可以作为一系列指令或命令或者作为程序存储在存储介质中。

各种形式的计算机可读介质可以涉及将一个或多个指令的一个或多个序列承载到处理器以供执行。例如,指令最初可以从远程计算机承载在磁盘上。替代地,远程计算机可以将指令加载到其动态存储器中,并将指令发送到运行一个或多个指令的一个或多个序列的系统。

处理单元可以是微处理器、微控制器、数字信号处理器(DSP)、这些设备的任意组合、或被配置为处理信息的任意其它电路系统。

处理单元执行用于实现本发明的实施例的程序指令或代码段。此外,实施例可以由硬件、软件、固件、中间件、微代码、硬件描述语言或它们的任何组合来实现。当以软件、固件、中间件或微码来实现时,执行必要任务的程序指令可以存储在计算机可读存储介质中。(一个或多个)处理单元可通过虚拟化来实现,并且可以是(一个或多个)虚拟处理单元,其包括基于云的实例中的虚拟处理单元。

本发明的实施例涉及使用计算机系统来实现本文描述的技术。在一个实施例中,本发明的处理单元可以驻留在诸如计算机平台之类的机器上。根据本发明的一个实施例,响应于处理单元执行包含在易失性存储器中的一个或多个指令的一个或多个序列,由计算机系统执行本文描述的技术。这些指令可以从另一计算机可读介质读入易失性存储器中。执行包含在易失性存储器中的指令的序列使得处理单元执行本文描述的处理步骤。在替代的实施例中,可以使用硬连线电路系统来代替软件指令或与软件指令组合来实现本发明。因此,本发明的实施例不限于硬件电路系统和软件的任何特定组合。

诸如程序指令的代码段可以表示过程、函数、子程序、程序、例程、子例程、模块、软件包、类,或者指令、数据结构或程序语句的任意组合。通过传递和/或接收信息、数据、自变量、参数或存储器内容,代码段可以耦合到另一代码段或硬件电路。信息、自变量、参数、数据等可以经由任何合适的手段(包括存储器共享、消息传递、令牌传递、网络传输等)被传递、转发或传输。

替代地,可以使用硬连线电路系统来代替软件指令或与软件指令组合,以实现符合本发明的原理的处理。因此,符合本发明原理的实现方式不限于硬件电路系统和软件的任何特定组合。

网络接口可以由独立的电子组件实现,或者可以与其它电子组件集成。取决于配置,网络接口可以不具有网络连接或具有至少一个网络连接。网络接口可以是以太网接口、无线通信接口、帧中继接口、光纤接口、电缆接口、数字用户线(DSL)接口、令牌环接口、串行总线接口、通用串行总线(USB)接口、火线接口、外围组件互连(PCI)接口等。

网络接口可以连接到有线或无线接入网络。接入网络可以承载一个或多个网络协议数据。有线接入网络可以使用以太网、光纤、电缆、DSL、帧中继、令牌环、串行总线、USB、火线、PCI或可以传递信息的任何材料来实现。无线接入网络可以使用红外、高速分组接入(HSPA)、HSPA+、长期演进(LTE)、WiMax、GPRS、EDGE、GSM、CDMA、WiFi、CDMA2000、WCDMA、TD-SCDMA、蓝牙、WiBRO、演进数据优化(EV-DO)、数字增强无绳电信(DECT);数字AMPS(IS-136/TDMA)、集成数字增强(iDEN)或任何其它无线技术来实现。广域网(WAN)连接可以通过接入网建立以连接两个网络。

实施例或实施例的部分可以在计算机数据信号中实现,该计算机数据信号可以是用于通过传输介质进行通信的任何适当形式,使得计算机数据信号可读,以由用于执行本文描述的操作的功能装置(例如,处理单元)执行。计算机数据信号可以包括任何二进制数字电子信号,其可以通过诸如电子网络信道、光纤、空气、电磁介质、射频(RF)链路等的传输介质传播,并且因此数据信号可以是电信号、光信号、射频或其他无线通信信号等的形式。在某些实施例中,代码段可以经由诸如互联网、内联网、LAN、MAN、WAN、PSTN、卫星通信系统、电缆传输系统等的计算机网络被下载。

图6是根据本发明一个实施例的具有与网络节点301或网络节点302类似的功能的网络节点6000的说明性框图。路由器6000包括处理单元600、主存储器601、系统总线602、辅助存储装置603以及网络接口604、605、606和607。处理单元600和主存储器601彼此直接连接。处理单元600通过系统总线602连接到辅助存储装置603以及网络接口604、605、606和607。系统总线602可以是若干类型的总线结构(包括存储器总线、外围总线和使用各种总线架构中的任一种的局部总线)中的任一种。辅助存储装置603存储由处理单元600执行的程序指令。本发明的范围不限于具有四个网络接口的路由器6000,使得允许路由器6000具有高于或低于该数量的网络接口。在网络接口中,网络接口中的至少两个是广域网接口。

应当理解,本公开不限于系统6000的架构。例如,任何合适的基于处理器的装置都可以用于实现上述教导,包括但不限于路由器、个人计算机、膝上型计算机、计算机工作站、多处理器服务器、甚至移动电话。此外,某些实施例可以在专用集成电路(ASIC)或超大规模集成(VLSI)电路上实现。实际上,本领域的普通技术人员可以利用能够执行根据实施例的逻辑操作的任何数量的适当结构。

接入网络将网关或网络装置的网络接口连接到互连网络,诸如,互联网。网络接口可以是以太网接口、3G网络接口、4G网络接口、WiMAX网络接口或网络装置的任何其他网络接口。网络接口也可以是虚拟机(VM)的虚拟网络接口。接入网的形式为光纤、以太网、ATM、帧中继、T1/E1、IPv4、IPv6、无线技术、Wi-Fi、WiMAX、高速分组接入技术、3GPP长期演进(LTE)等。

网关是网络上的装置或节点,其执行不同类型的网络或应用之间的协议转换。网关也执行网络地址转换和端口地址转换,并且能够允许建立端到端连接。术语网关并不意味着限于单一类型的装置,因为允许用户与(一个或多个)网络通信的任何装置(诸如,硬件或软件)也可以被认为是用于本申请目的网关。网关与多个多重网络耦合。路由器、交换机、网桥、无线接入点、计算装置中的虚拟机或接入点都可以被认为是用于本发明目的网关。根据本发明,网关包括至少两个网络接口。

端到端连接是源节点和目的地节点之间的连接。端到端连接可以包括一个或多个WAN连接和一个或多个中间节点。在本发明的一个实施例中,源节点和目的地节点之间的端到端连接是VPN隧道。

隧道是使用两个网关各自的隧道接口和一个或多个WAN连接在该两个网关之间建立的端到端连接。使用隧道协议建立隧道,该隧道协议将一种类型的PDU封装到另一类型的协议数据单元中。隧道协议的示例包括但不限于通用路由封装(GRE)和第2层隧道协议(L2TP)。隧道在两个网络节点之间创建虚拟的点对点连接。隧道可以加密或不加密诸如IP分组的封装协议数据单元。可以使用网关的同一网络接口来建立多于一个的隧道接口。隧道的每一端上的两个网关可以直接连接,或者可以通过一个或多个互连网络连接。

信息分组是包含诸如地址信息的控制信息和用户数据的PDU。信息分组可以是诸如互联网协议(IPv4或IPv6)的网络层PDU、诸如TCP或用户数据报协议(UDP)的传输层PDU、或能够在接入网络上携带信息的任何其他协议的PDU。

图2A示出了根据本发明的一个实施例的在TCP连接的数据传送阶段期间执行的步骤。在该实施例中,STLP 105发送与接收到的最后一个数据字节序列(序列号7300)后续的下一个字节的序列号相对应的ACK,而不管是否接收到最后一个数据字节序列号之前的所有数据字节。在此实施例中所执行的步骤可以使用图3中所示的网络配置来实现。图2A应该结合图1A和图1B来看,以更好地理解此实施例。图2A中的步骤108到112与图1A中的步骤108到112相同。图2A中未示出与段相对应的一些细节,诸如,序列号、ACK号、数据字节编号,但是在此讨论了它们。

诸如SULP 106、CULP 103、STLP 105或CTLP 104的处理可以由诸如处理单元600的一个或多个处理单元执行。处理的指令存储在计算机可读存储介质中,诸如,辅助存储装置603和主存储器601。使用一个或多个网络接口(诸如,网络接口604-607)来执行客户端节点101和服务器节点102之间的数据传输和接收。

在步骤213,SULP 106向STLP 105发送数据传输请求。STLP105创建具有序列号17001的段226,因为STLP 105已经从CTLP 104接收到前一段125中的编号为17001的ACK。段226中的数据字节的编号范围为从17001到18000。ACK标志被设置,并且段226中的ACK号是7301,因为STLP 105接收到的段125中的最后一个数据字节的编号是7300。在此说明中,如在此阶段,最大序列号也是接收到的数据字节中的最后一个序列号。因此,确认号与期望在先前的段中接收到的数据字节中的最后一个序列号(序列号7300)后续的下一个数据字节的序列号(序列号7301)相对应。在这个特定步骤,STLP 105发送与段125中携带的数据字节相对应的ACK,即使先前的段123和124没有被STLP 105接收。即使未接收到先前的数据字节,这种发送最后接收到的数据字节的ACK的机制也导致减少了由CTLP 104执行的数据传输步骤的数量。数据传输步骤的这种减少可以使TCP吞吐量更快,但同时使TCP容易不可靠。如果由段123和段124携带的丢失的数据字节是SULP 106需要的,则SULP 106可以通过请求重新传输对应的数据字节来检测和纠正数据丢失情况。本领域的普通技术人员将理解,对ULP将如何处理重新传输请求没有限制。在步骤213结束时,CTLP 104接收到段226并将段226中携带的数据字节递送到CULP 103。在一个变型中,如果已经发送了与接收到的最后一个数据序列号后续的下一个字节的序列号相对应的确认,则不需要发送与接收到的最后一个字节后续的下一个字节的序列号相对应的确认。

CTLP 104不响应对于与段122和段123一起发送的字节的丢失的ACK。有可能段是无序地到达的。因此,具有较大ACK号的段可能比具有较小ACK号的另一段更早到达。例如,为了说明的目的,段124可以比段226更晚到达客户端节点101。当已经接收到具有较大编号的ACK时,CTLP 104不响应任何具有较小编号的ACK。

在步骤214,CULP 103不再有数据要发送。因此,CULP 103不向CTLP 104发送任何数据传输请求。CTLP 104发送具有设置的ACK标志和ACK号18001的段227,以确认接收到达到18000的数据字节。虽然段227不包含任何数据字节,但是段227仍然具有序列号7301,因为段227包含ACK。STLP 105接收到段227,然后被通知客户端节点101已经接收到达到18000的数据字节。

在步骤215,SULP 106向STLP 105发送数据和数据传输请求。STLP 105发送具有序列号18001的段228,其包含具有序列号18001至19000的1000个数据字节。ACK标志未被设置。段228不包含任何ACK,因为与前一段125的最后一个数据字节序列号(序列号7300)后续的下一个数据字节(序列号7301)的序列号相对应的ACK已经与段226一起发送,并且在接收到段226之后已经接收到没有任何数据字节的另一个段227。

在步骤216,SULP 106发送数据和数据传输请求到STLP 105。STLP 105发送具有序列号19001的段229,其包含编号为19001至19500的500个数据字节。由于没有ACK与段228一起发送的同样的原因,也没有ACK与段229一起发送。在这个段229中的ACK标志也没有被设置或者不需要被设置。

在步骤217,CULP 103仍然没有数据要发送。因此,CULP 103不向CTLP 104发送任何数据传输请求。CTLP 104发送具有设置的ACK标志和ACK号19501的段230以确认接收到达到19500的数据字节。虽然段230不包含任何数据字节,但是它仍然具有序列号7301,因为它包含ACK。STLP 105接收到段230,并通知客户端节点101已经接收到达到19500的数据字节。在连接终止阶段120B中,客户端节点101和服务器节点102之间的TCP连接被终止。

在一个变型中,当接收TLP以针对接收到的一个或多个特定TCP段的ACK进行回复时,该TLP还可以发送针对丢失的TCP段的ACK。丢失的TCP段是丢失、丢弃或晚到的TCP段。在一个示例中,当TCP段晚到时,接收节点比一个或多个特定TCP段更晚地接收到丢失的TCP段,但是丢失的TCP段具有比一个或多个特定TCP段的序列号更小的序列号。优选地,ACK以TCP段的顺序发送。因此,如果丢失的TCP段是早于一个或多个特定TCP段发送的TCP段,则接收节点应该早于接收到的一个或多个特定TCP段的ACK来发送丢失的TCP段的ACK。

该实施例也不同于TCP中的选择性确认(SACK)实现方式。在该实施例中的传输层处理基本上不决定是否重新传输未确认的字节。本领域技术人员将理解,在SACK下,接收传输层处理向发送传输层处理发送ACK以用于乱序接收的段,并将那些乱序的段保留在缓冲器中。发送传输层处理仅重新传输那些在传输期间丢失或损坏的段中包含的字节。

本文描述的基于接收三个重复的ACK的重新传输仅作为示例示出。不存在重新传输必须基于接收三个重复的ACK的限制。与数据字节的TCP重新传输相对应的任何其他方法(包括基于重新传输超时(RTO)的重新传输)都可以用于实现本发明中描述的方法。

在该实施例的一个变型中,发送传输层处理不关心从接收传输层处理接收到的ACK的值。在该特定变型中,接收传输层处理可使用任意选择的ACK值,而发送传输层处理可不处理ACK值。

在该实施例的一个变型中,发送传输层处理继续传输忽略由接收传输层处理设置的rwnd限制的字节。

在该实施例的一个变型中,接收TLP使用SACK来向发送TLP提供确认。

TCP通常用作全双工协议,其中,两个TLP或一对TCP端点可以同时发送和接收数据。因此,CTLP 104和STLP 105都能够根据本发明中公开的修改的确认方法同时执行。但是为了保持实施例的描述简单,本发明中公开的修改的确认方法仅在以下步骤中示出,其中,CTLP 104是发送TLP,STLP 105是接收TLP。本领域的普通技术人员将容易地认识到,CTLP104和STLP 105能够同时用作发送方和接收方。

为了实现本发明所公开的TCP传输方法,可以根据需要在TCP报头的字段中插入任何值。此外,为了实现本发明中公开的TCP传输方法,在必要时,发送传输层处理或接收传输层处理可以忽略TCP报头的一个或多个特定的字段的值。

本发明中描述的TCP确认方法可以作为操作系统、联网装置中的软件或硬件来实现,或者作为单独的软件或硬件模块来实现,或者以任意组合来实现。

本发明的实施例能够在网络节点(诸如,单个或多个广域网(WAN)站点到站点VPN路由器)中实现。这样的多WAN站点到站点VPN路由器在图3中被示为网络节点301和网络节点302。在一个变型中,可以通过两个网络节点之间的多个WAN连接建立聚合逻辑连接。例如,网络节点301可使用多个WAN连接(诸如,312(1)、312(2)、312(3)、314(1)和314(2))与网络节点302建立多个逻辑连接。逻辑连接包括VPN连接、隧道或端到端连接。聚合连接通过封装来携带信息分组。逻辑连接可以通过一个或多个中间节点,诸如,网络装置341a、341b和341c。

在该实施例的一个变型中,通过仅一个隧道或仅一个聚合隧道来发送和接收所有的TCP会话。然后使用多个隧道或多个聚合隧道来发送和接收TCP会话。

图4是示出确认TCP段的方法的实施例中的一个的流程图。为了可读性,结合图3描述图4。在该实施例中,在两个网络节点(诸如,网络节点301和302)之间使用单个TCP连接,以发送和接收所有的段。TCP连接可以被认为是网络节点301和302之间的隧道。对在网络节点301和302之间允许建立的TCP连接的数量没有限制。当网络节点301和302中的一个是发送方节点时,另一节点是接收方节点。在一个示例中,客户端节点101和服务器节点102可以分别由网络节点301和网络节点302实现。不存在网络节点301必须是客户端节点的限制,并且也不存在网络节点302必须是服务器节点的限制。例如,网络节点301可以是服务器节点102,网络节点302可以是客户端节点101。TCP连接可以通过WAN连接312中的一个和WAN连接314中的一个被建立。

在步骤401,发送方节点选择要被用于向接收方节点发送PDU的单个隧道。所选择的单个隧道可以是唯一的隧道或者是在发送方节点和接收方节点之间建立的多个隧道中的一个。使用TCP并通过WAN连接312中的一个和WAN连接314中的一个来建立隧道。如果还没有建立隧道,则发送方节点将使用TCP与接收方节点建立隧道。

在步骤402,发送方节点接收或生成数据报。数据报可以是但不限于一个或多个PDU,诸如,IP分组、传输层段、以太网帧、IPSec或GRE数据单元。在这个步骤的数据报还可以包括数据字节的一个或多个块,其具有基于任何已知的或未来开发的标准或协议的特定起点和终点。在该步骤的数据报可以由发送方节点从直接连接到发送方节点的装置接收,该装置驻留在远程网络中或驻留在发送方节点可访问的局域网(LAN)中。数据报也可以由发送方节点自身生成。

在步骤403,发送方节点通过所选择的隧道向接收方节点发送PDU。在步骤404,接收方节点通过隧道从发送方节点接收PDU。

在步骤405,与接收方节点的隧道相对应的TLP向与发送方节点的隧道相对应的TLP发送针对在接收到的TCP段中包含的数据字节的确认,而不管先前的数据字节是否已被接收到。结果,传输层处理不处理重新传输。在发送方节点和接收方节点处的上层处理能够通过在各自上层处处理重新传输来纠正任何数据丢失。

没有限制必须在步骤402之前执行步骤401。例如,步骤401可以在步骤402之后和步骤403之前执行。没有限制由发送方节点发送的PDU必须属于同一会话,即使封装PDU的TCP段属于同一TCP会话。例如,PDU可以属于不同的会话,诸如,用于网页浏览的一个会话和用于文件传输的另一个会话。由于TCP段不包括会话标识符,因此封装PDU的TCP段的源地址、源端口号、目的地地址和目的地端口号可以是相同的,而不管PDU是否属于同一会话。

在一个变型中,在步骤403之后,由于相应的TCP确认可能丢失或者可能被延迟,因此,无论发送方节点是否从接收方节点接收到相应的TCP确认,发送方节点都向接收方节点发送另外的PDU。相应的TCP确认用于确认接收到的TCP段,如图1中的步骤111所发送的确认。因此,步骤404至405可以在发送了另外的PDU之后执行。可以在接收到相应的TCP确认之前发送的另外的PDU的数量没有限制。

在一个变型中,重复步骤403,直到所有的PDU被发送为止,而不管发送方节点是否从接收方节点接收到相应的TCP确认。与等待相应的TCP确认相比,这允许隧道的更高利用率。流控制和重新传输可以由传输层使用其他手段来执行,诸如,在PDU中发送流控制消息,而不是依赖于确认。例如,在步骤403之后,发送方节点将不发送另外的PDU,直到从接收方节点接收到消息为止。该消息可以指示接收到的最后一个或最大TCP段。该消息也可以是命令发送方节点继续或推迟发送另外的PDU的任何指示。

图7示出了如何在TCP/IP分组中封装PDU。IP分组的有效载荷可以包含TCP段。TCP段包含TCP报头和TCP有效载荷。如分组700所示,TCP有效载荷可以包含任何上层数据、用户数据、任何类型的隧道报头和/或PDU。与隧道相关的信息被封装在隧道报头中。该信息可以用于隧道维护、隧道识别、校验和以及排序。在一个变型中,隧道序列号和全局序列号被包括在隧道报头中。隧道序列号可以表示分配给使用特定TCP会话的每个分组的序列号。

隧道序列号可以用于监视隧道的分组丢弃并且估计隧道的分组丢弃率。全局序列号可用于对通过聚合隧道的多个隧道传输的分组重新排序。全局序列号也可用于识别丢失的分组。与不同PDU相对应的特定的会话可以使用相同的源地址、源端口号、目的地地址和目的地端口号。本领域的技术人员将理解,源端口号、目的地端口号、序列号、确认号等被存储在TCP报头中。

图5是示出确认TCP段的方法的实施例中的一个的流程图。为了可读性,结合图3描述图5,在该实施例中,在两个网络节点(例如,网络节点301和302)之间使用多个TCP连接,以发送和接收所有的段。多个TCP连接被聚合在一起以形成一个聚合隧道。每个TCP连接作为单独的隧道进行操作,并且每个TCP连接通过WAN连接312中的一个和WAN连接314中的一个被建立。

在步骤501,发送方节点确定多个接入网以建立聚合隧道,多个接入网中的每一个可以包括一个或多个基于TCP的隧道。对聚合隧道中的基于TCP的隧道的数量没有限制。例如,仅出于说明的目的,聚合隧道中具有三个基于TCP的隧道。通过网络节点301的多个WAN接口和网络节点302的多个WAN接口,通过接入网络312(1)和314(1)、接入网络312(1)和314(2)以及接入网络312(3)和314(2)建立三个隧道。在另一个示例中,也仅为了说明的目的,聚合隧道中具有四个基于TCP的隧道,并且接入网314(2)是不起作用的。通过接入网络312(1)和314(1)、接入网络312(2)和314(1)、接入网络312(3)和314(1)以及接入网络312(1)和314(1)建立四个隧道。在该示例中,通过接入网312(1)和314(1)建立两个隧道。

在步骤502,发送方节点从直接连接到发送方节点或驻留在远程网络或驻留在发送方节点可访问的LAN中的装置接收PDU或多个PDU。PDU的目的地是接收方节点或可通过接收方节点到达的网络节点。

在步骤503,发送方节点选择聚合隧道中的多个隧道中的一个隧道来发送PDU。当存在要通过聚合隧道发送的多个PDU时,可以通过聚合隧道种的同一隧道或不同隧道发送PDU。例如,可以通过以接入网312(1)和314(2)建立的隧道发送第一PDU;可以通过以接入网312(3)和314(1)建立的隧道发送第二PDU。在一个变型中,同一PDU可以被复制并通过不同的隧道被发送。

在步骤504,发送方节点通过所选择的隧道向接收方节点发送PDU。在步骤505,接收方节点通过所选择的隧道从发送方节点接收PDU。然而,由于包括分组丢弃、网络拥塞和网络可靠性的多种原因,PDU可能未被接收方节点接收到。当存在正被发送的多个PDU时,多个PDU中的一个或多个可能丢失。当PDU到达接收方节点时,到达顺序可能与PDU离开发送方节点的顺序不同。

在步骤506,与接收方节点的隧道相对应的传输层处理向与发送方节点的隧道相对应的传输层处理发送对接收到的TCP段的确认,而不管是否已经接收到具有先前的序列号的TCP段。在该特定实施例中,传输层处理不处理重新传输或重新排序。在发送方节点和接收方节点处的上层处理能够通过在各自上层处处理重新传输或缓冲来纠正任何数据丢失和无序到达。

在一个变型中,属于同一会话的PDU通过同一隧道从发送方节点被发送到接收方节点。发送方节点可以基于各种会话识别技术(包括深度分组检查(DPI))以及源地址、目的地地址、源端口号、目的地端口号或协议报头中的任何其它值的组合,来识别会话。

在一个变型中,没有限制属于同一会话的PDU通过同一隧道从发送方节点被发送到接收方节点。基于多个隧道的聚合隧道中的多个隧道可以用于在两个网络节点之间发送和接收PDU。当在接收方节点处接收到PDU时,PDU将首先被存储到计算机可读非暂时性存储介质中。接收方节点处的处理单元对PDU重新排序并识别丢失的PDU。

在一个变型中,在步骤504之后,由于相应的TCP确认可能丢失或者可能被延迟,因此,无论发送方节点是否从接收方节点接收到相应的TCP确认,发送方节点都向接收方节点发送另外的PDU。相应的TCP确认用于确认接收到的TCP段,如图1A和图2A中的步骤111中发送的确认。因此,可以在发送了另外的PDU之后执行步骤505和506。

只要发送的总数据字节小于接收窗口或者已经发生重新传输超时,则在接收到相应的TCP确认之前可以发送的另外的PDU的数量没有限制。也不存在另外的PDU必须使用同一隧道的限制。例如,第一PDU通过第一隧道被发送,第二PDU通过第二隧道被发送,另外的PDU可以通过第一、第二或其他隧道被发送。

在另一个示例中,第一PDU被封装在第一TCP/IP分组中,并通过网络接口605被发送到第一WAN连接,诸如,WAN连接312(1);第二PDU被封装在第二TCP/IP分组中,并通过网络接口606发送被到第二WAN连接,诸如,WAN连接312(2);以及其他PDU被封装在相应的TCP/IP分组中,并通过任何网络接口和相应的WAN连接(诸如,WAN连接312)被发送。由于TCP/IP分组可以通过WAN连接312中的任何一个被发送,所以TCP/IP分组的源IP地址将具有正在使用的WAN连接的IP地址。因此,第一TCP/IP分组可以具有与第二TCP/IP分组不同的源IP地址。根据隧道的终止端,TCP/IP分组的目的地IP地址可以相同或不同。网络接口605和606是WAN接口。

在一个变型中,重复步骤504,直到所有的PDU被发送为止,而不管发送方节点是否从接收方节点接收到相应的TCP确认。与等待相应的TCP确认相比,这允许隧道的更高利用率。流控制和重新传输可以由传输层使用其他手段来执行,诸如,在PDU中发送流控制消息,而不是依赖于确认。例如,在步骤404之后,发送方节点将不发送另外的PDU,直到从接收方节点接收到消息为止。该消息可以指示接收到的最后一个或最大的TCP段。该消息也可以是命令发送方节点继续或推迟发送另外的PDU的任何指示。

图2B示出了根据本发明的在两个TCP连接的数据传输阶段期间执行的示例的步骤。多个CULP 283通过相应的CTLP 284和STLP285向SULP 286发送数据。对于可以同时参与客户端节点101和服务器节点102之间的数据传输和接收的CULP 283、CTLP 284、STLP285和SULP 286的数量没有限制。例如,可以有CULP 283、CTLP284、STLP 285和SULP 286中的十个。每个TCP连接(例如CULP283a-CTLP 284a-STLP 285a-SULP 286a)用于发送和接收针对一个TCP会话的数据,而CULP 283b-CTLP 284b-STLP 285b-SULP 286b用于发送和接收针对另一个TCP会话的数据。在本发明中TCP会话的数量不受限制。

STLP 285a发送与从CTLP 284a接收到的最后一个段的最后一个字节相对应的ACK,而不管是否接收到一个或多个先前的段。类似地,STLP 285b发送与从CTLP 284b接收到的最后一个段的最后一个字节相对应的ACK,而不管是否接收到一个或多个先前的段。

在该实施例中执行的步骤可以使用图3中所示的网络配置来实现。诸如CULP 283、CTLP 284、STLP 285和SULP 286的处理可以由诸如处理单元600的一个或多个处理单元执行。处理的指令被存储在计算机可读存储介质中,诸如,辅助存储装置603和主存储器601。使用一个或多个网络接口(诸如,网络接口604至607)来执行客户端节点101和服务器节点102之间的数据传输和接收。

在步骤240,CULP 283a向CTLP 284a发送数据传输请求。为了说明的目的,CTLP284a然后使用在连接建立阶段107中确定的初始序列号(ISN)值2001的值来与段251a一起发送第一会话的第一100个字节的数据。类似地,在步骤241,CULP 283b向CTLP 284b发送数据传输请求。为了说明的目的,CTLP 284b然后使用ISN值12001来与段251b一起发送第二会话第一100个字节的数据。由于CULP 283a-CTLP 284a-STLP 285a-SULP 286a以及CULP283b-CTLP284b-STLP 285b-SULP 286b是两个不同的会话,因此段251a和段251b中的ISN值不相关。

对在段251a和段251b中发送的数据属于同一会话还是不同会话没有限制。具有段251a和段251b的第一会话和第二会话可以是同一会话或不同会话。例如,数据可以属于来自同一主机的同一会话,如来自膝上型计算机的网页浏览会话。在另一示例中,数据可以属于分别连接到客户端节点101和服务器节点102的不同计算装置中的多个文件传输。

在步骤242,仅为了说明的目的,CTLP 284a继续发送未在段251a中发送的其余数据。本领域技术人员将理解,CULP 283a在步骤240发送的数据的大小可以大于段251a可以保持的大小。因此,使用多个段。由于CULP 283a已经在步骤240将数据传递给CTLP284a,因此在步骤242,不需要CULP 283a发送数据。CTLP 284a使用段252a的序列号2101。为了说明的目的,段252a由服务器节点102成功接收。

在步骤243,CULP 283b再次向CTLP 284b发送数据传输请求。然后,CTLP 284b使用段252b的序列号12101。为了说明的目的,段252b未被服务器节点102接收到。

然后在步骤244和245,CTLP 284a和284b再次分别向CTLP284a和284b发送数据传输请求。然后,CTLP 284a和284b分别使用段253a的序列号2201和段253b的序列号12201。出于说明的目的,服务器节点102未成功接收到段253a,但是服务器节点102成功接收到段253b。

在步骤247和248,STLP 285a和285b分别响应于段252a和253b创建段254a和254b,因为最后接收到的段是段252a和253b。由于没有接收到段253a,因此没有对段253a进行确认。

即使没有接收到段252b,段254b也保持对段253b的确认。这不同于现有技术中的TCP确认,SULP 248应当通过发送段251b的确认来进行响应。在本发明中,段253b的确认将使得CTLP 284b相信段251b至253b被STLP 105接收。

段254a和254b可以分别保存来自SULP 286a和286b的数据。数据与确认一起发送。如果不存在来自SULP的数据,则STLP可以发送确认而不涉及SULP。

图8是示出本发明的实施例的流程图。图8应该结合图2A至图2B和图3来查看。在该实施例中,诸如客户端节点101的发送方节点确定是通过UDP还是通过TCP向诸如服务器节点102的接收节点发送数据字节。在某些情况下,使用两种协议之一的数据传输可以具有更好的性能。在该特定实施例中公开的方法可以与如图2A至图2B所示的公开改进的TCP传输的方法或任何现有技术TCP/UDP数据传输结合使用。应当注意,在该实施例中执行的步骤在步骤107之前执行。

在步骤801,诸如CULP 103的发送应用层处理具有一个或多个字节以发送到诸如SULP 106的接收应用层处理。在该步骤中的一个或多个字节可以是从站点307中包括的LAN装置接收到的PDU的数据字节,或者它们可以是由CULP 103生成的测试字节。在步骤802,CULP 103向诸如CTLP 104的传输层处理发送一个或多个字节,并且开始等待一个时间段以确定字节是否被成功地发送到SULP 106。该时间段可以是预定的、由管理员配置的和/或从远程服务器接收的。在步骤803,CTLP 104使用UDP通过网络310将一个或多个字节发送到诸如STLP 105的接收传输层处理。

在步骤804,CULP 103确定是否将一个或多个字节成功地发送到SULP 106。在此特定步骤,如果在预定时间段内从SULP 106接收到与所发送的字节相对应的响应,则CULP103认为数据传输成功。确定一个或多个字节是否被成功发送基于CULP 103是否在预定时间段内从SULP 106接收到针对相应的字节的响应。

结合在预定时间段内接收到响应,字节传输的成功还可以基于其他条件来确定,其他条件诸如但不限于吞吐率、延迟、分组丢失率。如果在步骤804确定数据传输成功,则在步骤805,CULP 103选择UDP以被用于发送数据。如果在步骤804确定数据传输不成功,则在步骤806,CULP 103选择TCP以被用于发送数据。

没有限制在步骤803的一个或多个字节的传输必须使用UDP来执行,因为TCP也可以用于确定更好的协议。在该实施例中,如果首先用于测试数据传输的协议是令人满意的,则选择该特定协议,并且不测试另一协议。但是如果首先用于测试数据传输的协议不令人满意,则选择另一个协议而不执行任何更多的测试。这可以加速选择协议的处理,但是使用该方法,可能未测试和选择更合适的协议。

图9是示出本发明的实施例的流程图。图9应当结合图2A至图2B和图3来查看。类似于图8中所示的实施例,在该实施例中,诸如客户端节点101的发送节点确定是通过UDP还是通过TCP向诸如服务器节点102的接收节点发送数据字节。但是在该特定实施例中,测试了这两种协议,并且由发送应用层处理(诸如,CULP 103)选择更适合的用于数据传输的协议。

在步骤901,CULP 103具有一个或多个字节要发送到接收应用层处理,诸如,SULP106。在该步骤中的一个或多个字节可以是从站点307中包括的LAN装置接收到的PDU的数据字节,或者它们可以是由CULP 103生成的测试字节。

在步骤902,CULP 103将一个或多个字节发送到CTLP 104以使用UDP和TCP二者发送到SULP 106。此外,在该步骤,CULP 103开始等待一个时间段以确定字节是否被递送到SULP 106。该时间段可以是预定的、由管理员配置的和/或从远程服务器接收的。对于每个协议,在该步骤的预定时间段可以相同或不同。在步骤903,CTLP104使用UDP和TCP两者将一个或多个字节发送到STLP 105。在该特定步骤,CTLP 104为每个协议(UDP和TCP)创建与STLP 105的至少一个套接口连接,以将一个或多个字节发送到SULP 106。对CTLP 104如何将从CULP 103接收的字节发送到STLP 105没有限制。CTLP 104可同时或顺序地使用UDP和TCP将一个或多个字节发送到STLP 105。

在步骤904,CULP 103基于使用UDP和TCP两者是否将字节成功发送到SULP 106来确定数据传输的性能。字节是否被成功发送的确定基于CULP 103是否在预定时间段内从SULP 106接收到针对相应的字节的响应,并且结合其他条件。这里公开的其他条件可以包括但不限于吞吐率、延迟、分组丢失率。可以单独地或以任何组合使用可能影响两个节点之间的数据传输的任何相关因素,以确定字节是否被成功地发送到SULP 106。

基于在步骤904进行的确定,在步骤905,CULP选择TCP或UDP来向SULP 106发送数据。对CULP 103选择具有较高数据吞吐率的协议没有限制,因为可以使用在步骤904用于测量数据传输成功的任何其他条件。在该实施例的一个变型中,代替CULP 103选择用于数据传输的协议,手动地执行该选择。例如,在该特定变型中,在步骤904确定的传输性能相关信息经由任何适当方法对客户端节点101或服务器节点102的用户或管理员可用,所述方法诸如但不限于图形用户界面(GUI)、命令行界面(CLI)、SMS。

没有限制CTLP 104必须具有来自CULP 103的帮助以确定是否应该使用TCP来发送数据。例如,在一个实施例中,CTLP 104确定是否应当在没有来自CULP 103的任何辅助的情况下使用TCP来传送数据,并且将发现提供给CULP 103或客户端节点101的用户或管理员。

图10是示出本发明的这种实施例的流程图。图10应该结合图2A至图2B和图3来查看。在步骤1001,CTLP 104使用TCP将一个或多个字节发送到STLP 105。在该步骤发送的一个或多个字节由CTLP 104生成。

在步骤1002,CTLP 104确定一个或多个字节是否被成功地递送到SULP 106。字节的成功递送由CTLP 104以与图9的步骤904中描述的类似方式确定。如果在步骤1002,CTLP104确定字节被成功递送到STLP 105,则在步骤1003,CTLP 104确定TCP为发送数据的优选协议。如果在步骤1002,CTLP 104确定字节未被成功递送到STLP 105,则在步骤1004,CTLP104确定UDP为发送数据的优选协议。

对于图8至图10所示的实施例的TCP版本没有限制。例如,TCP协议可以包括ACK、CACK、SACK实现,或者其他TCP版本(诸如Taho TCP、Reno TCP或在本发明的实施例中公开的TCP方法)中的一个或多个。

此外,不存在必须仅选择TCP或UDP作为用于数据传输的方法的限制。可以确定任何其他协议(诸如但不限于SCTP或RSVP)用作数据传输的优选协议。

相关技术
  • 发送和接收互联网协议分组上的传输控制协议段的改进方法和系统
  • 发送和接收互联网协议分组上的传输控制协议段的改进方法和系统
技术分类

06120113145213