分组丢失容忍传输控制协议拥塞控制的制作方法

文档序号:18302709发布日期:2019-07-31 10:23阅读:236来源:国知局
分组丢失容忍传输控制协议拥塞控制的制作方法

本公开内容总体涉及网络流量管理,更具体地,涉及容忍分组丢失的传输控制协议(“tcp”)拥塞控制。



背景技术:

传统的tcp对分组丢失非常敏感。例如,利用tcpnewreno的拥塞控制机制,路径中仅0.1%的随机分组丢失可能导致吞吐量下降20-30%。这是tcp在涉及有损链路(例如,连接不良的无线链路)的路径上表现不佳的主要原因。

不能容忍tcp的丢失从根本上是vanjacobson的拥塞控制和拥塞避免(vj-ccca)算法的副产物,在该算法上建立tcp中的拥塞控制及其所有调制解调器变体。1988年,jacobson描述了在arpanet中观察到的“拥塞崩溃”问题,在此期间,由于拥堵,吞吐量下降了一千多倍。jacobson概述了vj-ccca作为一种补救措施,它仍然是当今传统tcp拥塞控制机制的基础。jacobson的算法将观察到的分组丢失视为网络拥塞的信号,并将解决网络拥塞问题的全部责任赋予端点。vj-ccca的工作原理是根据链路本身可靠的假设,减慢端点活动以响应数据分组丢失。vj-ccca的目标是通过避免拥塞崩溃来保护互联网本身。

当网络和路由基础设施处于起步阶段时,这些设计选择适合于当时的条件,具有很少的过载保护和非常基本的流量管理。当时的大多数主机基本上直接连接到主干网,并且没有isp。因此,网络稳定性完全取决于主机的行为。此外,链路基于具有低误码率的物理连接,因此传输错误相对较少。

jacobson算法及其后续的变体在其引入之后长时间工作良好,并且向互联网提供稳定性。但随着过去十年左右互联网的发展和商业化,人们看到这种强有力的补救措施的某些不良副作用。一个这样的问题是当路径变得有损时吞吐量的降低,这是诸如基于802.11(wi-fi)或蜂窝协议的无线链路的常见情况。将分组丢失视为拥塞的标志假设了可靠的链路,因此基于vj-ccca的tcp拥塞控制对分组丢失高度敏感。这随着当前无线链路的普遍存在而成为问题,在无线链路上,由于传输错误而不是拥塞,分组经常丢失。

1988arpanet与现代互联网之间的另一个根本变化是服务和用户管理层的引入,这是互联网商业化的关键结果。这个管理层是必要的,因为在不控制谁可以访问其服务以及达到何种程度的情况下,不能实际建立盈利业务。该服务/用户管理层(通常采用准入控制、用户管理、策略管理、网络安全等形式)位于用户(主机)和实际流量路由功能(路由器和骨干网)之间,以及仅允许符合服务协议和使用策略并且不会造成安全威胁(包括对网络稳定性的威胁)的用户流量传递到路由功能。通过添加该管理层,网络的稳定性不再取决于各个主机/用户的行为。创建jacobson的补救措施来“治疗”的原始“疾病”(网络拥挤崩溃)可能成为一种几乎不可能的可能性。这从根本上改变了vj-ccca的假设,并使原始拥塞控制设计选择受到质疑。

期望解决这些问题。



技术实现要素:

提供了丢失容忍的tcp传输,其在有损环境(例如wi-fi、蜂窝、低质量isp等)中保持良好的吞吐量并且表现良好。为了实现丢失容忍,传输不基于vj-ccca。相反,利用自学习收敛功能来检测和控制数据路径上的拥塞和传输速率。更具体地,与vj-ccca相比,丢失容忍传输不是试图从端点管理网络拥塞和稳定性,而是专注于管理两个通信端点之间的路径拥塞。通过专注于避免路径的过载或未充分利用,丢失容忍传输在给定路径条件下实现最佳的吞吐量。传送端点上的丢失容忍传输使用来自网络的反馈和来自接收端点的响应中包含的信息来调整传输速率。

丢失管理和拥塞管理的分离使得丢失容忍传输能够提供丢失容忍的拥塞控制。情况就是如此,因为在有损环境(例如,利用wi-fi或蜂窝网络的环境)中,数据路径中的分组丢失通常是链路层误码率的结果,即使路径完全不饱和也会持续存在。相反,拥塞引起的数据丢失(例如,尾部丢弃)主要发生在路径(或其一部分)完全加载到其指定容量时。与拥塞管理功能分开,丢失管理部件执行数据丢失检测和修复功能,并管理丢失数据重传的定时和顺序。发送逻辑部件实施发送速率,并且在一些实施例中,采用混合调步功能来提高数据传输的效率,并以更精细的粒度级别实施速率管理。

本发明内容和以下具体实施方式中描述的特征和优点并非包括一切,并且特别地,鉴于附图、说明书及其权利要求,相关领域的普通技术人员将清楚许多附加特征和优点。此外,应该注意的是,说明书中使用的语言主要是出于可读性和指导目的而选择的,并且可能未被选择来描绘或限制本发明的主题,求助于权利要求来确定这样的发明主题是必需的。

附图说明

图1是根据一些实施例的可以实现丢失容忍tcp部件的示例性网络架构的框图。

