一种检测分组丢失的方法及终端与流程

文档序号:17048876发布日期:2019-03-05 19:49阅读:232来源:国知局
一种检测分组丢失的方法及终端与流程

本发明涉及网络通信领域,尤其涉及一种检测分组丢失的方法及终端。



背景技术:

在网络通信中,发送端和接收端进行分组的传送时,会存在分组丢失的情况,如果发送端判断某个分组丢失了,会进行重传。目前,判断分组丢失的方法通常有如下几种:第一种是通过重传超时定时器rto检测分组丢失,当接收端对某个分组的反馈超过rto时间时,则判断该分组丢失,并且rto会随着该分组重传次数的增加进行指数退避式的增大,这种检测算法在大多数情况下表现迟钝,影响传输的实时性以及网络的整体吞吐量;第二种是发送端连续收到三个对当前最小未确认序号分组的ack时,则标记该分组丢失,并进行快速重传,这种方法在一定程度上优于rto算法,缺点在于需要对端至少发送三个ack分组,存在一定网络消耗,并且只能用于判断最小未确认序号分组的丢失,即一次只能判断一个分组丢失,当链路丢失率较高时,检测效率低下;第三种是通过接收端反馈sack进行批量分组丢失检测,这种方法仅适用于特定场景,比如:接收端接收窗口堆积大量分组,或者分组接收状态呈现大量空洞,即分组间隔性的丢失,该方法无论从计算量还是网络流量上都需要较大的消耗,并且,当sack丢失时,性能影响加剧,因此,不能作为常态检测方法。

所以,上述检测网络通信中分组丢失的方法均存在明显的局限性,特别是在弱网络场景下,因为链路不稳定,无法及时检测分组丢失,直接影响网络传输的实时性以及吞吐量。



技术实现要素:

本发明所要解决的技术问题是:提供一种检测分组丢失的方法及终端,可一次快速检测多个分组丢失,有效减少甚至避免sack的产生,提高网络传输实时性和吞吐量。

为了解决上述技术问题,本发明采用的一种技术方案为:

一种检测分组丢失的方法,包括步骤:

s1、接收接收端反馈的信息,所述信息包括接收端未接收到分组的最小序号、接收端已接收到分组的最大序号以及所述最小序号对应的分组之后的连续n个分组的接收状态,所述n不大于所述最大序号与所述最小序号的差值;

s2、根据接收端反馈的信息,确定接收端未接收到的分组;

s3、对于每个未接收到的分组,根据所述接收端已接收到分组的最大序号与发送所述未接收到的分组时已发送分组的最大序号的差值判断所述未接收到的分组是否丢失。

为了解决上述技术问题,本发明采用的另一种技术方案为:

一种检测分组丢失的终端,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,所述处理器执行所述计算机程序时实现以下步骤:

s1、接收接收端反馈的信息,所述信息包括接收端未接收到分组的最小序号、接收端已接收到分组的最大序号以及所述最小序号对应的分组之后的连续n个分组的接收状态,所述n不大于所述最大序号与所述最小序号的差值;

s2、根据接收端反馈的信息,确定接收端未接收到的分组;

s3、对于每个未接收到的分组,根据所述接收端已接收到分组的最大序号与发送所述未接收到的分组时已发送分组的最大序号的差值判断所述未接收到的分组是否丢失。

本发明的有益效果在于:接收端反馈多个分组的接收状态以及已接收到分组的最大序号,发送端对于每个未接收到的分组,根据所述接收端已接收到分组的最大序号与发送所述未接收到的分组时已发送分组的最大序号的差值判断所述未接收到的分组是否丢失,实现一次快速检测出多个分组的丢失,使得现有技术中串行化的处理优化为并行化的处理,大大提升分组重传效率,从而使得接收端分组堆积的几率大大减少甚至长期保持在一个合理范围,因此,有效减少甚至避免sack的产生。

附图说明

