一种基于反向请求的可靠udp的实现方法

文档序号:7803561阅读:262来源:国知局
一种基于反向请求的可靠udp的实现方法
【专利摘要】本发明涉及计算机的数据传输【技术领域】,提供一种基于反向请求的可靠UDP的实现方法,包括以下步骤:数据发送端在线发送数据包,发送端所有发送的数据将会被缓存;数据接收端通过接收缓存策略接收到数据包后,由接收端的丢包检测策略检测并判断丢包后向发送端发出数据包的重传请求;数据发送端接收到来自数据接收端的重传请求,则根据重传请求处理重发数据包。本发明比一般的可靠UDP解决方法更节省系统资源,并且效率更高。
【专利说明】—种基于反向请求的可靠UDP的实现方法
【技术领域】
[0001]本发明属于计算机的数据传输【技术领域】,特别是涉及一种基于反向请求的可靠UDP的实现方法。
【背景技术】
[0002]UDP:UDP是User Datagram Protocol的简称,中文名是用户数据报协议,是OSI (Open System Interconnection,开放式系统互联)参考模型中一种无连接的传输层协议,提供面向事务的简单不可靠信息传送服务,IETF RFC768是UDP的正式规范。UDP在IP报文的协议号是17。
[0003]TCP !Transmission Control Protocol/Internet Protocol 的简写,中译名为传输控制协议/因特网互联协议,又名网络通讯协议,是Internet最基本的协议、Internet国际互联网络的基础,由网络层的IP协议和传输层的TCP协议组成。TCP/IP定义了电子设备如何连入因特网,以及数据如何在它们之间传输的标准。协议采用了 4层的层级结构,每一层都呼叫它的下一层所提供的协议来完成自己的需求。通俗而言:TCP负责发现传输的问题,一有问题就发出信号,要求重新传输,直到所有数据安全正确地传输到目的地。而IP是给因特网的每一台 电脑规定一个地址。
[0004]线程(Thread):线程,有时被称为轻量级进程(Lightweight Process, LWP),是程序执行流的最小单元。一个标准的线程由线程ID,当前指令指针(PC),寄存器集合和堆栈组成。另外,线程是进程中的一个实体,是被系统独立调度和分派的基本单位,线程自己不拥有系统资源,只拥有一点儿在运行中必不可少的资源,但它可与同属一个进程的其它线程共享进程所拥有的全部资源。一个线程可以创建和撤消另一个线程,同一进程中的多个线程之间可以并发执行。由于线程之间的相互制约,致使线程在运行中呈现出间断性。线程也有就绪、阻塞和运行三种基本状态。每一个程序都至少有一个线程,若程序只有一个线程,那就是程序本身。线程是程序中一个单一的顺序控制流程。在单个程序中同时运行多个线程完成不同的工作,称为多线程。
[0005]现有的IP数据传输基本上都采用可靠数据传输协议TCP,或者非可靠的用户数据报文传输协议UDP的模式,UDP传输具有占有系统小,传输效率高,时延低等优势而被广泛用于IP数据传输的解决方案中,但是UDP是一种非可靠的IP数据传输协议。为了充分利用UDP的优势,针对UDP提出了很多不同的方法来提升UDP的可靠性,比方说UDT方法就是一种类似于TCP的基于正向传输、确认、重发的方法。基于UDP协议传输的IP数据包,接收端需要在接收到数据包后向数据源发送确认,从而解决UDP的传输中存在的可靠性问题。

【发明内容】