图2是根据一些实施例的丢失容忍tcp部件的操作的框图。

图3是示出根据一些实施例的由丢失容忍tcp部件的丢失管理模块执行的步骤的流程图。

图4是示出根据一些实施例的由丢失容忍tcp部件的路径拥塞管理模块执行的步骤的流程图。

图5是示出根据一些实施例的由丢失容忍tcp部件的发送逻辑模块执行的步骤的流程图。

图6是根据一些实施例的适用于实现丢失容忍tcp部件的计算机系统的框图。

附图仅出于说明的目的示出了各种实施例。从以下讨论中本领域技术人员将容易认识到,可以采用本文所示的结构和方法的替代实施例而不脱离本文所述的原理。

具体实施方式

丢失不敏感传输在有损环境(例如wi-fi、蜂窝、低质量isp等)中保持良好的吞吐量并且表现良好。为了实现丢失容限,丢失不敏感传输不基于vj-ccca。相反,利用自学习收敛功能来检测和控制数据路径上的拥塞和传输速率。更具体地,与vj-ccca相比,不是试图从端点管理网络拥塞和稳定性,而是管理两个通信端点之间的路径拥塞。通过专注于避免路径的过载或未充分利用,在给定路径条件下实现了最佳的吞吐量。

丢失不敏感传输对于接收端点是透明的。传送端点(例如,服务器)使用来自网络的反馈和来自运行传统传输的接收端点(例如,客户端)的响应中包含的信息来调整传输。

丢失不敏感传输可以包含以下三个功能块:路径拥塞管理、丢失管理和发送逻辑。丢失管理和拥塞管理的分离使得能够提供丢失容忍拥塞控制。情况就是如此,因为在有损环境(例如,利用wi-fi或蜂窝网络的环境)中,数据路径中的分组丢失通常是链路层误码率的结果,即使路径完全不饱和也会持续存在。相反,拥塞引起的数据丢失(例如,尾部丢弃)主要发生在路径(或其一部分)完全加载到其指定容量时。为此,丢失管理与拥塞管理功能分开。

丢失管理例程执行数据丢失检测和修复功能,并管理丢失数据重传的定时和顺序。发送逻辑实施发送速率。发送逻辑还可以采用混合调步功能来提高数据传输的效率,并以更精细的粒度级别实施速率管理。

图1是示出其中可以实现丢失容忍tcp部件101的示例性网络架构100的框图。图示的网络架构100包括多个客户端103a、103b和103n,以及多个服务器105a和105n。尽管图1作为示例示出了三个客户端103和两个服务器105a-n,但实际上可以部署更多(或更少)的客户端103和/或服务器105。在一个实施例中,网络107采用互联网的形式,但是在其他实施例中可以使用其他网络(例如,私有企业级广域网)。

客户端103和服务器105通过网络107进行通信,例如通过网络接口648或调制解调器647,如下面结合图6所述。在图1中,丢失容忍tcp部件101被示为驻留在服务器105a上。应当理解,这仅是示例,并且在各种实施例中,丢失容忍tcp部件101的各种功能可以在客户端103、服务器105上实例化,或者可以分布在多个客户端103和/或服务器105之间。客户端103能够使用例如网络浏览器或其他客户端软件(未示出)访问服务器105上的应用程序和/或数据。

客户端103和服务器105可以使用计算机系统610来实现,例如图6中所示并在下面描述的计算机系统。客户端103可以是台式计算机、笔记本电脑或移动计算设备的形式,包括能够连接到网络107和运行应用程序的便携式计算机系统。一些这样的移动计算设备有时被称为智能电话,尽管一些未指定的移动电话也具有这些能力。平板电脑和可穿戴计算设备(例如,智能手表、手镯、眼镜等)是移动计算设备的其他示例。

图2示出了根据一些实施例的丢失容忍tcp部件101的操作。在图2中示出了驻留在服务器105上的丢失容忍tcp部件101。通常,丢失容忍tcp部件101是tcp线兼容的,这意味着不需要客户端侧改变。如上所述,丢失容忍tcp部件101的功能可以驻留在服务器105、客户端103上或者分布在多个计算机系统610之间。应该理解,尽管图2中作为单个实体示出了丢失容忍tcp部件101,但丢失容忍tcp部件101表示功能的集合,其可以根据需要被实例化为单个或多个模块。在一些实施例中,丢失容忍tcp部件101的不同模块可以根据需要驻留在不同的计算设备610上。丢失容忍tcp部件101被实现为内核堆栈的一部分。在另一个实施例中,丢失容忍tcp部件101可以实现为用户空间传输堆栈,但是该实施方式涉及通过用户空间运行数据路径,因此可以影响服务器侧可伸缩性。

应当理解,可以在任何计算机系统610的系统存储器617(例如,ram、rom、闪存)内实例化丢失容忍tcp部件101的模块(例如,作为目标代码或可执行映像),以使得当计算机系统610的处理器614处理模块时,计算机系统610执行相关的功能。如本文所使用的,术语“计算机系统”、“计算机”、“客户端”、“客户端计算机”、“服务器”、“服务器计算机”和“计算设备”表示被配置和/或编程为执行所述功能的一个或多个计算机。另外,用于实现丢失容忍tcp部件101的功能的程序代码可以存储在计算机可读储存介质上。在这种情况下可以使用任何形式的实体计算机可读储存介质,例如磁、光、闪存和/或固态储存介质。如本文所使用的,术语“计算机可读储存介质”并不意味着与下层物理介质分离的电信号。

