专利名称:一种用于Semi-TCP的自适应确认分组延迟发送的方法
技术领域:
本发明涉及多跳无线网络的TCP(Transmission Control Protocol)技术领域,具体涉及一种用于kmi-TCP的自适应确认分组延迟发送的方法。
背景技术:
不同于传统有线网络,在多跳无线网络中,TCP丢包除了由网络拥塞引起之外,许多非网络拥塞因素也会造成数据包的丢失或损坏,如信道质量的不稳定性、无线信道的竞争性、节点的移动性和能供的波动性以及用户的行为等。这些因素常常会导致TCP层对网络的拥塞状况做出误判,并错误地触发了相应的拥塞控制机制来降低发送窗口,造成网络性能的下降。为此,研究人员提出了许多关于多跳无线网络中TCP的改进方案,但是这些方案仍然依赖传统TCP层来控制网络拥塞,无法彻底解决上述问题。最近所提出的kmi-TCP方案将传统TCP的功能进行了重新分配,在传输层只保留原TCP中的可靠性控制,将拥塞控制下放到低层。因为低层比传输层能更准确和更迅速地了解网络的拥塞状况,并能及时地对拥塞进行控制。这样做使得源节点不仅能避免拥塞误判,而且可以更快地解除拥塞。对于多跳无线网络而言,可由介质访问控制协议(Media Access Control-MAC)层具体实现逐跳拥塞控制。同时,因为此时传输层已不再负责拥塞控制,TCP的拥塞窗口也可以被取消,所以在端到端可靠性控制方面,我们可以摆脱TCP拥塞窗口的约束。这是因为在传统TCP中,端到端的可靠性控制是通过ACK机制来实现的,ACK 机制是和拥塞控制机制捆绑在一起的;而在kmi-TCP中,由于拥塞控制和端到端可靠性控制的分离,我们可以为端到端可靠性控制设立一个专门的ACK机制,来提高传输的效率。在多跳无线网络中,如果仍然采用传统TCP的ACK机制,Semi-TCP同样会存在节点对无线信道的激烈竞争的问题,主要表现在正向TCP数据分组流和反向确认分组(ACK)流之间的竞争。其具体缘由如下由于kmi-TCP在无线网络中可将拥塞控制功能下放到MAC层,并通过RTS/CTS握手机制(RTS全称为Request-to-SencbCTS全称为Clear-tolend)及其变体来携带拥塞指示信息。一旦节点判断自身处于拥塞,它会将拥塞信息通告给邻居节点,使得处于该拥塞节点周围的节点都需要等待和退避。在这种情况下,反向的ACK分组可能因为竞争激烈而得不到及时转发,最终使得源节点重传定时器超时(Retransmission Timeouts,RT0),并触发数据包重传,造成带宽的浪费。另一方面,反向ACK分组甚至可能因为多次发送失败,而被丢弃,最终触发源节点或目的节点重新发起路由建立的进程,这对网络性能的所造成的负面影响会更加明显。同时传统TCP的ACK机制使用了重复ACK,一旦网络发生丢包情况,目的节点就会发送大量的重复ACK分组,会进一步加剧无线信道的竞争。由于义时-^^并不依赖于这些反向重复ACK来进行拥塞控制,因此此时再发送大量的ACK只会造成网络资源浪费,严重影响TCP流的吞吐量。本专利针对上述问题提出了一种用于多跳无线网络中的kmi-TCP的确认机制, 该机制能够根据网络拥塞情况自适应地延迟ACK的发送,明显降低反向流分组的发送数量,进一步提高了 kmi-TCP的性能。
发明内容
本发明针对现有多跳无线网络的TCP技术所存在的缺陷和不足,而提供一种用于 kmi-TCP的自适应确认分组延迟发送的方法。该方法基于选择性确认方法(SACK),能自适应决定延迟ACK的发送时间。本发明通过延迟ACK的发送时间,压缩ACK分组的发送数量, 从而减小反向流对无线信道的竞争;同时目的节点只在能够回复序号更新的ACK分组时, 才进行ACK延迟,消除了反向重复ACK的发送,进一步降低了流间竞争,提高了正向TCP流的吞吐量;本发明还将延迟ACK与SACK机制相结合,并加以改进,既提高了源节点TCP分组的确认率,也减少了因引入SACK而带来的开销。为了达到上述目的,本发明采用如下的技术方案一种用于kmi-TCP的自适应确认分组延迟发送的方法,该方法包括如下步骤(1)当kmi-TCP目的节点收到一个TCP分组后,节点首先判断自身是否已经处于延迟回复ACK状态,如果目的节点处于非延迟回复状态,而且当前收到的分组是目的节点期望收到的下一个TCP分组,那么目的节点通过检查接收缓存中TCP序号的连续情况,计算出延迟回复的时间间隔,即延迟ACK发送时间间隔,开启定时器;否则保持节点当前状态, 不回复ACK ;(2)当目的节点延迟回复时间超时后,节点根据此时TCP的序号情况,生成含有 SACK选项的ACK分组,传递丢包信息,在不超过TCP选项头字节数限制的前提下,将接收缓存中不连续的TCP块边界相对ACK包头中确认的TCP序号的偏移值依次填入;在成功发送含有SACK选项的ACK分组后,目的节点由延迟状态重新恢复到非延迟回复状态;(3)在kmi-TCP源节点收到含有SACK选项的ACK分组后,根据其ACK分组头中确认的TCP序号及SACK选项中的相对偏移序号,计算出目的节点已确认收到的TCP块;将这些已确认的TCP分组从源节点的发送缓存中清除;接着,kmi-TCP源节点优先发送这些未被确认的TCP分组;(4) Semi-TCP源节点如果在RTO超时前,没有收到ACK分组的回复,等到RTO超时后,立即重传未回复的TCP分组。在本发明的实例中,所述步骤(1)中延迟ACK发送时间间隔的确定,通过如下方式实现目的节点首先确定一个初始的延迟ACK发送时间间隔;然后根据TCP选项头字节数的限制和块边界序号所占用的字节数,决定一个SACK选项头所能表示的不连续块的最大个数;如果当前接收缓存中的TCP不连续块的个数不大于之前所计算的最大个数,即目前的不连续块可以通过一个ACK分组全部通告,那么将延迟ACK的发送时间设得比初始时间间隔大;否则,有以下两个选项(1)将延迟ACK时间间隔设得比初始时间间隔小,⑵不延迟,直接回复。进一步的,所述初始延迟时间间隔可以通过如下两种方式确定(1)源节点和目的节点在建立TCP连接的时候,双方根据各自的TCP缓存情况协商确定,如果双方缓存空间都比较大,那么可以将初始延迟时间间隔设得较大;否则可以设一个比较小的值;(2)由目的节点自身的状况来确定,目的节点可以依据自身的MAC层和网络层队列占用情况来调整初始延迟时间间隔;当队列长度较长时,可将初始延迟时间间隔设得较大;否则设为一个较小的值。相对于现有技术,本发明具有如下优点和有益效果1、在现有技术中,Semi-TCP会对每个顺序收到的TCP分组单独生成ACK回复。但是对于kmi-TCP来说,源节点并不依赖于收到ACK分组来调整发送窗口,也不需要用拥塞窗口来控制拥塞,ACK分组在这里仅起到可靠性控制的作用,kmi-TCP的发包速率仅取决于源节点的MAC缓存占用情况。所以本发明通过采用延迟回复ACK的方式,能够明显压缩 ACK分组的数量,降低网络的竞争,提高正向TCP流的吞吐量性能。2、在传统的TCP中,拥塞控制的功能主要依赖目的节点发送重复ACK分组来实现。 目的节点在收到失序的TCP分组后,依据其期望收到的分组序号产生重复ACK分组;源节点收到多个重复序号的ACK分组后,减小拥塞窗口。而在kmi-TCP中,拥塞控制功能是通过 MAC层的RTS/CTS握手机制来实现的。也就是说,kmi-TCP源节点不再依赖于反向的重复 ACK来调整发送窗口,那么在kmi-TCP方案中取消反向重复ACK是合理的。更为重要的是, 多跳无线网络是一种媒质共享的网络,正向TCP流和反向ACK流经常需要竞争同一个信道, 所以减少重复ACK的发送,进而减少反向ACK流,能够明显降低流间的竞争和网络的拥塞, 提高TCP流的吞吐量。本发明使得目的节点仅处在空闲状态,且当前收到的分组是目的节点期望收到的下一个TCP分组时,才开始延迟回复,从而避免重复ACK的产生。3、将延迟ACK与SACK机制相结合,使延迟分组回复时间设置与目的节点接收缓存连续性相关,从而使得ACK的发送能够自适应网络拥塞情况。目的节点根据SACK选项头所能表示的不连续块的最大个数和当前接收缓存中的不连续块个数,确定延迟回复时间间隔。这样能够根据当前丢包情况,来调整延迟时间。当网络拥塞较严重时,丢包情况也较为严重,将延迟时间间隔设得较小;当网络拥塞较轻时,丢包情况也相对较少,将延迟时间间隔设得较大。4、改进SACK帧结构,压缩指示块边界的字节数。在现有技术中,向SACK选项头填入的是TCP块边界序号的实际值,这通常会占用较多的字节。本发明通过对SACK帧结构加以改进,在SACK选项头中填入的是相对于ACK包头中确认的TCP分组序号的偏移值,从而压缩了指示块边界的字节数。这样既减少了因引入SACK带来的开销,又使得TCP选项头能够容纳更多边界块,减少目的节点发送SACK分组的数量。
以下结合附图和具体实施方式
来进一步说明本发明。
图1为本发明任意一对kmi-TCP源节点和目的节点的数据发送和接收示意图;图2为本发明目的节点接收到一个ACK分组后的处理流程图;图3为本发明目的节点确定延迟回复时间间隔T的流程图;图4为本发明SACK修改后的帧结构。
具体实施例方式为了使本发明实现的技术手段、创作特征、达成目的与功效易于明白了解,下面结合具体图示,进一步阐述本发明。
本发明为避免现有方案中重复ACK的发送,降低了反向ACK流与正向TCP流的竞争,其方案中目的节点仅在所收到的TCP分组是期望收到的下一个分组时,才延迟ACK的发送时间;在延迟时间超时后,目的节点回复ACK,从而保证每一次定时器超时后,回复的ACK 分组的序号都比之前的分组的序号更新;否则目的节点既不进行回复,也不延迟ACK的发送时间。基于上述原理,本发明的具体方案如下首先,当kmi-TCP目的节点收到一个TCP分组后,节点首先判断自身是否已经处于延迟回复ACK状态,如果目的节点处于非延迟回复状态,而且当前收到的分组是目的节点期望收到的下一个TCP分组,那么目的节点通过检查接收缓存中TCP序号的连续情况, 计算出延迟回复的时间间隔,即延迟ACK发送时间间隔,开启定时器;否则保持节点当前状态,不回复ACK。其中,延迟ACK发送时间间隔的确定,通过如下方式实现目的节点首先确定一个初始的延迟ACK发送时间间隔。然后根据TCP选项头字节数的限制和块边界序号所占用的字节数,决定一个SACK选项头所能表示的不连续块的最大个数。如果当前接收缓存中的 TCP不连续块的个数不大于之前所计算的最大个数,即目前的不连续块可以通过一个ACK 分组全部通告,那么将延迟ACK的发送时间设得比初始时间间隔大;否则,有以下两个选项(1)将延迟ACK时间间隔设得比初始时间间隔小,⑵不延迟,直接回复。初始延迟时间间隔可以通过如下两种方式确定(1)源节点和目的节点在建立 TCP连接的时候,双方根据各自的TCP缓存情况协商确定,如果双方缓存空间都比较大,那么可以将初始延迟时间间隔设得较大;否则可以设一个比较小的值;⑵由目的节点自身的状况来确定。目的节点可以依据自身的MAC层和网络层队列占用情况来调整初始延迟时间间隔;当队列长度较长时,可将初始延迟时间间隔设得较大;否则设为一个较小的值。接着,当目的节点延迟回复时间超时后,节点根据此时TCP的序号情况,生成含有 SACK选项的ACK分组,传递丢包信息。在不超过TCP选项头字节数限制的前提下,将接收缓存中不连续的TCP块边界相对ACK包头中确认的TCP序号的偏移值依次填入。在成功发送 SACK分组后,目的节点由延迟状态重新恢复到非延迟回复状态。再者,在kmi-TCP源节点收到含有SACK选项的ACK分组后,根据其ACK分组头中确认的TCP序号及SACK选项中的相对偏移序号,计算出目的节点已确认收到的TCP块;将这些已确认的TCP分组从源节点的发送缓存中清除。接着,Semi-TCP源节点优先发送这些未被确认的TCP分组。最后,Semi-TCP源节点如果在RTO超时前,没有收到ACK分组的回复,等到RTO超时后,立即重传未回复的TCP分组。基于上述方案形成的用于kmi-TCP的自适应确认分组延迟发送,其具体实施过程如下(如图1所示)1、该实例中为了时间延迟能够实现,在目的节点设置了一个延迟回复定时器,用来具体实施延迟一定时间间隔。定时器分为两种状态忙碌状态和空闲状态。当定时器正处于延迟状态时,定时器称为忙碌状态,或者开启状态;否则称为空闲状态,或者关闭状态。如图2所示,当kmi-TCP目的节点收到一个TCP分组后,如果目的节点的定时器已经开启,即处于忙碌状态,那么目的节点不会干扰当前定时器的操作,仅仅将该分组存入接收缓存。如果此时目的节点的定时器处于空闲状态,那么还需要判断,依据此分组能否产生序号更新的ACK分组。为此,目的节点需要将收到的TCP分组的序号和目的节点到目前为止已经确认的最大序号进行比较。如果两者相等,则当前收到的分组恰为目的节点期望收到的下一个分组,计算出具体延迟时间T,开启定时器延迟时间T,最后将该分组存入接收缓存;如果当前分组序号大于期望收到的分组的序号,表明该分组之前的分组存在丢包或者失序的现象, 故保持定时器空闲状态,并且将该分组存入接收缓存;如果当前分组序号小于期望收到的分组的序号,表明是一个重复分组,此时目的节点直接将该分组丢弃,保持定时器空闲状态。2、在定时器超时后,Semi-TCP目的节点根据此时接收缓存的情况,回复ACK分组。 将连续TCP分组的最大序号写入ACK包头,把不连续块的情况写入SACK选项头。之后,目的节点把ACK包头中已经确认的TCP分组及序号在其之前的分组,交给应用层相关进程。参见图3,为了确定具体的延迟时间间隔T,其涉及到四个与此相关的值,分别是初始延迟时间间隔Ttl、扩展延迟时间tick、SACK选项头所能表示的不连续块的最大个数Ntl 和不进行延迟回复的不连续块个数阈值Nth。其中初始延迟时间间隔Ttl,是指每次进行延迟计算时的基本延迟时间,最终得到的延迟时间结果会在此基础上进行变动。Ttl的值可以通过如下两种方式确定(1)源节点和目的节点在建立TCP连接的时候,双方根据各自的TCP缓存情况确定协商。首先,在建立连接阶段双方都可以依据TCP分组携带的时间戳计算出 RTT (Round-Trip Time)的值。然后,源节点和目的节点还需要考虑各自的缓存承受能力,设源节点和目的节点最大缓存分组个数分别为Ll和L2。因此源节点和目的节点最终通过协商,会将初始延迟时间间隔Ttl设为=Ttl = min{Ll, L2}*RTT,其中min操作表示计算多个数中的最小值。(2)只根据目的节点自身的网络状况来确定,即目的节点根据自身的MAC层和网络层队列占用情况来设置初始延迟时间间隔,设Lm和Ln分别表示MAC层、网络层队列长度,B表示平均每个分组的字节数,R表示链路带宽,那么可以将初始延迟时间间隔Ttl设为 T0 = (Lm+Ln)*B/R。对于扩展延迟时间tick,tick用在不连续块个数较少的情况下,用来增加延迟的时间,这样可以提高每次发送SACK分组的效率。但是tick的值通常不能设得过大,因为如果延迟过大会造成源节点RTO超时,重传分组,造成了不必要的带宽浪费,该实例中可以将 tick 设为(1/4 1/8) *T0o对于SACK选项头所能表示的不连续块的最大个数Ntl,因为TCP选项头字节数有限制,所以SACK选项头只能写入一定个数的不连续块。设TCP选项头最大字节数为Bmax,每个不连续块的边界需要用L字节表示,又因为每个TCP块有左右两个边界,所以表示一个完整的TCP块需要2L字节。因此最大不连续块的个数Ntl可按照如下方式计算=Ntl = Bmax/ (2*L)。对于不延迟回复的最大不连续块个数Nth,当目的节点准备延迟回复时,可能已经存在太多的不连续块,需要发送多个SACK分组才能通告完所有丢包。如果此时进行延迟, 会使得kmi-TCP源节点需要多个RTT才能完全掌握所有丢包情况,所以目的节点应该及时通知源节点丢包情况。如果当前不连续块个数大于等于Nth时,不再进行延迟回复。Nth的值通常可以取为2 4个Ntl。为了计算出每次延迟回复的时间间隔T,可按照图3所示的流程进行首先,目的节点首先检查当前接收缓存中不连续块的个数N。然后,判断N与队、Nth的关系。当N小于Ntl时,表示目的节点的不连续块个数较少,也就是TCP分组丢失较少,那么设置T = Το+tick ;当N的值超过Ntl,但是小于时,设置τ = T0/(2N/N0);当N的值大于等于Nth时,不再进行延迟回复,表示有过多的TCP分组丢失的情况,此时应通知源节点尽快重传众多丢包,所以设置T = 0。参见图4,该实例中为了压缩指示块边界的字节数,在TCP选项头中类型字段填入的是指明选项头采用SACK方案的值,在长度字段填入的是不连续块的个数。之后的字段依次写入的是每个SACK块左右边界相对ACK包头中确认的TCP分组序号的偏移值。以上显示和描述了本发明的基本原理、主要特征和本发明的优点。本行业的技术人员应该了解,本发明不受上述实施例的限制,上述实施例和说明书中描述的只是说明本发明的原理,在不脱离本发明精神和范围的前提下,本发明还会有各种变化和改进,这些变化和改进都落入要求保护的本发明范围内。本发明要求保护范围由所附的权利要求书及其等效物界定。
8
权利要求
1.一种用于kmi-TCP的自适应确认分组延迟发送的方法,其特征在于,所述方法包括如下步骤(1)ikmi-TCP目的节点收到一个TCP分组后,节点首先判断自身是否已经处于延迟回复ACK状态,如果目的节点处于非延迟回复状态,而且当前收到的分组是目的节点期望收到的下一个TCP分组,那么目的节点通过检查接收缓存中TCP序号的连续情况,计算出延迟回复的时间间隔,即延迟ACK发送时间间隔,开启定时器;否则保持节点当前状态,不回复 ACK ;(2)当目的节点延迟回复时间超时后,节点根据此时TCP的序号情况,生成含有SACK 选项的ACK分组,传递丢包信息,在不超过TCP选项头字节数限制的前提下,将接收缓存中不连续的TCP块边界相对ACK包头中确认的TCP序号的偏移值依次填入;在成功发送含有 SACK选项的ACK分组后,目的节点由延迟状态重新恢复到非延迟回复状态;(3)在kmi-TCP源节点收到含有SACK选项的ACK分组后,根据其ACK分组头中确认的TCP序号及SACK选项中的相对偏移序号,计算出目的节点已确认收到的TCP块;将这些已确认的TCP分组从源节点的发送缓存中清除;接着,kmi-TCP源节点优先发送这些未被确认的TCP分组;(4)Semi-TCP源节点如果在RTO超时前,没有收到ACK分组的回复,等到RTO超时后,立即重传未回复的TCP分组。
2.根据权利要求1所述的一种用于kmi-TCP的自适应确认分组延迟发送的方法,其特征在于,所述步骤(1)中延迟ACK发送时间间隔的确定,通过如下方式实现目的节点首先确定一个初始的延迟ACK发送时间间隔;然后根据TCP选项头字节数的限制和块边界序号所占用的字节数,决定一个SACK选项头所能表示的不连续块的最大个数;如果当前接收缓存中的TCP不连续块的个数不大于之前所计算的最大个数,即目前的不连续块可以通过一个ACK分组全部通告,那么将延迟ACK的发送时间设得比初始时间间隔大;否则,有以下两个选项(1)将延迟ACK时间间隔设得比初始时间间隔小,(2)不延迟,直接回复。
3.根据权利要求2所述的一种用于kmi-TCP的自适应确认分组延迟发送的方法,其特征在于,所述初始延迟时间间隔可以通过如下两种方式确定(1)源节点和目的节点在建立TCP连接的时候,双方根据各自的TCP缓存情况协商确定,如果双方缓存空间都比较大,那么可以将初始延迟时间间隔设得较大;否则可以设一个比较小的值;(2)由目的节点自身的状况来确定,目的节点可以依据自身的MAC层和网络层队列占用情况来调整初始延迟时间间隔;当队列长度较长时,可将初始延迟时间间隔设得较大; 否则设为一个较小的值。
全文摘要
本发明公开了一种用于Semi-TCP的自适应确认分组延迟发送的方法,该方法让使用Semi-TCP的目的节点在收到TCP分组后,根据数据分组的确认状态,自适应地决定所收数据分组的确认包发送的时间,从而压缩ACK分组的发送数量,取消重复ACK的发送,降低正反向数据流对无线信道的竞争;确认状态是指由下列参数所描述的状态目的节点接收缓存中分组的连续性、选择性确认(SACK)包头所能容纳的最大块边界个数以及所设置的发送ACK的时间间隔等。同时该方法对传统SACK包头进行了改进,使用相对偏移量来标记不连续TCP块边界序号,从而既提高了Semi-TCP源节点分组的确认率,并减少了因引入SACK而带来的开销。
文档编号H04W28/02GK102413503SQ20111044556
公开日2012年4月11日 申请日期2011年12月27日 优先权日2011年12月27日
发明者姜胜明, 官权升, 毛华超, 王晓峰, 郭秉义 申请人:上海海事大学