图1为本发明实施例的检测分组丢失的方法的流程图;

图2为本发明实施例的检测分组丢失的终端的结构示意图;

标号说明:

1、检测分组丢失的终端;2、存储器;3、处理器。

具体实施方式

为详细说明本发明的技术内容、所实现目的及效果,以下结合实施方式并配合附图予以说明。

本发明最关键的构思在于:接收端反馈多个分组的接收状态以及已接收到分组的最大序号,发送端对于每个未接收到的分组,根据所述接收端已接收到分组的最大序号与发送所述未接收到的分组时已发送分组的最大序号的差值判断所述未接收到的分组是否丢失。

请参照图1,一种检测分组丢失的方法,包括步骤:

s1、接收接收端反馈的信息,所述信息包括接收端未接收到分组的最小序号、接收端已接收到分组的最大序号以及所述最小序号对应的分组之后的连续n个分组的接收状态,所述n不大于所述最大序号与所述最小序号的差值;

s2、根据接收端反馈的信息,确定接收端未接收到的分组;

s3、对于每个未接收到的分组,根据所述接收端已接收到分组的最大序号与发送所述未接收到的分组时已发送分组的最大序号的差值判断所述未接收到的分组是否丢失。

从上述描述可知,本发明的有益效果在于:接收端反馈多个分组的接收状态以及已接收到分组的最大序号,发送端对于每个未接收到的分组,根据所述接收端已接收到分组的最大序号与发送所述未接收到的分组时已发送分组的最大序号的差值判断所述未接收到的分组是否丢失,实现一次快速检测出多个分组的丢失,使得现有技术中串行化的处理优化为并行化的处理,大大提升分组重传效率,从而使得接收端分组堆积的几率大大减少甚至长期保持在一个合理范围,因此,有效减少甚至避免sack的产生。

进一步的,所述步骤s1中接收端反馈的信息为ack报文,所述ack报文包括一长度为n的位图,所述位图从左到右的n个bit分别表示所述最小序号对应的分组之后依次递增的n个分组的接收状态。

由上述描述可知,在接收端反馈的ack报文中增加长度为n的位图实现对多个分组的接收状态的反馈,增加了接收端一次能够反馈接收状态的分组的个数,并且位图占用空间小,能够保证ack报文不占用太大的传输空间。

进一步的,所述步骤s2具体包括:

读取ack报文中包含的接收端未接收到分组的最小序号和位图信息,根据位图信息中各bit的值确定接收端未接收到的分组。

由上述描述可知,通过读取ack报文中的接收端未接收到分组的最小序号和位图信息,能够一次性快速地确定出接收端未接收到的多个分组,效率高。

进一步的,所述步骤s3具体包括:

为每个未接收到的分组分别设置一计数器count,并设置初始值为0;

令max_ack_seq表示接收端已接收到分组的最大序号,max_seq表示发送所述未接收到的分组时已发送分组的最大序号,计算x=max_ack_seq-max_seq;

如果x>0,则令所述未接收到的分组的max_seq=max_ack_seq,所述未接收到的分组的count=count+x;

如果count大于或者等于3,则判断所述未接收到的分组丢失。

由上述描述可知,通过为每个未接收到的分组分别设置一初始值为0的计数器,并在每次接收到接收端的反馈时,对每个未接收到的分组对应的计数器进行更新,当所述计数器的值满足一经验值时,则判断对应的分组丢失,保证了分组丢失判断的高效准确性。

进一步的,所述步骤s3还包括:

如果x=0,则判断所述未接收到的分组是否为所述最小序号对应的分组,如果是,则令所述未接收到的分组的count=count+1;

如果count大于或者等于3,则判断所述未接收到的分组丢失。

由上述描述可知,当x=0时,表明进行的是分组重传,发送端并未增加新的分组的传输,采用加1的方式对count进行更新,并且是只对最小序号对应的分组的count进行更新,既能更快地判断出分组的丢失,也能保证各个分组对应的计数器值的准确性,提高判断的准确度。

