用于tcp协议的重传包丢失检测方法和装置制造方法
【专利摘要】本发明公开了一种用于TCP协议的重传包丢失检测方法和装置。其中,重传包丢失检测方法包括:将基于TCP协议传输的发送队列中待重新发送的数据包发送至接收端,其中,接收端用于接收基于TCP协议传输的数据包;从发送队列中确定第一数据包,其中,第一数据包为未收到接收端返回第一确认信息的已重新发送过一次的数据包;检测在发送第一数据包之后是否接收到发送队列中第二数据包对应的第二确认信息,其中,第二数据包为发送队列中在第一数据包之后发送的第N个及第N个以后的任意一个数据包;以及如果检测出在发送第一数据包之后接收到第二确认信息,则确定第一数据包丢失。通过本发明,达到了及时确定丢失的重传包的效果。
【专利说明】用于TCP协议的重传包丢失检测方法和装置
【技术领域】
[0001] 本发明涉及互联网领域,具体而言,涉及一种用于TCP协议的重传包丢失检测方 法和装置。
【背景技术】
[0002] 传输控制协议(Transmission Control Protocol,TCP)是一种面向连接的、可靠 的、基于字节流的传输层通信协议,是许多日常应用如HTTP、FTP、SSH、SMTP等服务的底层 协议基础。
[0003] TCP的累积确认:TCP传输出去的数据的每个字节通常都对应一个唯一的32比特 位长度的数字。在通过TCP进行通信时,当数据包的发送端收到接收端响应的报文中携带 的32比特位长度的确认序号时,则认为该确认序号以下的所有数据字节都已经被接收到 了,即所谓的"累积确认"。
[0004] TCP的SACK选项:当TCP接收端收到不是按序到达的数据包时(即先收到后发的 数据包),接收端会立即发送携带SACK选项的确认包。该确认包的累积确认序号和上一次 发送的确认包的累积确认序号相同,但该确认包携带的SACK选项中会记录刚刚收到的乱 序包的起始字节的序号和结束字节的序号。发送端在收到该携带SACK信息的确认包时,就 能知道当前接收端已经接收到了哪些数据包,哪些数据包还没被收到。
[0005] TCP的发送队列:TCP维护一个发送队列,该队列内包含所有已经发送出去但还没 收到累积确认的数据包和等待发送出去的数据包,并且在每次收到累积确认(ACK)时将已 经被累积确认的数据包移出该队列。
[0006] 目前,在TCP协议中对重传包(即重新发送的数据包)丢失检测机制例如Linux 内核是在每次重传数据包时记录从未发送过的最小序号数据包的序号。由于Linux内核的 发包是优先重传已经发送过但可能丢失的旧数据包,然后再发送从未发送过的数据包。所 以,如果已经收到对重传数据包时尚未发送的数据包的SACK确认信息,而此前重传过的旧 数据包还没有收到对应的确认信息,则认为该重传的数据包已经丢失,可以立即进行补传。
[0007] 如图1所示为当前TCP发送队列的状态,实线方框代表已经发送出去,但还没有收 到累积确认的数据包,虚线方框代表还未发送过的数据包。此时TCP已经依据RFC6675标 准的快速重传和快速恢复算法发现数据包1、2、3、4、5、6、7、8、9可能已丢失,于是立即按顺 序重传数据包1、2、3、4、5、6、7、8、9,并在重传每个数据包时记录下此时从未发送过的新数 据包编号,在这里是63。
[0008] Linux内核的发包是优先重传已经发送过但可能丢失的旧数据包,然后再发送从 未发送过的新数据包。所以直到1?62号包没有其他需要重传的以后,TCP才会开始发送 新数据包,也就是63号包。
[0009] 如果刚才重传出去的数据包1又在网络中丢失,那么必须等到63号包或者64及 其上的某个包被SACK确认以后,才能判定数据包1再次丢失了。直到那时才会再次补传数 据包1。
[0010] 在现代无线大带宽网络环境(比如4G网络和Wi-Fi网络)下,一方面,由于无线 网络的电磁波信号易受干扰和不稳定特性,导致链路丢包率较高,所以重传的数据包又一 次丢失的情况很容易出现;另一方面,在像4G和Wi-Fi这种高速传输的大带宽网络,TCP - 次就会传输几十、几百个数据包,所以其中由于丢包产生的重传包也会很多。
[0011] 以图1所示为例,在无线网络环境下,由于无线传输的高丢包率,1?62号数据包 之间就会存在多个需要重传的数据包。由于Linux内核会优先重传数据包,所以在真正发 送63号数据包之前,还需要重传1?62之间所有已经丢失的数据包。所以63号包会很晚 才发送出去,进而导致接收63包的确认信息时间更长,延迟了重传包丢失的检测时间。
[0012] 在大带宽网络下,重传队列内通常达到几十,甚至上百个数据包,而在高丢包网络 环境下,这些数据包很可能不止一个丢失。如果等到这些丢失的数据包都重传完毕,再发送 新数据包,则要在收到新数据包的确认信息时才能判定此前重传的数据包是否丢失。这样, 由于无法及时确定重传的数据包是否丢失导致在该重传的数据包丢失之后,无法及时重新 发送该重传的数据包。
[0013] 针对现有技术中无法及时确定重传的数据包是否丢失的问题,目前尚未提出有效 的解决方案。
【发明内容】
[0014] 本发明的主要目的在于提供一种用于TCP协议的重传包丢失检测方法和装置,以 解决现有技术中无法及时确定重传的数据包是否丢失的问题。
[0015] 为了实现上述目的,根据本发明的一个方面,提供了一种用于TCP协议的重传包 丢失检测方法。根据本发明的重传包丢失检测方法包括:将基于TCP协议传输的发送队 列中待重新发送的数据包发送至接收端,其中,接收端用于接收基于TCP协议传输的数据 包;从发送队列中确定第一数据包,其中,第一数据包为未收到接收端返回第一确认信息的 已重新发送过一次的数据包,第一确认信息为接收端在接收到第一数据包时返回的确认信 息;检测在发送第一数据包之后是否接收到发送队列中第二数据包对应的第二确认信息, 其中,第二数据包为发送队列中在第一数据包之后发送的第N个及第N个以后的任意一个 数据包,第二确认信息为接收端在接收到第二数据包时返回的确认信息;以及如果检测出 在发送第一数据包之后接收到第二确认信息,则确定第一数据包丢失。
[0016] 进一步地,N为系统预设值,N的值大于或者等于3,其中,检测在发送第一数据包 之后是否接收到发送队列中第二数据包对应的第二确认信息包括:查询在发送第一数据包 之后发送的第N个数据包及第N个数据包之后发送的数据包;检测是否接收到第N个数据 包及第N个数据包之后发送的数据包对应的确认信息。
[0017] 进一步地,在将基于TCP协议传输的发送队列中待重新发送的数据包发送至接收 端的同时,重传包丢失检测方法还包括:记录发送队列中从未发送过的序号最小的数据包 的序号,在查询在发送第一数据包之后发送的第N个数据包及第N个数据包之后发送的数 据包之前,重传包丢失检测方法还包括:判断在发送队列中第一数据包的发送时间之后是 否存在至少N个已发送的数据包;如果判断出在发送队列中第一数据包的发送时间之后存 在至少N个已发送的数据包,则判断至少N个数据包的前N个数据包的序号是否小于从未 发送过的序号最小的数据包的序号,其中,如果判断出至少N个数据包的前N个数据包的序 号均小于从未发送过的序号最小的数据包的序号,则查询在发送第一数据包之后发送的第 N个数据包及第N个数据包之后发送的数据包。
[0018] 进一步地,从发送队列中确定第一数据包包括:按照发送的时间顺序对发送队列 中所有已发送的数据包进行排序;从排序后的数据包中查询已重新发送过一次的数据包; 以及按时间先后顺序确定已重新发送过一次的数据包中最先发送出去并且未接收到接收 端返回的确认信息的数据包,将最先发送出去并且未接收到接收端返回的确认信息的数据 包作为第一数据包。
[0019] 进一步地,按照发送的时间顺序对发送队列中所有已发送的数据包进行排序之 前,重传包丢失检测方法还包括:记录所有已发送的数据包的发送时间,其中,按照记录的 时间对所有已发送的数据包进行排序,从排序后的数据包中查询已重新发送过一次的数据 包包括:接收接收端返回的ACK确认包,ACK确认包携带有SACK选项;根据SACK选项标记 发送队列中接收端返回的确认信息对应的数据包,将未被标记的数据包作为待重新发送的 数据包。
[0020] 为了实现上述目的,根据本发明的另一方面,提供了一种用于TCP协议的重传包 丢失检测装置。根据本发明的重传包丢失检测装置包括:发送单元,用于将基于TCP协议传 输的发送队列中待重新发送的数据包发送至接收端,其中,接收端用于接收基于TCP协议 传输的数据包;第一确定单元,用于从发送队列中确定第一数据包,其中,第一数据包为未 收到接收端返回第一确认信息的已重新发送过一次的数据包,第一确认信息为接收端在接 收到第一数据包时返回的确认信息;检测单元,用于检测在发送第一数据包之后是否接收 到发送队列中第二数据包对应的第二确认信息,其中,第二数据包为发送队列中在第一数 据包之后发送的第N个及第N个以后的任意一个数据包,第二确认信息为接收端在接收到 第二数据包时返回的确认信息;以及第二确定单元,用于如果检测出在发送第一数据包之 后接收到第二确认信息,则确定第一数据包丢失。
[0021] 进一步地,N为系统预设值,N的值大于或者等于3,其中,检测单元包括:第一查询 模块,用于查询在发送第一数据包之后发送的第N个数据包及第N个数据包之后发送的数 据包;检测模块,用于检测是否接收到第N个数据包及第N个数据包之后发送的数据包对应 的确认信息。
[0022] 进一步地,重传包丢失检测装置还包括:第一记录单元,用于在将基于TCP协议传 输的发送队列中待重新发送的数据包发送至接收端的同时,记录发送队列中从未发送过的 序号最小的数据包的序号,第一判断单元,用于在查询在发送第一数据包之后发送的第N 个数据包及第N个数据包之后发送的数据包之前,判断在发送队列中第一数据包的发送时 间之后是否存在至少N个已发送的数据包;第二判断单元,用于当判断出在发送队列中第 一数据包的发送时间之后存在至少N个已发送的数据包时,判断至少N个数据包的前N个 数据包的序号是否小于从未发送过的序号最小的数据包的序号,其中,第一查询模块还用 于当判断出至少N个数据包的前N个数据包的序号均小于从未发送过的序号最小的数据包 的序号时,查询在发送第一数据包之后发送的第N个数据包及第N个数据包之后发送的数 据包。
[0023] 进一步地,第一确定单元包括:排序模块,用于按照发送的时间顺序对发送队列中 所有已发送的数据包进行排序;第二查询模块,用于从排序后的数据包中查询已重新发送 过一次的数据包;以及确定模块,用于按时间先后顺序确定已重新发送过一次的数据包中 最先发送出去并且未接收到接收端返回的确认信息的数据包,将最先发送出去并且未接收 到接收端返回的确认信息的数据包作为第一数据包。
[0024] 进一步地,重传包丢失检测装置还包括:第二记录单元,用于按照发送的时间顺序 对发送队列中所有已发送的数据包进行排序之前,记录所有已发送的数据包的发送时间, 其中,按照记录的时间对所有已发送的数据包进行排序,第二查询模块包括:接收子模块, 用于接收接收端返回的ACK确认包,ACK确认包携带有SACK选项;标记子模块,用于根据 SACK选项标记发送队列中接收端返回的确认信息对应的数据包,将未被标记的数据包作为 待重新发送的数据包。
[0025] 根据本发明实施例,将基于TCP协议传输的发送队列中待重新发送的数据包发送 至接收端,从发送队列中确定第一数据包即为未被确认且已经重新发送过一次的数据包, 检测在发送第一数据包之后是否接收到发送队列中第二数据包的第二确认信息即第一数 据包之后的第N个及第N个以后的任意一个数据包的确认信息,如果检测出在重新发送第 一数据包之后接收到第二确认信息,则确定第一数据包丢失,通过增加对重传后的数据包 之后的发送的数据包确认信息的检测,无需等到接收到新的数据包的确认信息时,才确定 重发的数据包丢失,从而可以及时检测重传包是否丢失,解决了现有技术中无法及时确定 重传的数据包是否丢失的问题,达到了及时确定丢失的重传包的效果。
【专利附图】
【附图说明】
[0026] 构成本申请的一部分的附图用来提供对本发明的进一步理解,本发明的示意性实 施例及其说明用于解释本发明,并不构成对本发明的不当限定。在附图中:
[0027] 图1是根据现有技术的发送队列的示意图;
[0028] 图2是根据本发明实施例的重传包丢失检测方法的流程图;
[0029] 图3是根据本发明实施例的发送队列的示意图;
[0030] 图4是根据本发明实施例优选的重传包丢失检测方法的流程图;以及
[0031] 图5是根据本发明实施例的重传包丢失检测装置的示意图。
【具体实施方式】
[0032] 需要说明的是,在不冲突的情况下,本申请中的实施例及实施例中的特征可以相 互组合。下面将参考附图并结合实施例来详细说明本发明。
[0033] 为了使本【技术领域】的人员更好地理解本发明方案,下面将结合本发明实施例中的 附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是 本发明一部分的实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术 人员在没有做出创造性劳动前提下所获得的所有其他实施例,都应当属于本发明保护的范 围。
[0034] 需要说明的是,本发明的说明书和权利要求书及上述附图中的术语"第一"、"第 二"等是用于区别类似的对象,而不必用于描述特定的顺序或先后次序。应该理解这样使 用的数据在适当情况下可以互换,以便这里描述的本发明的实施例。此外,术语"包括"和 "具有"以及他们的任何变形,意图在于覆盖不排他的包含,例如,包含了一系列步骤或单元 的过程、方法、系统、产品或设备不必限于清楚地列出的那些步骤或单元,而是可包括没有 清楚地列出的或对于这些过程、方法、产品或设备固有的其它步骤或单元。
[0035] 本发明实施例提供了一种用于TCP协议的重传包丢失检测方法。
[0036] 图2是根据本发明实施例的重传包丢失检测方法的流程图。如图2所示,该重传 包丢失检测方法包括步骤如下:
[0037] 步骤S202,将基于TCP协议传输的发送队列中待重新发送的数据包发送至接收 端。其中,接收端用于接收基于TCP协议传输的数据包。
[0038] 基于TCP协议的发送队列可以是TCP维护一个发送队列,该队列内可以包含所有 已经发送出去但还没收到累积确认的数据包和等待发送出去的数据包(例如已经发送却 丢失的待重新发送的数据包),并且在每次收到累积确认(ACK)时将已经被累积确认的数 据包移出该队列。同时,如果ACK确认包中包含SACK信息,则可以依据SACK信息将队列中 已经被SACK确认的数据包标记为S,然后根据快速重传和快速恢复算法,将认为丢失的数 据包标记为L,并等待重传。而当真正重传数据包时,将需要重传的数据包标记为R。这里 的待重新发送的数据包是指在进行TCP传输时,已经发送一次却丢失的数据包,该数据包 需要重新发送至接收端。接收端用于接收基于TCP协议传输的数据包。
[0039] 具体地,接收端向发送端发送数据请求,发送端响应该数据请求,并将接收端所请 求的数据包通过网络发送至接收端,接收端接收到数据包之后,向发送端返回确认信息,以 告知发送端已经接收到数据包。由于网络中容易受到干扰或者一些不稳定因素的影响,导 致数据包丢失。此时,需要重新向接收端发送丢失的数据包。在重新发送之后,如果接收端 接收到重新发送的数据包,依然会向发送端返回确认信息。
[0040] 步骤S204,从发送队列中确定第一数据包。其中,第一数据包为未收到接收端返回 第一确认信息的已重新发送过一次的数据包,第一确认信息为接收端在接收到第一数据包 时返回的确认信息。
[0041] 由于TCP协议中接收端接收到的并非按序发送的数据包(即先发送的后接收到, 后发送的先接收到),这样会导致接收端可能先收到后发送的数据包的确认信息,先发送的 数据包可能是因为丢失或者是到达接收端的时间晚于后发送的数据包。从发送队列中确定 第一数据包,即未接收到接收端返回确认信息且重新发送过一次的数据包,该数据包可以 是重新发送过一次的数据包中最早发送但是未被确认的数据包,以便于从重新发送的数据 包中按时间顺序优先判断较早发送的数据包是否再次丢失。
[0042] 步骤S206,检测在发送第一数据包之后是否接收到发送队列中第二数据包的第二 确认信息。其中,第二数据包为发送队列中在第一数据包之后发送的第N个及第N个以后 的的任意一个数据包,第二确认信息为接收端在接收到第二数据包时返回的确认信息。
[0043] 步骤S208,如果检测出在发送第一数据包之后接收到第二确认信息,则确定第一 数据包丢失。
[0044] 在发送第一数据包之后,发送端还需要发送剩下待重新发送的数据包和新的数据 包。在发送完第一数据包之后,可以对接收到的确认信息进行检测,以检测是否接收到第 一数据包之后第N个及第N个以后的任意一个数据包的确认信息。其中,N为预设值,可以 根据实际情况进行设置,也可以根据TCP传输协议中的属性进行设置,例如,基于TCP协议 传输的数据包通常不会晚于3个以后发送的数据包,因此,这里的N值可以是大于或者等于 3的值,即第二数据包可以是第一数据包之后的第N个及第N个以后的任意一个数据包,其 中,当N等于3时可以涵盖TCP中大部分的重传包丢失检测。
[0045] 具体地,在当需要检测第一数据包是否丢失时,可以检测在第一数据包之后,相隔 预设值及其之后的数据包是否已经确认被接收端接收到。如图1所示,当数据包1至9为 已重新发送的数据包时,首先,按照时间顺序确定数据包1为未被确认的数据包,检测数据 包1是否丢失可以通过判断数据包4或者数据包4之后的数据包(例如,数据包7或者数 据包63、64等)是否被确认,即是否接收到接收端返回的确认信息,如果是已接收到接收端 返回的确认信息,则认为数据包1丢失。依次类推,判断所有已经重新发送过一次的数据包 是否丢失,从而无需等到接收到新的数据包的确认信息时,才确定重发的数据包丢失。
[0046] 根据本发明实施例,将基于TCP协议传输的发送队列中待重新发送的数据包发送 至接收端,从发送队列中确定第一数据包即为未被确认且已经重新发送过一次的数据包, 检测在发送第一数据包之后是否接收到发送队列中第二数据包的第二确认信息即第一数 据包之后的第N个及第N个以后的任意一个数据包的确认信息,如果检测出在发送第一数 据包之后接收到第二确认信息,则确定第一数据包丢失,通过增加对重传数据包之后的发 送的数据包确认信息的检测,无需等到接收到新的数据包的确认信息时,才确定重发的数 据包丢失,从而可以及时检测重传包是否丢失,解决了现有技术中无法及时确定重传的数 据包是否丢失的问题,达到了及时确定丢失的重传包的效果。
[0047] 在确定重传包丢失之后,可以立即重传丢失的重传包,也可以根据需要选择现有 的TCP处理流程。
[0048] 需要说明的是,在本发明实施例的重传包丢失检测方法可以应用于有线网中数据 包的传输,也可以用于无线网络中的数据包传输。由于无线网络(比如2G、3G、4G、Wi-Fi网 络)环境下,一方面,由于无线网络的电磁波信号易受干扰和不稳定特性,导致链路丢包率 较高,所以重传的数据包又一次丢失的情况很容易出现;另一方面,在像4G和Wi-Fi这种高 速传输的大带宽网络环境中,TCP-次就会传输几十、几百个数据包,所以其中由于丢包产 生的重传包也会很多,因此,本发明实施例的重传包丢失检测方法应用于无线网络其效果 更加显著。
[0049] 优选地,N为系统预设值,该值大于或者等于3,其中,检测在发送第一数据包之后 是否接收到发送队列中第二数据包对应的第二确认信息包括:查询在发送第一数据包之后 发送的第N个数据包及第N个数据包之后发送的数据包;检测是否接收到第N个数据包及 第N个数据包之后发送的数据包对应的确认信息。
[0050] 在TCP协议中,通常要求先发送的数据包不晚于在其后发送的3个数据包到达接 收端,当其后第3个或者3个以上中有一个数据包被确认,则很大程度上表明该先发送的数 据包丢失,在确定第一数据包之后,查询第一数据包之后发送的第3个或者第3个以上的数 据包,检测这些数据包中是否存在已经被确认的数据包(即第二数据包可以是这些数据包 中任意一个),如果存在,则确定第一数据包丢失。
[0051] 具体地,先找到最早发送、且被重传过、且没有被确认的数据包A,在如图1所示的 数据包1。再找到两个在A之后发送的数据包B、C,无论是否被确认或者重传过,在这里是 2、3。然后,如果能找到一个在B、C两个数据包之后发送的数据包D,且D已经被SACK确认 过。在本示例中,可能是4,也可能是7或者64或者65。一旦存在符合条件的数据包D,则 可以认为检测到数据包A已经丢失。
[0052] 根据本发明实施例,当N取值等于3时,可以覆盖TCP协议中数据包丢失的情况, 同时能够进一步地提高对重传包丢失检测的及时性。
[0053] 进一步地,在将基于TCP协议传输的发送队列中待重新发送的数据包发送至接收 端的同时,重传包丢失检测方法还包括:记录发送队列中从未发送过的序号最小的数据包 的序号。
[0054] 在发送队列中每个数据包都存在与其相应的序号,在重新发送数据包时,同时记 录从未发送过的序号最小的数据包的序号,这里从未发送过的序号最小的数据包是指在发 送队列中一次都未发送过但即将发送的序号最小的数据包。
[0055] 具体地,如图1所示,在发送队列中,TCP已经依据RFC 6675标准的快速重传和快 速恢复算法发现数据包1、2、3、4、5、6、7、8、9可能已丢失,于是立即按顺序重传数据包1、2、 3、4、5、6、7、8、9,并在重传每个数据包时记录下此时从未发送过的序号最小的数据包的序 号,在这里是63。
[0056] 在查询在重新发送第一数据包之后发送的第N个数据包及第N个数据包之后发送 的数据包之前,重传包丢失检测方法还包括:判断在发送队列中第一数据包的发送时间之 后是否存在至少N个已发送的数据包;如果判断出在发送队列中第一数据包的发送时间之 后存在至少N个已发送的数据包,则判断至少N个数据包的前N个数据包的序号是否小于 从未发送过的序号最小的数据包的序号,其中,如果判断出至少N个数据包的前N个数据包 的序号均小于从未发送过的序号最小的数据包的序号,则查询在发送第一数据包之后发送 的第N个数据包及第N个数据包之后发送的数据包。
[0057] 由于在检测第一数据包是否丢失时,第一数据包之后的数据包的个数可能存在小 于N的情况,也或者重传包的个数小于N,在查询在重新发送第一数据包的发送时间之后发 送的第N个数据包及第N个数据包之后发送的数据包之后,可以判断第一数据包之后的是 否还存在至少N个数据包,如果不存在,则可以采用现有的检测流程;如果存在,则进一步 判断,判断这些数据包中前N个数据包的序号是否小于从未发送的序号最小的数据包的序 号,如果前N个数据包的序号均小于该序号,则可以做进一步检测;反之,则可以采用现有 的检测流程进行检测。
[0058] 由于现有技术中必须使用新的数据包才能检测到重传包的丢失,而本发明实施例 中,则只要存在重传的数据包之后发送的N个数据包就可以检测,无论是否是新数据包。本 发明实施例的重传包丢失检测方法可以跟现有的TCP流程相结合,共同对重传包丢失进行 检测,具体地,可以分以下几种情况:(1)如果存在新的数据包,而丢包之后发送的数据包 又不足N个时,可以使用现有的算法检测;(2)如果不存在新的数据包时,丢包之后发送的 数据包又足够N个时,此时现有算法无法检测到丢包,却可以使用本发明实施例的检测方 法;(3)如果不存在新的数据包,丢包之后发送的数据包又不足N个时,此时无法检测到丢 失;(4)如果存在新数据包,丢包之后发送的数据包又足够N个时,此时哪种算法首先满足 则使用哪种算法检测丢包。综上,在现有算法不能检测时,可以使用新算法检测,通过综合 现有算法和新算法,较现有单一方案而言能在更多情况下能检测到丢包事件。
[0059] 优选地,从发送队列中确定第一数据包包括:按照发送的时间顺序对发送队列中 所有已发送的数据包进行排序;从排序后的数据包中查询已重新发送过一次的数据包;以 及按时间先后顺序确定已重新发送过一次的数据包中最先发送出去并且未接收到接收端 返回的确认信息的数据包,将最先发送出去并且未接收到接收端返回的确认信息的数据包 作为第一数据包。
[0060] 具体地,对发送队列中所有已发送的数据包进行排序,将当前发送队列中已经发 送的数据包按实际的发送时间排序,最早发送的在前,最晚发送的在后,例如,对于图1中 存在的数据包,按照数据包的顺序应该是1、2、3、4、5. . . 62、63、64、65的顺序,但现在按照 发送时间排序,于是变为1、2、、3、4、5?62、1、2、3、4、5、6、7、8、9、63、64、65的顺序,如图3所 示。由于重传的数据包中数据包1为最先发送的数据包,如果数据包1未被确认,则将数据 包1作为第一数据包;反之,如果数据包1已经被确认,则判断数据包2是否被确认,数据包 2未被确认则将数据包2作为第一数据包,依次类推,直到检测完所有重传的数据包为止。
[0061] 根据本发明实施例,按照时间顺序,依次将重传的数据包中较先发送且未被确认 的数据包作为第一数据包进行判断,从而可以每次检测的都是未确认的数据包中最先发送 的数据包。
[0062] 进一步地,在按照发送的时间顺序对发送队列中所有已发送的数据包进行排序之 前,本发明实施例的重传包丢失检测方法还包括:记录所有已发送的数据包的发送时间,其 中,对已发送的数据包进行排序可以是按照记录的时间对所有已发送的数据包进行排序。 [0063] 从排序后的数据包中查询已重新发送过一次的数据包包括:接收接收端返回的 ACK确认包,该ACK确认包携带有SACK选项;根据SACK选项标记发送队列中接收端返回的 确认信息对应的数据包进行标记,将未被标记的数据包作为待重新发送的数据包。
[0064] 在每次TCP发包时,无论是重传还是发新数据包,都记录当前发送时间。在TCP每 次收到ACK确认时,在TCP依据确认包中的SACK选项将发送队列中的对应的数据包标记为 SACK确认。具体地,如果ACK确认包携带有SACK选项,则可以依据SACK选项将队列中已经 被SACK确认的数据包标记为S,然后根据快速重传和快速恢复算法,将认为丢失的数据包 标记为L,并等待重传。
[0065] 本发明实施例的重传包丢失检测方法可以是在现有TCP流程的基础上增加一种 新的重传包丢失检测算法,不需要对包括已经提到的Linux现存的重传包丢包检测算法在 内的流程进行修改。
[0066] 如图4所示,图4左边所示的是现有的Linux内核的TCP主要的流程:TCP收到ACK 确认包后,依据ACK确认包中的信息移除已被确认的数据包,并根据SACK信息标记发送队 列中的数据包。随后将被标记为丢失的数据包重传出去。
[0067] 图4右侧所示的为本发明实施例的重传包丢失检测算法流程。
[0068] 在每次TCP发包时,无论是重传还是发新数据包,都记录当前发送时间。在TCP每 次收到ACK确认时,TCP依据确认包中的SACK信息将发送队列中的对应的数据包标记为 SACK确认。
[0069] 将当前发送队列中已经发送的数据包按实际的发送时间排序,最早发送的在前, 最晚发送的在后,例如,对于图1中存在的数据包,按照数据包的顺序应该是1、2、3、4、 5. · · 62、63、64、65的顺序,但现在按照发送时间排序,于是变为1、2、、3、4、5?62、1、2、3、4、 5、6、7、8、9、63、64、65的顺序,如图3所示。
[0070] 然后,找到最早发送、且被重传过、且没有被确认的数据包A,在这里是数据包1。 再找到两个在A之后发送的数据包B、C,无论是否被确认或者重传过,在这里是2、3。
[0071] 最后,如果能找到一个在B、C两个数据包之后发送的数据包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,并等待重传。而当真正重传数据包时,将需要重传的数据包标记为R。这里 的待重新发送的数据包是指在进行TCP传输时,已经发送一次却丢失的数据包,该数据包 需要重新发送至接收端。接收端用于接收基于TCP协议传输的数据包。
[0076] 具体地,接收端向发送端发送数据请求,发送端响应该数据请求,并将接收端所请 求的数据包通过网络发送至接收端,接收端接收到数据包之后,向发送端返回确认信息,以 告知发送端已经接收到数据包。由于网络中容易受到干扰或者一些不稳定因素的影响,导 致数据包丢失。此时,需要重新向接收端发送丢失的数据包。在重新发送之后,如果接收端 接收到重新发送的数据包,依然会向发送端返回确认信息。
[0077] 第一确定单元20用于从发送队列中确定第一数据包,其中,第一数据包为未收到 接收端返回第一确认信息的已重新发送过一次的数据包,第一确认信息为接收端在接收到 第一数据包时返回的确认信息。
[0078] 由于TCP协议中接收端接收到的并非按序发送的数据包(即先发送的后接收到, 后发送的先接收到),这样会导致接收端可能先收到后发送的数据包的确认信息,先发送的 数据包可能是因为丢失或者是到达接收端的时间晚于后发送的数据包。从发送队列中确定 第一数据包,即未接收到接收端返回确认信息且重新发送过一次的数据包,该数据包可以 是重新发送过一次的数据包中最早发送但是未被确认的数据包,以便于从重新发送的数据 包中按时间顺序优先判断较早发送的数据包是否再次丢失。
[0079] 检测单元30用于检测在发送第一数据包之后是否接收到发送队列中第二数据包 对应的第二确认信息,其中,第二数据包为发送队列中在第一数据包之后发送的第N个及 第N个以后的任意一个数据包,第二确认信息为接收端在接收到第二数据包时返回的确认 信息。
[0080] 第二确定单元40用于如果检测出在发送第一数据包之后接收到第二确认信息, 则确定第一数据包丢失。
[0081] 在发送第一数据包之后,发送端还需要发送剩下待重新发送的数据包和新的数据 包。在发送完第一数据包之后,可以对接收到的确认信息进行检测,以检测是否接收到第 一数据包之后第N个及第N个以后的任意一个数据包的确认信息。其中,N为预设值,可以 根据实际情况进行设置,也可以根据TCP传输协议中的属性进行设置,例如,基于TCP协议 传输的数据包通常不会晚于3个以后发送的数据包,因此,这里的N值可以是大于或者等于 3的值,即第二数据包可以是第一数据包之后的第N个及第N个以后的任意一个数据包,其 中,当N等于3时可以涵盖TCP中大部分的重传包丢失检测。
[0082] 具体地,在当需要检测第一数据包是否丢失时,可以检测在第一数据包之后,相隔 预设值及其之后的数据包是否已经确认被接收端接收到。如图1所示,当数据包1至9为 已重新发送的数据包时,首先,按照时间顺序确定数据包1为未被确认的数据包,检测数据 包1是否丢失可以通过判断数据包4或者数据包4之后的数据包(例如,数据包7或者数 据包63、64等)是否被确认,即是否接收到接收端返回的确认信息,如果已接收到接收端返 回的确认信息,则认为数据包1丢失。依次类推,判断所有已经重新发送过一次的数据包是 否丢失,从而无需等到接收到新的数据包的确认信息时,才确定重发的数据包丢失。
[0083] 根据本发明实施例,将基于TCP协议传输的发送队列中待重新发送的数据包发送 至接收端,从发送队列中确定第一数据包即为未被确认且已经重新发送过一次的数据包, 检测在发送第一数据包之后是否接收到发送队列中第二数据包的第二确认信息即第一数 据包之后的第N个及第N个以后的任意一个数据包的确认信息,如果检测出在发送第一数 据包之后接收到第二确认信息,则确定第一数据包丢失,通过增加对重传数据包之后的发 送的数据包确认信息的检测,无需等到接收到新的数据包的确认信息时,才确定重发的数 据包丢失,从而可以及时检测重传包是否丢失,解决了现有技术中无法及时确定重传的数 据包是否丢失的问题,达到了及时确定丢失的重传包的效果。
[0084] 在确定重传包丢失之后,可以立即重传丢失的重传包,也可以根据需要选择现有 的TCP处理流程。
[0085] 需要说明的是,在本发明实施例的重传包丢失检测装置可以应用于有线网中数据 包的传输,也可以用于无线网络中的数据包传输。由于无线网络(比如2G、3G、4G、WI-FI网 络)环境下,一方面,由于无线网络的电磁波信号易受干扰和不稳定特性,导致链路丢包率 较高,所以重传的数据包又一次丢失的情况很容易出现;另一方面,在像4G和Wi-Fi这种高 速传输的大带宽网络环境中,TCP-次就会传输几十、几百个数据包,所以其中由于丢包产 生的重传包也会很多,因此,本发明实施例的重传包丢失检测装置应用于无线网络其效果 更加显著。
[0086] 优选地,N为系统预设值,N的值大于或者等于3,其中,检测单元包括:第一查询模 块,用于查询在发送第一数据包之后发送的第N个数据包及第N个数据包之后发送的数据 包;检测模块,用于检测是否接收到第N个数据包及第N个数据包之后发送的数据包对应的 确认信息。
[0087] 在TCP协议中,通常要求先发送的数据包不晚于在其后发送的3个数据包达到接 收端,当其后第3个或者3个以上中有一个数据包被确认,则很大程度上表明该先发送的数 据包丢失,在确定第一数据包之后,查询第一数据包之后发送的第3个或者第3个以上的数 据包,检测这些数据包中是否存在已经被确认的数据包(即第二数据包可以是这些数据包 中任意一个),如果存在,则确定第一数据包丢失。
[0088] 具体地,先找到最早发送、且被重传过、且没有被确认的数据包A,在如图1所示的 数据包1。再找到两个在A之后发送的数据包B、C,无论是否被确认或者重传过,在这里是 2、 3。然后,如果能找到一个在B、C两个数据包之后发送的数据包D,且D已经被SACK确认 过。在本示例中,可能是4,也可能是7或者64或者65。一旦存在符合条件的数据包D,则 可以认为检测到数据包A已经丢失。
[0089] 根据本发明实施例,当N取值等于3时,可以覆盖TCP协议中数据包丢失的情况, 同时能够进一步地提高对重传包丢失检测的及时性。
[0090] 进一步地,重传包丢失检测装置还包括:第一记录单元,用于在将基于TCP协议传 输的发送队列中待重新发送的数据包发送至接收端的同时,记录发送队列中从未发送过的 序号最小的数据包的序号。
[0091] 在发送队列中每个数据包都存在与其相应的序号,在重新发送数据包时,同时记 录从未发送过的序号最小的数据包的序号,这里从未发送过的序号最小的数据包是指在发 送队列中一次都未发送过但即将发送的序号最小的数据包。
[0092] 具体地,如图1所示,在发送队列中,TCP已经依据RFC 6675标准的快速重传和快 速恢复算法发现数据包1、2、3、4、5、6、7、8、9可能已丢失,于是立即按顺序重传数据包1、2、 3、 4、5、6、7、8、9,并在重传每个数据包时记录下此时从未发送过的序号最小的数据包的序 号,在这里是63。
[0093] 第一判断单元,用于在查询在发送第一数据包之后发送的第N个数据包及第N个 数据包之后发送的数据包之前,判断在发送队列中第一数据包的发送时间之后是否存在至 少N个已发送的数据包;第二判断单元,用于当判断出在发送队列中第一数据包的发送时 间之后存在至少N个已发送的数据包时,判断至少N个数据包的前N个数据包的序号是否 小于从未发送过的序号最小的数据包的序号,其中,第一查询模块还用于当判断出至少N 个数据包的前N个数据包的序号均小于从未发送过的序号最小的数据包的序号时,查询在 发送第一数据包之后发送的第N个数据包及第N个数据包之后发送的数据包。
[0094] 由于在检测第一数据包是否丢失时,第一数据包之后的数据包的个数可能存在小 于N的情况,也或者重传包的个数小于N,在查询在重新发送第一数据包的发送时间之后发 送的第N个数据包及第N个数据包之后发送的数据包之后,可以判断第一数据包之后的是 否还存在至少N个数据包,如果不存在,则可以采用现有的检测流程;如果存在,则进一步 判断,判断这些数据包中前N个数据包的序号是否小于从未发送的序号最小的数据包的序 号,如果前N个数据包的序号均小于该序号,则可以做进一步检测;反之,则可以采用现有 的检测流程进行检测。
[0095] 由于现有技术中必须使用新的数据包才能检测到重传包的丢失,而本发明实施例 中,则只要存在重传的数据包之后发送的N个数据包就可以检测,无论是否是新数据包。本 发明实施例的重传包丢失检测装置可以跟现有的TCP流程相结合,共同对重传包丢失进行 检测,具体地,可以分以下几种情况:(1)如果存在新的数据包,而丢包之后发送的数据包 又不足N个时,可以使用现有的算法检测;(2)如果不存在新的数据包时,丢包之后发送的 数据包又足够N个时,此时现有算法无法检测到丢包,却可以使用本发明实施例的检测装 置;(3)如果不存在新的数据包,丢包之后发送的数据包又不足N个时,此时无法检测到丢 失;(4)如果存在新数据包,丢包之后发送的数据包又足够N个时,此时哪种算法首先满足 则使用哪种算法检测丢包。综上,在现有算法不能检测时,可以使用新算法检测,通过综合 现有算法和新算法,较现有单一方案而言能在更多情况下能检测到丢包事件。
[0096] 优选地,第一确定单元包括:排序模块,用于按照发送的时间顺序对发送队列中所 有已发送的数据包进行排序;第二查询模块,用于从排序后的数据包中查询已重新发送过 一次的数据包;以及确定模块,用于按时间先后顺序确定已重新发送过一次的数据包中最 先发送出去并且未接收到接收端返回的确认信息的数据包,将最先发送出去并且未接收到 接收端返回的确认信息的数据包作为第一数据包。
[0097] 具体地,对发送队列中所有已发送的数据包进行排序,将当前发送队列中已经发 送的数据包按实际的发送时间排序,最早发送的在前,最晚发送的在后,例如,对于图1中 存在的数据包,按照数据包的顺序应该是1、2、3、4、5. . . 62、63、64、65的顺序,但现在按照 发送时间排序,于是变为1、2、、3、4、5?62、1、2、3、4、5、6、7、8、9、63、64、65的顺序,如图3所 示。由于重传的数据包中数据包1为最先发送的数据包,如果数据包1未被确认,则将数据 包1作为第一数据包;反之,如果数据包1已经被确认,则判断数据包2是否被确认,数据包 2未被确认则将数据包2作为第一数据包,依次类推,直到检测完所有重传的数据包为止。 [0098] 根据本发明实施例,按照时间顺序,依次将重传的数据包中较先发送且未被确认 的数据包作为第一数据包进行判断,从而可以每次检测的都是未确认的数据包中最先发送 的数据包。
[0099] 进一步地,重传包丢失检测装置还包括:第二记录单元,用于按照发送的时间顺序 对发送队列中所有已发送的数据包进行排序之前,记录所有已发送的数据包的发送时间, 其中,按照记录的时间对所有已发送的数据包进行排序,第二查询模块包括:接收子模块, 用于接收接收端返回的ACK确认包,ACK确认包携带有SACK选项;标记子模块,用于根据 SACK选项标记发送队列中接收端返回的确认信息对应的数据包,将未被标记的数据包作为 待重新发送的数据包。
[0100] 从排序后的数据包中查询已重新发送过一次的数据包包括:接收接收端返回的 ACK确认包,该ACK确认包携带有SACK选项;根据SACK选项标记发送队列中接收端返回的 确认信息对应的数据包进行标记,将未被标记的数据包作为待重新发送的数据包。
[0101] 在每次TCP发包时,无论是重传还是发新数据包,都记录当前发送时间。在TCP每 次收到ACK确认时,在TCP依据确认包中的SACK选项将发送队列中的对应的数据包标记为 SACK确认。具体地,如果ACK确认包携带有SACK选项,则可以依据SACK选项将队列中已经 被SACK确认的数据包标记为S,然后根据快速重传和快速恢复算法,将认为丢失的数据包 标记为L,并等待重传。
[0102] 需要说明的是,对于前述的各方法实施例,为了简单描述,故将其都表述为一系列 的动作组合,但是本领域技术人员应该知悉,本发明并不受所描述的动作顺序的限制,因为 依据本发明,某些步骤可以采用其他顺序或者同时进行。其次,本领域技术人员也应该知 悉,说明书中所描述的实施例均属于优选实施例,所涉及的动作和模块并不一定是本发明 所必须的。
[0103] 在上述实施例中,对各个实施例的描述都各有侧重,某个实施例中没有详述的部 分,可以参见其他实施例的相关描述。
[0104] 在本申请所提供的几个实施例中,应该理解到,所揭露的装置,可通过其它的方式 实现。例如,以上所描述的装置实施例仅仅是示意性的,例如所述单元的划分,仅仅为一种 逻辑功能划分,实际实现时可以有另外的划分方式,例如多个单元或组件可以结合或者可 以集成到另一个系统,或一些特征可以忽略,或不执行。另一点,所显示或讨论的相互之间 的耦合或直接耦合或通信连接可以是通过一些接口,装置或单元的间接耦合或通信连接, 可以是电性或其它的形式。
[0105] 所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显 示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个 网络单元上。可以根据实际的需要选择其中的部分或者全部单元来实现本实施例方案的目 的。
[0106] 另外,在本发明各个实施例中的各功能单元可以集成在一个处理单元中,也可以 是各个单元单独物理存在,也可以两个或两个以上单元集成在一个单元中。上述集成的单 元既可以采用硬件的形式实现,也可以采用软件功能单元的形式实现。
[0107] 所述集成的单元如果以软件功能单元的形式实现并作为独立的产品销售或使用 时,可以存储在一个计算机可读取存储介质中。基于这样的理解,本发明的技术方案本质 上或者说对现有技术做出贡献的部分或者该技术方案的全部或部分可以以软件产品的形 式体现出来,该计算机软件产品存储在一个存储介质中,包括若干指令用以使得一台计算 机设备(可为个人计算机、移动终端、服务器或者网络设备等)执行本发明各个实施例所 述方法的全部或部分步骤。而前述的存储介质包括:U盘、只读存储器(ROM,Read-Only Memory)、随机存取存储器(RAM, Random Access Memory)、移动硬盘、磁碟或者光盘等各种 可以存储程序代码的介质。
[0108] 以上所述仅为本发明的优选实施例而已,并不用于限制本发明,对于本领域的技 术人员来说,本发明可以有各种更改和变化。凡在本发明的精神和原则之内,所作的任何修 改、等同替换、改进等,均应包含在本发明的保护范围之内。
【权利要求】
1. 一种用于TCP协议的重传包丢失检测方法,其特征在于,包括: 将基于TCP协议传输的发送队列中待重新发送的数据包发送至接收端,其中,所述接 收端用于接收基于TCP协议传输的数据包; 从所述发送队列中确定第一数据包,其中,所述第一数据包为未收到所述接收端返回 第一确认信息的已重新发送过一次的数据包,所述第一确认信息为所述接收端在接收到所 述第一数据包时返回的确认信息; 检测在发送所述第一数据包之后是否接收到所述发送队列中第二数据包对应的第二 确认信息,其中,所述第二数据包为所述发送队列中在所述第一数据包之后发送的第N个 及第N个以后的任意一个数据包,所述第二确认信息为所述接收端在接收到所述第二数据 包时返回的确认信息;以及 如果检测出在发送所述第一数据包之后接收到所述第二确认信息,则确定所述第一数 据包丢失。
2. 根据权利要求1所述的重传包丢失检测方法,其特征在于,所述N为系统预设值,所 述N的值大于或者等于3,其中,检测在发送所述第一数据包之后是否接收到所述发送队列 中第二数据包对应的第二确认信息包括: 查询在发送所述第一数据包之后发送的第N个数据包及所述第N个数据包之后发送的 数据包; 检测是否接收到所述第N个数据包及所述第N个数据包之后发送的数据包对应的确认 信息。
3. 根据权利要求2所述的重传包丢失检测方法,其特征在于, 在将基于TCP协议传输的发送队列中待重新发送的数据包发送至接收端的同时,所述 重传包丢失检测方法还包括:记录所述发送队列中从未发送过的序号最小的数据包的序 号, 在查询在发送所述第一数据包之后发送的第N个数据包及所述第N个数据包之后发送 的数据包之前,所述重传包丢失检测方法还包括:判断在所述发送队列中所述第一数据包 的发送时间之后是否存在至少N个已发送的数据包;如果判断出在所述发送队列中所述第 一数据包的发送时间之后存在至少N个已发送的数据包,则判断所述至少N个数据包的前 N个数据包的序号是否小于所述从未发送过的序号最小的数据包的序号,其中,如果判断出 所述至少N个数据包的前N个数据包的序号均小于所述从未发送过的序号最小的数据包的 序号,则查询在发送所述第一数据包之后发送的第N个数据包及所述第N个数据包之后发 送的数据包。
4. 根据权利要求1所述的重传包丢失检测方法,其特征在于,从所述发送队列中确定 第一数据包包括: 按照发送的时间顺序对所述发送队列中所有已发送的数据包进行排序; 从排序后的数据包中查询所述已重新发送过一次的数据包;以及 按时间先后顺序确定所述已重新发送过一次的数据包中最先发送出去并且未接收到 所述接收端返回的确认信息的数据包,将所述最先发送出去并且未接收到所述接收端返回 的确认信息的数据包作为所述第一数据包。
5. 根据权利要求4所述的重传包丢失检测方法,其特征在于, 按照发送的时间顺序对所述发送队列中所有已发送的数据包进行排序之前,重传包丢 失检测方法还包括:记录所述所有已发送的数据包的发送时间,其中,按照记录的时间对所 述所有已发送的数据包进行排序, 从排序后的数据包中查询所述已重新发送过一次的数据包包括:接收所述接收端返回 的ACK确认包,所述ACK确认包携带有SACK选项;根据所述SACK选项标记所述发送队列中 所述接收端返回的确认信息对应的数据包,将未被标记的数据包作为所述待重新发送的数 据包。
6. -种用于TCP协议的重传包丢失检测装置,其特征在于,包括: 发送单元,用于将基于TCP协议传输的发送队列中待重新发送的数据包发送至接收 端,其中,所述接收端用于接收基于TCP协议传输的数据包; 第一确定单元,用于从所述发送队列中确定第一数据包,其中,所述第一数据包为未收 到所述接收端返回第一确认信息的已重新发送过一次的数据包,所述第一确认信息为所述 接收端在接收到所述第一数据包时返回的确认信息; 检测单元,用于检测在发送所述第一数据包之后是否接收到所述发送队列中第二数据 包对应的第二确认信息,其中,所述第二数据包为所述发送队列中在所述第一数据包之后 发送的第N个及第N个以后的任意一个数据包,所述第二确认信息为所述接收端在接收到 所述第二数据包时返回的确认信息;以及 第二确定单元,用于如果检测出在发送所述第一数据包之后接收到所述第二确认信 息,则确定所述第一数据包丢失。
7. 根据权利要求6所述的重传包丢失检测装置,其特征在于,所述N为系统预设值,所 述N的值大于或者等于3,其中,所述检测单元包括: 第一查询模块,用于查询在发送所述第一数据包之后发送的第N个数据包及所述第N 个数据包之后发送的数据包; 检测模块,用于检测是否接收到所述第N个数据包及所述第N个数据包之后发送的数 据包对应的确认信息。
8. 根据权利要求7所述的重传包丢失检测装置,其特征在于,所述重传包丢失检测装 置还包括: 第一记录单元,用于在将基于TCP协议传输的发送队列中待重新发送的数据包发送至 接收端的同时,记录所述发送队列中从未发送过的序号最小的数据包的序号; 第一判断单元,用于在查询在发送所述第一数据包之后发送的第N个数据包及所述第 N个数据包之后发送的数据包之前,判断在所述发送队列中所述第一数据包的发送时间之 后是否存在至少N个已发送的数据包; 第二判断单元,用于当判断出在所述发送队列中所述第一数据包的发送时间之后存在 至少N个已发送的数据包时,判断所述至少N个数据包的前N个数据包的序号是否小于所 述从未发送过的序号最小的数据包的序号, 其中,第一查询模块还用于当判断出所述至少N个数据包的前N个数据包的序号均小 于所述从未发送过的序号最小的数据包的序号时,查询在发送所述第一数据包之后发送的 第N个数据包及所述第N个数据包之后发送的数据包。
9. 根据权利要求6所述的重传包丢失检测装置,其特征在于,所述第一确定单元包括: 排序模块,用于按照发送的时间顺序对所述发送队列中所有已发送的数据包进行排 序; 第二查询模块,用于从排序后的数据包中查询所述已重新发送过一次的数据包;以及 确定模块,用于按时间先后顺序确定所述已重新发送过一次的数据包中最先发送出去 并且未接收到所述接收端返回的确认信息的数据包,将所述最先发送出去并且未接收到所 述接收端返回的确认信息的数据包作为所述第一数据包。
10.根据权利要求9所述的重传包丢失检测装置,其特征在于, 重传包丢失检测装置还包括:第二记录单元,用于按照发送的时间顺序对所述发送队 列中所有已发送的数据包进行排序之前,记录所述所有已发送的数据包的发送时间,其中, 按照记录的时间对所述所有已发送的数据包进行排序, 所述第二查询模块包括:接收子模块,用于接收所述接收端返回的ACK确认包,所述 ACK确认包携带有SACK选项;标记子模块,用于根据所述SACK选项标记所述发送队列中所 述接收端返回的确认信息对应的数据包,将未被标记的数据包作为所述待重新发送的数据 包。
【文档编号】H04L1/16GK104104480SQ201410375443
【公开日】2014年10月15日 申请日期:2014年7月31日 优先权日:2014年7月31日
【发明者】李易 申请人:北京蓝汛通信技术有限责任公司