一种面向数据包截止时间的传输层控制方法与流程

文档序号:15930508发布日期:2018-11-14 01:34阅读:566来源:国知局

本发明属于计算机网络技术领域,特别涉及一种面向数据包截止时间的传输层控制方法。

背景技术

tcp(transmissioncontrolprotocol传输控制协议),udp(userdatagramprotocol用户数据包协议)等已有的传输层协议为应用提供的非常初级的传输服务。tcp提供的服务是完全可靠的传输,时延上尽力而为;udp提供的服务是不可靠的传输,时延上尽量低。但有很多应用需要的是介于两者之间的服务,需要数据在一定时间之内传到。现有的传输层协议均不能满足这个需求。

已有方案分为两类:第一类修改中间路由器,为某一大类的数据提供优先转发,准入控制等区分服务,控制这一类数据的传输时延。这种做法受限于路由器的性能,准入控制的粒度很粗,只能针对一大类应用的数据包做优化,没有办法针对每个流,而且修改中间路由器也不便于部署。第二类做法是修改应用层的发包速率,应用层实时监测网络带宽和延迟的信息,据此来调节自己的发包速率,这种做法增加了应用层代码的复杂度,需要应用的架构做很大的改动,给应用带来很大的负担。



技术实现要素:

为了克服上述现有技术的缺点,本发明的目的在于提供一种面向数据包截止时间的传输层控制方法,通过在发送端的传输层进行准入控制来保证传输到接收端的都是在截至时间之前到达,避免因网络的随机丢包而引起重传,增大时延,无需再通过冗余编码来避免重传。

为了实现上述目的,本发明采用的技术方案是:

一种面向数据包截止时间的传输层控制方法,在发送端传输层进行主动丢包,准入控制,不发送会超时到达的数据包。

进一步地,可在应用层标记不同流的优先级,传输层根据优先级来有针对性的丢包。例如,可令应用调用api标记数据包的优先级和deadline,api的具体形式为对tcpbsd-socketapi的拓展:write(intfd,void*buffer,intcount,intpriority,time_tdeadline),send(intfd,void*buffer,intcout,intpriority,time_tdeadline),其他api与bsd-socketapi保持一致。

传输层将应用层下发的不同优先级的数据包放在不同的发送队列中,根据网络的丢包率和包到达时间的要求来生成前向纠错的冗余包,丢弃无法在截止时间之前到达的数据包,然后调度器根据带宽、延迟以及包到达时间的要求,计算在截止时间之前可以到达的数据包的个数,选择对应个数的数据包发送。具体地,若截止时间>2rtt,则认为重传不会导致超时,不生成冗余包;若截止时间<0.5rtt,则认为该数据包无法在截至时间之前到达,直接丢弃。

所述对应个数的数据包为优先级最高的相应个数的数据包,或者,记当前发送缓冲中待发送的数据包中离截止时间最近的数据包为p,该包的优先级为p,则调度器取出所有优先级高于p的数据包,按照当前带宽允许的发包速率,按照离deadline的紧迫程度依次模拟发包,若有数据包超时,则不发送p,否则可以发送p

所述调度器下发的数据包被拥塞控制模块接收,拥塞控制模块负责发送数据包到网络中,并接收ack,根据发包和收到的ack信息来估算网络的带宽、延迟和丢包率,同时负责做丢包的探测,将判定为丢失的数据包放入对应的重传队列中。

丢包判断采取3次重复ack,丢包率、带宽、延迟的计算借用tcp的计算方式。

与现有技术相比,本发明的有益效果是:

1、由于发送端的传输层将已经超时的数据包主动丢弃,即,如果这个数据包发送过去也会超时,就不会被发送到网络中;而应用产生的新的数据一定会在老的数据之后被丢弃,所以发到接收端的一定是应用新产生的数据。从而使得所有到达的数据包都是在应用所要求的时间之前,保证是应用最新产生的数据。

2、由于发送端调度器发送数据包的时候会考虑到数据包的优先级,只有优先级比较高得数据包不会超时的条件下才会发送优先级较低的数据包。从而保证到达接收端的是对用户体验最有效的数据包,可以在带宽一定的前提下提供最好的用户体验。

附图说明

图1是本发明一个典型的应用例示意图。

图2是本发明发送端传输层协议示意图。

具体实施方式

下面结合附图和实施例详细说明本发明的实施方式。

如图1所示,本发明的一个典型应用场景为实时视频传输。对于视频会议来说,流畅的用户体验要求端到端的时延为100ms以下。视频传输的发送端会产生多种数据包,包括音频流和视频流,视频流可以细分为基础层的视频帧,和增强层的视频帧。这些数据包下发到发送端的传输层,传输层根据网络的能力和包到达时间的要求选择一定量的数据包发送。接收端的传输层接受到之后还原出对应的数据包交给上层应用。

本发明利用了前向纠错,前向纠错是利用数据冗余来允许接收端进行数据重建以避免重传的方法。具体地,其中发送端的传输层模块如图2所示。传输层将应用层下发的不同优先级的数据包放在不同的发送队列中,根据网络的丢包率和队列的优先级施加不同程度的前向纠错冗余,然后调度器根据带宽、延迟以及包到达时间的要求,选择一定量的重要数据包发送。拥塞控制模块负责发送数据包到网络中,接收ack,根据发包和收到的ack信息来估算网络的带宽、延迟和丢包率,同时负责做丢包的探测,将判定为丢失的数据包放入对应的重传队列中。

其具体步骤如下:

s1:应用调用api标记数据包的优先级和deadline,传输层将不同优先级的数据包放入不同的发送队列中;api的具体形式为对tcpbsd-socketapi的拓展:write(intfd,void*buffer,intcount,intpriority,time_tdeadline),send(intfd,void*buffer,intcout,intpriority,time_tdeadline).其他api与bsd-socketapi保持一致。优先级的设定原则为对用户体验越重要的数据包,优先级越高。比如音频数据包的优先级高于视频数据包、控制流高于数据流等等。

s2:前向纠错模块根据网络的丢包率和包到达时间的要求来生成前向纠错的冗余包,丢弃无法在截止时间之前到达的数据包;具体地,若截止时间>2rtt,则认为重传不会导致超时,不生成冗余包;若截止时间<0.5rtt,则认为该数据包无法在截至时间之前到达,直接丢弃;若截止时间介于0.5rtt和2rtt之间,则按照前向纠错编码矩阵生成对应的冗余包。

s3:调度器根据网络的带宽,延迟的估计,计算在截止时间之前可以到达的数据包的个数,从发送队列中取出对应个数的数据包(优先选择优先级较高的数据包),具体地,可记当前发送缓冲中待发送的数据包中离截止时间最近的数据包为p,该包的优先级为p,则调度器取出所有优先级高于p的数据包,按照当前带宽允许的发包速率,按照离deadline的紧迫程度依次模拟发包,若有数据包超时,则不发送p,否则可以发送p;

s4:拥塞控制模块拿到调度器下发的数据包,发送数据,接收ack;

s5:根据接收到的ack信息来判断是否发生丢包,将丢失的报文放回对应的重传队列,丢包判断采取3次重复ack,同时计算丢包率、带宽和延迟信息(借用tcp的计算方式),反馈给对应的模块,转s1。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1