[0006]本发明方法解决的是IP数据包在UDP传输模式下的可靠传输,并提供了完整的解决方法。
[0007]一种基于反向请求的可靠UDP的实现方法,包括以下步骤:[0008]数据发送端在线发送数据包,发送端所有发送的数据将会被缓存;
[0009]数据接收端通过接收缓存策略接收到数据包后,由接收端的丢包检测策略检测并判断丢包后向发送端发出数据包的重传请求;
[0010]数据发送端接收到来自数据接收端的重传请求,则根据重传请求处理重发数据包。
[0011]优选地,所述数据包中定义了数据包的顺序号和类型,发送端定义一个全局的无符号的整形自增变量,当系统发送数据包时,将使用该全局变量的值赋予数据包的顺序号,同时将该全局变量加I。
[0012]优选地,所述发送数据包的缓存分为一级缓存和二级缓存,一级缓存满,所有数据被二级缓存至本地的磁盘文件,并释放当前一级缓存空间。
[0013]优选地,所述接收端的接受缓存策略为采用数组队列来管理当前接收到的数据包。
[0014]优选地,所述丢包检测策略中还引入计时器和时间检测触发策略。
[0015]优选地,所述计时器由独立的线程来管理,当数据包被标识为期望接收,则启动一个倒数的计时器,如果计时器的技术到0,且该数据包仍然被标识为期望接收则该数据包被标识为丢包,此时,可以向数据发送端反向请求该数据包,同时重置该期望数据包的计时器。
[0016]优选地,所述时间检测触发策略将任何已接收到的数据包的后一个顺序号标识为期望接收数据包,并启动计时器,对于任意发送和接收端之间的数据通信,通信中最后一个数据包总会被检测到。
[0017]本发明方法主要解决的是基于UDP协议传输数据包时的可靠性问题。解决方案不同于其它方法,是通过反向请求的方式来解决UDP的可靠性,本方案中提到的反向请求是指数据源在发送数据包以后,不需要等待接收端的确认,而是假设接收端会接收到数据报文,所有从数据发送端发出的数据包都具有顺序增加的顺序号,数据接收端在接收到数据包后,会根据数据包的序号以及计时器并依据相应的策略来检测和判断丢失的数据包,并且依次向数据发送端发送重传请求,同时还会启动超时判断,一旦在超时时间内没有接收到发送端发来的数据,接收端会再次发送重传请求直到接收到数据包从而达成可靠UDP传输的目的。本发明比一般的可靠UDP解决方法更节省系统资源,并且效率更高。
【专利附图】

