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

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

Info

Publication number
CN103957169A
CN103957169A CN201410200683.5A CN201410200683A CN103957169A CN 103957169 A CN103957169 A CN 103957169A CN 201410200683 A CN201410200683 A CN 201410200683A CN 103957169 A CN103957169 A CN 103957169A
Authority
CN
China
Prior art keywords
packet
data
timer
implementation method
reliable udp
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.)
Pending
Application number
CN201410200683.5A
Other languages
English (en)
Inventor
王庚
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Shanghai Fu Lan Information Technology Co Ltd
Original Assignee
Shanghai Fu Lan Information Technology Co Ltd
Priority date (The priority date 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 date listed.)
Filing date
Publication date
Application filed by Shanghai Fu Lan Information Technology Co Ltd filed Critical Shanghai Fu Lan Information Technology Co Ltd
Priority to CN201410200683.5A priority Critical patent/CN103957169A/zh
Publication of CN103957169A publication Critical patent/CN103957169A/zh
Pending legal-status Critical Current

Links

Landscapes

  • Data Exchanges In Wide-Area Networks (AREA)

Abstract

本发明涉及计算机的数据传输技术领域,提供一种基于反向请求的可靠UDP的实现方法,包括以下步骤:数据发送端在线发送数据包,发送端所有发送的数据将会被缓存;数据接收端通过接收缓存策略接收到数据包后,由接收端的丢包检测策略检测并判断丢包后向发送端发出数据包的重传请求;数据发送端接收到来自数据接收端的重传请求,则根据重传请求处理重发数据包。本发明比一般的可靠UDP解决方法更节省系统资源,并且效率更高。

Description