请参照图2,一种检测分组丢失的终端1,包括存储器2、处理器3及存储在存储器2上并可在处理器3上运行的计算机程序,其特征在于,所述处理器3执行所述计算机程序时实现以下步骤:

s1、接收接收端反馈的信息,所述信息包括接收端未接收到分组的最小序号、接收端已接收到分组的最大序号以及所述最小序号对应的分组之后的连续n个分组的接收状态,所述n不大于所述最大序号与所述最小序号的差值;

s2、根据接收端反馈的信息,确定接收端未接收到的分组;

s3、对于每个未接收到的分组,根据所述接收端已接收到分组的最大序号与发送所述未接收到的分组时已发送分组的最大序号的差值判断所述未接收到的分组是否丢失。

从上述描述可知,本发明的有益效果在于:接收端反馈多个分组的接收状态以及已接收到分组的最大序号,发送端对于每个未接收到的分组,根据所述接收端已接收到分组的最大序号与发送所述未接收到的分组时已发送分组的最大序号的差值判断所述未接收到的分组是否丢失,实现一次快速检测出多个分组的丢失,使得现有技术中串行化的处理优化为并行化的处理,大大提升分组重传效率,从而使得接收端分组堆积的几率大大减少甚至长期保持在一个合理范围,因此,有效减少甚至避免sack的产生。

进一步的,所述步骤s1中接收端反馈的信息为ack报文,所述ack报文包括一长度为n的位图,所述位图从左到右的n个bit分别表示所述最小序号对应的分组之后依次递增的n个分组的接收状态。

由上述描述可知,在接收端反馈的ack报文中增加长度为n的位图实现对多个分组的接收状态的反馈,增加了接收端一次能够反馈接收状态的分组的个数,并且位图占用空间小,能够保证ack报文不占用太大的传输空间。

进一步的,所述步骤s2具体包括:

读取ack报文中包含的接收端未接收到分组的最小序号和位图信息,根据位图信息中各bit的值确定接收端未接收到的分组。

由上述描述可知,通过读取ack报文中的接收端未接收到分组的最小序号和位图信息,能够一次性快速地确定出接收端未接收到的多个分组,效率高。

进一步的,所述步骤s3具体包括:

为每个未接收到的分组分别设置一计数器count,并设置初始值为0;

令max_ack_seq表示接收端已接收到分组的最大序号,max_seq表示发送所述未接收到的分组时已发送分组的最大序号,计算x=max_ack_seq-max_seq;

如果x>0,则令所述未接收到的分组的max_seq=max_ack_seq,所述未接收到的分组的count=count+x;

如果count大于或者等于3,则判断所述未接收到的分组丢失。

由上述描述可知,通过为每个未接收到的分组分别设置一初始值为0的计数器,并在每次接收到接收端的反馈时,对每个未接收到的分组对应的计数器进行更新,当所述计数器的值满足一经验值时,则判断对应的分组丢失,保证了分组丢失判断的高效准确性。

进一步的,所述步骤s3还包括:

如果x=0,则判断所述未接收到的分组是否为所述最小序号对应的分组,如果是,则令所述未接收到的分组的count=count+1;

如果count大于或者等于3,则判断所述未接收到的分组丢失。

由上述描述可知,当x=0时,表明进行的是分组重传,发送端并未增加新的分组的传输,采用加1的方式对count进行更新,并且是只对最小序号对应的分组的count进行更新,既能更快地判断出分组的丢失,也能保证各个分组对应的计数器值的准确性,提高判断的准确度。

实施例一

一种检测分组丢失的方法,包括步骤:

s1、接收接收端反馈的信息,所述信息包括接收端未接收到分组的最小序号、接收端已接收到分组的最大序号以及所述最小序号对应的分组之后的连续n个分组的接收状态,所述n不大于所述最大序号与所述最小序号的差值;