【附图说明】
[0018]图1是本发明的一个实施方式中丢包检测策略流程图;
[0019]图2是本发明的一个实施方式中时间检测触发策略流程图。
【具体实施方式】
[0020]下面结合附图并通过【具体实施方式】来进一步说明本发明的技术方案。
[0021]一种基于反向请求的可靠UDP的实现方法,包括以下步骤:
[0022]数据发送端在线发送数据包,发送端所有发送的数据将会被缓存;
[0023]数据接收端通过接收缓存策略接收到数据包后,由接收端的丢包检测策略检测并判断丢包后向发送端发出数据包的重传请求;[0024]数据发送端接收到来自数据接收端的重传请求,则根据重传请求处理重发数据包。
[0025]数据发送端定义了一个全局的无符号的整形自增变量,当系统发送数据包时,将使用该全局变量的值赋予数据包的顺序号,同时将该全局变量加I。在设计上,该变量与当前的UDP socket处于同一个作用域当中。
[0026]发送数据包的缓存策略,在发送端,所有发送的数据将会被缓存,缓存分为一级缓存和二级缓存,他们用来处理重传的请求和服务。以及缓存在内存中申请,一旦缓存满,所有的数据被二级缓存至本地的磁盘文件,并释放当前一级缓存的空间。
[0027]重传请求处理,当发送端接收到了来自于接收端的重传请求,发送端则根据重传请求中的包序来查询缓存中的数据包,并发送至接收端,重发的数据包的包序不变,发送端包序自增变量不变。如果被请求的数据包不存在于缓存中,发送端则发出“请求数据包不存在”类型的回复。
[0028]接收端的接收缓存策略,接收端的缓存在内存中定义,数量为当前数据包的整数个大小,采用数组队列来管理当前接收到的数据包,该缓存不仅是保存接收到的数据包,更主要的作用是快速检索丢包。
[0029]丢包检测和重传策略,接收端缓存定义了缓存游标来标识当前缓存数组中的第一个数据包的包序,和当前填 充位置的数据包的包序,接收到的数据包会按照包序顺序填放在缓存中,过程为:接受UDP数据包——获得当前数据包的包序——根据缓存游标计算存储地址——复制数据包至缓存。
[0030]因此,根据包的顺序就可以初步判断是否存在丢包,初判流程如图1所示。
[0031 ] 由于UDP数据包是乱序抵达,并不遵照FIFO的策略,特别是在多线程接收模式下,更可能存在后发先至的情况产生,因此在丢包检测的策略中,还引入了计时器,当数据包被标识为期望接收,则启动一个倒数的计时器,该计时器由独立的线程来管理,如果计时器的技术到0,且该数据包仍然被标识为期望接收则该数据包被标识为丢包,此时,可以向发送方反向请求该数据包,同时重置该期望数据包的计时器,完整流程如图2。
[0032]以上策略是由后置数据包驱动的丢包检测策略,在实际的数据包传输过程中,存在最后一个UDP数据包不可达的情况,而最后一个数据包得不到丢包检测的触发。因此本发明中还引入了时间检测触发的策略,该策略的在于将任何已接收到的数据包的后一个顺序号标识为期望接收数据包,并启动计时器。对于任意发送和接收端之间的数据通信,通信中最后一个数据包总会被检测到。
[0033]注:对于多源UDP通信数据包包序保护不在本发明方案中讨论。
[0034]假设UDP传输在给定时延下的丢包率是n%,n〈100 ;无丢包情况下用户待传输数据包的传输数量是N。
[0035]那么在传统模式下,发送端系统需要消耗资源来开启超时并等待数据包的接收确认,在数据的发送端和接收端之间一定会产生超过待传输数据包数量2倍的总的数据传输次数,如下分析:
[0036]Roundl:发送端发送N,接收端发送确认N(l-n% );
[0037]Round2:发送端重传N*n%,接收端发送确认N*n% (l~n% );
[0038]…[0039]Round M:发送端重传N*n% ~M,接收端发送确认N*n% 'M(l~n% )
[0040]那么总的实际数据包的传输次数为M次传输的总和:
[0041]N(2-n% )/(l-n% )
[0042]这就意味着系统除了需要消耗CPU资源外,还需要消耗更多宝贵的带宽资源。而反向确认的解决方法,只有丢失的数据包才会被请求重传,所以在这种方式下,发送端不需要消耗额外资源来监控确认超时和重新发送数据,发送端只需要启动一个数据接收线程来处理数据的重传请求,在带宽资源上,数据包总的传次数如下分析所示:
[0043]Roundl:发送端发送N,接收端请求重传N*n% ;
[0044]Round2:发送端重传 N*n% * (l~n% ),接收端请求重传 N*n% * (l~n% ) *n%
[0045]…
[0046]Round M:发送端重传 N*n % ~ (M_l) * (l_n % ) ~ (M_l),接收端请求重传 N*n %~Μ*(1-η% ) (M-1)
[0047]那么总的实际数据包的传输次数为M次传输的总和:
[0048](l+n% )N/(l-n% +n% "2)
[0049]在当前网络质量越来越好的情况下,UDP的平均丢包率也越来越小,比起正向确认的方法,UDP反向数据包请求方法就越来越具备优势。假设用户待传输10000个数据包,那么在一般的正向确认方法和本发明中的反向法,分别可以得到总的实际数据传输次数如下表下图所示:
[0050]
【权利要求】
1.一种基于反向请求的可靠UDP的实现方法,其特征在于,包括以下步骤: 数据发送端在线发送数据包,发送端所有发送的数据将会被缓存; 数据接收端通过接收缓存策略接收到数据包后,由接收端的丢包检测策略检测并判断丢包后向发送端发出数据包的重传请求; 数据发送端接收到来自数据接收端的重传请求,则根据重传请求处理重发数据包。
2.如权利要求1所述的基于反向请求的可靠UDP的实现方法,其特征在于,所述数据包中定义了数据包的顺序号和类型,发送端定义一个全局的无符号的整形自增变量,当系统发送数据包时,将使用该全局变量的值赋予数据包的顺序号,同时将该全局变量加I。
3.如权利要求1所述的基于反向请求的可靠UDP的实现方法,其特征在于,所述发送数据包的缓存分为一级缓存和二级缓存,一级缓存满,所有数据被二级缓存至本地的磁盘文件,并释放当前一级缓存空间。
4.如权利要求1所述的基于反向请求的可靠UDP的实现方法,其特征在于,所述接收端的接受缓存策略为采用数组队列来管理当前接收到的数据包。
5.如权利要求1所述的基于反向请求的可靠UDP的实现方法,其特征在于,所述丢包检测策略中还引入计时器和时间检测触发策略。
6.如权利要求5所述的基于反向请求的可靠UDP的实现方法,其特征在于,所述计时器由独立的线程来管理,当数据包被标识为期望接收,则启动一个倒数的计时器,如果计时器的技术到O,且该数据包仍然被标识为期望接收则该数据包被标识为丢包,此时,可以向数据发送端反向请求该数据包,同时重置该期望数据包的计时器。
7.如权利要求5所述的基于反向请求的可靠UDP的实现方法,其特征在于,所述时间检测触发策略将任何已接收到的数据包的后一个顺序号标识为期望接收数据包,并启动计时器,对于任意发送和接收端之间的数据通信,通信中最后一个数据包总会被检测到。
【文档编号】H04L12/813GK103957169SQ201410200683
【公开日】2014年7月30日 申请日期:2014年5月14日 优先权日:2014年5月14日
【发明者】王庚 申请人:上海复兰信息科技有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1