CN104104480B - 用于tcp协议的重传包丢失检测方法和装置 - Google Patents
用于tcp协议的重传包丢失检测方法和装置 Download PDFInfo
- Publication number
- CN104104480B CN104104480B CN201410375443.9A CN201410375443A CN104104480B CN 104104480 B CN104104480 B CN 104104480B CN 201410375443 A CN201410375443 A CN 201410375443A CN 104104480 B CN104104480 B CN 104104480B
- Authority
- CN
- China
- Prior art keywords
- packet
- sent
- transmission
- confirmation
- transmit queue
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Active
Links
Landscapes
- Data Exchanges In Wide-Area Networks (AREA)
- Communication Control (AREA)
Abstract
本发明公开了一种用于TCP协议的重传包丢失检测方法和装置。其中,重传包丢失检测方法包括:将基于TCP协议传输的发送队列中待重新发送的数据包发送至接收端,其中,接收端用于接收基于TCP协议传输的数据包;从发送队列中确定第一数据包,其中,第一数据包为未收到接收端返回第一确认信息的已重新发送过一次的数据包;检测在发送第一数据包之后是否接收到发送队列中第二数据包对应的第二确认信息,其中,第二数据包为发送队列中在第一数据包之后发送的第N个及第N个以后的任意一个数据包;以及如果检测出在发送第一数据包之后接收到第二确认信息,则确定第一数据包丢失。通过本发明,达到了及时确定丢失的重传包的效果。
Description
技术领域
本发明涉及互联网领域,具体而言,涉及一种用于TCP协议的重传包丢失检测方法和装置。
背景技术
传输控制协议(Transmission Control Protocol,TCP)是一种面向连接的、可靠的、基于字节流的传输层通信协议,是许多日常应用如HTTP、FTP、SSH、SMTP等服务的底层协议基础。
TCP的累积确认:TCP传输出去的数据的每个字节通常都对应一个唯一的32比特位长度的数字。在通过TCP进行通信时,当数据包的发送端收到接收端响应的报文中携带的32比特位长度的确认序号时,则认为该确认序号以下的所有数据字节都已经被接收到了,即所谓的“累积确认”。
TCP的SACK选项:当TCP接收端收到不是按序到达的数据包时(即先收到后发的数据包),接收端会立即发送携带SACK选项的确认包。该确认包的累积确认序号和上一次发送的确认包的累积确认序号相同,但该确认包携带的SACK选项中会记录刚刚收到的乱序包的起始字节的序号和结束字节的序号。发送端在收到该携带SACK信息的确认包时,就能知道当前接收端已经接收到了哪些数据包,哪些数据包还没被收到。
TCP的发送队列:TCP维护一个发送队列,该队列内包含所有已经发送出去但还没收到累积确认的数据包和等待发送出去的数据包,并且在每次收到累积确认(ACK)时将已经被累积确认的数据包移出该队列。
目前,在TCP协议中对重传包(即重新发送的数据包)丢失检测机制例如Linux内核是在每次重传数据包时记录从未发送过的最小序号数据包的序号。由于Linux内核的发包是优先重传已经发送过但可能丢失的旧数据包,然后再发送从未发送过的数据包。所以,如果已经收到对重传数据包时尚未发送的数据包的SACK确认信息,而此前重传过的旧数据包还没有收到对应的确认信息,则认为该重传的数据包已经丢失,可以立即进行补传。
如图1所示为当前TCP发送队列的状态,实线方框代表已经发送出去,但还没有收到累积确认的数据包,虚线方框代表还未发送过的数据包。此时TCP已经依据RFC6675标准的快速重传和快速恢复算法发现数据包1、2、3、4、5、6、7、8、9可能已丢失,于是立即按顺序重传数据包1、2、3、4、5、6、7、8、9,并在重传每个数据包时记录下此时从未发送过的新数据包编号,在这里是63。
Linux内核的发包是优先重传已经发送过但可能丢失的旧数据包,然后再发送从未发送过的新数据包。所以直到1~62号包没有其他需要重传的以后,TCP才会开始发送新数据包,也就是63号包。
如果刚才重传出去的数据包1又在网络中丢失,那么必须等到63号包或者64及其上的某个包被SACK确认以后,才能判定数据包1再次丢失了。直到那时才会再次补传数据包1。
在现代无线大带宽网络环境(比如4G网络和Wi-Fi网络)下,一方面,由于无线网络的电磁波信号易受干扰和不稳定特性,导致链路丢包率较高,所以重传的数据包又一次丢失的情况很容易出现;另一方面,在像4G和Wi-Fi这种高速传输的大带宽网络,TCP一次就会传输几十、几百个数据包,所以其中由于丢包产生的重传包也会很多。
以图1所示为例,在无线网络环境下,由于无线传输的高丢包率,1~62号数据包之间就会存在多个需要重传的数据包。由于Linux内核会优先重传数据包,所以在真正发送63号数据包之前,还需要重传1~62之间所有已经丢失的数据包。所以63号包会很晚才发送出去,进而导致接收63包的确认信息时间更长,延迟了重传包丢失的检测时间。
在大带宽网络下,重传队列内通常达到几十,甚至上百个数据包,而在高丢包网络环境下,这些数据包很可能不止一个丢失。如果等到这些丢失的数据包都重传完毕,再发送新数据包,则要在收到新数据包的确认信息时才能判定此前重传的数据包是否丢失。这样,由于无法及时确定重传的数据包是否丢失导致在该重传的数据包丢失之后,无法及时重新发送该重传的数据包。
针对现有技术中无法及时确定重传的数据包是否丢失的问题,目前尚未提出有效的解决方案。
发明内容
本发明的主要目的在于提供一种用于TCP协议的重传包丢失检测方法和装置,以解决现有技术中无法及时确定重传的数据包是否丢失的问题。
为了实现上述目的,根据本发明的一个方面,提供了一种用于TCP协议的重传包丢失检测方法。根据本发明的重传包丢失检测方法包括:将基于TCP协议传输的发送队列中待重新发送的数据包发送至接收端,其中,接收端用于接收基于TCP协议传输的数据包;从发送队列中确定第一数据包,其中,第一数据包为未收到接收端返回第一确认信息的已重新发送过一次的数据包,第一确认信息为接收端在接收到第一数据包时返回的确认信息;检测在发送第一数据包之后是否接收到发送队列中第二数据包对应的第二确认信息,其中,第二数据包为发送队列中在第一数据包之后发送的第N个及第N个以后的任意一个数据包,第二确认信息为接收端在接收到第二数据包时返回的确认信息;以及如果检测出在发送第一数据包之后接收到第二确认信息,则确定第一数据包丢失。
进一步地,N为系统预设值,N的值大于或者等于3,其中,检测在发送第一数据包之后是否接收到发送队列中第二数据包对应的第二确认信息包括:查询在发送第一数据包之后发送的第N个数据包及第N个数据包之后发送的数据包;检测是否接收到第N个数据包及第N个数据包之后发送的数据包对应的确认信息。
进一步地,在将基于TCP协议传输的发送队列中待重新发送的数据包发送至接收端的同时,重传包丢失检测方法还包括:记录发送队列中从未发送过的序号最小的数据包的序号,在查询在发送第一数据包之后发送的第N个数据包及第N个数据包之后发送的数据包之前,重传包丢失检测方法还包括:判断在发送队列中第一数据包的发送时间之后是否存在至少N个已发送的数据包;如果判断出在发送队列中第一数据包的发送时间之后存在至少N个已发送的数据包,则判断至少N个数据包的前N个数据包的序号是否小于从未发送过的序号最小的数据包的序号,其中,如果判断出至少N个数据包的前N个数据包的序号均小于从未发送过的序号最小的数据包的序号,则查询在发送第一数据包之后发送的第N个数据包及第N个数据包之后发送的数据包。
进一步地,从发送队列中确定第一数据包包括:按照发送的时间顺序对发送队列中所有已发送的数据包进行排序;从排序后的数据包中查询已重新发送过一次的数据包;以及按时间先后顺序确定已重新发送过一次的数据包中最先发送出去并且未接收到接收端返回的确认信息的数据包,将最先发送出去并且未接收到接收端返回的确认信息的数据包作为第一数据包。
进一步地,按照发送的时间顺序对发送队列中所有已发送的数据包进行排序之前,重传包丢失检测方法还包括:记录所有已发送的数据包的发送时间,其中,按照记录的时间对所有已发送的数据包进行排序,从排序后的数据包中查询已重新发送过一次的数据包包括:接收接收端返回的ACK确认包,ACK确认包携带有SACK选项;根据SACK选项标记发送队列中接收端返回的确认信息对应的数据包,将未被标记的数据包作为待重新发送的数据包。
为了实现上述目的,根据本发明的另一方面,提供了一种用于TCP协议的重传包丢失检测装置。根据本发明的重传包丢失检测装置包括:发送单元,用于将基于TCP协议传输的发送队列中待重新发送的数据包发送至接收端,其中,接收端用于接收基于TCP协议传输的数据包;第一确定单元,用于从发送队列中确定第一数据包,其中,第一数据包为未收到接收端返回第一确认信息的已重新发送过一次的数据包,第一确认信息为接收端在接收到第一数据包时返回的确认信息;检测单元,用于检测在发送第一数据包之后是否接收到发送队列中第二数据包对应的第二确认信息,其中,第二数据包为发送队列中在第一数据包之后发送的第N个及第N个以后的任意一个数据包,第二确认信息为接收端在接收到第二数据包时返回的确认信息;以及第二确定单元,用于如果检测出在发送第一数据包之后接收到第二确认信息,则确定第一数据包丢失。
进一步地,N为系统预设值,N的值大于或者等于3,其中,检测单元包括:第一查询模块,用于查询在发送第一数据包之后发送的第N个数据包及第N个数据包之后发送的数据包;检测模块,用于检测是否接收到第N个数据包及第N个数据包之后发送的数据包对应的确认信息。
进一步地,重传包丢失检测装置还包括:第一记录单元,用于在将基于TCP协议传输的发送队列中待重新发送的数据包发送至接收端的同时,记录发送队列中从未发送过的序号最小的数据包的序号,第一判断单元,用于在查询在发送第一数据包之后发送的第N个数据包及第N个数据包之后发送的数据包之前,判断在发送队列中第一数据包的发送时间之后是否存在至少N个已发送的数据包;第二判断单元,用于当判断出在发送队列中第一数据包的发送时间之后存在至少N个已发送的数据包时,判断至少N个数据包的前N个数据包的序号是否小于从未发送过的序号最小的数据包的序号,其中,第一查询模块还用于当判断出至少N个数据包的前N个数据包的序号均小于从未发送过的序号最小的数据包的序号时,查询在发送第一数据包之后发送的第N个数据包及第N个数据包之后发送的数据包。
进一步地,第一确定单元包括:排序模块,用于按照发送的时间顺序对发送队列中所有已发送的数据包进行排序;第二查询模块,用于从排序后的数据包中查询已重新发送过一次的数据包;以及确定模块,用于按时间先后顺序确定已重新发送过一次的数据包中最先发送出去并且未接收到接收端返回的确认信息的数据包,将最先发送出去并且未接收到接收端返回的确认信息的数据包作为第一数据包。
进一步地,重传包丢失检测装置还包括:第二记录单元,用于按照发送的时间顺序对发送队列中所有已发送的数据包进行排序之前,记录所有已发送的数据包的发送时间,其中,按照记录的时间对所有已发送的数据包进行排序,第二查询模块包括:接收子模块,用于接收接收端返回的ACK确认包,ACK确认包携带有SACK选项;标记子模块,用于根据SACK选项标记发送队列中接收端返回的确认信息对应的数据包,将未被标记的数据包作为待重新发送的数据包。
根据本发明实施例,将基于TCP协议传输的发送队列中待重新发送的数据包发送至接收端,从发送队列中确定第一数据包即为未被确认且已经重新发送过一次的数据包,检测在发送第一数据包之后是否接收到发送队列中第二数据包的第二确认信息即第一数据包之后的第N个及第N个以后的任意一个数据包的确认信息,如果检测出在重新发送第一数据包之后接收到第二确认信息,则确定第一数据包丢失,通过增加对重传后的数据包之后的发送的数据包确认信息的检测,无需等到接收到新的数据包的确认信息时,才确定重发的数据包丢失,从而可以及时检测重传包是否丢失,解决了现有技术中无法及时确定重传的数据包是否丢失的问题,达到了及时确定丢失的重传包的效果。
附图说明
构成本申请的一部分的附图用来提供对本发明的进一步理解,本发明的示意性实施例及其说明用于解释本发明,并不构成对本发明的不当限定。在附图中:
图1是根据现有技术的发送队列的示意图;
图2是根据本发明实施例的重传包丢失检测方法的流程图;
图3是根据本发明实施例的发送队列的示意图;
图4是根据本发明实施例优选的重传包丢失检测方法的流程图;以及
图5是根据本发明实施例的重传包丢失检测装置的示意图。
具体实施方式
需要说明的是,在不冲突的情况下,本申请中的实施例及实施例中的特征可以相互组合。下面将参考附图并结合实施例来详细说明本发明。
为了使本技术领域的人员更好地理解本发明方案,下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分的实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都应当属于本发明保护的范围。
需要说明的是,本发明的说明书和权利要求书及上述附图中的术语“第一”、“第二”等是用于区别类似的对象,而不必用于描述特定的顺序或先后次序。应该理解这样使用的数据在适当情况下可以互换,以便这里描述的本发明的实施例。此外,术语“包括”和“具有”以及他们的任何变形,意图在于覆盖不排他的包含,例如,包含了一系列步骤或单元的过程、方法、系统、产品或设备不必限于清楚地列出的那些步骤或单元,而是可包括没有清楚地列出的或对于这些过程、方法、产品或设备固有的其它步骤或单元。
本发明实施例提供了一种用于TCP协议的重传包丢失检测方法。
图2是根据本发明实施例的重传包丢失检测方法的流程图。如图2所示,该重传包丢失检测方法包括步骤如下:
步骤S202,将基于TCP协议传输的发送队列中待重新发送的数据包发送至接收端。其中,接收端用于接收基于TCP协议传输的数据包。
基于TCP协议的发送队列可以是TCP维护一个发送队列,该队列内可以包含所有已经发送出去但还没收到累积确认的数据包和等待发送出去的数据包(例如已经发送却丢失的待重新发送的数据包),并且在每次收到累积确认(ACK)时将已经被累积确认的数据包移出该队列。同时,如果ACK确认包中包含SACK信息,则可以依据SACK信息将队列中已经被SACK确认的数据包标记为S,然后根据快速重传和快速恢复算法,将认为丢失的数据包标记为L,并等待重传。而当真正重传数据包时,将需要重传的数据包标记为R。这里的待重新发送的数据包是指在进行TCP传输时,已经发送一次却丢失的数据包,该数据包需要重新发送至接收端。接收端用于接收基于TCP协议传输的数据包。
具体地,接收端向发送端发送数据请求,发送端响应该数据请求,并将接收端所请求的数据包通过网络发送至接收端,接收端接收到数据包之后,向发送端返回确认信息,以告知发送端已经接收到数据包。由于网络中容易受到干扰或者一些不稳定因素的影响,导致数据包丢失。此时,需要重新向接收端发送丢失的数据包。在重新发送之后,如果接收端接收到重新发送的数据包,依然会向发送端返回确认信息。
步骤S204,从发送队列中确定第一数据包。其中,第一数据包为未收到接收端返回第一确认信息的已重新发送过一次的数据包,第一确认信息为接收端在接收到第一数据包时返回的确认信息。
由于TCP协议中接收端接收到的并非按序发送的数据包(即先发送的后接收到,后发送的先接收到),这样会导致接收端可能先收到后发送的数据包的确认信息,先发送的数据包可能是因为丢失或者是到达接收端的时间晚于后发送的数据包。从发送队列中确定第一数据包,即未接收到接收端返回确认信息且重新发送过一次的数据包,该数据包可以是重新发送过一次的数据包中最早发送但是未被确认的数据包,以便于从重新发送的数据包中按时间顺序优先判断较早发送的数据包是否再次丢失。
步骤S206,检测在发送第一数据包之后是否接收到发送队列中第二数据包的第二确认信息。其中,第二数据包为发送队列中在第一数据包之后发送的第N个及第N个以后的的任意一个数据包,第二确认信息为接收端在接收到第二数据包时返回的确认信息。
步骤S208,如果检测出在发送第一数据包之后接收到第二确认信息,则确定第一数据包丢失。
在发送第一数据包之后,发送端还需要发送剩下待重新发送的数据包和新的数据包。在发送完第一数据包之后,可以对接收到的确认信息进行检测,以检测是否接收到第一数据包之后第N个及第N个以后的任意一个数据包的确认信息。其中,N为预设值,可以根据实际情况进行设置,也可以根据TCP传输协议中的属性进行设置,例如,基于TCP协议传输的数据包通常不会晚于3个以后发送的数据包,因此,这里的N值可以是大于或者等于3的值,即第二数据包可以是第一数据包之后的第N个及第N个以后的任意一个数据包,其中,当N等于3时可以涵盖TCP中大部分的重传包丢失检测。
具体地,在当需要检测第一数据包是否丢失时,可以检测在第一数据包之后,相隔预设值及其之后的数据包是否已经确认被接收端接收到。如图1所示,当数据包1至9为已重新发送的数据包时,首先,按照时间顺序确定数据包1为未被确认的数据包,检测数据包1是否丢失可以通过判断数据包4或者数据包4之后的数据包(例如,数据包7或者数据包63、64等)是否被确认,即是否接收到接收端返回的确认信息,如果是已接收到接收端返回的确认信息,则认为数据包1丢失。依次类推,判断所有已经重新发送过一次的数据包是否丢失,从而无需等到接收到新的数据包的确认信息时,才确定重发的数据包丢失。
根据本发明实施例,将基于TCP协议传输的发送队列中待重新发送的数据包发送至接收端,从发送队列中确定第一数据包即为未被确认且已经重新发送过一次的数据包,检测在发送第一数据包之后是否接收到发送队列中第二数据包的第二确认信息即第一数据包之后的第N个及第N个以后的任意一个数据包的确认信息,如果检测出在发送第一数据包之后接收到第二确认信息,则确定第一数据包丢失,通过增加对重传数据包之后的发送的数据包确认信息的检测,无需等到接收到新的数据包的确认信息时,才确定重发的数据包丢失,从而可以及时检测重传包是否丢失,解决了现有技术中无法及时确定重传的数据包是否丢失的问题,达到了及时确定丢失的重传包的效果。
在确定重传包丢失之后,可以立即重传丢失的重传包,也可以根据需要选择现有的TCP处理流程。
需要说明的是,在本发明实施例的重传包丢失检测方法可以应用于有线网中数据包的传输,也可以用于无线网络中的数据包传输。由于无线网络(比如2G、3G、4G、Wi-Fi网络)环境下,一方面,由于无线网络的电磁波信号易受干扰和不稳定特性,导致链路丢包率较高,所以重传的数据包又一次丢失的情况很容易出现;另一方面,在像4G和Wi-Fi这种高速传输的大带宽网络环境中,TCP一次就会传输几十、几百个数据包,所以其中由于丢包产生的重传包也会很多,因此,本发明实施例的重传包丢失检测方法应用于无线网络其效果更加显著。
优选地,N为系统预设值,该值大于或者等于3,其中,检测在发送第一数据包之后是否接收到发送队列中第二数据包对应的第二确认信息包括:查询在发送第一数据包之后发送的第N个数据包及第N个数据包之后发送的数据包;检测是否接收到第N个数据包及第N个数据包之后发送的数据包对应的确认信息。
在TCP协议中,通常要求先发送的数据包不晚于在其后发送的3个数据包到达接收端,当其后第3个或者3个以上中有一个数据包被确认,则很大程度上表明该先发送的数据包丢失,在确定第一数据包之后,查询第一数据包之后发送的第3个或者第3个以上的数据包,检测这些数据包中是否存在已经被确认的数据包(即第二数据包可以是这些数据包中任意一个),如果存在,则确定第一数据包丢失。
具体地,先找到最早发送、且被重传过、且没有被确认的数据包A,在如图1所示的数据包1。再找到两个在A之后发送的数据包B、C,无论是否被确认或者重传过,在这里是2、3。然后,如果能找到一个在B、C两个数据包之后发送的数据包D,且D已经被SACK确认过。在本示例中,可能是4,也可能是7或者64或者65。一旦存在符合条件的数据包D,则可以认为检测到数据包A已经丢失。
根据本发明实施例,当N取值等于3时,可以覆盖TCP协议中数据包丢失的情况,同时能够进一步地提高对重传包丢失检测的及时性。
进一步地,在将基于TCP协议传输的发送队列中待重新发送的数据包发送至接收端的同时,重传包丢失检测方法还包括:记录发送队列中从未发送过的序号最小的数据包的序号。
在发送队列中每个数据包都存在与其相应的序号,在重新发送数据包时,同时记录从未发送过的序号最小的数据包的序号,这里从未发送过的序号最小的数据包是指在发送队列中一次都未发送过但即将发送的序号最小的数据包。
具体地,如图1所示,在发送队列中,TCP已经依据RFC 6675标准的快速重传和快速恢复算法发现数据包1、2、3、4、5、6、7、8、9可能已丢失,于是立即按顺序重传数据包1、2、3、4、5、6、7、8、9,并在重传每个数据包时记录下此时从未发送过的序号最小的数据包的序号,在这里是63。
在查询在重新发送第一数据包之后发送的第N个数据包及第N个数据包之后发送的数据包之前,重传包丢失检测方法还包括:判断在发送队列中第一数据包的发送时间之后是否存在至少N个已发送的数据包;如果判断出在发送队列中第一数据包的发送时间之后存在至少N个已发送的数据包,则判断至少N个数据包的前N个数据包的序号是否小于从未发送过的序号最小的数据包的序号,其中,如果判断出至少N个数据包的前N个数据包的序号均小于从未发送过的序号最小的数据包的序号,则查询在发送第一数据包之后发送的第N个数据包及第N个数据包之后发送的数据包。
由于在检测第一数据包是否丢失时,第一数据包之后的数据包的个数可能存在小于N的情况,也或者重传包的个数小于N,在查询在重新发送第一数据包的发送时间之后发送的第N个数据包及第N个数据包之后发送的数据包之后,可以判断第一数据包之后的是否还存在至少N个数据包,如果不存在,则可以采用现有的检测流程;如果存在,则进一步判断,判断这些数据包中前N个数据包的序号是否小于从未发送的序号最小的数据包的序号,如果前N个数据包的序号均小于该序号,则可以做进一步检测;反之,则可以采用现有的检测流程进行检测。
由于现有技术中必须使用新的数据包才能检测到重传包的丢失,而本发明实施例中,则只要存在重传的数据包之后发送的N个数据包就可以检测,无论是否是新数据包。本发明实施例的重传包丢失检测方法可以跟现有的TCP流程相结合,共同对重传包丢失进行检测,具体地,可以分以下几种情况:(1)如果存在新的数据包,而丢包之后发送的数据包又不足N个时,可以使用现有的算法检测;(2)如果不存在新的数据包时,丢包之后发送的数据包又足够N个时,此时现有算法无法检测到丢包,却可以使用本发明实施例的检测方法;(3)如果不存在新的数据包,丢包之后发送的数据包又不足N个时,此时无法检测到丢失;(4)如果存在新数据包,丢包之后发送的数据包又足够N个时,此时哪种算法首先满足则使用哪种算法检测丢包。综上,在现有算法不能检测时,可以使用新算法检测,通过综合现有算法和新算法,较现有单一方案而言能在更多情况下能检测到丢包事件。
优选地,从发送队列中确定第一数据包包括:按照发送的时间顺序对发送队列中所有已发送的数据包进行排序;从排序后的数据包中查询已重新发送过一次的数据包;以及按时间先后顺序确定已重新发送过一次的数据包中最先发送出去并且未接收到接收端返回的确认信息的数据包,将最先发送出去并且未接收到接收端返回的确认信息的数据包作为第一数据包。
具体地,对发送队列中所有已发送的数据包进行排序,将当前发送队列中已经发送的数据包按实际的发送时间排序,最早发送的在前,最晚发送的在后,例如,对于图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作为第一数据包,依次类推,直到检测完所有重传的数据包为止。
根据本发明实施例,按照时间顺序,依次将重传的数据包中较先发送且未被确认的数据包作为第一数据包进行判断,从而可以每次检测的都是未确认的数据包中最先发送的数据包。
进一步地,在按照发送的时间顺序对发送队列中所有已发送的数据包进行排序之前,本发明实施例的重传包丢失检测方法还包括:记录所有已发送的数据包的发送时间,其中,对已发送的数据包进行排序可以是按照记录的时间对所有已发送的数据包进行排序。
从排序后的数据包中查询已重新发送过一次的数据包包括:接收接收端返回的ACK确认包,该ACK确认包携带有SACK选项;根据SACK选项标记发送队列中接收端返回的确认信息对应的数据包进行标记,将未被标记的数据包作为待重新发送的数据包。
在每次TCP发包时,无论是重传还是发新数据包,都记录当前发送时间。在TCP每次收到ACK确认时,在TCP依据确认包中的SACK选项将发送队列中的对应的数据包标记为SACK确认。具体地,如果ACK确认包携带有SACK选项,则可以依据SACK选项将队列中已经被SACK确认的数据包标记为S,然后根据快速重传和快速恢复算法,将认为丢失的数据包标记为L,并等待重传。
本发明实施例的重传包丢失检测方法可以是在现有TCP流程的基础上增加一种新的重传包丢失检测算法,不需要对包括已经提到的Linux现存的重传包丢包检测算法在内的流程进行修改。
如图4所示,图4左边所示的是现有的Linux内核的TCP主要的流程:TCP收到ACK确认包后,依据ACK确认包中的信息移除已被确认的数据包,并根据SACK信息标记发送队列中的数据包。随后将被标记为丢失的数据包重传出去。
图4右侧所示的为本发明实施例的重传包丢失检测算法流程。
在每次TCP发包时,无论是重传还是发新数据包,都记录当前发送时间。在TCP每次收到ACK确认时,TCP依据确认包中的SACK信息将发送队列中的对应的数据包标记为SACK确认。
将当前发送队列中已经发送的数据包按实际的发送时间排序,最早发送的在前,最晚发送的在后,例如,对于图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所示。
然后,找到最早发送、且被重传过、且没有被确认的数据包A,在这里是数据包1。再找到两个在A之后发送的数据包B、C,无论是否被确认或者重传过,在这里是2、3。
最后,如果能找到一个在B、C两个数据包之后发送的数据包D,且D已经被SACK确认过。在本示例中,可能是4,也可能是7或者64或者65。一旦存在符合条件的数据包D,则可以认为检测到数据包A已经丢失。
本发明实施例还提供了一种重传包丢失检测装置。该装置可以通过计算机设备实现其功能。需要说明的是,本发明实施例的重传包丢失检测装置可以用于执行本发明实施例所提供的重传包丢失检测方法,本发明实施例的重传包丢失检测方法也可以通过本发明实施例所提供的重传包丢失检测装置来执行。
图5是根据本发明实施例的重传包丢失检测装置的示意图。如图5所示,该重传包丢失检测装置包括:发送单元10、第一确定单元20、检测单元30和第二确定单元40。
发送单元10用于将基于TCP协议传输的发送队列中待重新发送的数据包发送至接收端,其中,接收端用于接收基于TCP协议传输的数据包。
基于TCP协议的发送队列可以是TCP维护一个发送队列,该队列内可以包含所有已经发送出去但还没收到累积确认的数据包和等待发送出去的数据包(例如已经发送却丢失的待重新发送的数据包),并且在每次收到累积确认(ACK)时将已经被累积确认的数据包移出该队列。同时,如果ACK确认包中包含SACK信息,则可以依据SACK信息将队列中已经被SACK确认的数据包标记为S,然后根据快速重传和快速恢复算法,将认为丢失的数据包标记为L,并等待重传。而当真正重传数据包时,将需要重传的数据包标记为R。这里的待重新发送的数据包是指在进行TCP传输时,已经发送一次却丢失的数据包,该数据包需要重新发送至接收端。接收端用于接收基于TCP协议传输的数据包。
具体地,接收端向发送端发送数据请求,发送端响应该数据请求,并将接收端所请求的数据包通过网络发送至接收端,接收端接收到数据包之后,向发送端返回确认信息,以告知发送端已经接收到数据包。由于网络中容易受到干扰或者一些不稳定因素的影响,导致数据包丢失。此时,需要重新向接收端发送丢失的数据包。在重新发送之后,如果接收端接收到重新发送的数据包,依然会向发送端返回确认信息。
第一确定单元20用于从发送队列中确定第一数据包,其中,第一数据包为未收到接收端返回第一确认信息的已重新发送过一次的数据包,第一确认信息为接收端在接收到第一数据包时返回的确认信息。
由于TCP协议中接收端接收到的并非按序发送的数据包(即先发送的后接收到,后发送的先接收到),这样会导致接收端可能先收到后发送的数据包的确认信息,先发送的数据包可能是因为丢失或者是到达接收端的时间晚于后发送的数据包。从发送队列中确定第一数据包,即未接收到接收端返回确认信息且重新发送过一次的数据包,该数据包可以是重新发送过一次的数据包中最早发送但是未被确认的数据包,以便于从重新发送的数据包中按时间顺序优先判断较早发送的数据包是否再次丢失。
检测单元30用于检测在发送第一数据包之后是否接收到发送队列中第二数据包对应的第二确认信息,其中,第二数据包为发送队列中在第一数据包之后发送的第N个及第N个以后的任意一个数据包,第二确认信息为接收端在接收到第二数据包时返回的确认信息。
第二确定单元40用于如果检测出在发送第一数据包之后接收到第二确认信息,则确定第一数据包丢失。
在发送第一数据包之后,发送端还需要发送剩下待重新发送的数据包和新的数据包。在发送完第一数据包之后,可以对接收到的确认信息进行检测,以检测是否接收到第一数据包之后第N个及第N个以后的任意一个数据包的确认信息。其中,N为预设值,可以根据实际情况进行设置,也可以根据TCP传输协议中的属性进行设置,例如,基于TCP协议传输的数据包通常不会晚于3个以后发送的数据包,因此,这里的N值可以是大于或者等于3的值,即第二数据包可以是第一数据包之后的第N个及第N个以后的任意一个数据包,其中,当N等于3时可以涵盖TCP中大部分的重传包丢失检测。
具体地,在当需要检测第一数据包是否丢失时,可以检测在第一数据包之后,相隔预设值及其之后的数据包是否已经确认被接收端接收到。如图1所示,当数据包1至9为已重新发送的数据包时,首先,按照时间顺序确定数据包1为未被确认的数据包,检测数据包1是否丢失可以通过判断数据包4或者数据包4之后的数据包(例如,数据包7或者数据包63、64等)是否被确认,即是否接收到接收端返回的确认信息,如果已接收到接收端返回的确认信息,则认为数据包1丢失。依次类推,判断所有已经重新发送过一次的数据包是否丢失,从而无需等到接收到新的数据包的确认信息时,才确定重发的数据包丢失。
根据本发明实施例,将基于TCP协议传输的发送队列中待重新发送的数据包发送至接收端,从发送队列中确定第一数据包即为未被确认且已经重新发送过一次的数据包,检测在发送第一数据包之后是否接收到发送队列中第二数据包的第二确认信息即第一数据包之后的第N个及第N个以后的任意一个数据包的确认信息,如果检测出在发送第一数据包之后接收到第二确认信息,则确定第一数据包丢失,通过增加对重传数据包之后的发送的数据包确认信息的检测,无需等到接收到新的数据包的确认信息时,才确定重发的数据包丢失,从而可以及时检测重传包是否丢失,解决了现有技术中无法及时确定重传的数据包是否丢失的问题,达到了及时确定丢失的重传包的效果。
在确定重传包丢失之后,可以立即重传丢失的重传包,也可以根据需要选择现有的TCP处理流程。
需要说明的是,在本发明实施例的重传包丢失检测装置可以应用于有线网中数据包的传输,也可以用于无线网络中的数据包传输。由于无线网络(比如2G、3G、4G、WI-FI网络)环境下,一方面,由于无线网络的电磁波信号易受干扰和不稳定特性,导致链路丢包率较高,所以重传的数据包又一次丢失的情况很容易出现;另一方面,在像4G和Wi-Fi这种高速传输的大带宽网络环境中,TCP一次就会传输几十、几百个数据包,所以其中由于丢包产生的重传包也会很多,因此,本发明实施例的重传包丢失检测装置应用于无线网络其效果更加显著。
优选地,N为系统预设值,N的值大于或者等于3,其中,检测单元包括:第一查询模块,用于查询在发送第一数据包之后发送的第N个数据包及第N个数据包之后发送的数据包;检测模块,用于检测是否接收到第N个数据包及第N个数据包之后发送的数据包对应的确认信息。
在TCP协议中,通常要求先发送的数据包不晚于在其后发送的3个数据包达到接收端,当其后第3个或者3个以上中有一个数据包被确认,则很大程度上表明该先发送的数据包丢失,在确定第一数据包之后,查询第一数据包之后发送的第3个或者第3个以上的数据包,检测这些数据包中是否存在已经被确认的数据包(即第二数据包可以是这些数据包中任意一个),如果存在,则确定第一数据包丢失。
具体地,先找到最早发送、且被重传过、且没有被确认的数据包A,在如图1所示的数据包1。再找到两个在A之后发送的数据包B、C,无论是否被确认或者重传过,在这里是2、3。然后,如果能找到一个在B、C两个数据包之后发送的数据包D,且D已经被SACK确认过。在本示例中,可能是4,也可能是7或者64或者65。一旦存在符合条件的数据包D,则可以认为检测到数据包A已经丢失。
根据本发明实施例,当N取值等于3时,可以覆盖TCP协议中数据包丢失的情况,同时能够进一步地提高对重传包丢失检测的及时性。
进一步地,重传包丢失检测装置还包括:第一记录单元,用于在将基于TCP协议传输的发送队列中待重新发送的数据包发送至接收端的同时,记录发送队列中从未发送过的序号最小的数据包的序号。
在发送队列中每个数据包都存在与其相应的序号,在重新发送数据包时,同时记录从未发送过的序号最小的数据包的序号,这里从未发送过的序号最小的数据包是指在发送队列中一次都未发送过但即将发送的序号最小的数据包。
具体地,如图1所示,在发送队列中,TCP已经依据RFC 6675标准的快速重传和快速恢复算法发现数据包1、2、3、4、5、6、7、8、9可能已丢失,于是立即按顺序重传数据包1、2、3、4、5、6、7、8、9,并在重传每个数据包时记录下此时从未发送过的序号最小的数据包的序号,在这里是63。
第一判断单元,用于在查询在发送第一数据包之后发送的第N个数据包及第N个数据包之后发送的数据包之前,判断在发送队列中第一数据包的发送时间之后是否存在至少N个已发送的数据包;第二判断单元,用于当判断出在发送队列中第一数据包的发送时间之后存在至少N个已发送的数据包时,判断至少N个数据包的前N个数据包的序号是否小于从未发送过的序号最小的数据包的序号,其中,第一查询模块还用于当判断出至少N个数据包的前N个数据包的序号均小于从未发送过的序号最小的数据包的序号时,查询在发送第一数据包之后发送的第N个数据包及第N个数据包之后发送的数据包。
由于在检测第一数据包是否丢失时,第一数据包之后的数据包的个数可能存在小于N的情况,也或者重传包的个数小于N,在查询在重新发送第一数据包的发送时间之后发送的第N个数据包及第N个数据包之后发送的数据包之后,可以判断第一数据包之后的是否还存在至少N个数据包,如果不存在,则可以采用现有的检测流程;如果存在,则进一步判断,判断这些数据包中前N个数据包的序号是否小于从未发送的序号最小的数据包的序号,如果前N个数据包的序号均小于该序号,则可以做进一步检测;反之,则可以采用现有的检测流程进行检测。
由于现有技术中必须使用新的数据包才能检测到重传包的丢失,而本发明实施例中,则只要存在重传的数据包之后发送的N个数据包就可以检测,无论是否是新数据包。本发明实施例的重传包丢失检测装置可以跟现有的TCP流程相结合,共同对重传包丢失进行检测,具体地,可以分以下几种情况:(1)如果存在新的数据包,而丢包之后发送的数据包又不足N个时,可以使用现有的算法检测;(2)如果不存在新的数据包时,丢包之后发送的数据包又足够N个时,此时现有算法无法检测到丢包,却可以使用本发明实施例的检测装置;(3)如果不存在新的数据包,丢包之后发送的数据包又不足N个时,此时无法检测到丢失;(4)如果存在新数据包,丢包之后发送的数据包又足够N个时,此时哪种算法首先满足则使用哪种算法检测丢包。综上,在现有算法不能检测时,可以使用新算法检测,通过综合现有算法和新算法,较现有单一方案而言能在更多情况下能检测到丢包事件。
优选地,第一确定单元包括:排序模块,用于按照发送的时间顺序对发送队列中所有已发送的数据包进行排序;第二查询模块,用于从排序后的数据包中查询已重新发送过一次的数据包;以及确定模块,用于按时间先后顺序确定已重新发送过一次的数据包中最先发送出去并且未接收到接收端返回的确认信息的数据包,将最先发送出去并且未接收到接收端返回的确认信息的数据包作为第一数据包。
具体地,对发送队列中所有已发送的数据包进行排序,将当前发送队列中已经发送的数据包按实际的发送时间排序,最早发送的在前,最晚发送的在后,例如,对于图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作为第一数据包,依次类推,直到检测完所有重传的数据包为止。
根据本发明实施例,按照时间顺序,依次将重传的数据包中较先发送且未被确认的数据包作为第一数据包进行判断,从而可以每次检测的都是未确认的数据包中最先发送的数据包。
进一步地,重传包丢失检测装置还包括:第二记录单元,用于按照发送的时间顺序对发送队列中所有已发送的数据包进行排序之前,记录所有已发送的数据包的发送时间,其中,按照记录的时间对所有已发送的数据包进行排序,第二查询模块包括:接收子模块,用于接收接收端返回的ACK确认包,ACK确认包携带有SACK选项;标记子模块,用于根据SACK选项标记发送队列中接收端返回的确认信息对应的数据包,将未被标记的数据包作为待重新发送的数据包。
从排序后的数据包中查询已重新发送过一次的数据包包括:接收接收端返回的ACK确认包,该ACK确认包携带有SACK选项;根据SACK选项标记发送队列中接收端返回的确认信息对应的数据包进行标记,将未被标记的数据包作为待重新发送的数据包。
在每次TCP发包时,无论是重传还是发新数据包,都记录当前发送时间。在TCP每次收到ACK确认时,在TCP依据确认包中的SACK选项将发送队列中的对应的数据包标记为SACK确认。具体地,如果ACK确认包携带有SACK选项,则可以依据SACK选项将队列中已经被SACK确认的数据包标记为S,然后根据快速重传和快速恢复算法,将认为丢失的数据包标记为L,并等待重传。
需要说明的是,对于前述的各方法实施例,为了简单描述,故将其都表述为一系列的动作组合,但是本领域技术人员应该知悉,本发明并不受所描述的动作顺序的限制,因为依据本发明,某些步骤可以采用其他顺序或者同时进行。其次,本领域技术人员也应该知悉,说明书中所描述的实施例均属于优选实施例,所涉及的动作和模块并不一定是本发明所必须的。
在上述实施例中,对各个实施例的描述都各有侧重,某个实施例中没有详述的部分,可以参见其他实施例的相关描述。
在本申请所提供的几个实施例中,应该理解到,所揭露的装置,可通过其它的方式实现。例如,以上所描述的装置实施例仅仅是示意性的,例如所述单元的划分,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式,例如多个单元或组件可以结合或者可以集成到另一个系统,或一些特征可以忽略,或不执行。另一点,所显示或讨论的相互之间的耦合或直接耦合或通信连接可以是通过一些接口,装置或单元的间接耦合或通信连接,可以是电性或其它的形式。
所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部单元来实现本实施例方案的目的。
另外,在本发明各个实施例中的各功能单元可以集成在一个处理单元中,也可以是各个单元单独物理存在,也可以两个或两个以上单元集成在一个单元中。上述集成的单元既可以采用硬件的形式实现,也可以采用软件功能单元的形式实现。
所述集成的单元如果以软件功能单元的形式实现并作为独立的产品销售或使用时,可以存储在一个计算机可读取存储介质中。基于这样的理解,本发明的技术方案本质上或者说对现有技术做出贡献的部分或者该技术方案的全部或部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可为个人计算机、移动终端、服务器或者网络设备等)执行本发明各个实施例所述方法的全部或部分步骤。而前述的存储介质包括:U盘、只读存储器(ROM,Read-Only Memory)、随机存取存储器(RAM,Random Access Memory)、移动硬盘、磁碟或者光盘等各种可以存储程序代码的介质。
以上所述仅为本发明的优选实施例而已,并不用于限制本发明,对于本领域的技术人员来说,本发明可以有各种更改和变化。凡在本发明的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。
Claims (10)
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选项标记所述发送队列中所述接收端返回的确认信息对应的数据包,将未被标记的数据包作为所述待重新发送的数据包。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201410375443.9A CN104104480B (zh) | 2014-07-31 | 2014-07-31 | 用于tcp协议的重传包丢失检测方法和装置 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201410375443.9A CN104104480B (zh) | 2014-07-31 | 2014-07-31 | 用于tcp协议的重传包丢失检测方法和装置 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN104104480A CN104104480A (zh) | 2014-10-15 |
CN104104480B true CN104104480B (zh) | 2017-11-14 |
Family
ID=51672312
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201410375443.9A Active CN104104480B (zh) | 2014-07-31 | 2014-07-31 | 用于tcp协议的重传包丢失检测方法和装置 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN104104480B (zh) |
Families Citing this family (8)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
WO2016082159A1 (en) * | 2014-11-27 | 2016-06-02 | Telefonaktiebolaget Lm Ericsson (Publ) | Methods and appratuses for buffer status reporting for device-to-device communcations |
CN105245317A (zh) * | 2015-10-20 | 2016-01-13 | 北京小鸟听听科技有限公司 | 一种数据传输方法、发送端、接收端和数据传输系统 |
CN108650064A (zh) * | 2018-05-08 | 2018-10-12 | 昆明理工大学 | 一种有效检测重传数据包丢失并预防重传超时方法 |
CN108964844B (zh) * | 2018-06-29 | 2021-08-31 | 东软医疗系统股份有限公司 | 数据传输方法、装置、电子设备和ct机架 |
CN109756708B (zh) * | 2018-12-28 | 2021-05-14 | 深圳英飞拓智能技术有限公司 | 音视频数据的续传方法及装置 |
CN113132069A (zh) * | 2021-03-22 | 2021-07-16 | 合肥富煌君达高科信息技术有限公司 | 一种丢包重传的通信机制及基于fpga实现其的方法 |
CN115118392B (zh) * | 2022-06-10 | 2024-05-28 | 网宿科技股份有限公司 | D-sack的确定方法、处理器与通信系统 |
CN116074401B (zh) * | 2023-04-06 | 2023-07-18 | 合肥综合性国家科学中心人工智能研究院(安徽省人工智能实验室) | 一种在可编程交换机上的传输层协议实现方法 |
Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
EP1180869B1 (en) * | 2000-08-18 | 2005-10-26 | Tsinghua University | A TCP aware local retransmission scheme for unreliable transmission network |
CN101656597A (zh) * | 2009-09-14 | 2010-02-24 | 中兴通讯股份有限公司 | 数据接收和发送方法、装置及数据传输系统 |
CN102761403A (zh) * | 2012-06-28 | 2012-10-31 | 深信服网络科技(深圳)有限公司 | 探测tcp丢包的方法、装置及tcp协议栈 |
-
2014
- 2014-07-31 CN CN201410375443.9A patent/CN104104480B/zh active Active
Patent Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
EP1180869B1 (en) * | 2000-08-18 | 2005-10-26 | Tsinghua University | A TCP aware local retransmission scheme for unreliable transmission network |
CN101656597A (zh) * | 2009-09-14 | 2010-02-24 | 中兴通讯股份有限公司 | 数据接收和发送方法、装置及数据传输系统 |
CN102761403A (zh) * | 2012-06-28 | 2012-10-31 | 深信服网络科技(深圳)有限公司 | 探测tcp丢包的方法、装置及tcp协议栈 |
Non-Patent Citations (4)
Title |
---|
"An Enhanced TCP Mechanism for Detecting and Differentiating the Loss of Retransmissions over wireless Networks[c]";PrasaIlthi S,Chung S H,Ahn C.;《Proceedings of IEEE International Conference on Advanced Information》;20111230;第54-61页 * |
Jaiyong Lee."Lost retransmission detection for TCP SACK".《IEEE Communications Letters》.2004,第8卷(第9期),第600-602页. * |
Jechan Han;Beomjoon Kim;Dongmin Kim;Jaiyong Lee."Reverse acknowledgment (ra) scheme: fast detection ofretransmission failures for SR-ARQ".《IEEE Communications Letters》.2006,第10卷(第10期),第 728 – 730页. * |
Mir Md. Saki Kowsar;Mominul Islam."TCP performance enhancement over IEEE 802.11".《International Conference on Computer and Information Technology (ICCIT)》.2012,(第15期),第 326 – 331页. * |
Also Published As
Publication number | Publication date |
---|---|
CN104104480A (zh) | 2014-10-15 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN104104480B (zh) | 用于tcp协议的重传包丢失检测方法和装置 | |
CN106850402A (zh) | 消息的传输方法和装置 | |
CN105553880B (zh) | 一种软件定义网络中的数据处理方法及装置 | |
CN102377650B (zh) | 数据发送处理方法、装置和系统 | |
JP5131194B2 (ja) | パケット回復方法、通信システム、情報処理装置およびプログラム | |
EP1463228A3 (en) | Communication device, transmission control method, and program product for controlling retransmission of data | |
CN107026793A (zh) | 路由方法、装置及系统 | |
JP2017212728A5 (zh) | ||
CN101635665A (zh) | 用于管理隧道的传输信道上的数据流的传送的方法、相应的隧道端点和计算机可读存储介质 | |
CN106856457B (zh) | 一种数据传输方法、发送装置及接收装置 | |
JP2017212727A5 (zh) | ||
CN108322401A (zh) | 网络传输拥塞的控制方法及装置 | |
CN104243111B (zh) | 一种数据包传输的方法和装置 | |
CN104104608B (zh) | 接收报文的方法及装置 | |
CN108322836A (zh) | 一种数据传输的方法及装置 | |
CN105450969B (zh) | 一种实时视频数据传输方法及电子设备 | |
CN105791154A (zh) | 一种基于udp的数据传输方法及装置 | |
JP2014531827A5 (zh) | ||
CN106685760A (zh) | 链路状态的探测方法及装置 | |
CN104283716B (zh) | 数据传输方法、设备及系统 | |
CN108111576A (zh) | 一种车地无线传输方法及装置 | |
US10863372B2 (en) | Packet analysis program, packet analyzing apparatus, and packet analysis method for estimating wireless quality according to a packet analysis | |
US7782830B2 (en) | Extended range wireless packetized data communication system | |
CN104184729B (zh) | 一种报文处理方法和装置 | |
US20170288815A1 (en) | System and method for early packet header verification |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant | ||
PP01 | Preservation of patent right | ||
PP01 | Preservation of patent right |
Effective date of registration: 20220225 Granted publication date: 20171114 |