丢失容忍tcp部件101是对丢失不敏感的传输,使得其在有损环境(例如wi-fi、蜂窝、低质量isp等)中保持良好的吞吐量并且表现良好。为了实现丢失容忍,丢失容忍tcp部件101不基于vj-ccca。相反,利用自学习收敛功能来检测和控制数据路径上的拥塞和传输速率。更具体地,与vj-ccca相比,丢失容忍tcp部件101不是试图从端点管理网络拥塞和稳定性,而是专注于管理两个通信端点之间的路径拥塞。通过专注于避免路径的过载或未充分利用,丢失容忍tcp部件101在给定路径条件下实现最佳的吞吐量。

丢失容忍tcp部件101对于接收端点610是透明的。如下面详细解释的,传送端点(例如,图2中的服务器105)上的丢失容忍tcp部件101使用来自网络107的反馈以及来自运行传统传输207的接收端点(例如,图2中的客户端)的响应中包含的信息来调整传输。

在图2所示的实施例中,丢失容忍tcp部件101包含以下三个功能块:路径拥塞管理模块200、丢失管理模块203和发送逻辑模块205。如下面更详细地解释的,丢失管理和拥塞管理的分离使得丢失容忍tcp部件101能够提供丢失容忍拥塞控制。情况就是如此,因为在有损环境(例如,利用wi-fi或蜂窝网络的环境)中,数据路径中的分组丢失通常是链路层误码率的结果,即使路径完全不饱和也会持续存在。相反,拥塞引起的数据丢失(例如,尾部丢弃)主要发生在路径(或其一部分)完全加载到其指定容量时。为此,丢失管理与拥塞管理功能分开。如下面更详细描述的,丢失管理模块203执行数据丢失检测和修复功能,并管理丢失数据重传的定时和顺序。发送逻辑模块205实施发送速率。在一些实施例中,发送逻辑模块205还采用混合调步功能来提高数据传输的效率,并以更精细的粒度级别实施速率管理。

首先转向丢失管理,丢失容忍tcp部件101的丢失管理模块203处理传入的sack,跟踪由接收端点报告的所有丢失的序列号(以“sack缺口”列表的形式),测量和跟踪新丢失的序列号(即,第一次报告为丢失的序列号),以及新的sack/ack的数据(即,报告为在最近的sack中第一次接收的数据)。丢失管理模块203还可以跟踪重传特定丢失序列号范围的最后时间,并确定在下一个输出机会要重传哪个丢失序列号范围。

丢失管理模块203使用sack记分板209来存储它从接收端点(例如,客户端103)接收的sack相关信息。应当理解,如本文所使用的,“sack”表示选择性确认,其中接收端点明确地列出已经接收(或者尚未接收到的,例如,被否定承认的)字节、分组、分段等的范围。“sack记分板”209是用于存储来自特定接收端点的传入选择性确认信息的数据结构的名称。除了诸如tcpnewreno中使用的传统sack记分板209的字段之外,由丢失管理模块203维护的sack记分板209还存储和跟踪来自最后sack的新报告的丢失字节,以及最后重转每个给定sack缺口时的时间戳。

sack记分板209的新报告的丢失字节字段以字节为单位记录来自最新sack的新报告的丢失序列号。即,这报告了来自从最新sack处理添加到sack记分板209的所有新sack缺口的总字节数。在一个实施例中,该字段可以以sackhint结构(structsackhint)中的附加字段的形式实现,尽管这是可变实施方式细节。丢失管理模块203使新丢失字节的报告可用于路径拥塞管理模块200。如下面更详细地描述的,路径拥塞管理模块200使用该信息来监视路径的拥塞状态215。

关于最后重传sack缺口的时间戳,这可以记录在内核记号标记中。当新的sack缺口首次添加到记分板209时,其值被设置为0,指示新的sack缺口从未被重传。时间戳可以实现为sackhole结构(structsackhole)中的新字段,但这同样是可变实施方式细节。联网领域的普通技术人员将理解,在此上下文中的术语“sack缺口”表示数据流中的缺口,其通过所接收的选择性确认来标示。

丢失管理模块203可以向发送逻辑模块205提供功能接口211以执行丢失修复。在一个实施例中,由丢失管理模块203提供的一个功能接口211(本文称为loss_tolerant_sack_output())在由发送逻辑模块205调用时执行以下操作:

1.检查sack记分板209上是否有任何从未完整重传的sack缺口。如果是,则标识并返回其中最早的。此外,如果之前已部分重传最早的sack缺口,则指示序列号范围中从未重传的部分。

2.否则,如果sack记分板209上的所有sack缺口已经被重传至少一次,则检查是否需要再次重传最早的一个。如果最早的sack缺口在特定给定时间量之前重传,则返回最早的缺口以进行另一次重传。使用的特定给定时间量是可变设计参数。在一个实施例中,使用1.25倍平滑往返时间(srtt)值内核记号标记,但是可以根据需要向上或向下调整该值。

3.否则返回值(例如,null),指示此时不需要重传缺口。

