《用于TCP协议的重传包丢失检测方法和装置.pdf》由会员分享,可在线阅读,更多相关《用于TCP协议的重传包丢失检测方法和装置.pdf(19页珍藏版)》请在专利查询网上搜索。
1、10申请公布号CN104104480A43申请公布日20141015CN104104480A21申请号201410375443922申请日20140731H04L1/1620060171申请人北京蓝汛通信技术有限责任公司地址100015北京市朝阳区酒仙桥北路7号电通时代广场三号楼A区72发明人李易74专利代理机构北京康信知识产权代理有限责任公司11240代理人吴贵明张永明54发明名称用于TCP协议的重传包丢失检测方法和装置57摘要本发明公开了一种用于TCP协议的重传包丢失检测方法和装置。其中,重传包丢失检测方法包括将基于TCP协议传输的发送队列中待重新发送的数据包发送至接收端,其中,接收端用于。
2、接收基于TCP协议传输的数据包;从发送队列中确定第一数据包,其中,第一数据包为未收到接收端返回第一确认信息的已重新发送过一次的数据包;检测在发送第一数据包之后是否接收到发送队列中第二数据包对应的第二确认信息,其中,第二数据包为发送队列中在第一数据包之后发送的第N个及第N个以后的任意一个数据包;以及如果检测出在发送第一数据包之后接收到第二确认信息,则确定第一数据包丢失。通过本发明,达到了及时确定丢失的重传包的效果。51INTCL权利要求书3页说明书13页附图2页19中华人民共和国国家知识产权局12发明专利申请权利要求书3页说明书13页附图2页10申请公布号CN104104480ACN104104。
3、480A1/3页21一种用于TCP协议的重传包丢失检测方法,其特征在于,包括将基于TCP协议传输的发送队列中待重新发送的数据包发送至接收端,其中,所述接收端用于接收基于TCP协议传输的数据包;从所述发送队列中确定第一数据包,其中,所述第一数据包为未收到所述接收端返回第一确认信息的已重新发送过一次的数据包,所述第一确认信息为所述接收端在接收到所述第一数据包时返回的确认信息;检测在发送所述第一数据包之后是否接收到所述发送队列中第二数据包对应的第二确认信息,其中,所述第二数据包为所述发送队列中在所述第一数据包之后发送的第N个及第N个以后的任意一个数据包,所述第二确认信息为所述接收端在接收到所述第二数。
4、据包时返回的确认信息;以及如果检测出在发送所述第一数据包之后接收到所述第二确认信息,则确定所述第一数据包丢失。2根据权利要求1所述的重传包丢失检测方法,其特征在于,所述N为系统预设值,所述N的值大于或者等于3,其中,检测在发送所述第一数据包之后是否接收到所述发送队列中第二数据包对应的第二确认信息包括查询在发送所述第一数据包之后发送的第N个数据包及所述第N个数据包之后发送的数据包;检测是否接收到所述第N个数据包及所述第N个数据包之后发送的数据包对应的确认信息。3根据权利要求2所述的重传包丢失检测方法,其特征在于,在将基于TCP协议传输的发送队列中待重新发送的数据包发送至接收端的同时,所述重传包丢。
5、失检测方法还包括记录所述发送队列中从未发送过的序号最小的数据包的序号,在查询在发送所述第一数据包之后发送的第N个数据包及所述第N个数据包之后发送的数据包之前,所述重传包丢失检测方法还包括判断在所述发送队列中所述第一数据包的发送时间之后是否存在至少N个已发送的数据包;如果判断出在所述发送队列中所述第一数据包的发送时间之后存在至少N个已发送的数据包,则判断所述至少N个数据包的前N个数据包的序号是否小于所述从未发送过的序号最小的数据包的序号,其中,如果判断出所述至少N个数据包的前N个数据包的序号均小于所述从未发送过的序号最小的数据包的序号,则查询在发送所述第一数据包之后发送的第N个数据包及所述第N个。
6、数据包之后发送的数据包。4根据权利要求1所述的重传包丢失检测方法,其特征在于,从所述发送队列中确定第一数据包包括按照发送的时间顺序对所述发送队列中所有已发送的数据包进行排序;从排序后的数据包中查询所述已重新发送过一次的数据包;以及按时间先后顺序确定所述已重新发送过一次的数据包中最先发送出去并且未接收到所述接收端返回的确认信息的数据包,将所述最先发送出去并且未接收到所述接收端返回的确认信息的数据包作为所述第一数据包。5根据权利要求4所述的重传包丢失检测方法,其特征在于,权利要求书CN104104480A2/3页3按照发送的时间顺序对所述发送队列中所有已发送的数据包进行排序之前,重传包丢失检测方法。
7、还包括记录所述所有已发送的数据包的发送时间,其中,按照记录的时间对所述所有已发送的数据包进行排序,从排序后的数据包中查询所述已重新发送过一次的数据包包括接收所述接收端返回的ACK确认包,所述ACK确认包携带有SACK选项;根据所述SACK选项标记所述发送队列中所述接收端返回的确认信息对应的数据包,将未被标记的数据包作为所述待重新发送的数据包。6一种用于TCP协议的重传包丢失检测装置,其特征在于,包括发送单元,用于将基于TCP协议传输的发送队列中待重新发送的数据包发送至接收端,其中,所述接收端用于接收基于TCP协议传输的数据包;第一确定单元,用于从所述发送队列中确定第一数据包,其中,所述第一数据。
8、包为未收到所述接收端返回第一确认信息的已重新发送过一次的数据包,所述第一确认信息为所述接收端在接收到所述第一数据包时返回的确认信息;检测单元,用于检测在发送所述第一数据包之后是否接收到所述发送队列中第二数据包对应的第二确认信息,其中,所述第二数据包为所述发送队列中在所述第一数据包之后发送的第N个及第N个以后的任意一个数据包,所述第二确认信息为所述接收端在接收到所述第二数据包时返回的确认信息;以及第二确定单元,用于如果检测出在发送所述第一数据包之后接收到所述第二确认信息,则确定所述第一数据包丢失。7根据权利要求6所述的重传包丢失检测装置,其特征在于,所述N为系统预设值,所述N的值大于或者等于3,。
9、其中,所述检测单元包括第一查询模块,用于查询在发送所述第一数据包之后发送的第N个数据包及所述第N个数据包之后发送的数据包;检测模块,用于检测是否接收到所述第N个数据包及所述第N个数据包之后发送的数据包对应的确认信息。8根据权利要求7所述的重传包丢失检测装置,其特征在于,所述重传包丢失检测装置还包括第一记录单元,用于在将基于TCP协议传输的发送队列中待重新发送的数据包发送至接收端的同时,记录所述发送队列中从未发送过的序号最小的数据包的序号;第一判断单元,用于在查询在发送所述第一数据包之后发送的第N个数据包及所述第N个数据包之后发送的数据包之前,判断在所述发送队列中所述第一数据包的发送时间之后是否。
10、存在至少N个已发送的数据包;第二判断单元,用于当判断出在所述发送队列中所述第一数据包的发送时间之后存在至少N个已发送的数据包时,判断所述至少N个数据包的前N个数据包的序号是否小于所述从未发送过的序号最小的数据包的序号,其中,第一查询模块还用于当判断出所述至少N个数据包的前N个数据包的序号均小于所述从未发送过的序号最小的数据包的序号时,查询在发送所述第一数据包之后发送的第N个数据包及所述第N个数据包之后发送的数据包。9根据权利要求6所述的重传包丢失检测装置,其特征在于,所述第一确定单元包括权利要求书CN104104480A3/3页4排序模块,用于按照发送的时间顺序对所述发送队列中所有已发送的数据。
11、包进行排序;第二查询模块,用于从排序后的数据包中查询所述已重新发送过一次的数据包;以及确定模块,用于按时间先后顺序确定所述已重新发送过一次的数据包中最先发送出去并且未接收到所述接收端返回的确认信息的数据包,将所述最先发送出去并且未接收到所述接收端返回的确认信息的数据包作为所述第一数据包。10根据权利要求9所述的重传包丢失检测装置,其特征在于,重传包丢失检测装置还包括第二记录单元,用于按照发送的时间顺序对所述发送队列中所有已发送的数据包进行排序之前,记录所述所有已发送的数据包的发送时间,其中,按照记录的时间对所述所有已发送的数据包进行排序,所述第二查询模块包括接收子模块,用于接收所述接收端返回的。
12、ACK确认包,所述ACK确认包携带有SACK选项;标记子模块,用于根据所述SACK选项标记所述发送队列中所述接收端返回的确认信息对应的数据包,将未被标记的数据包作为所述待重新发送的数据包。权利要求书CN104104480A1/13页5用于TCP协议的重传包丢失检测方法和装置技术领域0001本发明涉及互联网领域,具体而言,涉及一种用于TCP协议的重传包丢失检测方法和装置。背景技术0002传输控制协议TRANSMISSIONCONTROLPROTOCOL,TCP是一种面向连接的、可靠的、基于字节流的传输层通信协议,是许多日常应用如HTTP、FTP、SSH、SMTP等服务的底层协议基础。0003TC。
13、P的累积确认TCP传输出去的数据的每个字节通常都对应一个唯一的32比特位长度的数字。在通过TCP进行通信时,当数据包的发送端收到接收端响应的报文中携带的32比特位长度的确认序号时,则认为该确认序号以下的所有数据字节都已经被接收到了,即所谓的“累积确认”。0004TCP的SACK选项当TCP接收端收到不是按序到达的数据包时即先收到后发的数据包,接收端会立即发送携带SACK选项的确认包。该确认包的累积确认序号和上一次发送的确认包的累积确认序号相同,但该确认包携带的SACK选项中会记录刚刚收到的乱序包的起始字节的序号和结束字节的序号。发送端在收到该携带SACK信息的确认包时,就能知道当前接收端已经接。
14、收到了哪些数据包,哪些数据包还没被收到。0005TCP的发送队列TCP维护一个发送队列,该队列内包含所有已经发送出去但还没收到累积确认的数据包和等待发送出去的数据包,并且在每次收到累积确认ACK时将已经被累积确认的数据包移出该队列。0006目前,在TCP协议中对重传包即重新发送的数据包丢失检测机制例如LINUX内核是在每次重传数据包时记录从未发送过的最小序号数据包的序号。由于LINUX内核的发包是优先重传已经发送过但可能丢失的旧数据包,然后再发送从未发送过的数据包。所以,如果已经收到对重传数据包时尚未发送的数据包的SACK确认信息,而此前重传过的旧数据包还没有收到对应的确认信息,则认为该重传的。
15、数据包已经丢失,可以立即进行补传。0007如图1所示为当前TCP发送队列的状态,实线方框代表已经发送出去,但还没有收到累积确认的数据包,虚线方框代表还未发送过的数据包。此时TCP已经依据RFC6675标准的快速重传和快速恢复算法发现数据包1、2、3、4、5、6、7、8、9可能已丢失,于是立即按顺序重传数据包1、2、3、4、5、6、7、8、9,并在重传每个数据包时记录下此时从未发送过的新数据包编号,在这里是63。0008LINUX内核的发包是优先重传已经发送过但可能丢失的旧数据包,然后再发送从未发送过的新数据包。所以直到162号包没有其他需要重传的以后,TCP才会开始发送新数据包,也就是63号包。
16、。0009如果刚才重传出去的数据包1又在网络中丢失,那么必须等到63号包或者64及其上的某个包被SACK确认以后,才能判定数据包1再次丢失了。直到那时才会再次补传数据包1。说明书CN104104480A2/13页60010在现代无线大带宽网络环境比如4G网络和WIFI网络下,一方面,由于无线网络的电磁波信号易受干扰和不稳定特性,导致链路丢包率较高,所以重传的数据包又一次丢失的情况很容易出现;另一方面,在像4G和WIFI这种高速传输的大带宽网络,TCP一次就会传输几十、几百个数据包,所以其中由于丢包产生的重传包也会很多。0011以图1所示为例,在无线网络环境下,由于无线传输的高丢包率,162号数。
17、据包之间就会存在多个需要重传的数据包。由于LINUX内核会优先重传数据包,所以在真正发送63号数据包之前,还需要重传162之间所有已经丢失的数据包。所以63号包会很晚才发送出去,进而导致接收63包的确认信息时间更长,延迟了重传包丢失的检测时间。0012在大带宽网络下,重传队列内通常达到几十,甚至上百个数据包,而在高丢包网络环境下,这些数据包很可能不止一个丢失。如果等到这些丢失的数据包都重传完毕,再发送新数据包,则要在收到新数据包的确认信息时才能判定此前重传的数据包是否丢失。这样,由于无法及时确定重传的数据包是否丢失导致在该重传的数据包丢失之后,无法及时重新发送该重传的数据包。0013针对现有技。
18、术中无法及时确定重传的数据包是否丢失的问题,目前尚未提出有效的解决方案。发明内容0014本发明的主要目的在于提供一种用于TCP协议的重传包丢失检测方法和装置,以解决现有技术中无法及时确定重传的数据包是否丢失的问题。0015为了实现上述目的,根据本发明的一个方面,提供了一种用于TCP协议的重传包丢失检测方法。根据本发明的重传包丢失检测方法包括将基于TCP协议传输的发送队列中待重新发送的数据包发送至接收端,其中,接收端用于接收基于TCP协议传输的数据包;从发送队列中确定第一数据包,其中,第一数据包为未收到接收端返回第一确认信息的已重新发送过一次的数据包,第一确认信息为接收端在接收到第一数据包时返回。
19、的确认信息;检测在发送第一数据包之后是否接收到发送队列中第二数据包对应的第二确认信息,其中,第二数据包为发送队列中在第一数据包之后发送的第N个及第N个以后的任意一个数据包,第二确认信息为接收端在接收到第二数据包时返回的确认信息;以及如果检测出在发送第一数据包之后接收到第二确认信息,则确定第一数据包丢失。0016进一步地,N为系统预设值,N的值大于或者等于3,其中,检测在发送第一数据包之后是否接收到发送队列中第二数据包对应的第二确认信息包括查询在发送第一数据包之后发送的第N个数据包及第N个数据包之后发送的数据包;检测是否接收到第N个数据包及第N个数据包之后发送的数据包对应的确认信息。0017进一。
20、步地,在将基于TCP协议传输的发送队列中待重新发送的数据包发送至接收端的同时,重传包丢失检测方法还包括记录发送队列中从未发送过的序号最小的数据包的序号,在查询在发送第一数据包之后发送的第N个数据包及第N个数据包之后发送的数据包之前,重传包丢失检测方法还包括判断在发送队列中第一数据包的发送时间之后是否存在至少N个已发送的数据包;如果判断出在发送队列中第一数据包的发送时间之后存在至少N个已发送的数据包,则判断至少N个数据包的前N个数据包的序号是否小于从未发送过的序号最小的数据包的序号,其中,如果判断出至少N个数据包的前N个数据包的序说明书CN104104480A3/13页7号均小于从未发送过的序号。
21、最小的数据包的序号,则查询在发送第一数据包之后发送的第N个数据包及第N个数据包之后发送的数据包。0018进一步地,从发送队列中确定第一数据包包括按照发送的时间顺序对发送队列中所有已发送的数据包进行排序;从排序后的数据包中查询已重新发送过一次的数据包;以及按时间先后顺序确定已重新发送过一次的数据包中最先发送出去并且未接收到接收端返回的确认信息的数据包,将最先发送出去并且未接收到接收端返回的确认信息的数据包作为第一数据包。0019进一步地,按照发送的时间顺序对发送队列中所有已发送的数据包进行排序之前,重传包丢失检测方法还包括记录所有已发送的数据包的发送时间,其中,按照记录的时间对所有已发送的数据包。
22、进行排序,从排序后的数据包中查询已重新发送过一次的数据包包括接收接收端返回的ACK确认包,ACK确认包携带有SACK选项;根据SACK选项标记发送队列中接收端返回的确认信息对应的数据包,将未被标记的数据包作为待重新发送的数据包。0020为了实现上述目的,根据本发明的另一方面,提供了一种用于TCP协议的重传包丢失检测装置。根据本发明的重传包丢失检测装置包括发送单元,用于将基于TCP协议传输的发送队列中待重新发送的数据包发送至接收端,其中,接收端用于接收基于TCP协议传输的数据包;第一确定单元,用于从发送队列中确定第一数据包,其中,第一数据包为未收到接收端返回第一确认信息的已重新发送过一次的数据包。
23、,第一确认信息为接收端在接收到第一数据包时返回的确认信息;检测单元,用于检测在发送第一数据包之后是否接收到发送队列中第二数据包对应的第二确认信息,其中,第二数据包为发送队列中在第一数据包之后发送的第N个及第N个以后的任意一个数据包,第二确认信息为接收端在接收到第二数据包时返回的确认信息;以及第二确定单元,用于如果检测出在发送第一数据包之后接收到第二确认信息,则确定第一数据包丢失。0021进一步地,N为系统预设值,N的值大于或者等于3,其中,检测单元包括第一查询模块,用于查询在发送第一数据包之后发送的第N个数据包及第N个数据包之后发送的数据包;检测模块,用于检测是否接收到第N个数据包及第N个数据。
24、包之后发送的数据包对应的确认信息。0022进一步地,重传包丢失检测装置还包括第一记录单元,用于在将基于TCP协议传输的发送队列中待重新发送的数据包发送至接收端的同时,记录发送队列中从未发送过的序号最小的数据包的序号,第一判断单元,用于在查询在发送第一数据包之后发送的第N个数据包及第N个数据包之后发送的数据包之前,判断在发送队列中第一数据包的发送时间之后是否存在至少N个已发送的数据包;第二判断单元,用于当判断出在发送队列中第一数据包的发送时间之后存在至少N个已发送的数据包时,判断至少N个数据包的前N个数据包的序号是否小于从未发送过的序号最小的数据包的序号,其中,第一查询模块还用于当判断出至少N个。
25、数据包的前N个数据包的序号均小于从未发送过的序号最小的数据包的序号时,查询在发送第一数据包之后发送的第N个数据包及第N个数据包之后发送的数据包。0023进一步地,第一确定单元包括排序模块,用于按照发送的时间顺序对发送队列中所有已发送的数据包进行排序;第二查询模块,用于从排序后的数据包中查询已重新发送说明书CN104104480A4/13页8过一次的数据包;以及确定模块,用于按时间先后顺序确定已重新发送过一次的数据包中最先发送出去并且未接收到接收端返回的确认信息的数据包,将最先发送出去并且未接收到接收端返回的确认信息的数据包作为第一数据包。0024进一步地,重传包丢失检测装置还包括第二记录单元,。
26、用于按照发送的时间顺序对发送队列中所有已发送的数据包进行排序之前,记录所有已发送的数据包的发送时间,其中,按照记录的时间对所有已发送的数据包进行排序,第二查询模块包括接收子模块,用于接收接收端返回的ACK确认包,ACK确认包携带有SACK选项;标记子模块,用于根据SACK选项标记发送队列中接收端返回的确认信息对应的数据包,将未被标记的数据包作为待重新发送的数据包。0025根据本发明实施例,将基于TCP协议传输的发送队列中待重新发送的数据包发送至接收端,从发送队列中确定第一数据包即为未被确认且已经重新发送过一次的数据包,检测在发送第一数据包之后是否接收到发送队列中第二数据包的第二确认信息即第一数。
27、据包之后的第N个及第N个以后的任意一个数据包的确认信息,如果检测出在重新发送第一数据包之后接收到第二确认信息,则确定第一数据包丢失,通过增加对重传后的数据包之后的发送的数据包确认信息的检测,无需等到接收到新的数据包的确认信息时,才确定重发的数据包丢失,从而可以及时检测重传包是否丢失,解决了现有技术中无法及时确定重传的数据包是否丢失的问题,达到了及时确定丢失的重传包的效果。附图说明0026构成本申请的一部分的附图用来提供对本发明的进一步理解,本发明的示意性实施例及其说明用于解释本发明,并不构成对本发明的不当限定。在附图中0027图1是根据现有技术的发送队列的示意图;0028图2是根据本发明实施例。
28、的重传包丢失检测方法的流程图;0029图3是根据本发明实施例的发送队列的示意图;0030图4是根据本发明实施例优选的重传包丢失检测方法的流程图;以及0031图5是根据本发明实施例的重传包丢失检测装置的示意图。具体实施方式0032需要说明的是,在不冲突的情况下,本申请中的实施例及实施例中的特征可以相互组合。下面将参考附图并结合实施例来详细说明本发明。0033为了使本技术领域的人员更好地理解本发明方案,下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分的实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出。
29、创造性劳动前提下所获得的所有其他实施例,都应当属于本发明保护的范围。0034需要说明的是,本发明的说明书和权利要求书及上述附图中的术语“第一”、“第二”等是用于区别类似的对象,而不必用于描述特定的顺序或先后次序。应该理解这样使用的数据在适当情况下可以互换,以便这里描述的本发明的实施例。此外,术语“包括”和“具有”以及他们的任何变形,意图在于覆盖不排他的包含,例如,包含了一系列步骤或单元说明书CN104104480A5/13页9的过程、方法、系统、产品或设备不必限于清楚地列出的那些步骤或单元,而是可包括没有清楚地列出的或对于这些过程、方法、产品或设备固有的其它步骤或单元。0035本发明实施例提供。
30、了一种用于TCP协议的重传包丢失检测方法。0036图2是根据本发明实施例的重传包丢失检测方法的流程图。如图2所示,该重传包丢失检测方法包括步骤如下0037步骤S202,将基于TCP协议传输的发送队列中待重新发送的数据包发送至接收端。其中,接收端用于接收基于TCP协议传输的数据包。0038基于TCP协议的发送队列可以是TCP维护一个发送队列,该队列内可以包含所有已经发送出去但还没收到累积确认的数据包和等待发送出去的数据包例如已经发送却丢失的待重新发送的数据包,并且在每次收到累积确认ACK时将已经被累积确认的数据包移出该队列。同时,如果ACK确认包中包含SACK信息,则可以依据SACK信息将队列中。
31、已经被SACK确认的数据包标记为S,然后根据快速重传和快速恢复算法,将认为丢失的数据包标记为L,并等待重传。而当真正重传数据包时,将需要重传的数据包标记为R。这里的待重新发送的数据包是指在进行TCP传输时,已经发送一次却丢失的数据包,该数据包需要重新发送至接收端。接收端用于接收基于TCP协议传输的数据包。0039具体地,接收端向发送端发送数据请求,发送端响应该数据请求,并将接收端所请求的数据包通过网络发送至接收端,接收端接收到数据包之后,向发送端返回确认信息,以告知发送端已经接收到数据包。由于网络中容易受到干扰或者一些不稳定因素的影响,导致数据包丢失。此时,需要重新向接收端发送丢失的数据包。在。
32、重新发送之后,如果接收端接收到重新发送的数据包,依然会向发送端返回确认信息。0040步骤S204,从发送队列中确定第一数据包。其中,第一数据包为未收到接收端返回第一确认信息的已重新发送过一次的数据包,第一确认信息为接收端在接收到第一数据包时返回的确认信息。0041由于TCP协议中接收端接收到的并非按序发送的数据包即先发送的后接收到,后发送的先接收到,这样会导致接收端可能先收到后发送的数据包的确认信息,先发送的数据包可能是因为丢失或者是到达接收端的时间晚于后发送的数据包。从发送队列中确定第一数据包,即未接收到接收端返回确认信息且重新发送过一次的数据包,该数据包可以是重新发送过一次的数据包中最早发。
33、送但是未被确认的数据包,以便于从重新发送的数据包中按时间顺序优先判断较早发送的数据包是否再次丢失。0042步骤S206,检测在发送第一数据包之后是否接收到发送队列中第二数据包的第二确认信息。其中,第二数据包为发送队列中在第一数据包之后发送的第N个及第N个以后的的任意一个数据包,第二确认信息为接收端在接收到第二数据包时返回的确认信息。0043步骤S208,如果检测出在发送第一数据包之后接收到第二确认信息,则确定第一数据包丢失。0044在发送第一数据包之后,发送端还需要发送剩下待重新发送的数据包和新的数据包。在发送完第一数据包之后,可以对接收到的确认信息进行检测,以检测是否接收到第一数据包之后第N。
34、个及第N个以后的任意一个数据包的确认信息。其中,N为预设值,可以根据实际情况进行设置,也可以根据TCP传输协议中的属性进行设置,例如,基于TCP协议传输的数据包通常不会晚于3个以后发送的数据包,因此,这里的N值可以是大于或者等于说明书CN104104480A6/13页103的值,即第二数据包可以是第一数据包之后的第N个及第N个以后的任意一个数据包,其中,当N等于3时可以涵盖TCP中大部分的重传包丢失检测。0045具体地,在当需要检测第一数据包是否丢失时,可以检测在第一数据包之后,相隔预设值及其之后的数据包是否已经确认被接收端接收到。如图1所示,当数据包1至9为已重新发送的数据包时,首先,按照时。
35、间顺序确定数据包1为未被确认的数据包,检测数据包1是否丢失可以通过判断数据包4或者数据包4之后的数据包例如,数据包7或者数据包63、64等是否被确认,即是否接收到接收端返回的确认信息,如果是已接收到接收端返回的确认信息,则认为数据包1丢失。依次类推,判断所有已经重新发送过一次的数据包是否丢失,从而无需等到接收到新的数据包的确认信息时,才确定重发的数据包丢失。0046根据本发明实施例,将基于TCP协议传输的发送队列中待重新发送的数据包发送至接收端,从发送队列中确定第一数据包即为未被确认且已经重新发送过一次的数据包,检测在发送第一数据包之后是否接收到发送队列中第二数据包的第二确认信息即第一数据包之。
36、后的第N个及第N个以后的任意一个数据包的确认信息,如果检测出在发送第一数据包之后接收到第二确认信息,则确定第一数据包丢失,通过增加对重传数据包之后的发送的数据包确认信息的检测,无需等到接收到新的数据包的确认信息时,才确定重发的数据包丢失,从而可以及时检测重传包是否丢失,解决了现有技术中无法及时确定重传的数据包是否丢失的问题,达到了及时确定丢失的重传包的效果。0047在确定重传包丢失之后,可以立即重传丢失的重传包,也可以根据需要选择现有的TCP处理流程。0048需要说明的是,在本发明实施例的重传包丢失检测方法可以应用于有线网中数据包的传输,也可以用于无线网络中的数据包传输。由于无线网络比如2G、。
37、3G、4G、WIFI网络环境下,一方面,由于无线网络的电磁波信号易受干扰和不稳定特性,导致链路丢包率较高,所以重传的数据包又一次丢失的情况很容易出现;另一方面,在像4G和WIFI这种高速传输的大带宽网络环境中,TCP一次就会传输几十、几百个数据包,所以其中由于丢包产生的重传包也会很多,因此,本发明实施例的重传包丢失检测方法应用于无线网络其效果更加显著。0049优选地,N为系统预设值,该值大于或者等于3,其中,检测在发送第一数据包之后是否接收到发送队列中第二数据包对应的第二确认信息包括查询在发送第一数据包之后发送的第N个数据包及第N个数据包之后发送的数据包;检测是否接收到第N个数据包及第N个数据。
38、包之后发送的数据包对应的确认信息。0050在TCP协议中,通常要求先发送的数据包不晚于在其后发送的3个数据包到达接收端,当其后第3个或者3个以上中有一个数据包被确认,则很大程度上表明该先发送的数据包丢失,在确定第一数据包之后,查询第一数据包之后发送的第3个或者第3个以上的数据包,检测这些数据包中是否存在已经被确认的数据包即第二数据包可以是这些数据包中任意一个,如果存在,则确定第一数据包丢失。0051具体地,先找到最早发送、且被重传过、且没有被确认的数据包A,在如图1所示的数据包1。再找到两个在A之后发送的数据包B、C,无论是否被确认或者重传过,在这里是2、3。然后,如果能找到一个在B、C两个数。
39、据包之后发送的数据包D,且D已经被SACK确认过。在本示例中,可能是4,也可能是7或者64或者65。一旦存在符合条件的数据包D,则说明书CN104104480A107/13页11可以认为检测到数据包A已经丢失。0052根据本发明实施例,当N取值等于3时,可以覆盖TCP协议中数据包丢失的情况,同时能够进一步地提高对重传包丢失检测的及时性。0053进一步地,在将基于TCP协议传输的发送队列中待重新发送的数据包发送至接收端的同时,重传包丢失检测方法还包括记录发送队列中从未发送过的序号最小的数据包的序号。0054在发送队列中每个数据包都存在与其相应的序号,在重新发送数据包时,同时记录从未发送过的序号最。
40、小的数据包的序号,这里从未发送过的序号最小的数据包是指在发送队列中一次都未发送过但即将发送的序号最小的数据包。0055具体地,如图1所示,在发送队列中,TCP已经依据RFC6675标准的快速重传和快速恢复算法发现数据包1、2、3、4、5、6、7、8、9可能已丢失,于是立即按顺序重传数据包1、2、3、4、5、6、7、8、9,并在重传每个数据包时记录下此时从未发送过的序号最小的数据包的序号,在这里是63。0056在查询在重新发送第一数据包之后发送的第N个数据包及第N个数据包之后发送的数据包之前,重传包丢失检测方法还包括判断在发送队列中第一数据包的发送时间之后是否存在至少N个已发送的数据包;如果判断。
41、出在发送队列中第一数据包的发送时间之后存在至少N个已发送的数据包,则判断至少N个数据包的前N个数据包的序号是否小于从未发送过的序号最小的数据包的序号,其中,如果判断出至少N个数据包的前N个数据包的序号均小于从未发送过的序号最小的数据包的序号,则查询在发送第一数据包之后发送的第N个数据包及第N个数据包之后发送的数据包。0057由于在检测第一数据包是否丢失时,第一数据包之后的数据包的个数可能存在小于N的情况,也或者重传包的个数小于N,在查询在重新发送第一数据包的发送时间之后发送的第N个数据包及第N个数据包之后发送的数据包之后,可以判断第一数据包之后的是否还存在至少N个数据包,如果不存在,则可以采用。
42、现有的检测流程;如果存在,则进一步判断,判断这些数据包中前N个数据包的序号是否小于从未发送的序号最小的数据包的序号,如果前N个数据包的序号均小于该序号,则可以做进一步检测;反之,则可以采用现有的检测流程进行检测。0058由于现有技术中必须使用新的数据包才能检测到重传包的丢失,而本发明实施例中,则只要存在重传的数据包之后发送的N个数据包就可以检测,无论是否是新数据包。本发明实施例的重传包丢失检测方法可以跟现有的TCP流程相结合,共同对重传包丢失进行检测,具体地,可以分以下几种情况1如果存在新的数据包,而丢包之后发送的数据包又不足N个时,可以使用现有的算法检测;2如果不存在新的数据包时,丢包之后发。
43、送的数据包又足够N个时,此时现有算法无法检测到丢包,却可以使用本发明实施例的检测方法;3如果不存在新的数据包,丢包之后发送的数据包又不足N个时,此时无法检测到丢失;4如果存在新数据包,丢包之后发送的数据包又足够N个时,此时哪种算法首先满足则使用哪种算法检测丢包。综上,在现有算法不能检测时,可以使用新算法检测,通过综合现有算法和新算法,较现有单一方案而言能在更多情况下能检测到丢包事件。0059优选地,从发送队列中确定第一数据包包括按照发送的时间顺序对发送队列中所有已发送的数据包进行排序;从排序后的数据包中查询已重新发送过一次的数据包;以说明书CN104104480A118/13页12及按时间先后。
44、顺序确定已重新发送过一次的数据包中最先发送出去并且未接收到接收端返回的确认信息的数据包,将最先发送出去并且未接收到接收端返回的确认信息的数据包作为第一数据包。0060具体地,对发送队列中所有已发送的数据包进行排序,将当前发送队列中已经发送的数据包按实际的发送时间排序,最早发送的在前,最晚发送的在后,例如,对于图1中存在的数据包,按照数据包的顺序应该是1、2、3、4、562、63、64、65的顺序,但现在按照发送时间排序,于是变为1、2、3、4、562、1、2、3、4、5、6、7、8、9、63、64、65的顺序,如图3所示。由于重传的数据包中数据包1为最先发送的数据包,如果数据包1未被确认,则将。
45、数据包1作为第一数据包;反之,如果数据包1已经被确认,则判断数据包2是否被确认,数据包2未被确认则将数据包2作为第一数据包,依次类推,直到检测完所有重传的数据包为止。0061根据本发明实施例,按照时间顺序,依次将重传的数据包中较先发送且未被确认的数据包作为第一数据包进行判断,从而可以每次检测的都是未确认的数据包中最先发送的数据包。0062进一步地,在按照发送的时间顺序对发送队列中所有已发送的数据包进行排序之前,本发明实施例的重传包丢失检测方法还包括记录所有已发送的数据包的发送时间,其中,对已发送的数据包进行排序可以是按照记录的时间对所有已发送的数据包进行排序。0063从排序后的数据包中查询已重。
46、新发送过一次的数据包包括接收接收端返回的ACK确认包,该ACK确认包携带有SACK选项;根据SACK选项标记发送队列中接收端返回的确认信息对应的数据包进行标记,将未被标记的数据包作为待重新发送的数据包。0064在每次TCP发包时,无论是重传还是发新数据包,都记录当前发送时间。在TCP每次收到ACK确认时,在TCP依据确认包中的SACK选项将发送队列中的对应的数据包标记为SACK确认。具体地,如果ACK确认包携带有SACK选项,则可以依据SACK选项将队列中已经被SACK确认的数据包标记为S,然后根据快速重传和快速恢复算法,将认为丢失的数据包标记为L,并等待重传。0065本发明实施例的重传包丢失。
47、检测方法可以是在现有TCP流程的基础上增加一种新的重传包丢失检测算法,不需要对包括已经提到的LINUX现存的重传包丢包检测算法在内的流程进行修改。0066如图4所示,图4左边所示的是现有的LINUX内核的TCP主要的流程TCP收到ACK确认包后,依据ACK确认包中的信息移除已被确认的数据包,并根据SACK信息标记发送队列中的数据包。随后将被标记为丢失的数据包重传出去。0067图4右侧所示的为本发明实施例的重传包丢失检测算法流程。0068在每次TCP发包时,无论是重传还是发新数据包,都记录当前发送时间。在TCP每次收到ACK确认时,TCP依据确认包中的SACK信息将发送队列中的对应的数据包标记为。
48、SACK确认。0069将当前发送队列中已经发送的数据包按实际的发送时间排序,最早发送的在前,最晚发送的在后,例如,对于图1中存在的数据包,按照数据包的顺序应该是1、2、3、4、562、63、64、65的顺序,但现在按照发送时间排序,于是变为1、2、3、4、562、1、2、3、4、5、6、7、8、9、63、64、65的顺序,如图3所示。0070然后,找到最早发送、且被重传过、且没有被确认的数据包A,在这里是数据包1。说明书CN104104480A129/13页13再找到两个在A之后发送的数据包B、C,无论是否被确认或者重传过,在这里是2、3。0071最后,如果能找到一个在B、C两个数据包之后发送。
49、的数据包D,且D已经被SACK确认过。在本示例中,可能是4,也可能是7或者64或者65。一旦存在符合条件的数据包D,则可以认为检测到数据包A已经丢失。0072本发明实施例还提供了一种重传包丢失检测装置。该装置可以通过计算机设备实现其功能。需要说明的是,本发明实施例的重传包丢失检测装置可以用于执行本发明实施例所提供的重传包丢失检测方法,本发明实施例的重传包丢失检测方法也可以通过本发明实施例所提供的重传包丢失检测装置来执行。0073图5是根据本发明实施例的重传包丢失检测装置的示意图。如图5所示,该重传包丢失检测装置包括发送单元10、第一确定单元20、检测单元30和第二确定单元40。0074发送单元10用于将基于TCP协议传输的发送队列中待重新发送的数据包发送至接收端,其中,接收端用于接收基于TCP协议传输的数据包。0075基于TCP协议的发送队列可以是TCP维护一个发送队列,该队列内可以包含所有已经发送出去但还没收到累积确认的数据包和等待发送出去的数据包例如已经发送却丢失的待重新发送的数据包,并且在每次收到累积确认ACK时将已经被累积确认的数据包移出该队列。同时,如果ACK确认包中包含SACK信息,则可以依据SACK信息将队列中已经被SACK确认的数据包标记为S,然后根据快速重传和快速恢复算法,将认为丢失的数据包标记为L,并等待重传。而当真正重传数据包时,将需要重传的数据包标。