网络通信设备中传输数据的方法和网络通信系统
技术领域
本发明一般涉及网络通信,并且特别涉及通过传输控制协议(TCP)的网络通信。更特别地,本发明涉及用于在TCP包传输期间改进的重传机制的方法和系统。
背景技术
传输控制协议(TCP)是用于在连接到因特网的节点之间传输数据的协议。相对于在网络层运作的网际协议(IP),TCP作为传输层协议在上层运作,并且通常被称为“TCP/IP”。使用被发送以确认数据包的接收的确认(ACK)信息,TCP实现了拥塞控制机制。
在TCP通信中,数据段作为具有唯一序列号(或包ID)的包被从发送/始发终端发送至接收/目的终端。当接收终端接收到数据段时,该接收终端发送具有与接收到的数据段序列号相同的序列号的ACK。术语“数据段”指利用TCP发送的数据块单元,其被称为协议数据单元(PDU)。在TCP通信中,即使发送终端可能没有从接收终端接收到ACK,发送终端也在一段时间内同时发送尽可能多的数据段,这段时间被称为拥塞窗口(CWND)。
如果发送终端接收到多个具有相同序列号的ACK(重复ACK),则该发送终端重传具有相应的序列号的数据段。即使发送终端没有接收到重复ACK,如果发送终端在向接收终端发送数据段之后、在预先确定的超时期间内接收不到ACK,该发送终端就重传此数据段。
TCP接收器通常在失序段(out-of-order segment)到达的时候发送立即的重复ACK。该ACK的目的是通知发送方接收到失序段以及预期的序 列号。相当一部分的重复ACK是在通过网络传输期间包/段的丢失和/或数据段的重排序的结果。
TCP利用称为“快速重传”的机制/算法(在http://rfc.net/rfc2581.html上提供的IETF rfc 2581中描述)快速检测和修复由接收到的传入的重复ACK的所标识的包的丢失。在该算法中,重复ACK的接收被当作是包丢失的指示。快速重传算法采用3次重复ACK(没有任何其它介于其间的包达到的4次同样的ACK)的到达作为段已经丢失(或被重排序)的指示。当接收到三次这样的重复ACK时,TCP执行看来可能是遗失的数据段的重传,而不需要等待重传计时器期满。
然而,如果在重传超时期间内没有接收到足够的重复ACK(即3次),快速重传算法便不会被触发。因而,存在特殊的问题场景,其中,即使包已经丢失,快速重传算法也得不到适当地触发。图1说明了快速重传算法的错误操作的示例代码。
图1示出了具有连接到网络115例如因特网的发送终端110和接收终端120的基本IP网络100。被示出的还有一系列的数据段通过网络115从发送器110到接收器120的传输,以及ACK响应从接收器120到发送器110的传输。所述传输的计时由垂直时间线130跟踪,其中时间沿该时间线的下行线增加(0到T)。箭头指示来自或去往发送器和/或接收器的每次传输的方向,并且每次ACK传输被标记和描述为在整个过程中的步骤(例如步骤140、145...160)。
如数据段的初始传输之后的ACK响应序列所示,因为接收器120的窗口信息随最后的重复ACK(步骤155)已经改变(从32000到32500),数据的发送器110不能确定重复ACK是否由失序包的接收导致。发送器接收到ACK,但却不把该ACK视为重复ACK。在许多常规实现中,计时器(计数器)被复位至零(即CNT=0,而不是CNT=2)。随着这种复位,重复ACK跟踪过程必须重新开始。因而,对于将计数复位至零的实现,随后需要三次附加的重复ACK以启动丢失包的快速重传。即使对于保持计数(在以上例子中CNT=2)的实现,也需要至少一次附加的重复 ACK在重传算法被触发以重传数据段之前被接收。如果发送器不能够发送所需要数目的新的包(例如(a)如果不再有来自当前正在等待对其请求的响应的应用的写入,或(b)如果TCP被拥塞窗口限制),那么将不再产生重复ACK,并且不会发生快速重传。
一些解决方案已经被提出以解决上述关于快速重传算法的问题。然而,在这些解决方案中的“限制传输”(Limited Transmit)算法(在http://rfc.net/rfc3042.html处描述)并不是被特别地设计以解决上述关于快速重传算法的问题。但是,如果窗口信息在后续的重复ACK中再次改变(例如32000到32500),如通常发生的那样(见图1),则即是限制传输算法也不工作。特别地,限制传输算法和其它提出的解决方案全部专注于在过程的发送器端执行修改。在http://info.iet.unipi.it/-luigi/sack.html处讨论了一些其它的发送端的解决方案。每个这样的解决方案都受到与快速重传和限制传输算法之一或二者相同的限制。
发明内容
公开了一种在TCP包/段丢失或以非顺序的次序被接收时使能够进行快速重传机制的接收器端触发的方法、网络接收器和TCP网络。利用快速重传支持(FRS)实用工具(utility),增强了接收器,所述快速重传支持实用工具监视何时下一个接收到的包失序,并且通过发送其中包含与先前的ACK相同窗口值的重复确认(ACK)响应来应答。通过包含先前的时钟时间,即使在当前窗口值已经前进的时候,在发送器的快速重传算法也会在超时期间之前触发。
因此,每次数据接收器接收到失序包,该数据接收器发送确认到该时所接收到的完整数据的重复ACK响应。在一个实施例中,数据接收器存储具有与先前的ACK相同窗口值的第一重复ACK的副本。接下来,即使接收窗口扩展(例如当应用在接收窗口中读取下一失序的包数据时),数据接收器在向数据发送器发出ACK时也不使用更新的窗口值。相反地, 数据接收器发送存储的重复ACK,其通告先前的/存储的窗口值(即与先前的ACK内的相同)。发送器因此读取该重复ACK作为真正的复本(duplicate),并且使其计数器加1。
一旦在发送器处接收到阈值数目的重复ACK(例如3),该发送器就启用快速重传算法,其使得丢失的包(由重复ACK标识)被重传。发送器然后将计数器复位至零以开始重复ACK的新的计数。在该包被数据接收器接收时,数据接收器产生具有更新的窗口值的新的ACK,并且在网络上发送所述新的ACK。当新的窗口值在计数器达到预置阈值之前在ACK内被接收时,用于快速重传算法的计数器在数据发送器内被复位。
上述以及本发明另外的目标、特征和优点在下面详细书面描述中将变得显而易见。
附图说明
通过参照下面说明性实施例的详细描述并结合阅读附图,本发明自身、以及优选的使用模式、进一步的目标及其优点将最好地被理解,附图中:
图1示出了数据段和ACK在发送器和常规接收器之间的现有技术的交换;
图2示出了可以在其中有利地实现本发明的特征的数据网络的例子;
图3是被用作根据本发明一个实施例的数据接收器的示例性计算机系统的框图;
图4是示出根据本发明的一个实施例,数据包/段和响应ACK在数据发送器和增强的数据接收器之间的传输的时序图;
图5是示出根据本发明的一个实施例,增强的数据接收器在触发丢失的数据包的早期快速重传中采取的过程的流程图;以及
图6A和图6B分别是代表如本发明实施例中描述的数据包和ACK响应包的框图。
具体实施方式
本发明提供了在TCP包/段丢失或以非顺序的次序被接收时使得能够进行快速重传机制的接收器端触发的方法、网络接收器和TCP网络。利用快速重传支持(FRS)实用工具,增强了接收器,所述快速重传支持实用工具监视何时下一个接收到的包失序,并且通过发送其中包含与先前的确认(ACK)相同窗口值的重复ACK响应来应答。通过包含先前的时钟时间,甚至在当前窗口值已经前进时,在发送器的快速重传算法也会在超时期间之前被触发。
现在参照附图,特别地,参照图2,其说明了示例性网络,本发明的特征可以在该网络内被有利地实现。网络200包括被示出为网络云(network cloud)的网络主干210。根据描述的实施例,网络200使用传输控制协议(TCP)传输数据包(或段),并且网络200是TCP/IP(网际协议)网络,例如因特网。连接到网络主干210(例如经由路由器或网关216)的是从中产生并发送数据包220的数据发送器215,以及接收并处理接收到的数据包220的数据接收器225。数据发送器215在此还可以被称为始发终端/节点,而数据接收器225可以被称为接收终端。在接收到数据包220时,数据接收器225产生被发送至数据发送器215的ACK响应包(在此被称为ACK)。根据公开的实施例,数据发送器215包括快速重传算法并且用以下描述的几种方式之一应答ACK的接收,特别地,应答预置数目的重复ACK的接收。
图6A说明了数据包的例子,而图6B说明了ACK的例子。数据包600包括若干节组成,包括:(1)具有始发地址604、目的地址606、类型608和序号(或包ID)610的标题节;以及(2)数据有效负荷612。ACK 620至少包括窗口值622和序号624,该序号对应于用于在接收器处按顺序接收到的最后的包的序号。数据包600和ACK 620二者仅被提供用于说明,并不意欲在本发明上强加任何限制。
与常规实现不同,数据接收器225被设计具有使数据接收器225能够产生重复ACK而不改变先前的窗口值的附加功能,从而避免了在数据发送器215的重复ACK计数器的误复位。图3说明了在本发明的描述中被 用作数据接收器225的计算机系统的主要部件。如示出的,数据接收器225包括处理器310,其经由系统互连305被耦合到存储器320和网络接口设备(NID)330。NID 330提供通过网关或路由器等到外部网络的互连性。例如依赖于数据接收器225被连接到的网络的类型,NID 330可以是以太网卡或调制解调器。其它部件(未特别地示出)可以被设置在数据接收器内,例如输入/输出设备和其它外围设备。因而,该图示并不意欲暗示关于数据接收器225的任何结构的或其它功能的限制,并且在此仅被提供用于说明和描述。
除了以上描述的数据接收器225的硬件部件,一些软件和固件部件也被设置在数据接收器225内,以便使硬件设备能够提供与数据接收器关联的基本功能,以及如文中所述的,产生相同的重复ACK以触发更快速的重传的附加的功能。在这些软件/固件部件中,有操作系统(OS)340、NID驱动器345和快速重传支持(FRS)算法/实用工具350。由于与FRS实用工具350关联的功能与经由NID 330的网络传输直接相关,因此FRS实用工具350被示出为与NID驱动器345连接(或关联)。当其在数据包的接收期间被处理器310执行的时候,FRS实用工具350实现提供以下参照图4和图5所描述的各种功能的算法(在数据接收器处)。
在数据接收器225内(经由在其中执行的FRS算法/实用工具)进行了使能实现本发明的功能的一些关键的增强。每次数据接收器225接收到失序包,数据接收器225发出确认直到该时所接收到的完整数据的重复ACK。该数据接收器然后存储包含当前窗口值的ACK的副本。在一个实施例中,所述数据接收器存储具有与先前的ACK相同窗口值的第一重复ACK的副本。接下来,即使接收窗口扩展(例如当应用在接收窗口中读取下一失序的包数据时),所述数据接收器在向数据发送器发出(通告)ACK时也不会使用更新的窗口值。相反地,所述数据接收器发送存储的重复ACK,其通告先前的/存储的窗口值(即与先前的ACK内的相同)。所述发送器因此读取重复ACK作为真正的复本,并且使其计数器加1。
一旦在发送器215接收到阈值数目的重复ACK(例如3),则该发送 器215就启动快速重传算法,其使得丢失的包(被重复ACK标识)被重传。发送器215然后将计数器复位至零以重新开始重复ACK的计数。在该包被数据接收器接收时,数据接收器225产生具有更新的窗口值的新的ACK,并且在网络上发送所述新的ACK。当新的窗口值在计数器达到预置阈值之前在ACK内被接收时,用于快速重传算法的计数器在数据发送器225内被复位。
从网络的观点看,所述FRS实用工具临时冻结了接收器窗口的前进,即使当无序包在接收器被读取的时候窗口实际上前进了。所述接收器然后仅更新一旦“丢失的”或“缺失的”包到达所述接收器就被发出的ACK内的窗口值。所述FRS实用工具的处理功能防止了所述接收器在这样的重复ACK内发送窗口更新,该重复ACK被产生并被发送以信号通知接收到相对于先前的有序包的失序包。这于是使得所述快速重传算法能被在发送端触发。
图4示出了数据段和ACK在数据发送器215和数据接收器225之间交换的示例性过程。基本IP网络200包括连接到网络主干210例如因特网的数据发送器215和数据接收器225。被示出的还有一系列通过网络主干210从数据发送器215发送到数据接收器225的数据包/段,以及从数据接收器225发送到数据发送器215的ACK响应。传输的计时被垂直时间线跟踪,其中时间沿该时间线的下行线增加(0到T)。箭头指示来自或去往数据发送器215和/或数据接收器225的每次传输的方向,并且每次ACK传输被标记和描述为在重复ACK传输过程中的下一步骤(例如步骤440、445......460)。
各包包含序号,并且各ACK既包含对应于所述包序号之一的序号,又包含窗口值。包长度(例如500)参照包的序号。此外,如所示的,在每个重复ACK内的窗口值(32000)保持相同,直到已经发出了三次重复ACK。即使实际的窗口值可能在第二和/或第三次重复ACK被发出之前已经增加到32500,这样的情况也会发生。
图5是描述发生在传输的数据接收端的处理的流程图。置于圆括号内 的每个块号指示当发生包的失序接收(例如对于丢失的包)时,由FRS实用工具在管理正确的窗口编号中所采取的过程步骤之一。当数据接收器接收到传输中的第一数据段时(块502),所述过程开始。数据接收器读取数据并且使用当前值设置窗口值,所述当前值被示出为“W=32000”(块504)。数据接收器然后产生ACK,将当前窗口值(W=32000)置于所述ACK内,并且发送所述ACK至数据段的标题部分内被标识的数据发送器(块506)。数据接收器还将当前窗口值存储到存储器(块508)。
当数据接收器接收到下一数据包时(块510),数据接收器在块512检查数据段是否相对于先前接收到的数据段(由数据标题内相继次序的标记所标识)被顺序地接收。在产生新的ACK之前,数据接收器检查窗口被存储的值,并且如果该值是空值或“启动/初始”值,而且接收到的包是失序的,数据接收器就使用被存储的值。如果数据段以正确的顺序次序被接收,数据接收器就处理数据并且更新当前窗口值(例如W-32,500)(块514)。然后,数据接收器产生标记有新产生的窗口值W=32500的ACK(块516)。这有效地复位了发送器内的超时计数器。
然而,如果接收到的数据段是失序的,数据接收器(a)复制先前存储的具有先前窗口值的ACK,或者产生具有先前窗口值的新的ACK(块514)。数据接收器然后发送所述ACK至数据发送器(块516)。就是说,数据接收器发送重复ACK,即具有相同窗口值和包ID的ACK。发送重复ACK的过程持续到数据发送器重传/重发丢失的数据包的另一副本并且重传的数据包在接收器处被接收。数据接收器225维持存储的窗口值的副本(或最后的重复ACK),直到正确的包被接收或者所述数据接收器被复位(块518)。一旦正确的包被接收,所述数据接收器恢复产生具有当前窗口值的新的ACK。在一个实施例中,所述数据接收器也可包括检错机制,该检错机制跟踪发出的重复ACK的数目,并且当预置阈值的重复ACK在超时期间内被接收(例如6次重复ACK)的时候,在向发送器的传输消息/信号中发出错误。
最后,重要的是,虽然本发明的说明性实施例已经并且将继续在已安 装管理软件的、全功能的计算机系统的情境中被描述,但是本领域的技术人员将认识到,本发明的说明性实施例的软件方面能够作为各种形式的程序产品被分发,并且不论用于实际执行分发的信号承载介质的特定类型,本发明的说明性实施例都同样适用。信号承载介质的例子包括诸如软盘、硬磁盘驱动器和光盘只读存储器(CD ROM)的可刻录类型的介质,以及诸如数字和模拟通信链路的传输类型的介质。
虽然本发明已经被参照优选实施例特别地示出和描述,本领域的技术人员将理解到,可以在不背离本发明的精神和范围的情况下做出形式和细节上的各种变化。