由丢失管理模块203提供的另一功能接口211,本文称为loss_tolerant_sack_output_firsthole(),类似于上述功能,但代之以检查记分板209上的最早缺口(即,第一个超出当前的ack点的缺口)。通常,发送逻辑模块205在调用loss_tolerant_sack_output()之前总是调用loss_tolerant_sack_output_firsthole(),因此优先重传最早的缺口。

优先修复超出当前ack点的第一个缺口是用于在具有大量分组丢失的路径上操作的丢失容忍tcp部件101优化,例如在无线环境中。在这样的环境中修复缺口需要多次重传并不罕见,并且记分板209上的最早的缺口可以像防止其后面的其他缺口的清除的“插塞”一样操作。

应当理解,本文用于由丢失管理模块203提供的功能接口211的名称仅仅是示例,并且可以根据需要使用其他名称。

现在转到路径拥塞管理模块200的操作,在tcp会话开始时,该模块201估计路径的基线特性。然后,路径拥塞管理模块200连续监视由接收端点(例如,图2中的客户端103)报告的数据丢失模式。更具体地,路径拥塞管理模块200从丢失管理模块203接收新丢失字节的输入报告,以及最近从发送逻辑模块205发送的数据量的报告。如下面更详细地描述的,该输入是用于确定是以低于、等于/接近于还是高于基础路径容量传送数据,并相应地对发送速率进行调整。

当建立新的tcp会话时,完成传统的tcp三向握手并且会话进入建立状态。在运行丢失容忍tcp部件101的端点(图2中的服务器105)上,每次调用tcp输出例程时都执行本文的路径拥塞管理功能。在一个实施例中,这可以通过路径拥塞管理模块200提供的功能接口211来实例化,本文称为loss_tolerant_path_management()(该名称仅是示例)。

对于给定的tcp会话,路径拥塞管理功能经历两个阶段:基线路径特性测量阶段,以及路径拥塞监视和速率控制阶段。路径拥塞管理模块200保持在第一阶段,直到发送前n个分组。用于n的特定值是字段可配置变量设计参数。在不同实施例中n的可能值是例如100、150、200等。可替换地,路径拥塞管理模块200保持在第一阶段,直到第一次检测到路径拥塞事件。

在基线路径特性测量阶段,路径拥塞管理模块200使用如传统的tcp慢启动过程来调节发送速率并增大拥塞窗口(“cwnd”)。在该阶段结束时,路径拥塞管理模块200收集观察到的在慢启动过程中生长的cwnd,以及发送的数据,丢失的数据和最大sack缺口尺寸。然后,路径拥塞管理模块200使用该数据来发起下面描述的路径管理参数。

在路径拥塞监视和速率控制阶段,路径拥塞管理模块200每个管理周期执行一次路径拥塞监视和速率控制处理。在一个实施例中,管理周期被设置为一个平滑往返时间(“srtt”)。在一些实施例中,实际速率调整的频率根据路径拥塞状态215和几个配置参数而变化,如下面更详细描述的。

在每个管理周期结束时,无论是否进行速率调整,都生成路径测量报告213。路径测量报告213包含发送的字节,丢失的字节,以及关于刚刚结束的管理周期期间观察到的sack缺口模式的信息。在周期期间发送的新数据和重新发送的丢失数据都包含在发送的字节中。只有在周期中新报告为丢失的数据才包含在丢失的字节中。为了效率,可以限制由路径拥塞管理模块200保留的最近路径测量报告213的数量(例如,到1、2、5等)。

另外,在每个管理周期结束时,设置路径的拥塞状态215。在一个实施例中,拥塞状态215被设置为以下四种状态之一:path_underloaded(即“更绿”),path_load_ok(即“绿”),path_overloaded(即“红”)和path_overloaded2(即“更红”)。本文用来描述这些状态的名称仅是示例。

路径拥塞管理模块200维持以下三个关键速率参数:good_rate、bad_rate和current_rate(本文使用的名称仅是示例)。good_rate是路径拥塞管理模块200基于其在当前会话期间到目前为止的路径行为的观察而估计为不太可能触发突然和过多的数据丢失的最高速率。(如本文所用,“过多”数据丢失意味着高于给定阈值的数据丢失。)相反,bad_rate是基于该观察估计为可能触发突然和过多数据丢失的最低速率。即,认为如果保持good_rate的操作,则不太可能命中路径中的策略器,而bad_rate是可能发生突然和过多丢失的最低速率。

current_rate,这是将用于确定被授予用于下一个管理周期的令牌201的尺寸的速率,其进而确定发送逻辑模块205可以发送多少数据,如下所述。current_rate的值可以设置为good_rate的值。如下面更详细描述的,current_rate的值也可以设置为其他值以探测good_rate和bad_rate之间的未测试速率。

在路径拥塞监视和速率控制阶段的开始,current_rate被设置为第一阶段结束时的最新cwnd,并且good_rate和bad_rate都被设置为0,指示它们尚未确定。

路径拥塞管理模块200可以执行以下路径拥塞监视和速率控制功能,以跟踪和自我调整速率参数、路径拥塞状态215和下一个发送速率。应当理解,下面描述的许多调整阈值和参数是字段可配置的可变设计参数,根据一个实施例,此处描述设置为它们的默认值。

路径拥塞管理模块200确定路径是否进入更拥塞的状态(即,“变红”)。该确定基于分析在最新路径测量报告213中观察到的sack缺口模式。缺口的最大尺寸的增大或新缺口数量的突然跳跃被认为是路径“变红”的指示。否则,路径拥塞管理模块200将路径标记为“变绿”,意味着路径未进入更拥塞的状态。

在路径“变红”的情况下,如果路径处于“绿”或“更绿”状态但是现在确定为“变红”,则路径拥塞管理模块200执行以下逻辑。如果路径处于“绿”,则调低bad_rate。bad_rate降低的量是字段可配置的设计变量。在一个实施例中,默认调整量将降低6.25%,但其他值也是可能的(例如,4.5%、8%等)。如果路径拥塞管理模块200没有探测具有current_rate的未测试速率,则它也降低good_rate(例如,降低默认值12.5%)。在探测未测试速率的情况下,good_rate保持不变。如果在上述两个调整之后good_rate高于bad_rate,则路径拥塞管理模块200将good_rate重置为经调整的bad_rate的特定百分比(例如,默认值87.5%,即7/8)。然后,路径拥塞管理模块200将current_rate设置为新的good_rate,将路径拥塞状态215设置为path_overloaded(即“红”),并且将令牌201的current_rate值(默认)授予发送逻辑模块205。可替换地,路径拥塞管理模块200可以代之以根据需要仅将令牌201的current_rate值的一部分授予发送逻辑模块205。

在路径已经处于“红”或“更红”状态达超过(例如)三倍srtt的持续时间并且现在再次“变红”的情况下,执行以下逻辑。调低bad_rate,例如调低默认值25%。如果在上述调整之后good_rate现在高于bad_rate,则将good_rate重置为经调整的bad_rate的特定百分比(例如,87.5%),并将current_rate设置为新的good_rate。路径拥塞状态215被改变为path_overloaded(即“更红”),并且将令牌201的current_rate值(或其一部分)授予发送逻辑模块205。

如果路径已经处于“绿”或“更绿”状态达“短”持续时间(例如,超过五倍srtt)并且现在再次“变绿”,则该路径被认为未充分利用。在这种情况下,路径拥塞管理模块200进行较小的向上速率调整。更具体地,路径拥塞管理模块200可以将good_rate提高给定值,例如,提高默认值1.56%。如果bad_rate现在低于经调整的good_rate,则路径拥塞管理模块200将bad_rate提高到高于good_rate的给定值,例如,默认为1.56%。默认情况下,路径拥塞管理模块200现在将current_rate设置为经调整的good_rate。此时,路径拥塞管理模块200可以代之以将current_rate设置为经调整的good_rate和经调整的bad_rate之间的探测速率。路径拥塞状态215被设置为path_underloaded(即“更绿”),并且可以将令牌201的current_rate值授予发送逻辑模块205。

如果路径已经处于“绿”或“更绿”状态达“长”持续时间(例如,超过45倍srtt)并且现在再次“变绿”,则该路径可被认为是极为未充分利用的。在这种情况下,路径拥塞管理模块200进行更大的向上速率调整,例如,将good_rate提高到current_rate(这可能是被探测的未测试速率,因为路径现在已经处于“绿”一段时间),或者最近记录周期中的最高total_sent,以较高者为准。如果bad_rate低于经调整的good_rate,则可以将bad_rate提高为给定百分比或good_rate之上的其他值,例如默认为1.56%。如果设置了bad_rate(这可能是除了在会话开始时之外),则可以将current_rate设置为高于经调整的good_rate的较小百分比(例如,3.12%),否则设置为较高的百分比(例如,25%)。将路径拥塞状态215设置为path_underloaded(即“更绿”),并且将令牌201的current_rate值授予发送逻辑模块205。

最后,在路径已经处于“红”或“更红”状态达给定持续时间(例如,超过三倍srtt)并且现在“变绿”的情况下,路径拥塞管理模块200将current_rate设置为good_rate,将路径拥塞状态215改变为path_load_ok(即“绿”),并将令牌201的current_rate值授予发送逻辑模块205。

现在转到发送逻辑,该模块205实施由如上所述的路径拥塞管理模块200确定的发送速率。如下面更详细描述的,在一些实施例中,发送逻辑模块205还执行动态混合调步功能。在其他实施例中,结合本文描述的路径拥塞管理功能使用传统的tcp调步。

首先转向执行发送速率,发送逻辑模块205可以执行传统(例如,tcpnewreno)发送逻辑,同时添加如本文所述的速率控制实施。一旦路径拥塞管理模块200完成如上所述的路径基线特性测量阶段,发送逻辑模块205就停止遵循慢启动过程(不再关注snd_cwnd和snd_ssthresh),并开始应用基于丢失容忍tcp的速率控制,使用基于令牌桶的功能来调节发送速率。但是,应该理解,在整个过程中始终观察tcp接收器窗口。应该理解,tcp接收器窗口是无需确认发送器的情况下接收器可以接受的数据量。

在一个实施例中,发送逻辑模块205基于如上所述由路径拥塞管理模块200授予的令牌201,如下执行速率控制:

1.当有足够的令牌201可用时(例如,足够的令牌201覆盖正在发送的数据的长度),允许发送新的和重传数据;

2.当新的和重传数据都可用时,重传数据在新数据之前发送;

3.当发送重传数据时,如果两种类型都准备好重传,则在其他重传数据之前发送超出当前ack点的第一个缺口;