一种基于反向请求的可靠UDP的实现方法
技术领域
本发明属于计算机的数据传输技术领域,特别是涉及一种基于反向请求的可靠UDP的实现方法。
背景技术
UDP:UDP是User Datagram Protocol的简称,中文名是用户数据报协议,是OSI(Open System Interconnection,开放式系统互联)参考模型中一种无连接的传输层协议,提供面向事务的简单不可靠信息传送服务,IETF RFC768是UDP的正式规范。UDP在IP报文的协议号是17。
TCP:Transmission Control Protocol/Internet Protocol的简写,中译名为传输控制协议/因特网互联协议,又名网络通讯协议,是Internet最基本的协议、Internet国际互联网络的基础,由网络层的IP协议和传输层的TCP协议组成。TCP/IP定义了电子设备如何连入因特网,以及数据如何在它们之间传输的标准。协议采用了4层的层级结构,每一层都呼叫它的下一层所提供的协议来完成自己的需求。通俗而言:TCP负责发现传输的问题,一有问题就发出信号,要求重新传输,直到所有数据安全正确地传输到目的地。而IP是给因特网的每一台电脑规定一个地址。
线程(Thread):线程,有时被称为轻量级进程(Lightweight Process,LWP),是程序执行流的最小单元。一个标准的线程由线程ID,当前指令指针(PC),寄存器集合和堆栈组成。另外,线程是进程中的一个实体,是被系统独立调度和分派的基本单位,线程自己不拥有系统资源,只拥有一点儿在运行中必不可少的资源,但它可与同属一个进程的其它线程共享进程所拥有的全部资源。一个线程可以创建和撤消另一个线程,同一进程中的多个线程之间可以并发执行。由于线程之间的相互制约,致使线程在运行中呈现出间断性。线程也有就绪、阻塞和运行三种基本状态。每一个程序都至少有一个线程,若程序只有一个线程,那就是程序本身。线程是程序中一个单一的顺序控制流程。在单个程序中同时运行多个线程完成不同的工作,称为多线程。
现有的IP数据传输基本上都采用可靠数据传输协议TCP,或者非可靠的用户数据报文传输协议UDP的模式,UDP传输具有占有系统小,传输效率高,时延低等优势而被广泛用于IP数据传输的解决方案中,但是UDP是一种非可靠的IP数据传输协议。为了充分利用UDP的优势,针对UDP提出了很多不同的方法来提升UDP的可靠性,比方说UDT方法就是一种类似于TCP的基于正向传输、确认、重发的方法。基于UDP协议传输的IP数据包,接收端需要在接收到数据包后向数据源发送确认,从而解决UDP的传输中存在的可靠性问题。
发明内容
本发明方法解决的是IP数据包在UDP传输模式下的可靠传输,并提供了完整的解决方法。
一种基于反向请求的可靠UDP的实现方法,包括以下步骤:
数据发送端在线发送数据包,发送端所有发送的数据将会被缓存;
数据接收端通过接收缓存策略接收到数据包后,由接收端的丢包检测策略检测并判断丢包后向发送端发出数据包的重传请求;
数据发送端接收到来自数据接收端的重传请求,则根据重传请求处理重发数据包。
优选地,所述数据包中定义了数据包的顺序号和类型,发送端定义一个全局的无符号的整形自增变量,当系统发送数据包时,将使用该全局变量的值赋予数据包的顺序号,同时将该全局变量加1。
优选地,所述发送数据包的缓存分为一级缓存和二级缓存,一级缓存满,所有数据被二级缓存至本地的磁盘文件,并释放当前一级缓存空间。
优选地,所述接收端的接受缓存策略为采用数组队列来管理当前接收到的数据包。
优选地,所述丢包检测策略中还引入计时器和时间检测触发策略。
优选地,所述计时器由独立的线程来管理,当数据包被标识为期望接收,则启动一个倒数的计时器,如果计时器的技术到0,且该数据包仍然被标识为期望接收则该数据包被标识为丢包,此时,可以向数据发送端反向请求该数据包,同时重置该期望数据包的计时器。
优选地,所述时间检测触发策略将任何已接收到的数据包的后一个顺序号标识为期望接收数据包,并启动计时器,对于任意发送和接收端之间的数据通信,通信中最后一个数据包总会被检测到。
本发明方法主要解决的是基于UDP协议传输数据包时的可靠性问题。解决方案不同于其它方法,是通过反向请求的方式来解决UDP的可靠性,本方案中提到的反向请求是指数据源在发送数据包以后,不需要等待接收端的确认,而是假设接收端会接收到数据报文,所有从数据发送端发出的数据包都具有顺序增加的顺序号,数据接收端在接收到数据包后,会根据数据包的序号以及计时器并依据相应的策略来检测和判断丢失的数据包,并且依次向数据发送端发送重传请求,同时还会启动超时判断,一旦在超时时间内没有接收到发送端发来的数据,接收端会再次发送重传请求直到接收到数据包从而达成可靠UDP传输的目的。本发明比一般的可靠UDP解决方法更节省系统资源,并且效率更高。
附图说明
图1是本发明的一个实施方式中丢包检测策略流程图;
图2是本发明的一个实施方式中时间检测触发策略流程图。
具体实施方式
下面结合附图并通过具体实施方式来进一步说明本发明的技术方案。
一种基于反向请求的可靠UDP的实现方法,包括以下步骤:
数据发送端在线发送数据包,发送端所有发送的数据将会被缓存;
数据接收端通过接收缓存策略接收到数据包后,由接收端的丢包检测策略检测并判断丢包后向发送端发出数据包的重传请求;
数据发送端接收到来自数据接收端的重传请求,则根据重传请求处理重发数据包。
数据发送端定义了一个全局的无符号的整形自增变量,当系统发送数据包时,将使用该全局变量的值赋予数据包的顺序号,同时将该全局变量加1。在设计上,该变量与当前的UDP socket处于同一个作用域当中。
发送数据包的缓存策略,在发送端,所有发送的数据将会被缓存,缓存分为一级缓存和二级缓存,他们用来处理重传的请求和服务。以及缓存在内存中申请,一旦缓存满,所有的数据被二级缓存至本地的磁盘文件,并释放当前一级缓存的空间。
重传请求处理,当发送端接收到了来自于接收端的重传请求,发送端则根据重传请求中的包序来查询缓存中的数据包,并发送至接收端,重发的数据包的包序不变,发送端包序自增变量不变。如果被请求的数据包不存在于缓存中,发送端则发出“请求数据包不存在”类型的回复。
接收端的接收缓存策略,接收端的缓存在内存中定义,数量为当前数据包的整数个大小,采用数组队列来管理当前接收到的数据包,该缓存不仅是保存接收到的数据包,更主要的作用是快速检索丢包。
丢包检测和重传策略,接收端缓存定义了缓存游标来标识当前缓存数组中的第一个数据包的包序,和当前填充位置的数据包的包序,接收到的数据包会按照包序顺序填放在缓存中,过程为:接受UDP数据包——获得当前数据包的包序——根据缓存游标计算存储地址——复制数据包至缓存。
因此,根据包的顺序就可以初步判断是否存在丢包,初判流程如图1所示。
由于UDP数据包是乱序抵达,并不遵照FIFO的策略,特别是在多线程接收模式下,更可能存在后发先至的情况产生,因此在丢包检测的策略中,还引入了计时器,当数据包被标识为期望接收,则启动一个倒数的计时器,该计时器由独立的线程来管理,如果计时器的技术到0,且该数据包仍然被标识为期望接收则该数据包被标识为丢包,此时,可以向发送方反向请求该数据包,同时重置该期望数据包的计时器,完整流程如图2。
以上策略是由后置数据包驱动的丢包检测策略,在实际的数据包传输过程中,存在最后一个UDP数据包不可达的情况,而最后一个数据包得不到丢包检测的触发。因此本发明中还引入了时间检测触发的策略,该策略的在于将任何已接收到的数据包的后一个顺序号标识为期望接收数据包,并启动计时器。对于任意发送和接收端之间的数据通信,通信中最后一个数据包总会被检测到。
注:对于多源UDP通信数据包包序保护不在本发明方案中讨论。
假设UDP传输在给定时延下的丢包率是n%,n<100;无丢包情况下用户待传输数据包的传输数量是N。
那么在传统模式下,发送端系统需要消耗资源来开启超时并等待数据包的接收确认,在数据的发送端和接收端之间一定会产生超过待传输数据包数量2倍的总的数据传输次数,如下分析:
Round1:发送端发送N,接收端发送确认N(1-n%);
Round2:发送端重传N*n%,接收端发送确认N*n%(1-n%);
Round M:发送端重传N*n%^M,接收端发送确认N*n%^M(1-n%)
那么总的实际数据包的传输次数为M次传输的总和:
N(2-n%)/(1-n%)
这就意味着系统除了需要消耗CPU资源外,还需要消耗更多宝贵的带宽资源。而反向确认的解决方法,只有丢失的数据包才会被请求重传,所以在这种方式下,发送端不需要消耗额外资源来监控确认超时和重新发送数据,发送端只需要启动一个数据接收线程来处理数据的重传请求,在带宽资源上,数据包总的传次数如下分析所示:
Round1:发送端发送N,接收端请求重传N*n%;
Round2:发送端重传N*n%*(1-n%),接收端请求重传N*n%*(1-n%)*n%
Round M:发送端重传N*n%^(M-1)*(1-n%)^(M-1),接收端请求重传N*n%^M*(1-n%)^(M-1)
那么总的实际数据包的传输次数为M次传输的总和:
(1+n%)N/(1-n%+n%^2)
在当前网络质量越来越好的情况下,UDP的平均丢包率也越来越小,比起正向确认的方法,UDP反向数据包请求方法就越来越具备优势。假设用户待传输10000个数据包,那么在一般的正向确认方法和本发明中的反向法,分别可以得到总的实际数据传输次数如下表下图所示:
丢包率 60.00% 30.00% 10.00% 1.00% 0.10% 0.01%
正向法 35000 24285.71 21111.11 20101.01 20010.01 20001
反向法 21052.63 16455.7 12087.91 10200.99 10020.01 10002
可以看出,在良好的网络质量条件下,反向法总的数据传输次数接近于无丢包情况下完成数据传输所需要的传输次数,而正向法则至少需要2倍的数据传输次数。由上述数据可知反向法在资源节省方面更加具有优势。
注:n%^M意思是n%的M次方,随着重传次数的增加,n%的M次方趋近于0。
本发明方法的技术优点在于更高效地利用计算机的各种资源,特别是在当前带宽资源有限的情况下,通过更少的传输数量就能够达成UDP可靠传输的目的,在当前网络技术和计算机技术的条件下能够极大地发挥视频,音频以及可靠消息传输的要求,能够很好地满足用户的需求。
同时该方法适用于不同的终端产品,所有支持多线程,以及标准UDPsocket的终端设备都可以应用本发明中的解决方,本发明适用于Windows PC,Linux,iOS iPad,Android Pad等不同操作系统的终端设备。
以上结合具体实施例描述了本发明的技术原理。这些描述只是为了解释本发明的原理,而不能以任何方式解释为对本发明保护范围的限制。基于此处的解释,本领域的技术人员不需要付出创造性的劳动即可联想到本发明的其它具体实施方式,这些方式都将落入本发明的保护范围之内。

