欢迎光临小豌豆知识网!
当前位置:首页 > 电学技术 > 电通讯技术> 丢包重传方法、设备及存储介质独创技术28079字

丢包重传方法、设备及存储介质

2021-02-10 01:58:14

丢包重传方法、设备及存储介质

  技术领域

  本公开涉及数据传输技术领域,尤其涉及一种丢包重传方法、设备及存储介质。

  背景技术

  为了提高发送效率,视频帧会采用UDP(User Datagram Protocol,用户数据报协议)方式进行传输,但是,UDP是一种不可靠的传输协议,当数据包发送之后,无法得知其是否安全完整的到达接收端,因此,在这种情况下,若出现丢包则会造成接收端视频花屏。

  发明内容

  本公开实施例提供一种丢包重传方法、设备及存储介质,能够降低现有UDP传输中发生丢包的问题。所述技术方案如下:

  根据本公开实施例的第一方面,提供一种丢包重传方法,应用于发送端,该方法包括:

  获取接收端发送的窗口同步确认SAK控制消息,SAK控制消息至少包括:接收窗口的边界序号、接收端当前接收到的数据包的包序号、第一数据包的包序号,接收窗口的边界序号以及第一数据包的包序号均小于当前接收到的数据包的包序号;

  获取与第一数据包的包序号对应的第一数据包,并将第一数据包添加至发送端的丢包队列中;

  检测目标范围内的数据包是否存在丢包,目标范围用于指示接收窗口的边界序号与接收端当前接收到的数据包的包序号之间的范围;

  在检测到目标范围内的第二数据包丢包时,将第二数据包添加至发送端的丢包队列中;

  将丢包队列中的数据包发送至接收端。

  通过设置SAK响应机制,不仅能够使接收端直接通知发送端哪些数据包发生了丢包,而且能够使发送端根据SAK控制消息主动判断哪些数据包发生了丢失,这样,在两种方式相结合的情况下,能够尽可能降低丢包比例,保证接收端尽可能完整的接收发送端发送的数据包,降低UDP传输中发生丢包的可能性。

  在一个实施例中,检测目标范围内的数据包是否存在丢包包括:

  获取在接收到SAK控制消息时对应的到达时间;

  根据接收端当前接收到的数据包的包序号,获取发送端发送接收端当前接收的数据包的发送时间;

  根据到达时间与发送时间计算得到参考往返时延;

  根据参考往返时延检测目标范围内的数据包是否存在丢包。

  在一个实施例中,根据到达时间与发送时间计算得到参考往返时延包括:

  根据到达时间与发送时间计算得到当前往返时延;

  将当前往返时延插入预设的链表尾部,并根据链表中每个节点对应的往返时延确定得到参考往返时延,参考往返时延为链表中所有往返时延中的最小值、最大值或平均值。

  在一个实施例中,根据参考往返时延检测目标范围内的数据包是否存在丢包包括:

  检测在参考往返时延内是否接收到接收端发送的目标数据包对应的目标SAK控制消息,目标数据包为满足反馈SAK控制消息的数据包。

  在一个实施例中,在检测到目标范围内的第二数据包丢包时,将第二数据包添加至发送端的丢包队列中包括:

  在参考往返时延内未接收到接收端发送的目标数据包对应的目标SAK控制消息时,确定目标数据包丢包;

  将目标数据包添加至发送端的丢包队列中。

  在一个实施例中,获取接收端发送的SAK控制消息包括:

  获取接收端按照预设周期发送的SAK控制消息;

  或者,获取接收端在确定丢包时发送的SAK控制消息;

  或者,获取接收端在接收到目标数据包时发送的SAK控制消息。

  在一个实施例中,该方法还包括:

  获取发送端对应的发送窗口的边界序号;

  根据发送窗口的边界序号以及接收窗口的边界序号,确定发送队列中待发送数据包的最小序号;

  将发送队列中的数据包发送给接收端。

  在一个实施例中,将丢包队列和发送队列中的数据包通过同一个数据传输通道发生给接收端,丢包队列的优先级高于发送队列。

  根据本公开实施例的第二方面,提供一种丢包重传设备,丢包重传设备包括处理器和存储器,存储器中存储有至少一条计算机指令,指令由处理器加载并执行以实现第一方面以及第一方面的任一实施例所描述的丢包重传方法中所执行的步骤。

  根据本公开实施例的第四方面,提供一种计算机可读存储介质,存储介质中存储有至少一条计算机指令,指令由处理器加载并执行以实现第一方面以及第一方面的任一实施例所描述的丢包重传方法中所执行的步骤。

  应当理解的是,以上的一般描述和后文的细节描述仅是示例性和解释性的,并不能限制本公开。

  附图说明

  此处的附图被并入说明书中并构成本说明书的一部分,示出了符合本公开的实施例,并与说明书一起用于解释本公开的原理。

  图1是本公开实施例提供的一种丢包重传方法的流程图;

  图2是本公开实施例提供的一种SAK响应机制的框架示意图;

  图3是本公开实施例提供的一种SAK控制消息的发送机制示意图;

  图4是本公开实施例提供的一种RTT链表的结构示意图;

  图5是本公开实施例提供的一种丢包重传装置的结构图;

  图6是本公开实施例提供的一种丢包重传装置的结构图。

  具体实施方式

  这里将详细地对示例性实施例进行说明,其示例表示在附图中。下面的描述涉及附图时,除非另有表示,不同附图中的相同数字表示相同或相似的要素。以下示例性实施例中所描述的实施方式并不代表与本公开相一致的所有实施方式。相反,它们仅是与如所附权利要求书中所详述的、本公开的一些方面相一致的装置和方法的例子。

  本公开实施例提供一种丢包重传方法,应用于发送端,如图1所示,该丢包重传方法包括以下步骤:

  101、获取接收端发送的SAK控制消息。

  SAK(窗口同步确认)控制消息至少包括:接收窗口的边界序号、接收端当前接收到的数据包的包序号、第一数据包的包序号,接收窗口的边界序号以及第一数据包的包序号均小于接收端当前接收到的数据包的包序号。

  在本公开实施例中,获取接收端发送的SAK控制消息包括:

  获取接收端按照预设周期发送的SAK控制消息;或者,获取接收端在确定丢包时发送的SAK控制消息;或者,获取接收端在接收到目标数据包时发送的SAK控制消息。

  在实际中,接收端可以对接收到的每个数据包发送一个SAK控制消息,但是,这样会增加SAK控制消息的发送数量;因此,为了减少SAK控制消息的发送数量,接收端并不会对每个接收到的数据包都发送一次SAK控制消息,在以下三种情况下任意一种情况发生时,三种情况具体包括:(1)接收端周期发送;(2)接收端发现丢包时;(3)接收端收到必须要响应SAK控制消息的数据时,接收端会向发送端发送SAK控制消息。

  102、获取与第一数据包的包序号对应的第一数据包,并将第一数据包添加至发送端的丢包队列中。

  在本公开实施例中,当接收端发现丢包时,会将该第一数据包的包序号发送给发送端,发送端根据第一数据包的包序号找到相应的第一数据包,并将该第一数据包加入到丢包队列中。

  103、检测目标范围内的数据包是否存在丢包。

  目标范围用于指示接收窗口的边界序号与接收端当前接收到的数据包的包序号之间的范围。其中,接收窗口的边界序号用于指示该边界序号之前的数据包不再需要发送端重复发送。

  在本公开实施例中,检测目标范围内的数据包是否存在丢包包括:

  获取在接收到SAK控制消息时对应的到达时间;

  根据接收端当前接收到的数据包的包序号,获取发送端发送接收端当前接收到的数据包的发送时间;

  根据到达时间和发送时间计算得到参考往返时延;

  根据参考往返时延检测目标范围内的数据包是否存在丢包。

  具体的,在发送端接收到接收端反馈的SAK控制消息时,记录接收到SAK控制消息的到达时间,由于发送端在发送数据包时都会记录一个发送时间,因此,根据SAK控制消息中接收端当前接收到的数据包的包序号,获取该数据包的发送时间;将到达时间与发送时间的差值确定为参考往返时延,参考往返时延可以用作丢包重传的超时时间确认,因此,根据参考往返时延对目标范围内的数据包是否存在丢包。

  由于网络时延会随着网络状态在不断的变化,同时,为了控制依赖网络时延时间丢包重传,必须对网络时延的一个变化趋势做一个判断,这就需要保存一段时间内的网络时延时间,而且需要不断的更新。本公开采用链表的结构来保存网络时延,该链表的容量为N,即链接中所有节点的数量为N,在链表没有满时,每收到一个SAK控制消息,就计算出一个网络时延,并将插入到链表尾部;在链表满时,先将链表头部的节点删除,再将计算得到的网络时延插入到链表尾部,并把链表指针后移,通过链表中不断更新的网络时延计算得到参考网络时延。

  那么,对于根据到达时间与发送时间计算得到参考往返时延包括:

  根据到达时间与发送时间计算得到当前往返时延;

  将当前往返时延插入预设的链表尾部,并根据链表中每个节点对应的往返时延确定得到参考往返时延,参考往返时延为链表中所有往返时延中的最小值、最大值或平均值。

  在确定好参考网络时延后,根据确定的参考网络时延检测目标范围内的数据包是否存在丢包包括:检测在参考往返时延内是否接收到接收端发送的目标数据包对应的目标SAK控制消息,目标数据包为满足反馈SAK控制消息的数据包。根据步骤101中所描述的,接收端在上述三种情况下任意一种情况发生时会向发送端发送SAK控制消息,因此,在满足响应条件的数据包发送之后进行计时,判断在参考网络时延内是否收到该数据包的SAK的控制消息。

  104、在检测到目标范围内的第二数据包丢包时,将第二数据包添加至发送端的丢包队列中。

  根据步骤103中所描述的,在检测到目标范围内的第二数据包丢包时,将第二数据包添加至发送端的丢包队列中包括:在参考往返时延内未接收到接收端发送的目标数据包对应的目标SAK控制消息时,确定目标数据包丢包;将目标数据包添加至发送端的丢包队列中。

  105、将丢包队列中的数据包发送至接收端。

  在将丢包队列中的数据包发送后,丢包队列重置数据包的超时计时。

  在本公开的一个实施例中,该方法还包括:

  获取发送端对应的发送窗口的边界序号;

  根据发送窗口的边界序号以及接收窗口的边界序号,确定发送队列中待发送数据包的最小序号。

  接收窗口的边界序号用于指示接收端所确定的该边界序号之前的数据包不再需要发送端重复发送,只发该边界序号之上的数据包;发送窗口的边界序号用于指示发送端所确定的该边界序号之前的数据包不再需要发送,只发该边界序号之上的数据包。因此,对于发送队列中待发送数据包的最小序号,可以根据发送窗口的边界序号以及接收窗口的边界序号进行确定,可以取两者的较大值,或者取两者的较小值,具体可以根据实际情况进行确定。这样,在确定好发送队列中待发送数据包的最小序号后,将丢包队列和发送队列中的数据包进行发送。其中,丢包队列和发送队列中的数据包可以通过同一个数据传输通道进行传输,也可以分别通过不同的数据传输通道进行传输。对于通过同一个数据传输通道进行传输的,丢包队列的优先级更高,也就是,当丢包队列中有数据包时,则优先对丢包队列中的数据包进行发送。

  本公开实施例提供的丢包重传方法,通过设置SAK响应机制,不仅能够使接收端直接通知发送端哪些数据包发生了丢包,而且能够使发送端根据SAK控制消息主动判断哪些数据包发生了丢失,这样,在两种方式相结合的情况下,能够尽可能降低丢包比例,保证接收端尽可能完整的接收发送端发送的数据包,降低UDP传输中发生丢包的可能性。

  基于上述图1对应的实施例提供的丢包重传方法,本公开另一实施例提供一种丢包重传方法,针对UDP传输中发生丢包的问题。为了使用网络传输,根据协议规定,每个数据包不能大于最大传输单元(MTU,Maximum Transmission Unit),因此,视频数据在发送前都会进行拆包,保证每个包的大小不大于MTU。下文示例中,都将视频帧拆分为1472字节大小的数据包,并且以实时传输协议(RTP,Real-time Transport Protocol)方式对其进行封装。

  本公开实施例在视频数据传输中提出了一种SAK(窗口同步确认)机制,在数据传输过程中,接收端向发送端发送SAK控制消息,其中,SAK控制信息中至少携带:窗口边界信息、收到的包信息、丢失的包信息等。其实现原理可参照图2所示,具体的:

  1)发送端设置一个发送窗口和一个丢包队列,接收端设置一个接收窗口和一个丢包队列;

  2)发送端的发送窗口维持一个最小可发送包序号,该序号默认为-1,发送端的丢包队列里面存放的是没有被接收端确认接收的数据包;

  3)接收端的接收窗口维持一个最小可接收包序号,该序号默认为-1,接收端的丢包队列里面存放的是没有收到的包序号,即被接收端认为丢失的数据包的包序号;

  4)发送端和接收端的窗口和丢包队列可以通过SAK控制消息进行同步。

  具体的,SAK控制消息的格式形如(x,y,z...),其中:

  (1)x表示接收端的接收窗口边界,是一个确定的序号,根据接收端检测的情况进行设置,默认为-1;发送端根据x的值决定发送包序号的最小值,这样不会给接收端发送无效数据。发送包序号的值由发送端和接收端共同决定,取两者的较大值。比如,发送端的窗口边界为100,发送端根据某种规则认为序号120之前的包不再需要发送,发送端可以主动更新窗口下限,只发送序号120以上的包。而接收端也可以根据其它规则来设置x的取值,比如,接收窗口大小为100,但此时接收到的数据包的序号最大为200,接收端可以根据某种规则认为序号150之前的包不再需要重复发送,此时可以将x值设置为151。当发送端接收到该SAK控制消息后,将发送窗口边界更新为151。

  (2)y表示接收端收到某个数据包的确认序号;根据该数据包的确认到达时间和该包的发送时间两者差值就可以计算一段网络时间内的往返时延(RTT,round-trip time),根据计算出的RTT来用作丢包重传的超时时间确认,具体实现在后面详述。

  3)z表示当前窗口下丢包序号列表,没有发生丢包时该值可无,z>x。

  下面对本公开实施例的详细处理流程介绍如下:

  步骤301、在数据发送过程中,接收端按照预设规则向发送端返回SAK控制消息。

  在实际实现时,为了减少SAK控制消息的发送数量,接收端并不会对每个接收包都发送一次SAK控制消息,在本公开实施例中,在以下三种情况下任意一种情况发生时,接收端会向发送端发送SAK控制消息:

  A、接收端周期发送(比如以10ms为周期);

  B、接收端发现丢包时;

  C、接收端收到必须要响应SAK的数据时。

  接收端发送SAK控制消息的机制参考图3所示。发送端采用RTP方式对数据包进行封装后进行发送,210~216为数据包的序号,示例性的,RTP210(TAG)表示采用RTP方式对序号为210的数据包进行封装后发送,TAG表示需要响应SAK控制消息的标签,RTP211~RTP216表示采用RTP方式对序号为210~216的数据包进行封装后发送。接收端在接收到RTP210(TAG)时,由于序号为210的数据包为必须要响应SAK控制消息的数据包,因此,反馈SAK(x,210)给发送端;本公开实施例以发送5个数据包为一个周期T,那么,发送端将RTP214发送给接收端后,接收端在接收到RTP214时,周期性的反馈SAK(x,214)给发送端;发送端将RTP215和RTP216两个数据包依次发送给接收端后,接收端未接收到RTP215数据包,在接收到RTP216数据包后立马反馈SAK(x,216,215)给发送端,告知发送端已接收到RTP216数据包,RTP215数据包丢失。

  步骤302、发送端接收到SAK控制消息之后,进行如下处理:

  1)根据x值确定发送数据包的最小序号值;

  2)根据y值计算出参考RTT,根据计算出的参考RTT对后续发送的数据包是否发生丢失进行判断,并将判断为丢失的数据包加入当前丢包队列;

  3)根据z值确定出丢包序号,根据丢包序号找出相应的数据包,将相应数据包加入当前丢包队列。

  可以看出,发送端所维护的丢包队列中的数据来自两方面,一方面是接收端主动告知的丢包序号;另一方面是,由发送端经过主动计算后判断出可能发生的丢包。

  该步骤中,发送端根据接收到的SAK控制消息计算出一个RTT值,RTT值的计算方法为:发送端在发送数据包时会记录一个发送时间t1,当接收到相应数据包的确认收到信息(包含在SAK中)时,记录接收到该确认收到信息的时间t2,这样,该数据包的RTT=t2-t1,也就是网络数据包的一个来回的时间。

  由于RTT时间会随着网络状态在不断的变化中,同时为了控制依赖RTT时间丢包重传,必须对RTT的一个变化趋势做一个判断,这就需要保存一段时间内的RTT时间,而且是需要更新的,所以建议采用链表的结构来保存RTT时间,相应链表结构参考图4所示。

  具体的,定义一个链表,容量为n,即设置n个节点,每个节点用于存放RTT(示例性,可以设置n为30),初始表头指针指=0;在链表没有满的时候,发送端每收到一个接收端发送的SAK控制消息,对应计算出一个RTT,并将相应RTT插入链表中;在链表满的时候,首先将链表头部的头结点删除,再将新计算得到的RTT插入链表尾部,并把表头指针后移;通过不断更新,链表内的RTT为最近一段时间内计算得到的若干个RTT值,这样可以根据链表中的RTT值不断计算出参考RTT值。

  具体的,计算参考RTT值的具体方式是:

  当链表内容发生更新时,根据链表内的各个RTT值确定出参考RTT值,参考RTT值可以为链表内所有RTT中的最小值、或者,最大值,或者,所有RTT的平均值。

  实际应用中,可以根据需要确定参考RTT值,参考RTT值越小则丢包识别更为细致,有可能导致重复发送的数据包更多(有一些数据包并没有真正丢包,而是在接收端的接收时间有延迟,此时就可能导致很多延迟的数据包被重复发送);但是,参考RTT值设置的过高,则有可能导致某些丢包不能被检测到。因此,一般会根据需要来在[最小RTT,最大RTT]这个区间内来选取参考RTT的取值,优选的,可以将RTT参考值取为当前RTT链表中的所有RTT的平均值。

  确定参考RTT的取值之后,根据所确定的参考RTT来判断是否发生丢包的具体实现方式是:根据步骤101可知,对于满足响应条件的数据包,接收端都应该发送SAK控制消息,但是有些情况下,由于丢包等情况,会导致发送端收不到SAK控制消息,因此,可以在满足响应条件的数据包发送之后,进行计时,如果超过参考RTT的时长还没有收到该数据包的SAK控制消息,则认为该数据包丢失,此时将该数据包加入丢包队列。

  步骤303、对丢包队列和发送队列中的数据包进行发送;数据包发送后,发送队列开启数据包的超时计时,丢包队列重置数据包的超时计时。

  这一步骤中,丢包队列和发送队列中的数据包通过同一个数据传输通道进展传输,只是丢包队列的优先级越高,也就是,当丢包队列中有数据包时,则优先对丢包队列中的数据包进行发送。

  本公开实施提供一种丢包重传方法,针对UDP传输中发生丢包的问题,通过设置SAK响应机制,一方面,能够使接收端直接通知发送端哪些数据包发生了丢包,另一方面,能够由发送端根据SAK中的y参数计算出参考RTT后,根据参考RTT来主动判断哪些数据包有可能发生了丢失,这样,两种方式相结合的情况下,能够尽可能降低丢包比例,保证接收端尽可能完整的接收发送端发送的数据包。

  基于上述图1对应的实施例中所描述的丢包重传方法,下述为本公开装置实施例,可以用于执行本公开方法实施例。

  本公开实施例提供一种丢包重传装置,如图5所示,该丢包重传装置50包括:接收模块501、获取模块502、添加模块503、检测模块504和发送模块505;

  接收模块501,用于获取接收端发送的窗口同步确认SAK控制消息,SAK控制消息至少包括:接收窗口的边界序号、接收端当前接收到的数据包的包序号、第一数据包的包序号,接收窗口的边界序号以及第一数据包的包序号均小于当前接收到的数据包的包序号;

  获取模块502,用于获取与第一数据包的包序号对应的第一数据包;

  添加模块503,用于并将第一数据包添加至发送端的丢包队列中;

  检测模块504,用于检测目标范围内的数据包是否存在丢包,目标范围用于指示接收窗口的边界序号与接收端当前接收到的数据包的包序号之间的范围;

  添加模块503,用于在检测到目标范围内的第二数据包丢包时,将第二数据包添加至发送端的丢包队列中;

  发送模块505,用于将丢包队列中的数据包发送至接收端。

  如图6所示,该丢包重传装置50还包括:计算模块506和确定模块507;

  在一个实施例中,获取模块502,用于获取在接收到SAK控制消息时对应的到达时间;

  获取模块502,用于根据接收端当前接收到的数据包的包序号,获取发送端发送接收端当前接收的数据包的发送时间;

  计算模块506,用于根据到达时间与发送时间计算得到参考往返时延;

  检测模块504,用于根据参考往返时延检测目标范围内的数据包是否存在丢包。

  在一个实施例中,计算模块506,用于根据到达时间与发送时间计算得到当前往返时延;

  确定模块507,用于将当前往返时延插入预设的链表尾部,并根据链表中每个节点对应的往返时延确定得到参考往返时延,参考往返时延为链表中所有往返时延中的最小值、最大值或平均值。

  在一个实施例中,检测模块504,用于检测在参考往返时延内是否接收到接收端发送的目标数据包对应的目标SAK控制消息,目标数据包为满足反馈SAK控制消息的数据包。

  在一个实施例中,确定模块507,用于在参考往返时延内未接收到接收端发送的目标数据包对应的目标SAK控制消息时,确定目标数据包丢包;

  添加模块503,用于将目标数据包添加至发送端的丢包队列中。

  在一个实施例中,接收模块501,用于获取接收端按照预设周期发送的SAK控制消息;或者,获取接收端在确定丢包时发送的SAK控制消息;或者,获取接收端在接收到目标数据包时发送的SAK控制消息。

  在一个实施例中,获取模块502,用于获取发送端对应的发送窗口的边界序号;

  确定模块507,用于根据发送窗口的边界序号以及接收窗口的边界序号,确定发送队列中待发送数据包的最小序号;

  发送模块505,用于将发送队列中的数据包发送给接收端。

  在一个实施例中,发送模块505,用于将丢包队列和发送队列中的数据包通过同一个数据传输通道发生给接收端,丢包队列的优先级高于发送队列。

  本公开实施例提供的丢包重传装置,通过设置SAK响应机制,不仅能够使接收端直接通知发送端哪些数据包发生了丢包,而且能够使发送端根据SAK控制消息主动判断哪些数据包发生了丢失,这样,在两种方式相结合的情况下,能够尽可能降低丢包比例,保证接收端尽可能完整的接收发送端发送的数据包,降低UDP传输中发生丢包的可能性。

  本公开实施例还提供了一种丢包重传设备,该丢包重传设备包括接收器、发射器、存储器和处理器,该发射器和存储器分别与处理器连接,存储器中存储有至少一条计算机指令,处理器用于加载并执行至少一条计算机指令,以实现上述图1对应的实施例中所描述的丢包重传方法。

  基于上述图1~图4对应的实施例中所描述的丢包重传方法,本公开实施例还提供一种计算机可读存储介质,例如,非临时性计算机可读存储介质可以是只读存储器(英文:Read Only Memory,ROM)、随机存取存储器(英文:Random Access Memory,RAM)、CD-ROM、磁带、软盘和光数据存储装置等。该存储介质上存储有计算机指令,用于执行上述图1~图4对应的实施例中所描述的丢包重传方法,此处不再赘述。

  本领域普通技术人员可以理解实现上述实施例的全部或部分步骤可以通过硬件来完成,也可以通过程序来指令相关的硬件完成,的程序可以存储于一种计算机可读存储介质中,上述提到的存储介质可以是只读存储器,磁盘或光盘等。

  本领域技术人员在考虑说明书及实践这里公开的公开后,将容易想到本公开的其它实施方案。本申请旨在涵盖本公开的任何变型、用途或者适应性变化,这些变型、用途或者适应性变化遵循本公开的一般性原理并包括本公开未公开的本技术领域中的公知常识或惯用技术手段。说明书和实施例仅被视为示例性的,本公开的真正范围和精神由下面的权利要求指出。

《丢包重传方法、设备及存储介质.doc》
将本文的Word文档下载到电脑,方便收藏和打印
推荐度:
点击下载文档

文档为doc格式(或pdf格式)