4.在成功传输之后,从令牌201计数中减去发送的数据的长度(新的或重传);

5.如果不再有令牌201可用,但是当前没有未完成的未确认数据,则可以发送多达一段额外数据;

6.如果不再有令牌201可用,但发送逻辑模块205正在尝试发送超出当前ack点的第一个缺口(即,“插塞”)的重传,则无论如何都可以发送该缺口。

7.否则,如果不再有令牌201可用,则发送逻辑模块205停止发送任何数据,直到如上所述从路径拥塞管理模块200授予新令牌201。

应当理解,在不同的实施例中,发送逻辑模块205可以基于由路径拥塞管理模块200授予的令牌201,利用上述基于令牌桶的功能的变体来实施速率控制。

如上所述,在一些实施例中,发送逻辑模块205还采用动态混合调步,其可以采取微突发调步和/或令牌切片的形式,其可以一起或分开运行。当会话未处于恢复模式时,即记分板209中不存在sack缺口,可以动态地启用微突发调步。这是因为当处于恢复模式时,sack时钟将足以将数据传输扩展出去,提供类似于调步的效果,而不会产生运行计时器的计算成本。当启用微突发调步并且有足够的数据要发送时,发送逻辑模块205将数据分成各自n段的微突发,并且一次仅发送一个数据微突发。用于n的值是字段可配置的设计参数(可能的值包括例如10、15、20等)。如果要发送更多微突发,则发送逻辑模块205在返回之前设置调步计时器。设定计时器间隔,使得微突发在一个srtt周期内接近于均匀分布。

令牌切片可以用于将在每个管理周期开始时由路径拥塞管理模块200授予的令牌201划分为n个切片,并且最初将一个切片释放到发送逻辑,并且当发送逻辑用完当前切片并在记号标记之前释放前一个切片(srtt/n)时释放另一个切片。这将继续直到释放所有n个切片或者由路径拥塞管理模块200做出新的令牌201授予。(当进行新的授予时,没收来自前一周期的任何未使用的令牌201。)注意,用于n的值再次是字段可配置的设计参数,并且可以设置为例如2、4、6等。

如上所述,在不同的实施例中,微突发调步和令牌切片可以一起或分开进行。在一个实施例中,两者都默认启用。

图3示出了根据一些实施例的丢失管理步骤。丢失管理模块203从接收端点接收301sack,跟踪303在其中报告的所有丢失序列号,跟踪305新丢失的序列号,并且跟踪307在最近的sack中第一次接收的报告的数据。丢失管理模块203还跟踪309重传特定丢失序列号范围的最后时间,并确定311在下一个输出机会重传哪些丢失序列号范围。丢失管理模块203向路径拥塞管理模块200提供313新丢失字节的报告,路径拥塞管理模块200使用该信息来监视路径的拥塞状态215。

图4示出了根据一些实施例的路径拥塞管理步骤。路径拥塞管理模块200测量401在tcp会话开始时路径的基线特性,直到已经发送给定数量的分组,或者直到发生拥塞事件。然后,路径拥塞管理模块200进入403监视和速率控制阶段。在该阶段中,每个管理周期(例如,一个srtt)一次地,路径拥塞管理模块200从丢失管理模块203作为输入接收405新丢失字节的报告,以及最近从发送逻辑模块205发送的数据量的报告。基于该信息,路径拥塞管理模块200监视407由接收端点报告的数据丢失模式,并确定409是以低于、等于/接近于还是高于基础路径容量传送数据。生成411路径测量报告,设置413路径的拥塞状态,并且在适当的情况下,调整415发送速率。然后开始下一个管理周期。

图5示出了根据一些实施例的发送逻辑步骤。发送逻辑模块205接收501由路径拥塞管理模块200授予的令牌201,指示可以传送多少数据。发送逻辑模块205确定503是否存在可用的重传数据。响应于确定重传数据可用,发送逻辑模块205发送505超出当前ack点的第一个缺口,然后发送准备好重传的任何其他重传数据直到令牌计数。响应于确定不存在可用的重传数据,发送逻辑模块205发送507新数据直到令牌计数。在每次成功传输之后,发送逻辑模块205从令牌计数扣除509发送的数据的长度。然后,发送逻辑模块205确定511是否还留有更多令牌201。如果是,则如上所述发送重传和/或新数据。如果没有更多令牌可用,则发送逻辑模块205接下来确定513当前是否有未完成的未确认数据。如果是,则发送逻辑模块205发送515多达一段额外数据。(还要注意,如果不再有令牌201可用但发送逻辑模块205试图发送超出当前ack点的第一个缺口的重传,则无论如何都发送该缺口。)否则,如果不再有令牌201可用,发送逻辑模块205停止517发送数据,直到从路径拥塞管理模块200授予新令牌201为止。