其中,接收端反馈的信息为ack报文,所述ack报文包括一长度为n的位图,所述位图从左到右的n个bit分别表示所述最小序号对应的分组之后依次递增的n个分组的接收状态,即位图第一个bit表示:最小序号+1的分组的接收状态,第二个bit表示:最小序号+2的分组的接收状态,……,第n个bit表示:最小序号+n的分组的接收状态;对于bit的取值及其对应的分组的接收状态可以是:0表示未收到,1表示已收到;也可以是0表示已收到,1表示未收到,ack报文的数据格式可以是:接收端未接收到分组的最小序号(四字节)+接收端已接收到分组的最大序号(四字节)+位图长度n(一字节)+位图,n的值不宜过大,以小于32为宜;

s2、根据接收端反馈的信息,确定接收端未接收到的分组;

读取ack报文中包含的接收端未接收到分组的最小序号和位图信息,根据位图信息中各bit的值确定接收端未接收到的分组;

可以将确定出的未接收到的分组按照分组序号从小到大的顺序放入一个集合;

s3、对于每个未接收到的分组,根据所述接收端已接收到分组的最大序号与发送所述未接收到的分组时已发送分组的最大序号的差值判断所述未接收到的分组是否丢失;

其中,为每个未接收到的分组增设两个字段,一个表示接收端已接收到分组的最大序号,另一个表示发送端发送所述未接收到的分组时已发送分组的最大序号,分别用max_ack_seq,max_seq表示,其中,发送端发送所述未接收到的分组时已发送分组的最大序号在发送端发送时即有进行相应的记录,在后续第一次判断相应分组未被接收端接收时,则将记录的对应值赋值给max_seq,作为max_seq的初始值;并为每个未接收到的分组分别设置一计数器count,并设置初始值为0;

按照分组序号从小到大的顺序遍历存储有未接收到的分组的集合,对于每个遍历到的未接收到的分组,执行以下步骤:

计算x=max_ack_seq-max_seq;

如果x>0,则令所述未接收到的分组的max_seq=max_ack_seq,所述未接收到的分组的count=count+x;

如果count大于或者等于3,则判断所述未接收到的分组丢失,需要重传;

否则,不做任何处理;

如果x=0,则判断所述未接收到的分组是否为所述最小序号对应的分组,如果是,则令所述未接收到的分组的count=count+1;

如果count大于或者等于3,则判断所述未接收到的分组丢失,需要重传;

否则,不做任何处理;

如果x<0,不做任何处理;

其中,为了避免占用太多的存储空间,在未接收的分组重传之后收到接收到的确认收到的信息反馈之后,将其对应的两个字段以及计数器释放。

实施例二

一种检测分组丢失的终端1,包括存储器2、处理器3及存储在存储器2上并可在处理器3上运行的计算机程序,其特征在于,所述处理器3执行所述计算机程序时实现实施例一中的各个步骤。

综上所述,本发明提供的检测分组丢失的方法及终端,接收端反馈多个分组的接收状态以及已接收到分组的最大序号,发送端对于每个未接收到的分组,根据所述接收端已接收到分组的最大序号与发送所述未接收到的分组时已发送分组的最大序号的差值判断所述未接收到的分组是否丢失,实现一次快速检测出多个分组的丢失,使得现有技术中串行化的处理优化为并行化的处理,大大提升分组重传效率,从而使得接收端分组堆积的几率大大减少甚至长期保持在一个合理范围,因此,有效减少甚至避免sack的产生,通过设置合理的判断条件保证分组丢失检测的高效性和准确性,同时在丢失分组重传成功之后,及时对所述分组相关的存储空间进行释放,提高存储空间利用率。

以上所述仅为本发明的实施例,并非因此限制本发明的专利范围,凡是利用本发明说明书及附图内容所作的等同变换,或直接或间接运用在相关的技术领域,均同理包括在本发明的专利保护范围内。

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