Claims (7)

1.一种基于反向请求的可靠UDP的实现方法,其特征在于,包括以下步骤:
数据发送端在线发送数据包,发送端所有发送的数据将会被缓存;
数据接收端通过接收缓存策略接收到数据包后,由接收端的丢包检测策略检测并判断丢包后向发送端发出数据包的重传请求;
数据发送端接收到来自数据接收端的重传请求,则根据重传请求处理重发数据包。
2.如权利要求1所述的基于反向请求的可靠UDP的实现方法,其特征在于,所述数据包中定义了数据包的顺序号和类型,发送端定义一个全局的无符号的整形自增变量,当系统发送数据包时,将使用该全局变量的值赋予数据包的顺序号,同时将该全局变量加1。
3.如权利要求1所述的基于反向请求的可靠UDP的实现方法,其特征在于,所述发送数据包的缓存分为一级缓存和二级缓存,一级缓存满,所有数据被二级缓存至本地的磁盘文件,并释放当前一级缓存空间。
4.如权利要求1所述的基于反向请求的可靠UDP的实现方法,其特征在于,所述接收端的接受缓存策略为采用数组队列来管理当前接收到的数据包。
5.如权利要求1所述的基于反向请求的可靠UDP的实现方法,其特征在于,所述丢包检测策略中还引入计时器和时间检测触发策略。
6.如权利要求5所述的基于反向请求的可靠UDP的实现方法,其特征在于,所述计时器由独立的线程来管理,当数据包被标识为期望接收,则启动一个倒数的计时器,如果计时器的技术到0,且该数据包仍然被标识为期望接收则该数据包被标识为丢包,此时,可以向数据发送端反向请求该数据包,同时重置该期望数据包的计时器。
7.如权利要求5所述的基于反向请求的可靠UDP的实现方法,其特征在于,所述时间检测触发策略将任何已接收到的数据包的后一个顺序号标识为期望接收数据包,并启动计时器,对于任意发送和接收端之间的数据通信,通信中最后一个数据包总会被检测到。
CN201410200683.5A 2014-05-14 2014-05-14 一种基于反向请求的可靠udp的实现方法 Pending CN103957169A (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN201410200683.5A CN103957169A (zh) 2014-05-14 2014-05-14 一种基于反向请求的可靠udp的实现方法

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN201410200683.5A CN103957169A (zh) 2014-05-14 2014-05-14 一种基于反向请求的可靠udp的实现方法

Publications (1)

Publication Number Publication Date
CN103957169A true CN103957169A (zh) 2014-07-30

Family

ID=51334396

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201410200683.5A Pending CN103957169A (zh) 2014-05-14 2014-05-14 一种基于反向请求的可靠udp的实现方法

Country Status (1)

Country Link
CN (1) CN103957169A (zh)

Cited By (13)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN104901972A (zh) * 2015-06-24 2015-09-09 上海文广科技(集团)有限公司 一种文件接收和补包的方法
CN105356975A (zh) * 2015-11-27 2016-02-24 尹绍华 一种数据传输方法
CN106302426A (zh) * 2016-08-09 2017-01-04 合肥埃科光电科技有限公司 一种基于fpga的带重发机制的udp协议栈实现方法
CN106603481A (zh) * 2016-07-22 2017-04-26 深圳曼塔智能科技有限公司 数据传输方法及装置
CN107172181A (zh) * 2017-06-07 2017-09-15 河南辉煌城轨科技有限公司 一种基于双线程的文件传输方法
CN107979449A (zh) * 2016-10-25 2018-05-01 杭州海康威视数字技术股份有限公司 一种数据传输方法及装置
CN109560901A (zh) * 2018-11-14 2019-04-02 广州虎牙信息科技有限公司 一种数据重传方法、装置、终端设备及存储介质
CN110299973A (zh) * 2018-03-23 2019-10-01 天地融科技股份有限公司 一种数据滚动传输的接收方法及装置
CN110299974A (zh) * 2018-03-23 2019-10-01 天地融科技股份有限公司 一种数据接收方法及装置
CN110299971A (zh) * 2018-03-23 2019-10-01 天地融科技股份有限公司 一种数据报文接收方法及装置
CN110768984A (zh) * 2019-10-25 2020-02-07 中汇信息技术(上海)有限公司 一种数据传输的方法、装置及电子设备
CN113645015A (zh) * 2021-10-13 2021-11-12 徐州工程学院 一种被动重发的可靠传输方法
CN115276914A (zh) * 2022-06-21 2022-11-01 北京网聚云联科技有限公司 一种基于多级缓存重传机制的udp传输方法、装置以及设备

Citations (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
EP1204249A1 (en) * 2000-06-23 2002-05-08 Mitsubishi Denki Kabushiki Kaisha Method and system for packet retransmission
CN1617525A (zh) * 2003-11-14 2005-05-18 华为技术有限公司 一种保证通用路由封装隧道传输可靠的方法
CN101030839A (zh) * 2007-02-13 2007-09-05 华为技术有限公司 一种数据重传的方法
CN101615990A (zh) * 2008-06-24 2009-12-30 华为技术有限公司 一种数据重传的方法、系统和装置
CN101621368A (zh) * 2009-08-13 2010-01-06 北京必创科技有限公司 一种重传数据包的方法、装置及系统
CN103269260A (zh) * 2013-06-03 2013-08-28 腾讯科技(深圳)有限公司 数据传输方法、数据接收端、数据发送端和数据传输系统

Patent Citations (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
EP1204249A1 (en) * 2000-06-23 2002-05-08 Mitsubishi Denki Kabushiki Kaisha Method and system for packet retransmission
CN1617525A (zh) * 2003-11-14 2005-05-18 华为技术有限公司 一种保证通用路由封装隧道传输可靠的方法
CN101030839A (zh) * 2007-02-13 2007-09-05 华为技术有限公司 一种数据重传的方法
CN101615990A (zh) * 2008-06-24 2009-12-30 华为技术有限公司 一种数据重传的方法、系统和装置
CN101621368A (zh) * 2009-08-13 2010-01-06 北京必创科技有限公司 一种重传数据包的方法、装置及系统
CN103269260A (zh) * 2013-06-03 2013-08-28 腾讯科技(深圳)有限公司 数据传输方法、数据接收端、数据发送端和数据传输系统

Cited By (21)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN104901972A (zh) * 2015-06-24 2015-09-09 上海文广科技(集团)有限公司 一种文件接收和补包的方法
CN104901972B (zh) * 2015-06-24 2019-02-01 上海文广科技(集团)有限公司 一种文件接收和补包的方法
CN105356975A (zh) * 2015-11-27 2016-02-24 尹绍华 一种数据传输方法
CN106603481A (zh) * 2016-07-22 2017-04-26 深圳曼塔智能科技有限公司 数据传输方法及装置
WO2018014421A1 (zh) * 2016-07-22 2018-01-25 深圳曼塔智能科技有限公司 数据传输方法及装置
CN106302426A (zh) * 2016-08-09 2017-01-04 合肥埃科光电科技有限公司 一种基于fpga的带重发机制的udp协议栈实现方法
CN107979449A (zh) * 2016-10-25 2018-05-01 杭州海康威视数字技术股份有限公司 一种数据传输方法及装置
CN107979449B (zh) * 2016-10-25 2020-11-20 杭州海康威视数字技术股份有限公司 一种数据传输方法及装置
CN107172181A (zh) * 2017-06-07 2017-09-15 河南辉煌城轨科技有限公司 一种基于双线程的文件传输方法
CN107172181B (zh) * 2017-06-07 2020-12-04 河南辉煌城轨科技有限公司 一种基于双线程的文件传输方法
CN110299974A (zh) * 2018-03-23 2019-10-01 天地融科技股份有限公司 一种数据接收方法及装置
CN110299971A (zh) * 2018-03-23 2019-10-01 天地融科技股份有限公司 一种数据报文接收方法及装置
CN110299973A (zh) * 2018-03-23 2019-10-01 天地融科技股份有限公司 一种数据滚动传输的接收方法及装置
CN110299973B (zh) * 2018-03-23 2022-04-05 天地融科技股份有限公司 一种数据滚动传输的接收方法及装置
CN110299971B (zh) * 2018-03-23 2022-04-08 天地融科技股份有限公司 一种数据报文接收方法及装置
CN109560901A (zh) * 2018-11-14 2019-04-02 广州虎牙信息科技有限公司 一种数据重传方法、装置、终端设备及存储介质
CN109560901B (zh) * 2018-11-14 2021-09-21 广州虎牙信息科技有限公司 一种数据重传方法、装置、终端设备及存储介质
CN110768984A (zh) * 2019-10-25 2020-02-07 中汇信息技术(上海)有限公司 一种数据传输的方法、装置及电子设备
CN113645015A (zh) * 2021-10-13 2021-11-12 徐州工程学院 一种被动重发的可靠传输方法
CN115276914A (zh) * 2022-06-21 2022-11-01 北京网聚云联科技有限公司 一种基于多级缓存重传机制的udp传输方法、装置以及设备
CN115276914B (zh) * 2022-06-21 2024-02-02 北京网聚云联科技有限公司 一种基于多级缓存重传机制的udp传输方法、装置以及设备

Similar Documents

Publication Publication Date Title
CN103957169A (zh) 一种基于反向请求的可靠udp的实现方法
CN110995697B (zh) 一种大数据传输方法及系统
CN101155144B (zh) 用于数据通信的方法和装置
US20080049617A1 (en) System for fine grained flow-control concurrency to prevent excessive packet loss
TWI734380B (zh) 電腦實施的方法和系統以及非暫態電腦可讀儲存媒體
CN106612284B (zh) 一种流数据的传输方法和装置
CN101656756A (zh) 一种发送速率自适应控制的文件传输方法及其系统
US20020165973A1 (en) Adaptive transport protocol
US20120320732A1 (en) Multicast bulk transfer system
CN104735077A (zh) 一种使用环形缓存和环形队列实现udp高效并发的方法
TWI235569B (en) Data communication method and system
CN104038845A (zh) 报文传输方法及装置
KR20130065619A (ko) 송신 노드로부터 목적지 노드로의 데이터 전송 방법
CN104579601A (zh) 一种重传请求处理方法和装置
KR101600060B1 (ko) 다중캐스트 네트워크에서 sctp를 위한 프로토콜 부스터
US20240187482A1 (en) Device and method for remote direct memory access
CN114039703A (zh) 数据传输方法、装置、设备和介质
US10461892B2 (en) Low latency communications
AU2011380292A1 (en) Apparatus and method for transmitting a message to multiple receivers
CN114039702B (zh) 数据传输方法、装置、设备和介质
CN114827234A (zh) 一种数据传输方法、系统、装置及存储介质
US9525629B2 (en) Method and apparatus for transmitting data packets
CN119324766B (zh) 用于在网络传输协议中传送应答的设备和方法
CN109586931B (zh) 组播方法及终端设备
CN108667563A (zh) 一种前向纠错包个数获取方法及装置

Legal Events

Date Code Title Description
C06 Publication
PB01 Publication
C10 Entry into substantive examination
SE01 Entry into force of request for substantive examination
RJ01 Rejection of invention patent application after publication

Application publication date: 20140730

RJ01 Rejection of invention patent application after publication