图6是适合于实现丢失容忍tcp部件101的计算机系统610的框图。客户端103和服务器105都可以以这种计算机系统610的形式实现。如图所示,计算机系统610的一个部件是总线612。总线612可通信地耦合计算机系统610的其他部件,例如至少一个处理器614,系统存储器617(例如,随机存取存储器(ram),只读存储器(rom),闪存),输入/输出(i/o)控制器618,通信地耦合到音频输出设备(例如扬声器620)的音频输出接口622,通信地耦合到视频输出设备(诸如显示屏624)的显示适配器626,诸如通用串行总线(usb)插口628,串行端口630,并行端口(未示出)等的一个或多个接口,通信地耦合到键盘632的键盘控制器633,通信地耦合到一个或多个硬盘644(或其他形式的储存介质)的储存接口634,被配置为与光纤信道(fc)网络690连接的主机总线适配器(hba)接口卡635a,被配置为连接到scsi总线639的hba接口卡635b,被配置为接收光盘642的光盘驱动器640,耦合到总线612的鼠标646(或其他指示设备)(例如,通过usb插口628),耦合到总线612的调制解调器647(例如,通过串行端口630),以及例如直接耦合到总线612的一个或多个有线和/或无线网络接口648。

可以以类似的方式连接其他部件(未示出)(例如,文档扫描仪,数码相机,打印机等)。相反,图6中所示的所有部件不必存在(例如,智能电话和平板电脑通常不具有光盘驱动器640,外部键盘632或外部指示设备646,尽管各种外部部件可以通过例如usb插口628耦合到移动计算设备。各种部件可以以与图6所示不同的方式互连。

总线612允许处理器614和系统存储器617之间的数据通信,如上所述,系统存储器617可以包括rom和/或闪存以及ram。ram通常是加载操作系统和应用程序的主存储器。除了其他代码之外,rom和/或闪存可以包含控制某些基本硬件操作的基本输入-输出系统(bios)。应用程序可以存储在本地计算机可读介质(例如,硬盘644,光盘642)上并加载到系统存储器617中并由处理器614执行。应用程序也可以从远程位置加载到系统存储器617中(即远程定位的计算机系统610),例如通过网络接口648或调制解调器647。在图6中,丢失容忍tcp部件101被示为驻留在系统存储器617中。

储存接口634耦合到一个或多个硬盘644(和/或其他标准储存介质)。硬盘644可以是计算机系统610的一部分,或者可以是物理上分离的并且可以通过其他接口系统访问。

网络接口648和/或调制解调器647可以直接或间接通信地耦合到诸如互联网的网络107。这种耦合可以是有线的或无线的。

如本领域技术人员将理解的,在不脱离本发明的精神或基本特征的情况下,本发明可以以其他具体形式体现。同样,部分、模块、代理、管理器、部件、功能、过程、操作、层、特征、属性、方法、数据结构和其他方面的特定命名和划分不是强制性的或重要的,并且实现发明或其特征的机制可以具有不同的名称、划分和/或格式。出于解释的目的,已经参考具体实施例描述了前述说明。然而,上面的说明性讨论并非旨在是穷举的或限于所公开的精确形式。鉴于上述教导,许多修改和变化都是可能的。选择和描述实施例是为了最好地解释相关原理及其实际应用,从而使得本领域其他技术人员能够最好地利用各种实施例,有或没有适合于预期的特定用途的各种修改。

本文描述的主题的各方面在以下编号的条款中阐述:

1.一种计算机实现的方法,包括:在发送端点计算机和接收端点计算机之间的传输控制协议(“tcp”)会话期间,发送端点计算机监视当数据被发送到接收端点计算机时所发送的数据量和数据丢失模式,发送端点计算机基于监视的所发送的数据量和数据丢失模式周期性地确定是正在以低于、等于还是高于路径容量发送数据,及发送端点计算机响应于确定是正在以低于、等于还是高于路径容量发送数据,周期性地动态调整向接收端点计算机发送数据的速率。

2.根据条款1所述的方法,还包括:在tcp会话期间,首先执行路径特性测量阶段,在该阶段期间,根据tcp慢启动过程来调节向接收端点计算机发送数据的速率,随后,在发送了特定量的数据或检测到路径拥塞事件之后,执行路径拥塞监视和速率控制阶段,在该阶段期间,发送端点计算机响应于确定是正在以低于、等于还是高于路径容量发送数据,周期性地动态调整向接收端点计算机发送数据的速率。

3.根据条款2所述的方法,还包括:在路径特性测量阶段期间,发送端点计算机跟踪观察到的产生自tcp慢启动过程的拥塞窗口(“cwnd”)、发送的数据、丢失的数据、和最大选择性确认(“sack”)缺口尺寸,并且在路径拥塞监视和速率控制阶段期间,发送端点计算机利用在路径特性测量阶段期间所跟踪的信息开始对向接收端点计算机发送数据的速率的初始动态调整。

4.根据条款2所述的方法,还包括:在路径拥塞监视和速率控制阶段期间,发送端点计算机在tcp会话的每一管理周期中动态调整向接收端点计算机发送数据的速率。

5.根据条款4所述的方法,其中:tcp会话的每个管理周期等于一个平滑往返时间(“srtt”)。

6.根据条款2所述的方法,还包括:在路径拥塞监视和速率控制阶段期间,发送端点计算机跟踪在每个管理周期期间观察到的发送的字节、丢失的字节、和sack缺口模式,并且发送端点计算机利用所跟踪的在先前管理周期期间观察到的发送的字节、丢失的字节、和sack缺口模式来动态调整在后续管理周期中向接收端点计算机发送数据的速率。

7.根据条款2所述的方法,还包括:在路径拥塞监视和速率控制阶段期间,在每个特定管理周期期间,发送端点计算机基于在特定管理周期期间发送的数据量、在特定管理周期期间新丢失的数据量、以及关于sack缺口和在特定管理周期期间重传它们的尝试的信息,确定在下一个管理周期中向接收端点计算机发送多少数据。

8.根据条款1所述的方法,还包括:由发送端点计算机跟踪由来自接收端点计算机的sack标识的新报告的丢失字节,发送端点计算机跟踪所标识的sack缺口最后被发送到接收端点计算机的时间,基于跟踪的新报告的丢失字节,跟踪的所标识sack缺口最后被重传到接收端点计算机的时间,发送到接收端点计算机的数据量和先前路径拥塞状态,周期性地确定当前路径拥塞状态,并且发送端点计算机基于周期性确定的当前路径拥塞状态,周期性地调整向接收端点计算机发送数据的速率。

9.根据条款1所述的方法,还包括:由发送端点计算机跟踪来自接收端点计算机的关于传入sack的信息,关于传入sack的信息还包括sack缺口、由sack标识的新报告的丢失字节和所标识的sack缺口最后被重传到接收端点计算机的时间,并且当发送端点计算机将sack缺口重传到接收端点计算机时,遵循如下优先级:超出当前确认(“ack”)点的第一个sack缺口,以前从未从最旧到最新被完整重传的sack缺口,以及已经完整被重传但在特定时间量内并未从最旧到最新被重传的sack缺口。

10.根据条款1所述的方法,还包括:发送端点计算机跟踪所标识的sack缺口最后被重传到接收端点计算机的时间来作为记录的内核记号标记的时间戳。

11.根据条款1所述的方法,还包括:在向接收端点计算机发送数据期间,发送端点计算机实施经周期性动态调整的速率。

12.根据条款1所述的方法,还包括:在向接收端点计算机发送数据期间,发送端点计算机实施经周期性动态调整的速率,同时观察tcp接收器窗口。

13.根据条款1所述的方法,还包括:在向接收端点计算机发送数据期间,发送端点计算机使用令牌桶实施经周期性动态调整的速率。

14.根据条款13所述的方法,还包括:在多个管理周期中的每个特定管理周期期间,发送端点计算机将针对特定管理周期授予的令牌划分为多个切片,并且发送端点计算机在特定管理周期内对切片的释放和相应地向接收端点计算机发送数据进行调步。

15.根据条款1所述的方法,还包括:在以经周期性动态调整的速率来向接收端点计算机发送数据期间,遵循如下优先级:超出当前ack点的第一个sack缺口的重传、其他重传数据、和新数据。

16.根据条款1所述的方法,还包括:在以经周期性动态调整的速率来向实施接收端点计算机发送新数据期间,将新数据划分为微突发,每个微突发包括特定数量的段,并且一次发送一个数据微突发,在微突发之间具有特定的时间量,从而使微突发的发送在整个srtt上铺展开。

17.存储计算机可执行指令的至少一个非暂态计算机可读储存介质,这些计算机可执行指令在被加载到计算机存储器中并由计算设备的至少一个处理器执行时,使得计算设备执行以下步骤:在发送端点计算机和接收端点计算机之间的传输控制协议(“tcp”)会话期间,发送端点计算机监视当数据被发送到接收端点计算机时所发送的数据量和数据丢失模式,发送端点计算机基于监视的所发送数据量和数据丢失模式周期性地确定是正在以低于、等于还是高于路径容量发送数据,并且发送端点计算机响应于确定是正在以低于、等于还是高于路径容量发送数据,周期性地动态调整向接收端点计算机发送数据的速率。

18.根据条款17所述的至少一种非暂态计算机可读储存介质,还包括计算机可执行指令,这些计算机可执行指令在被加载到计算机存储器中并由计算设备的至少一个处理器执行时,使得计算设备执行以下附加步骤:发送端点计算机跟踪由来自接收端点计算机的sack标识的新报告的丢失字节,发送端点计算机跟踪所标识的sack缺口最后被发送到接收端点计算机的时间,基于跟踪的新报告的丢失字节、跟踪的所标识sack缺口最后被重传到接收端点计算机的时间、发送到接收端点计算机的数据量、和先前路径拥塞状态,周期性地确定当前路径拥塞状态,并且发送端点计算机基于周期性确定的当前路径拥塞状态,周期性地调整向接收端点计算机发送数据的速率。

19.根据条款17所述的至少一种非暂态计算机可读储存介质,还包括计算机可执行指令,这些计算机可执行指令在被加载到计算机存储器中并由计算设备的至少一个处理器执行时,使得计算设备执行以下附加步骤:发送端点计算机跟踪来自接收端点计算机的关于传入sack的信息,关于传入sack的信息还包括sack缺口、由sack标识的新报告的丢失字节和所标识的sack缺口最后被重传到接收端点计算机的时间,并且当发送端点计算机将sack缺口重传到接收端点计算机时,遵循如下优先级:超出当前确认(“ack”)点的第一个sack缺口,以前从未从最旧到最新被完整重传的sack缺口,以及已经被完整重传但在特定时间量内并未从最旧到最新被重传的sack缺口。

20.根据条款17所述的至少一种非暂态计算机可读储存介质,还包括计算机可执行指令,这些计算机可执行指令在被加载到计算机存储器中并由计算设备的至少一个处理器执行时,使得计算设备执行以下附加步骤:在向接收端点计算机发送数据期间,发送端点计算机实施经周期性动态调整的速率。

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