CN109039549B - 一种报文重传方法及装置 - Google Patents
一种报文重传方法及装置 Download PDFInfo
- Publication number
- CN109039549B CN109039549B CN201810772185.6A CN201810772185A CN109039549B CN 109039549 B CN109039549 B CN 109039549B CN 201810772185 A CN201810772185 A CN 201810772185A CN 109039549 B CN109039549 B CN 109039549B
- Authority
- CN
- China
- Prior art keywords
- message
- received
- preamble
- timer
- data
- 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
Images
Classifications
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L1/00—Arrangements for detecting or preventing errors in the information received
- H04L1/12—Arrangements for detecting or preventing errors in the information received by using return channel
- H04L1/16—Arrangements for detecting or preventing errors in the information received by using return channel in which the return channel carries supervisory signals, e.g. repetition request signals
- H04L1/1607—Details of the supervisory signal
- H04L1/1671—Details of the supervisory signal the supervisory signal being transmitted together with control information
- H04L1/1678—Details of the supervisory signal the supervisory signal being transmitted together with control information where the control information is for timing, e.g. time stamps
Landscapes
- Engineering & Computer Science (AREA)
- Computer Networks & Wireless Communication (AREA)
- Signal Processing (AREA)
- Communication Control (AREA)
- Mobile Radio Communication Systems (AREA)
- Detection And Prevention Of Errors In Transmission (AREA)
Abstract
本申请提供一种报文重传方法及装置,包括:确定来自对端设备的第一数据报文在本地内存中存储的第一目的存储地址,将所述第一数据报文存储至所述第一目的存储地址;依据本地内存已存储来自所述对端设备的所有数据报文,检查本设备是否存在未收到的来自所述对端设备发送的所述第一数据报文的前序报文;当检查出本设备还未收到所述第一数据报文的前序报文,则控制本设备向所述对端设备发送NACK报文,所述NACK报文用于指示对端设备重传所述前序报文。使用本申请提供的方法可以提高报文重传的效率。
Description
技术领域
本申请涉及计算机通信领域,尤其涉及一种报文重传方法及装置。
背景技术
RDMA(Remote Direct Memory Access,远程直接数据存取)技术支持网络上的两个网络设备之间,通过网卡直接读写对端的内存。在读写过程,不经过网络设备的CPU参与。通过这个技术可以有效地提高网络数据传输的吞吐量,降低数据传输时延以及减少对网络设备CPU的资源占用。
目前传输RDMA数据的传输协议有两种协议,一种是基于UDP(User DatagramProtocol,用户数据报协议)协议来传输RDMA数据的RoCE(RDMA over ConvergedEthernet)协议,另一种是基于TCP(Transmission Control Protocol,传输控制协议)协议来传输RDMA数据的iWARP(Internet Wide-area RDMA Protocol,互联网广域RDMA协议)协议。
在RoCE技术中,由于UDP协议不保证数据传输的可靠性,因此由RoCE协议来进行报文丢失的重传。
在现有的重传机制中,发送端顺序发送报文到接收端。通常,将发送端先发送的报文叫做后发送的报文的前序报文。比如,发送端先发送了报文1,然后发送了报文2,报文1就是报文2的前序报文。
当接收端收到来自于发送端的报文后可以向发送端发送该报文的ACK报文。如果接收端发现当前接收到的报文的前序报文还没收到,接收端会向发送端发送NACK报文,以使发送端重传该前序报文,以及前序报文之后的所有报文。
发明内容
有鉴于此,本申请提供一种报文重传方法及装置,用以提高报文重传的效率。
具体地,本申请是通过如下技术方案实现的:
根据本申请的第一方面,提供一种报文重传方法,所述方法应用于网络设备,包括:
确定来自对端设备的第一数据报文在本地内存中存储的第一目的存储地址,将所述第一数据报文存储至所述第一目的存储地址;
依据本地内存已存储来自所述对端设备的所有数据报文,检查本设备是否存在未收到的来自所述对端设备发送的所述第一数据报文的前序报文;
当检查出本设备还未收到所述第一数据报文的前序报文,则控制本设备向所述对端设备发送NACK报文,所述NACK报文用于指示对端设备重传所述前序报文。
可选的,所述控制本设备向所述对端设备发送NACK报文,包括:
启动与所述前序报文相关联的第一定时器;
判断在所述第一定时器的超时时间内是否收到所述前序报文;
若否,向所述对端设备发送NACK报文。
可选的,当判断出在所述第一定时器的超时时间内收到所述前序报文时,该方法进一步包括:
关闭所述第一定时器,并为接收的所述前序报文确定在本地内存中存储的第二目的存储地址,将所述前序报文存储至所述第二目的存储地址。
可选的,所述控制本设备向所述对端设备发送NACK报文,包括:
识别本地用于重传控制的第二定时器是否启动;
若未启动,则启动所述第二定时器,设置与所述第二定时器相关联的定时变量,并将该定时变量的取值设置为该第一数据报文的报文标识,并等待所述第二定时器超时;若已启动,则等待所述第二定时器超时;
在第二定时器超时时判断已记录的定时变量指示的数据报文以及该数据报文的所有前序报文是否均已收到,若否,向对端设备发送NACK报文以指示所述对端设备返回本设备还未收到的所述定时变量指示的数据报文以及该数据报文的前序报文,并将该定时变量的取值更新为已收到的目标前序报文至最新数据报文中的任一数据报文的报文标识,并重启所述第二定时器;若是,为收到的前序报文确定在本地内存中的存储地址并存储,并在确定还有未收到的、当前接收到的最新数据报文的前序报文时,更新该定时变量的取值为已收到的目标前序报文至最新数据报文中的任一数据报文的报文标识,并重启所述第二定时器;所述目标前序报文是指与当前收到的最新数据报文最相邻且还未收到的前序报文。
可选的,所述方法还包括:
若在所述第二定时器超时时确定已记录的N对应的数据报文的所有前序报文均已收到,且当前接收到的最新数据报文的前序报文均已收到时,关闭所述第二定时器。
可选的,所述方法还包括:
当接收到来自对端设备的数据报文中携带有预设标识时,向对端设备返回该数据报文的ACK报文,以使对端设备在收到该ACK报文后不再重传携带有预设标识的数据报文;所述预设标识用于触发本设备向对端设备发送数据报文的ACK报文。
根据本申请的第二方面,提供一种报文重传装置,所述装置应用于网络设备,包括:
确定单元,用于确定来自对端设备的第一数据报文在本地内存中存储的第一目的存储地址,将所述第一数据报文存储至所述第一目的存储地址;
检查单元,用于依据本地内存已存储来自所述对端设备的所有数据报文,检查本设备是否存在未收到的来自所述对端设备发送的所述第一数据报文的前序报文;
控制单元,用于当检查出本设备还未收到所述第一数据报文的前序报文,则控制本设备向所述对端设备发送NACK报文,所述NACK报文用于指示对端设备重传所述前序报文。
可选的,所述控制单元,在控制本设备向所述对端设备发送NACK报文时,具体用于启动与所述前序报文相关联的第一定时器;判断在所述第一定时器的超时时间内是否收到所述前序报文;若否,向所述对端设备发送NACK报文。
可选的,所述控制单元,还用于当判断出在所述第一定时器的超时时间内收到所述前序报文时,关闭所述第一定时器,并为接收的所述前序报文确定在本地内存中存储的第二目的存储地址,将所述前序报文存储至所述第二目的存储地址。
可选的,所述控制单元,在控制本设备向所述对端设备发送NACK报文时,具体用于识别本地用于重传控制的第二定时器是否启动;
若未启动,则启动所述第二定时器,设置与所述第二定时器相关联的定时变量,并将该定时变量的取值设置为该第一数据报文的报文标识,并等待所述第二定时器超时;若已启动,则等待所述第二定时器超时;
在第二定时器超时时判断已记录的定时变量指示的数据报文以及该数据报文的所有前序报文是否均已收到,若否,向对端设备发送NACK报文以指示所述对端设备返回本设备还未收到的所述定时变量指示的数据报文以及该数据报文的前序报文,并将该定时变量的取值更新为已收到的目标前序报文至最新数据报文中的任一数据报文的报文标识,并重启所述第二定时器;若是,为收到的前序报文确定在本地内存中的存储地址并存储,并在确定还有未收到的、当前接收到的最新数据报文的前序报文时,更新该定时变量的取值为已收到的目标前序报文至最新数据报文中的任一数据报文的报文标识,并重启所述第二定时器;所述目标前序报文是指与当前收到的最新数据报文最相邻且还未收到的前序报文。
可选的,所述控制单元,还用于若在所述第二定时器超时时确定已记录的N对应的数据报文的所有前序报文均已收到,且当前接收到的最新数据报文的前序报文均已收到时,关闭所述第二定时器。
可选的,所述装置还包括:返回单元,用于当接收到来自对端设备的数据报文中携带有预设标识时,向对端设备返回该数据报文的ACK报文,以使对端设备在收到该ACK报文后不再重传携带有预设标识的数据报文;所述预设标识用于触发本设备向对端设备发送数据报文的ACK报文。
一方面,由于在检查到本设备还有未接收到的前序报文时,不是立即发送NACK报文来触发该前序报文的重传,而是等待预设时间才进行报文的重传。这就使得本设备识别该前序报文是丢包还是乱序的识别率更高。
另一方面,本申请只是对丢失的前序报文进行重传,而不是对乱序的前序报文,或者丢失的前序报文以及该前序报文以后的报文都进行重传,所以大大减少了重传报文的数量,减少了重传报文对网络资源的占用,还提高了报文重传的效率。
第三方面,本申请在接收到报文后将报文保存在与该报文对应的目的存储地址,使得本设备即使收到了乱序的报文,依然会依据该乱序报文的报文标识,将该乱序报文储存至于该乱序报文对应的目的存储地址,使得本设备存储的报文的顺序是正确的,而不是乱序的。因此本申请不仅可以减少乱序报文的重传,还可以保证储存的报文的顺序是正确的。
附图说明
图1是本申请一示例性实施例示出的一种报文重传方法的流程图;
图2是本申请一示例性实施例示出的一种报文重传方法的示意图;
图3是本申请另一示例性实施例示出的一种报文重传方法的示意图;
图4是本申请另一示例性实施例示出的一种报文重传方法的示意图;
图5是本申请另一示例性实施例示出的一种报文重传方法的应用场景示意图;
图6是本申请一示例性实施例示出的一种网络设备的硬件结构图;
图7是本申请一示例性实施例示出的一种报文重传装置的框图。
具体实施方式
这里将详细地对示例性实施例进行说明,其示例表示在附图中。下面的描述涉及附图时,除非另有表示,不同附图中的相同数字表示相同或相似的要素。以下示例性实施例中所描述的实施方式并不代表与本申请相一致的所有实施方式。相反,它们仅是与如所附权利要求书中所详述的、本申请的一些方面相一致的装置和方法的例子。
在本申请使用的术语是仅仅出于描述特定实施例的目的,而非旨在限制本申请。在本申请和所附权利要求书中所使用的单数形式的“一种”、“所述”和“该”也旨在包括多数形式,除非上下文清楚地表示其他含义。还应当理解,本文中使用的术语“和/或”是指并包含一个或多个相关联的列出项目的任何或所有可能组合。
应当理解,尽管在本申请可能采用术语第一、第二、第三等来描述各种信息,但这些信息不应限于这些术语。这些术语仅用来将同一类型的信息彼此区分开。例如,在不脱离本申请范围的情况下,第一信息也可以被称为第二信息,类似地,第二信息也可以被称为第一信息。取决于语境,如在此所使用的词语“如果”可以被解释成为“在……时”或“当……时”或“响应于确定”。
在现有的重传机制中,发送端顺序发送报文到接收端,每个报文有一个递增的序号。接收端收到报文后可以向发送端发送该报文的ACK报文。如果接收端发现当前接收到的报文的前序报文还未收到,则会向发送端发送NACK报文。接收端在接收到该NACK报文后,重传该前序报文以及该前序报文之后的报文。
然而,一方面,由于发送端需要重传前序报文以及该前序报文之后的报文,这就使得发送端重传了许多接收端已经接收到的报文(这里定义为重复报文),大量重复报文的传输会占用网络带宽,降低报文传输的速率。
比如,假设接收端接收到序号为1、2和4的报文,当接收端发现序号为3的报文未收到时,接收端向发送端发送NACK报文。发送端在接收到该NACK报文后,会从序号为3的报文以及序号大于3的报文发送给接收端。
在接收端发现序号为3的报文至接收到重传报文这段时间内,接收端还会收到很多报文(比如还收到了序号为5-10的报文),在现有的这种重传机制了,接收端重复收到了序号为4-10的报文,从而造成大量的重复报文传输占用网络带宽的负面影响。
另一方面,当传输过程中出现乱序时,传统的RoCE技术中的接收端也会认为是丢包,来触发报文的重传。比如,假设接收端接收到的报文顺序是:1、3、2、4、5.....(这里以报文的序号表示接收到的报文顺序)。在传统的重传机制中,当接收端接收到序号为3的报文时,因为没有收到序号为2的报文,则会认为序号为2的报文丢失,重传序号为2和序号大于2的报文。由此可以看出,在传统的RoCE技术中无法识别报文丢失和报文乱序。
参见图1,图1是本申请一示例性实施例示出的一种报文重传方法的流程图。该方法可以应用于网络设备,可包括如下所示步骤。
该方法应用的网络设备主要是接收端网络设备,下文将该方法应用的网络设备称之为本设备,将发送端设备称之为对端设备。
步骤101:本设备确定来自对端设备的第一数据报文在本地内存中存储的第一目的存储地址,将所述第一数据报文存储至所述第一目的存储地址。
在实现时,对端设备可顺序发送报文至本设备,顺序发送的报文有一个递增的序号。比如,对端设备顺序发送了报文1、报文2和报文3。则报文1的序号为1,报文2的序号为2以及报文3的序号为3。
本设备会提前分配好一段内存用以存储该对端设备发送来的数据报文。
当本设备接收到对端设备的第一数据报文后,可以确定该第一数据报文在本地内存中存储的第一目的存储地址。
在一种可选的实现方式中,本设备可以依据第一数据报文的序号以及该第一数据报文携带数据的长度来确定该第一目的存储地址。
例如,通常对端设备发送的数据报文携带的数据长度是固定的。
该第一目的存储地址=该分配的内存的起始地址+(该第一数据报文的序号-1)*固定携带的数据长度。
比如,该第一数据报文的序号为5,固定携带的数据长度1024,则该第一目的存储地址为4096。
当然,上述只是一种确定第一目的存储地址的方法,当然,还可以有其他方式来确定第一数据报文在本地内存中存储的第一目的存储地址,这里不进行具体地限定。
步骤102:本设备依据本地内存已存储来自所述对端设备的所有数据报文,检查本设备是否还未收到来自所述对端设备发送的所述第一数据报文的前序报文。
其中,对端设备先发送的报文可以称为后发送的报文的前序报文。比如,对端设备先发送报文1、后发送报文2,则报文1可以称为报文2的前序报文。
如果对端设备是按报文序号递增的顺序发送报文,则序号小的报文称为序号大的报文的前序报文。
如果对端设备是按报文序号递减的顺序发送报文,则序号大的报文称为序号小的报文的前序报文。
上述只是对前序报文进行示例性地说明,不对其进行具体地限定。
步骤103:当检查出本设备还未收到所述第一数据报文的前序报文,本设备则控制本设备向所述对端设备发送NACK报文,所述NACK报文用于指示对端设备重传所述前序报文。
其中,向对端发送的NACK报文里至少可以携带用于指示需要重传的报文的指示信息。
其中,该指示信息可以是需要重传的报文的报文标识,当对端设备接收到该NACK报文后,可以重传该NACK报文里携带的报文标识所指示的报文。当然,该指示信息还可以是需要重传的多个报文中起始报文的报文标识,以及需要重传的报文数量。当对端设备接收到该NACK报文后,可以以该NACK报文携带的报文标识开始、按照该NACK报文里携带的需要重传的报文数量来重传报文。
比如,需要重传的报文为报文2、报文3和报文4,则本设备向对端设备返回的NACK报文里可以携带报文2、报文3和报文4的报文标识,对端设备在接收到该NACK报文后,可以重传报文2、报文3和报文4。
当然,本设备向对端设备返回的NACK报文里也可以携带报文2、以及需要重传的报文个数(即3)。当对端设备接收到该NACK报文后,可以从报文2开始重传,重传3个连续的报文(包括报文2),即重传报文2、报文3和报文4。
这里只是对NACK报文携带的指示信息进行示例性地说明,只要NACK报文可以指示出需要重传的报文即可,不对其进行具体地限定。
需要说明的是,需要上述指示信息可以携带在NACK报文的报文载荷中。这样做的好处在于:将上述指示信息携带在NACK报文载荷里,而不是将上述指示信息携带在NACK报文的报头中,使得现有重传机制的发送端在接收到接收端返回的NACK报文后,不依据NACK报文载荷中的指示信息重传该指示信息指示的报文,而是按照现有的报文重传机制从NACK报文标明的报文标识开始重传。这样做可以实现本申请提出的报文重传机制与现有的报文重传机制兼容。
该报文标识可以是报文的序号,报文特征等等。这里只是对NACK报文携带的内容和报文标识进行示例性地说明,不对其进行具体地限定。
在本申请实施例中,控制本设备向所述对端设备发送NACK报文的方式有多种。
方式一:
为每一个或者每几个还未收到的前序报文启动一个定时器。
1)为每一个还未收到的前序报文启动一个定时器。
在实现时,当检查出本设备还未收到该第一数据报文的前序报文(假设未收到的前序报文为1个)时,本设备则启动与这个未收到的前序报文相关联的第一定时器。
在该第一定时器超时时,本设备判断在第一定时器超时时间内是否收到该前序报文。
若在第一定时器超时时间内未收到该前序报文,本设备则向对端设备发送NACK报文,该NACK报文里至少携带了该前序报文的报文标识。对端设备接收到该NACK报文后,可以基于该NACK报文携带的报文标识,重传该前序报文。
若在第一定时器超时时间内收到了该前序报文,本设备则关闭该第一定时器,并为接收到该前序报文确定在本地内存中存储的第二目的存储地址,将该前序报文存储至该第二目的存储地址。
2)为多个还未收到的前序报文启动一个定时器
在实现时,当本设备检查出本设备还未收到该第一数据报文的前序报文(假设未收到的前序报文为多个)时,则启动与这多个未收到的前序报文相关联的第一定时器。
在该第一定时器超时时,本设备判断在第一定时器超时时间内是否收到了全部的前序报文。
若在第一定时器超时时间内未收到前序报文(这里未收到前序报文包括:在第一定时器超时时所有的前序报文均未收到,或者在第一定时器超时时只收到了部分前序报文),本设备则向对端设备发送NACK报文,该NACK报文里至少携带了未收到的前序报文的报文标识(当然,该NACK报文里除了携带未收到的前序报文的报文标识,还可以携带未收到的前序报文的报文数量)。对端设备接收到该NACK报文后,可以基于该NACK报文携带的报文标识,重传该前序报文。
若在第一定时器超时时间内收到了全部的前序报文,本设备则可关闭该第一定时器,并分别为接收到的各前序报文确定在本地内存中存储的第二目的存储地址,将各前序报文分别存储至各自对应的第二目的存储地址。
方式二:
为了节约系统资源,所以在本申请中,还可以为所有未收到的前序报文配置一个定时器。
在实现时,当检查出本设备未收到第一数据报文的前序报文时,本设备还可识别本地用于重传控制的第二定时器是否启动。
若该第二定时器未启动,本设备可以启动第二定时器,并设置与所述第二定时器相关联的定时变量,并将该定时变量的取值设置为该第一数据报文的报文标识。下面为了方便叙述将定时变量记为N。
然后,本设备可在该第二定时器超时时判断N对应的数据报文以及该N对应的数据报文的所有前序报文是否均已收到。
若在第二定时器超时时仍存在未收到的、N对应的数据报文以及该N对应的数据报文的前序报文(这里未收到的前序报文包括在第二定时器超时时N对应的数据报文和该N对应的数据报文的前序报文均未收到、或者在第二定时器超时时N对应的数据报文和该N对应的数据报文的前序报文中的部分报文未收到),本设备则向对端设备发送NACK报文以指示对端设备重新发送本设备还未收到的N对应的数据报文以及该N对应的数据报文的前序报文,本设备将N的取值更新为目标前序报文至当前收到的最新数据报文中的任一数据报文的报文标识,并重新启动第二定时器。目标前序报文是指与当前收到的最新数据报文最相邻且还未收到的前序报文。
若在第二定时器超时之前,所有前序报文均已收到,本设备可为收到的前序报文确定在本地内存中的存储地址并存储,并且本设备可进一步判断当前收到的最新数据报文的前序报文是否均已到达。若本设备还有未接收到的最新数据报文的前序报文,本设备则将N的取值更新为目标前序报文至当前收到的最新数据报文中的任一数据报文的报文标识。若最新数据报文的前序报文均已收到,本设备则关闭该第二定时器。
若该第二定时器已启动,本设备可等待所述第二定时器超时时判断已记录的N对应的数据报文以及该N对应的数据报文的所有前序报文是否均已收到。
若在第二定时器超时时仍存在未收到的、N对应的数据报文以及该N对应的数据报文的前序报文(这里未收到的前序报文包括在第二定时器超时时N对应的数据报文和该N对应的数据报文的前序报文均未收到、或者在第二定时器超时时N对应的数据报文和该N对应的数据报文的前序报文中的部分报文未收到),本设备向对端设备发送NACK报文以指示所述对端设备返回重新发送本设备还未收到的N对应的数据报文以及该N对应的数据报文的前序报文。本设备更新已记录的N的取值为目标前序报文至当前收到的最新数据报文中的任一数据报文的报文标识,并重启所述第二定时器。
若在第二定时器超时之前,所有前序报文均已收到,为收到的前序报文确定在本地内存中存储的存储地址并存储,并检查当前接收到的最新数据报文的前序报文是否均已收到,若还有未收到的当前接收到的最新数据报文的前序报文,则更新已记录的N的取值更新为目标前序报文至当前收到的最新数据报文中的任一数据报文的报文标识,并重启所述第二定时器,若当前接收到的最新数据报文的前序报文均已收到,则关闭该第二定时器。
需要说明的是,将N的取值更新为目标前序报文至当前收到的最新数据报文中的任一数据报文的报文标识。其中,目标前序报文至当前收到的最新数据报文包括:目标前序报文与当前收到的最新数据报文之间的数据报文、目标前序报文、以及最新数据报文。
为了减少本设备识别未收到的前序报文的工作量,上述将N的取值更新为目标前序报文至当前收到的最新数据报文中的任一数据报文的报文标识中最优的方案是:将上述N的取值更新为目标前序报文的下一个报文的报文标识。
其中,上述第一定时器可以是普通定时器,第二定时器可以是循环定时器,这里只是对第一、第二定时器进行示例性地说明,不对其进行具体地限定。
在本申请实施例中,为了减少ACK报文对网络资源的占用,对端设备可以指定本设备需要回复的ACK报文的数据报文。在实现时,对端设备可以在需要回复ACK报文的数据报文中增加预设标识。当本设备接收到来自于对端设备的数据报文中携带该预设标识,本设备可向对端发送ACK报文。
对于对端设备来说,对端设备在发送了携带有预设标识的数据报文后,可以启动一个定时器,在定时器超时时,若还未收到该数据报文的ACK报文,则重新发送该数据报文。
比如,在本申请中,由于本设备不需要对每个数据报文回应ACK报文,所以很容易使得最后一个数据报文丢弃。所以,对端设备在发送最后一个数据报文时,可以在该数据报文中增加预设标识。当本设备接收到携带有该预设标识的数据报文时,可以向对端设备回复ACK报文。
对端设备可以在发送最后一个数据报文后,启动定时器,若在定时器超时时仍未收到该最后一个数据报文的ACK报文,则可重新发送该最后一个数据报文。
由上述描述可知,一方面,由于在检查到本设备还有未接收到的前序报文时,不是立即发送NACK报文来触发该前序报文的重传,而是等待预设时间才进行报文的重传。这就使得本设备识别该前序报文是丢包还是乱序的识别率更高。
另一方面,本申请只是对丢失的前序报文进行重传,而不是对乱序的前序报文,或者丢失的前序报文以及该前序报文以后的报文都进行重传,所以大大减少了重传报文的数量,减少了重传报文对网络资源的占用。
第三方面,本申请在接收到报文后将报文保存在与该报文对应的目的存储地址,使得本设备即使收到了乱序的报文,依然会依据该乱序报文的报文标识,将该乱序报文储存至于该乱序报文对应的目的存储地址,使得本设备存储的报文的顺序是正确的,而不是乱序的。因此本申请不仅可以减少乱序报文的重传,还可以保证储存的报文的顺序是正确的。
下面通过具体地实施例对本申请提供的报文重传方法进行详细地说明。
假设报文标识为报文的序号,对端设备顺序发送数据报文,该顺序发送的数据报文的序号是定增的。比如,对端先发送报文1,再发送报文2,则报文1的序号为1,报文2的序号为2。
实施例一:为还未收到的一个或者几个前序报文启动一个定时器。
当本设备接收到对端设备发送的第一数据报文后,本设备可以根据该第一数据报文的序号,确定出该第一数据报文对应的第一目的存储地址,并将该第一数据报文存储在该第一目的存储地址中。
本设备可以依据本地内存中已存储的来自该对端设备的所有数据报文,检查本设备是否还未收到来自该对端设备发送的第一数据报文的前序报文;
1)为每一个还未收到的前序报文启动一个定时器。
当检查出本设备还未收到该第一数据报文的前序报文(假设未收到的前序报文为1个)时,本设备则启动与这个未收到的前序报文相关联的第一定时器。
在该第一定时器超时时,本设备判断在第一定时器超时时间内是否收到该前序报文。
若在第一定时器超时时间内未收到该前序报文,本设备则向对端设备发送NACK报文,该NACK报文里至少携带了该前序报文的报文标识。对端设备接收到该NACK报文后,可以基于该NACK报文携带的报文标识,重传该前序报文。
若在第一定时器超时时间内收到了该前序报文,本设备则关闭该第一定时器,并为接收到该前序报文确定在本地内存中存储的第二目的存储地址,将该前序报文存储至该第二目的存储地址。
2)为多个还未收到的前序报文启动一个定时器
在实现时,当本设备检查出本设备还未收到该第一数据报文的前序报文(假设未收到的前序报文为多个)时,则启动与这多个未收到的前序报文相关联的第一定时器。
在该第一定时器超时时,本设备判断在第一定时器超时时间内是否收到了全部的前序报文。
若在第一定时器超时时间内未收到全部的前序报文(这里未收到的前序报文包括在第一定时器超时时所有的前序报文均未收到,或者在第一定时器超时时只收到了部分前序报文),本设备则向对端设备发送NACK报文,该NACK报文里至少携带了未收到的前序报文的报文标识(当然,该NACK报文里除了携带未收到的前序报文的报文标识,还可以携带未收到的前序报文的报文数量)。对端设备接收到该NACK报文后,可以基于该NACK报文携带的报文标识,重传该前序报文。
若在第一定时器超时时间内收到了全部的前序报文,本设备则可关闭该第一定时器,并分别为接收到的各前序报文确定在本地内存中存储的第二目的存储地址,将各前序报文分别存储至各自对应的第二目的存储地址。
需要说明的是,若在第一定时器超时时间未收到该前序报文,则表明该前序报文丢失,这时是本设备可以向对端发送NACK,以使对端重传该前序报文。若在第一定时器超时时间收到该前序报文,则表明只是发生了乱序,这时不需要重传前序报文。
下面通过具体地例子,并结合图2、图3对实施例1进行详细地说明。
例子1:
参见图2,图2中的发送端设备是本文所述的对端设备,接收端设备是本文所述的本设备。
假设,对端设备向本本设备顺序发送报文1至报文6,报文1至报文6的序号分别为1、2、3、4、5、6。
假设本设备接收到报文1、报文2、报文3以及报文6。
当本设备接收到报文6时,将报文6写入序号6的目的存储地址,然后在本地已存储的来自于对端设备的所有报文中检查报文6的前序报文是否均已收到。在本例,由于报文6的前序报文(即报文4和报文5)均未收到。本设备可以为未收到的报文4和报文5启动第一定时器。
本设备在第一定时器超时时判断第一定时器超时前是否收到报文4和报文5,由于在第一定时器超时前未收到报文4和报文5。本设备可以向对端发送NACK报文,该NACK报文里携带了报文4和报文5的序号,当然该NACK报文里除了携带报文4和报文5的序号外还可以携带需要重传的报文数量,在本例中该NACK报文携带的需要重传的报文数量为2。
需要说明的是,在等待第一定时器超时的时间段里,对端设备还要向本设备发送报文,如图2的报文7和报文8。
当对端设备接收到该NACK报文后,可以重传报文4和报文5,然后再接着发送报文9。
本设备在接收到报文4和报文5后,可以将报文4和报文5写入至与该报文4和报文5对应的存储地址,并关闭第一定时器。
例子2:参见图3,图3中的发送端设备是本文所述的对端设备,接收端设备是本文所述的本设备。
假设,对端设备向本本设备顺序发送报文1至报文6,报文1至报文6的序号分别为1、2、3、4、5、6。
假设本设备接收到报文1、报文2、报文3、报文4以及报文6。
当本设备接收到报文6时,将报文6写入序号6的目的存储地址,然后在本地已存储的来自于对端设备的所有报文中检查报文6的前序报文是否均已收到。在本例,由于报文6的前序报文(报文5)未收到。本设备可以启动第一定时器。
本设备在第一定时器超时时判断第一定时器超时前是否收到报文5,由于在第一定时器超时前收到报文5。本设备可以将报文5写入序号5对应的目的存储地址中,并关闭第一定时器。
实施例二:
为了节约系统资源,所以在本申请中,还可以对定时器进行优化,为所有未收到的前序报文配置一个循环定时器。
当本设备接收到对端设备发送的第一数据报文后,本设备可以根据该第一数据报文的序号,确定出该第一数据报文对应的第一目的存储地址,并将该第一数据报文存储在该第一目的存储地址中。
本设备可以依据本地内存中已存储的来自该对端设备的所有数据报文,检查本设备是否还未收到来自该对端设备发送的第一数据报文的前序报文。
若本设备确定本设备还未收到该第一数据报文的前序报文,本设备可以进一步检查本地的循环定时器是否启动。
1)若本地循环定时器未启动,本设备可以启动循环定时器,并设置与该循环定时器相关联的定时变量,并将该定时变量的取值设置为第一数据报文的序号。下面为了方便叙述将定时变量记为N。
然后,本设备可以在该循环定时器超时时,判断是否收到了N对应的数据报文以及该N对应的数据报文的前序报文。
若在该循环定时器超时未收到N对应的数据报文以及该N对应的数据报文的前序报文(这里未收到的前序报文包括在循环定时器超时时N对应的数据报文和该N对应的数据报文的前序报文均未收到、或者在循环定时器超时时N对应的数据报文和该N对应的数据报文的前序报文中的部分报文未收到),则向对端设备发送NACK报文,该NACK报文里至少携带了未接收到的前序报文的序号,以使对端设备重传还未收到的N对应的数据报文以及该N对应的数据报文的前序报文,并将N更新为目标前序报文至当前收到的最新数据报文中的任一数据报文的序号,并重启该循环定时器。该目标前序报文是指当前收到的最新数据报文最相邻且还未收到的前序报文。
例如,对端设备顺序发送了报文1、报文2、报文3。本设备接收到报文1和报文3,本设备在接收到报文3(即第一数据报文)时,发现报文2还未收到,且本地未启动循环定时器。则本设备可启动循环定时器,并将循环定时器关联的定时变量N值记录为3。
假设在从循环定时器启动到该循环定时器超时这段时间里,对端设备还循序发送了报文4至报文8,而本设备只接收到报文4、报文7和报文8。
那么,上述当前收到的最新数据报文8,目标前序报文为报文6,在循环定时器超时时,本设备可判断N对应数据报文以及该数据报文的前序报文是否均已收到(即判断报文3以及报文3的前序报文是否均已收到)。
情况一:在本例中,假设报文3的前序报文仍未收到,则向对端设备发送NACK报文,以使对端设备重传报文3之前未收到的前序报文。本设备还可将N的取值更新为目标前序报文(即报文6)至最新数据报文(即报文8)中的任一数据报文(即报文6、报文7和报文8中的任一报文)的报文标识,简单来说可以将N的取值更新为6、也可以更新为7、也可以更新为8。
情况二:若在该循环定时器超时前收到了所有N对应的数据报文以及该N对应的数据报文的前序报文,则将该前序报文写入该前序报文对应的目的地址中,并检查当前收到的最新数据报文的前序报文是否均已收到。若未收到,将N更新为目标前序报文至当前收到的最新数据报文中的任一数据报文的序号并重启该循环定时器,若均已收到,则关闭该循环定时器。
仍以实施例一的1)中的例子为例进行说明。
假设在循环定时器超时时,N对应数据报文以及该数据报文的前序报文均已收到(即报文3和报文3的前序报文均已收到)。本设备可将收到的报文3或者报文3的前序报文写入至对应的目的地址。并检查当前收到的最新数据报文(即报文8)的前序报文是否均已收到。在本例中,由于报文6还未收到。本设备将N的取值更新为目标前序报文(即报文6)至最新数据报文(即报文8)中的任一数据报文(即报文6、报文7和报文8中的任一报文)的报文标识,简单来说可以将N的取值更新为6、也可以更新为7、也可以更新为8。
2)若本地循环定时器已启动,则等待该循环定时器超时。
在该循环定时器超时时,判断在该循环定时器超时前是否收到了N对应的数据报文以及该N对应的数据报文的前序报文。
若在循环定时器超时时仍存在未收到的、N对应的数据报文以及该N对应的数据报文的前序报文(这里未收到的前序报文包括在第二定时器超时时N对应的数据报文和该N对应的数据报文的前序报文均未收到、或者在第二定时器超时时N对应的数据报文和该N对应的数据报文的前序报文中的部分报文未收到),则向对端设备发送NACK报文,以使对端设备重传还未收到的N对应的数据报文以及该N对应的数据报文的前序报文,并将N更新为目标前序报文至当前收到的最新数据报文中的任一数据报文的序号,并重启该循环定时器。该目标前序报文是指当前收到的最新数据报文最相邻且还未收到的前序报文。
若在该循环定时器超时前收到N对应的数据报文以及该N对应的数据报文的前序报文均已收到,则将收到的前序报文写入该前序报文对应的目的地址中,并检查当前收到的最新数据报文的前序报文是否均已收到。若仍存在未收到的最新数据报文的前序报文,则将N更新为目标前序报文至当前收到的最新数据报文中的任一数据报文的序号,并重启该循环定时器,若当前收到的最新数据报文的前序报文均已收到,则关闭该循环定时器。
下面通过具体的例子并结合图4,对实施例2中所提供的报文重传方法进行详细地说明。图4中的发送端设备是本文所述的对端设备,接收端设备是本文所述的本设备。
以本设备接收到报文3为例。
如图4所示,当本设备接收到报文3时,本设备可将报文3写到对应的目的存储地址。若本设备从本地内存已存储的来自于对端设备的数据报文中发现报文3的前序报文(即报文2)还未收到。本设备可以检查是否启动循环定时器。
由于如图4所示,若还未启动循环定时器,则可以启动该循环定时器,并设置与该循环定时器关联的定时变量N,并将N的取值记录为N=3。
在该循环定时器第一次超时时,判断循环定时器超时前是否收到序号为N(N=3)的数据报文以及N对应的数据报文的前序报文。在本例中,由于还未收到报文2,则向对端设备发送NACK报文,以使对端设备重传报文2。此外,本设备还需要将N更新为目标前序报文(即报文4)至当前收到的最新数据报文(即报文5)中的任一报文的序号(即将N更新为4或者5),并重启循环定时器。目标前序报文为与当前收到的最新数据报文(报文5)最相邻且还未收到的前序报文(即报文4)。
这里以将N更新为目标前序报文的下一个报文,即将N更新为5为例。
在循环定时器第二次超时时,判断循环定时器超时前是否收到序号为N(即N=5)的数据报文以及N(即N=5)对应的数据报文的前序报文。在本例中如图4所示,由于序号为N(N=5)的数据报文以及N对应的数据报文的前序报文均已收到。本设备可以检测当前接收到的最新数据报文的前序报文是否均已收到,在本例中如图4所示,当前收到的最新数据报文(即报文7)的前序报文6还未收到,此时则将N的取值更新为目标前序报文(即报文6)至最新数据报文(即报文7)中的任一数据报文的序号(即将N更新为6或者更新为7)并重启该循环定时器。
这里以将N更新为目标前序报文(即报文6)的下一个报文(即报文7),即将N更新为7为例。
在循环定时器第三次超时时,判断该循环定时器超时前是否收到序号为N(即N=7)的数据报文以及该N(即N=7)对应的数据报文的前序报文。在本例中如图4所示,序号为N(N=7)的数据报文的前序报文6还未收到,则向对端设备发送NACK报文,以使对端设备重传报文6。此外,本设备还需要将N更新为目标前序报文(即报文6)至最新数据报文(即报文9)中的任一数据报文的序号(即将N更新为6、7、8、9中任一一个值),并重启循环定时器。
这里以将N更新为目标前序报文(即报文6)的下一个报文(即报文7),即将N更新为7为例。
在循环定时器第四次超时时,判断该循环定时器超时前是否收到序号为N(即N=7)的数据报文以及该N(即N=7)对应的数据报文的前序报文。在本例中如图4所示,序号为N(N=7)的数据报文以及该N(N=7)对应的数据报文的前序报文均已收到。本设备可以检测当前接收到的最新数据报文的前序报文是否均已收到,在本例中如图4所示,当前收到的最新数据报文(即报文11)的前序报文均已收到,此时可将该循环定时器关闭。
以本设备接收到报文4为例。如图4所示,当本设备接收到报文4时,本设备可将报文4写入对应的目的存储地址。由于本设备从本地内存已存储的来自于对端设备的所有数据报文中发现报文4的前序报文(即报文2)还未收到。本设备可以检查是否启动循环定时器。
如图4所示,由于已启动的循环定时器,则本设备可以等待该循环定时器超时。如图4所示,本设备可以等待到第一次定时器超时,执行上述循环定时器第一次至第四次循环定时器超时的操作。这里不再赘述。
由上述描述可知,本申请提供的报文重传方法具有如下所述优势:
第一、由于在检查到本设备还有未接收到的前序报文时,不是立即发送NACK报文来触发该前序报文的重传,而是等待预设时间才进行报文的重传。这就使得本设备可以识别出该未收到的前序报文是丢包还是乱序。这样的好处可下面举例的场景中得到了很好的阐释。
例如,如图5所示的场景。假设发送端为用户主机1,接收端为用户主机2。当用户主机1向用户主机2发送报文时,报文会经过设备1进行转发。
在现有的技术中,即使设备1有两条上行链路,分别链接设备3和设备4。设备1也只能选择一个条链路进行传输,比如设备1只能选择的传输路径为:设备1—>设备3—>设备2—>用户主机2或者路径为设备1—>设备4—>设备2—>用户主机2。而不能将用户主机发往用户主机2的流量进行分担,比如同时从上述两条路径转发给用户主机2。
不能进行流量分担的原因是:假如进行了流量分担,则会出现到达用户主机2的报文出现大量乱序,由于采用传统的重传机制无法区分报文乱序和报文丢包,所以会都当做丢包进行处理,造成大量乱序报文的大量重传。
而采用本申请提供的报文重传方法,可以区分出报文乱序和报文丢包,所以采用本申请的报文重传机制就可以实现如设备1的多链路流量分担。
第二、本申请只是对丢失的前序报文进行重传,而不是对乱序的前序报文,或者丢失的前序报文以及该前序报文以后的报文都进行重传,所以大大减少了重传报文的数量,减少了重传报文对网络资源的占用。
第三、本申请在接收到报文后将报文保存在与该报文对应的目的存储地址,使得本设备即使收到了乱序的报文,依然会依据该乱序报文的报文标识,将该乱序报文储存至于该乱序报文对应的目的存储地址,使得本设备存储的报文的顺序是正确的,而不是乱序的。因此本申请不仅可以减少乱序报文的重传,还可以保证储存的报文的顺序是正确的。
参见图6,本申请还提供一种网络设备的硬件架构图,该网络设备包括:通信接口601、处理器602、机器可读存储介质603和总线604;其中,通信接口601、处理器602和机器可读存储介质603通过总线604完成相互间的通信。处理器602通过读取并执行机器可读存储介质603中与报文重传控制逻辑对应的机器可执行指令,可执行上文描述的报文重传方法。
本文中提到的机器可读存储介质603可以是任何电子、磁性、光学或其它物理存储装置,可以包含或存储信息,如可执行指令、数据,等等。例如,机器可读存储介质可以是:RAM(Radom Access Memory,随机存取存储器)、易失存储器、非易失性存储器、闪存、存储驱动器(如硬盘驱动器)、固态硬盘、任何类型的存储盘(如光盘、dvd等),或者类似的存储介质,或者它们的组合。
参见图7,图7是本申请一示例性实施例示出的一种报文重传装置的框图。该装置可应用在网络设备上,可包括如下所示单元。
确定单元701,用于确定来自对端设备的第一数据报文在本地内存中存储的第一目的存储地址,将所述第一数据报文存储至所述第一目的存储地址;
检查单元702,用于依据本地内存已存储来自所述对端设备的所有数据报文,检查本设备是否存在未收到的来自所述对端设备发送的所述第一数据报文的前序报文;
控制单元703,用于当检查出本设备还未收到所述第一数据报文的前序报文,则控制本设备向所述对端设备发送NACK报文,所述NACK报文用于指示对端设备重传所述前序报文。
可选的,所述控制单元703,在控制本设备向所述对端设备发送NACK报文时,具体用于启动与所述前序报文相关联的第一定时器;判断在所述第一定时器的超时时间内是否收到所述前序报文;若否,向所述对端设备发送NACK报文。
可选的,所述控制单元703,还用于当判断出在所述第一定时器的超时时间内收到所述前序报文时,关闭所述第一定时器,并为接收的所述前序报文确定在本地内存中存储的第二目的存储地址,将所述前序报文存储至所述第二目的存储地址。
可选的,所述控制单元703,在控制本设备向所述对端设备发送NACK报文时,具体用于识别本地用于重传控制的第二定时器是否启动;
若未启动,则启动所述第二定时器,设置与所述第二定时器相关联的定时变量,并将该定时变量的取值设置为该第一数据报文的报文标识,并等待所述第二定时器超时;若已启动,则等待所述第二定时器超时;
在第二定时器超时时判断已记录的定时变量指示的数据报文以及该数据报文的所有前序报文是否均已收到,若否,向对端设备发送NACK报文以指示所述对端设备返回本设备还未收到的所述定时变量指示的数据报文以及该数据报文的前序报文,并将该定时变量的取值更新为已收到的目标前序报文至最新数据报文中的任一数据报文的报文标识,并重启所述第二定时器;若是,为收到的前序报文确定在本地内存中的存储地址并存储,并在确定还有未收到的、当前接收到的最新数据报文的前序报文时,更新该定时变量的取值为已收到的目标前序报文至最新数据报文中的任一数据报文的报文标识,并重启所述第二定时器;所述目标前序报文是指与当前收到的最新数据报文最相邻且还未收到的前序报文。
可选的,所述控制单元703,还用于若在所述第二定时器超时时确定已记录的N对应的数据报文的所有前序报文均已收到,且当前接收到的最新数据报文的前序报文均已收到时,关闭所述第二定时器。
可选的,所述装置还包括:返回单元704(图7中未示出),用于当接收到来自对端设备的数据报文中携带有预设标识时,向对端设备返回该数据报文的ACK报文,以使对端设备在收到该ACK报文后不再重传携带有预设标识的数据报文;所述预设标识用于触发本设备向对端设备发送数据报文的ACK报文。
上述装置中各个单元的功能和作用的实现过程具体详见上述方法中对应步骤的实现过程,在此不再赘述。
对于装置实施例而言,由于其基本对应于方法实施例,所以相关之处参见方法实施例的部分说明即可。以上所描述的装置实施例仅仅是示意性的,其中所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部模块来实现本申请方案的目的。本领域普通技术人员在不付出创造性劳动的情况下,即可以理解并实施。
以上所述仅为本申请的较佳实施例而已,并不用以限制本申请,凡在本申请的精神和原则之内,所做的任何修改、等同替换、改进等,均应包含在本申请保护的范围之内。
Claims (10)
1.一种报文重传方法,其特征在于,所述方法应用于网络设备,包括:
确定来自对端设备的第一数据报文在本地内存中存储的第一目的存储地址,将所述第一数据报文存储至所述第一目的存储地址;
依据本地内存已存储来自所述对端设备的所有数据报文,检查本设备是否存在未收到的来自所述对端设备发送的所述第一数据报文的前序报文;
当检查出本设备还未收到所述第一数据报文的前序报文,则控制本设备向所述对端设备发送NACK报文,所述NACK报文用于指示对端设备重传所述前序报文;
当接收到来自对端设备的数据报文中携带有预设标识时,向对端设备返回该数据报文的ACK报文,以使对端设备在收到该ACK报文后不再重传携带有预设标识的数据报文;所述预设标识用于触发本设备向对端设备发送数据报文的ACK报文。
2.根据权利要求1所述的方法,其特征在于,所述控制本设备向所述对端设备发送NACK报文,包括:
启动与所述前序报文相关联的第一定时器;
判断在所述第一定时器的超时时间内是否收到所述前序报文;
若否,向所述对端设备发送NACK报文。
3.根据权利要求2所述的方法,其特征在于,当判断出在所述第一定时器的超时时间内收到所述前序报文时,该方法进一步包括:
关闭所述第一定时器,并为接收的所述前序报文确定在本地内存中存储的第二目的存储地址,将所述前序报文存储至所述第二目的存储地址。
4.根据权利要求1所述的方法,其特征在于,所述控制本设备向所述对端设备发送NACK报文,包括:
识别本地用于重传控制的第二定时器是否启动;
若未启动,则启动所述第二定时器,设置与所述第二定时器相关联的定时变量,并将该定时变量的取值设置为该第一数据报文的报文标识,并等待所述第二定时器超时;若已启动,则等待所述第二定时器超时;
在第二定时器超时时判断已记录的定时变量指示的数据报文以及该数据报文的所有前序报文是否均已收到,若否,向对端设备发送NACK报文以指示所述对端设备返回本设备还未收到的所述定时变量指示的数据报文以及该数据报文的前序报文,并将该定时变量的取值更新为已收到的目标前序报文至最新数据报文中的任一数据报文的报文标识,并重启所述第二定时器;若是,为收到的前序报文确定在本地内存中的存储地址并存储,并在确定还有未收到的、当前接收到的最新数据报文的前序报文时,更新该定时变量的取值为已收到的目标前序报文至最新数据报文中的任一数据报文的报文标识,并重启所述第二定时器;所述目标前序报文是指与当前收到的最新数据报文最相邻且还未收到的前序报文。
5.根据权利要求4所述的方法,其特征在于,所述方法还包括:
若在所述第二定时器超时时确定已记录的N对应的数据报文的所有前序报文均已收到,且当前接收到的最新数据报文的前序报文均已收到时,关闭所述第二定时器。
6.一种报文重传装置,其特征在于,所述装置应用于网络设备,包括:
确定单元,用于确定来自对端设备的第一数据报文在本地内存中存储的第一目的存储地址,将所述第一数据报文存储至所述第一目的存储地址;
检查单元,用于依据本地内存已存储来自所述对端设备的所有数据报文,检查本设备是否存在未收到的来自所述对端设备发送的所述第一数据报文的前序报文;
控制单元,用于当检查出本设备还未收到所述第一数据报文的前序报文,则控制本设备向所述对端设备发送NACK报文,所述NACK报文用于指示对端设备重传所述前序报文;
所述装置还包括:返回单元,用于当接收到来自对端设备的数据报文中携带有预设标识时,向对端设备返回该数据报文的ACK报文,以使对端设备在收到该ACK报文后不再重传携带有预设标识的数据报文;所述预设标识用于触发本设备向对端设备发送数据报文的ACK报文。
7.根据权利要求6所述的装置,其特征在于,所述控制单元,在控制本设备向所述对端设备发送NACK报文时,具体用于启动与所述前序报文相关联的第一定时器;判断在所述第一定时器的超时时间内是否收到所述前序报文;若否,向所述对端设备发送NACK报文。
8.根据权利要求7所述的装置,其特征在于,所述控制单元,还用于当判断出在所述第一定时器的超时时间内收到所述前序报文时,关闭所述第一定时器,并为接收的所述前序报文确定在本地内存中存储的第二目的存储地址,将所述前序报文存储至所述第二目的存储地址。
9.根据权利要求6所述的装置,其特征在于,所述控制单元,在控制本设备向所述对端设备发送NACK报文时,具体用于识别本地用于重传控制的第二定时器是否启动;
若未启动,则启动所述第二定时器,设置与所述第二定时器相关联的定时变量,并将该定时变量的取值设置为该第一数据报文的报文标识,并等待所述第二定时器超时;若已启动,则等待所述第二定时器超时;
在第二定时器超时时判断已记录的定时变量指示的数据报文以及该数据报文的所有前序报文是否均已收到,若否,向对端设备发送NACK报文以指示所述对端设备返回本设备还未收到的所述定时变量指示的数据报文以及该数据报文的前序报文,并将该定时变量的取值更新为已收到的目标前序报文至最新数据报文中的任一数据报文的报文标识,并重启所述第二定时器;若是,为收到的前序报文确定在本地内存中的存储地址并存储,并在确定还有未收到的、当前接收到的最新数据报文的前序报文时,更新该定时变量的取值为已收到的目标前序报文至最新数据报文中的任一数据报文的报文标识,并重启所述第二定时器;所述目标前序报文是指与当前收到的最新数据报文最相邻且还未收到的前序报文。
10.根据权利要求9所述的装置,其特征在于,所述控制单元,还用于若在所述第二定时器超时时确定已记录的N对应的数据报文的所有前序报文均已收到,且当前接收到的最新数据报文的前序报文均已收到时,关闭所述第二定时器。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201810772185.6A CN109039549B (zh) | 2018-07-13 | 2018-07-13 | 一种报文重传方法及装置 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201810772185.6A CN109039549B (zh) | 2018-07-13 | 2018-07-13 | 一种报文重传方法及装置 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN109039549A CN109039549A (zh) | 2018-12-18 |
CN109039549B true CN109039549B (zh) | 2021-07-23 |
Family
ID=64642874
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201810772185.6A Active CN109039549B (zh) | 2018-07-13 | 2018-07-13 | 一种报文重传方法及装置 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN109039549B (zh) |
Families Citing this family (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN114337942B (zh) * | 2021-12-29 | 2023-06-13 | 伟乐视讯科技股份有限公司 | 一种报文重传方法、装置及电子设备 |
Family Cites Families (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN104104475B (zh) * | 2013-04-02 | 2018-05-29 | 安凯(广州)微电子技术有限公司 | 一种应答信号的生成方法、接收方法与装置 |
CN103309940B (zh) * | 2013-05-03 | 2017-03-08 | 上海证券交易所 | 一种对乱序数据流排序的方法 |
CN104519524A (zh) * | 2013-09-26 | 2015-04-15 | 中兴通讯股份有限公司 | 一种基于多流传输的数据排序方法及接收装置 |
CN106416112B (zh) * | 2015-04-09 | 2019-11-05 | 华为技术有限公司 | 一种数据传输的方法及装置 |
-
2018
- 2018-07-13 CN CN201810772185.6A patent/CN109039549B/zh active Active
Also Published As
Publication number | Publication date |
---|---|
CN109039549A (zh) | 2018-12-18 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
EP3707882B1 (en) | Multi-path rdma transmission | |
US7940665B2 (en) | Transparent optimization for transmission control protocol flow control | |
CN106878191B (zh) | 一种数据传送方法、发送节点、接收节点及数据传送系统 | |
US7899925B2 (en) | System and method for fast, reliable byte stream transport | |
CN106656431B (zh) | 一种报文传输方法及用户设备 | |
US8526441B2 (en) | System and method for handling out-of-order frames | |
US5664091A (en) | Method and system for a voiding unnecessary retransmissions using a selective rejection data link protocol | |
JP4932008B2 (ja) | 輻輳を低減させる高信頼性パケット送信のための方法、システム、およびコンピュータ・プログラム・コード(輻輳を低減させる高信頼性転送パケ | |
CN108270682A (zh) | 一种报文传输方法、终端、网络设备及通信系统 | |
US7496038B2 (en) | Method for faster detection and retransmission of lost TCP segments | |
US8605578B1 (en) | System and method for handling of destination host side congestion | |
JP5541293B2 (ja) | パケット受信装置、パケット通信システム、パケット順序制御方法 | |
US10461886B2 (en) | Transport layer identifying failure cause and mitigation for deterministic transport across multiple deterministic data links | |
US11115343B2 (en) | Transport layer providing deterministic transport across multiple deterministic data links | |
CN101945341A (zh) | 一种无线传感器网络点对点传输协议 | |
CN114024914A (zh) | 视频数据传输方法、装置及电子设备 | |
JP2002217988A (ja) | データ配信管理装置およびデータ配信管理方法 | |
CN109039549B (zh) | 一种报文重传方法及装置 | |
US8769137B2 (en) | Systems and methods for negotiated accelerated block option for trivial file transfer protocol (TFTP) | |
JP2001069174A (ja) | 伝送制御方法 | |
US10009409B2 (en) | Retransmission control network node and related method | |
CN116827853A (zh) | 一种路径处理方法、装置及电子设备 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |