CN106130693B - 一种基于udp的可靠传输方法 - Google Patents
一种基于udp的可靠传输方法 Download PDFInfo
- Publication number
- CN106130693B CN106130693B CN201610543268.9A CN201610543268A CN106130693B CN 106130693 B CN106130693 B CN 106130693B CN 201610543268 A CN201610543268 A CN 201610543268A CN 106130693 B CN106130693 B CN 106130693B
- Authority
- CN
- China
- Prior art keywords
- message
- sent
- datagram
- reliable
- value
- 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
Classifications
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L69/00—Network arrangements, protocols or services independent of the application payload and not provided for in the other groups of this subclass
- H04L69/16—Implementation or adaptation of Internet protocol [IP], of transmission control protocol [TCP] or of user datagram protocol [UDP]
- H04L69/164—Adaptation or special uses of UDP protocol
-
- 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/0078—Avoidance of errors by organising the transmitted data in a format specifically designed to deal with errors, e.g. location
-
- 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
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L47/00—Traffic control in data switching networks
- H04L47/10—Flow control; Congestion control
- H04L47/12—Avoiding congestion; Recovering from congestion
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L69/00—Network arrangements, protocols or services independent of the application payload and not provided for in the other groups of this subclass
- H04L69/22—Parsing or analysis of headers
Landscapes
- Engineering & Computer Science (AREA)
- Computer Networks & Wireless Communication (AREA)
- Signal Processing (AREA)
- Computer Security & Cryptography (AREA)
- Communication Control (AREA)
Abstract
一种基于UDP的可靠传输方法,是一种UDP层上的可靠传输协议,可靠传输协议包括可靠传输、不可靠传输和乱序传输;可靠传输,用于在两个上层应用之间提供可靠的数据传输,接收的数据报需要进行确认,丢失的数据报需要进行重传,接收到的数据报按报文可靠序列号的顺序提交给上层应用;不可靠传输,用于在两个上层应用之间提供不可靠的数据传输,接收的数据报不需要进行确认,丢失的数据报不需要进行重传,接收到的数据报按报文不可靠序列号的顺序提交给上层应用;乱序传输,用于在两个上层应用之间提供乱序的数据传输,接收的数据报不需要进行确认,丢失的数据不需要进行重传,接收到的数据报直接按接收顺序提交给上层应用。本发明可靠性良好。
Description
技术领域
本发明涉及在UDP层之上建立一种可靠传输的方法,是一种基于UDP的可靠传输方法。
背景技术
随着互联网技术的快速发展,网络应用增长速度飞快。应用对网络的要求也越来越高。通常游戏应用要求网络具有较低的延时且能够频繁地收发数据。TCP由IETF制定的一个传输层的控制协议,它是面向连接的、基于字节流的、可靠的传输控制协议。TCP层是位于IP层之上,应用层之下的中间层。它为应用层提供可靠的数据传输、拥塞控制等功能。
TCP并不适用于这种情形,因为它具有较高的延时和流方向。UDP是由IETF制定的一个面向无连接的、基于数据报的、不可靠的传输层协议。然而UDP不具有可靠的数据传输、流量控制和拥塞控制,所以UDP本身也不适合这种情况。
应用可以同时使用UDP和TCP以便获取两者的功能。但是,由此产生的协议组合仍然有很多不足之处。例如TCP缺乏通过建立多路套接字来完成多路通信,由于其缓冲机制使得TCP的包划分十分复杂。UDP缺乏序列号、连接管理和带宽资源管理等机制,并且限制了数据包的大小。因此,采用UDP协议进行可靠数据传输的方法近年来获得了迅速的发展。
发明内容
为了克服已有UDP协议数据传输方式的可靠性较低的不足,本发明提供一种可靠性良好的基于UDP的可靠传输方法
本发明解决其技术问题所采用的技术方案是:
一种基于UDP的可靠传输方法,所述可靠传输方法是一种UDP层上的可靠传输协议,所述可靠传输协议包括可靠传输、不可靠传输和乱序传输;
所述可靠传输,用于在两个上层应用之间提供可靠的数据传输,接收的数据报需要进行确认,丢失的数据报需要进行重传,接收到的数据报按报文可靠序列号的顺序提交给上层应用;
所述不可靠传输,用于在两个上层应用之间提供不可靠的数据传输,接收的数据报不需要进行确认,丢失的数据报不需要进行重传,接收到的数据报按报文不可靠序列号的顺序提交给上层应用;
所述乱序传输,用于在两个上层应用之间提供乱序的数据传输,接收的数据报不需要进行确认,丢失的数据不需要进行重传,接收到的数据报直接按接收顺序提交给上层应用。
进一步,所述可靠传输中,通过提供确认机制和超时重传机制来实现基于UDP的可靠传输:当本地主机需要发送可靠数据报时,首先将待发送数据报的相应标志位设置为可靠数据报;然后将该可靠数据报插入到待发送可靠消息列队中等待发送;发送函数周期性遍历各个待发送消息列队,将列队中的消息进行封装加上一个协议头并调用UDP层的套接字sendmsg()函数发送;
设定3个待发送消息列队:待发送确认消息列队、待发送可靠消息列队和待发送不可靠消息列队,这三个消息列队用于存放待发送的确认消息、可靠消息和不可靠消息,消息封装的规则如下:
1)、协议优先查询待发送确认消息列队,如果待发送确认消息列队不为空,则将列队中的若干确认消息取出准备封装;
2)、如果待发送确认消息列队为空或者待发送确认消息列队中的确认消息已取出准备封装,则查询待发送可靠消息列队,并将该列队中满足发送条件的可靠消息取出准备封装;
3)、最后查询待发送不可靠消息列队,将该列队中满足发送条件的不可靠消息取出封装发送;
4)、如果封装数据报中包含可靠消息,则在该协议头添加一个时间戳选项,如果该封装数据报中不含有可靠消息,则不需要添加时间戳选项,只需包含对等主机号即可。
再进一步,接收端周期性调用接收函数接收来自各个远程主机的可靠数据报;然后根据数据报报头中的对等主机号选择相应的对等主机进行处理;处理函数将已接收的可靠数据报根据可靠序列号按从小到大的顺序进行排序并将排好序的数据报提交给上层应用;然后根据接收数据报的可靠序列号创建一个确认消息,然后将该确认消息插入到待发送确认消息列队中等待发送;
发送端每次接收到远程主机发回的确认消息时,都根据确认消息中的已接收时间戳字段计算本次传输的实时RTT(Round Trip Time)值,并更新RTT平滑估计器的估计值R和RTT平滑估计器均值标准差D,然后将该确认消息中已接收可靠序列号指向的消息从已发送可靠消息列队中移除,并释放相应的内存资源;
协议周期性调用检查超时函数,当已发送可靠消息列队中的消息经过往返超时值还没收到该消息的确认消息时,将该消息从已发送可靠消息列队移至待发送可靠消息列队的队首进行重传。超时重传的策略为:首次超时的时间为:
RTO=R+4D
其中,R为RTT平滑估计器,D为RTT平滑估计器的均值标准差,平滑估计器R的计算式如下:
其中,加权因子β=5,M为实际测量的RTT值,平滑估计器R的均值标准差D的计算式如下:
D=D+h(|M-R|-D)
其中,增益因子h=0.25,M为实际测量的RTT值;
协议每次接收到来自远程主机的ACK时,都计算本次传输的RTT值M,然后用该实际测量的RTT值M更新RTT平滑估计器及其均值标准差D;
首次重传超时后,往返超时值RTO按照指数退避的方式递增:
RTO=2*RTO
当往返超时值大于等于往返超时值的最大值时,往返超时值不再递增,并按照该最大值重传丢失的数据报;当经过最大超时值还未收到该消息的确认消息时,则认为网络断开,执行相应的断开连接操作。
更进一步,所述可靠传输包括基于带宽估计的拥塞控制机制,估计当前网络实际可用带宽,并根据该估计值调整当前发送速率,该带宽估计方法是一种基于RUDP吞吐量的估计方法,当网络工作在饱和状态下时,根据接收端的接收速率来估计链路的实际可用带宽;接收端中保存有一个Data_Received的变量用于统计带宽估计期间接收到的数据量,接收端每接收到一条可靠数据消息,都将Data_Received变量值和该消息长度相加并重新赋值,在带宽估计期间,假设接收到第一条数据消息的时间为tk,接收到最后一条数据消息的时间为tk+1,则带宽估计B为:
接收端周期性进行带宽估计,并将带宽估计值封装在带宽通知消息中发送给发送端;
发送端在接收到带宽通知消息后,对带宽通知消息中的带宽估计值进行平滑估计,以减小链路抖动等因数对实际采样带宽值造成的影响:
Bavailable=αBavailable+(1-α)B
其中,α是平滑因子,Bavailable为实际可用带宽的估计值,发送端每次接收到带宽通知消息后,都用该带宽通知消息中的带宽估计值更新估计器Bavailable;
发送端保存一个发送窗口值Send_window用于控制网络中实际传输的数据量,发送端还保存一个统计已发送未确认数据量的变量,每次发送可靠数据消息前,都将该变量与待发送消息的数据长度相加并判断是否大于Send_window;如果大于,停止发送该可靠数据消息;如果小于,发送该消息并将相加值更新至该变量中,Send_window的初始值为W,每次当本地主机接收到远程主机发来的ACK消息时:
Send_window+=Winc
Winc是一个窗口值常量,每当本地主机检测到一个丢包时,如果
Bavailable*min{R}<Winmin:
Send_window=Winmin
否则:
Send_window=Bavailable*min{R}
其中,R是当前时刻链路的RTT估计值,Winmin是发送窗口最小值,min{R}表示没有排队时延的往返RTT值。
所述不可靠传输中,当本地主机需要发送不可靠数据报时,首先将待发送的数据报的相应标志位设置为不可靠数据报;然后将该不可靠数据报插入到待发送不可靠消息列队中等待发送;发送函数将各个待发送消息列队中消息进行封装加上一个协议头并调用UDP层的套接字sendmsg()函数发送;然后将该数据报从待发送不可靠消息列队移至已发送不可靠消息列队;再将该消息从已发消息列队移除并释放相应的内存资源;接收端周期性调用接收函数接收来自各个远程主机的不可靠数据报;并根据接收数据报头中的对等主机号选择相应的对等主机进行处理;处理函数将已接收的不可靠数据报根据可靠序列号和不可靠序列号进行排序;最后将排好序的数据报提交给上层应用。
不可靠数据报的排序规则如下:
①、首先根据可靠序列号按照从小到大的顺序进行排序。
②、可靠序列号相同时,根据不可序列号按照从小到大的顺序进行排序。
所述乱序传输中,当本地主机需要发送乱序数据报时,首先将待发送数据报的相应标志位设置为乱序数据报;然后将该乱序数据报插入到待发送不可靠消息列队中等待发送;然后将各个待发送消息列队中的消息进行封装加上一个协议头并调用UDP层的套接字sendmsg()函数发送;接收端周期性调用接收函数接收来自各个远程主机的乱序数据报;然后根据接收数据报包头的对等主机号选择相应的对等主机进行处理;处理函数将已接收的乱序数据报按照接收顺序进行排序;最后将排好序的数据报提交给上层应用。
在所述可靠传输协议中,有规定的最大传输单元MTU值,当数据报长度大于MTU时,则需要对数据报进行分片处理,接收端接收到该分片数据报时在接收端进行组包然后排序并提交给上层应用。
本发明的有益效果主要表现在:1、本发明可以在UDP层上实现可靠数据通信;2、本发明可以用于快速高效地传输数据;3、本发明可以降低网络拥塞发生的概率并提高了网络的吞吐量。
附图说明
图1是基于UDP的可靠传输协议的UDP/IP层级结构。
图2是可靠数据消息的结构图。
图3是不可靠数据消息的结构图。
图4是乱序数据消息的结构图。
图5是分片数据消息的结构图。
图6是确认消息的结构图。
图7是基于UDP的可靠传输协议的数据报封装格式(包含可靠数据消息)。
图8是基于UDP的可靠传输协议的数据报封装格式(不包含可靠数据消息)。
图9是基于UDP的可靠传输协议的OPNET仿真网络模型。
图10是链路的背景流量随时间的关系图。
图11是RUDP主机的发送速率随时间的关系图。
图12是RUDP主机对RUDP服务器下行带宽的估计值随时间的关系图。
图13为RUDP服务器的接收速率(下行带宽)随时间的关系图。
图14是RUDP仿真网络的发送窗口值随时间的关系图。
具体实施方式
下面结合附图对本发明作进一步描述。
参照图1~图14,一种基于UDP的可靠传输方法,所述可靠传输方法是一种UDP层上的可靠传输协议,所述可靠传输协议提供了多种可靠性要求的数据传输以满足不同应用的需求,包括:可靠传输、不可靠传输和乱序传输;
所述可靠传输,用于在两个上层应用之间提供可靠的数据传输,接收的数据报需要进行确认,丢失的数据报需要进行重传,接收到的数据报按报文可靠序列号的顺序提交给上层应用;
所述不可靠传输,用于在两个上层应用之间提供不可靠的数据传输,接收的数据报不需要进行确认,丢失的数据报不需要进行重传,接收到的数据报按报文不可靠序列号的顺序提交给上层应用;
所述乱序传输,用于在两个上层应用之间提供乱序的数据传输,接收的数据报不需要进行确认,丢失的数据不需要进行重传,接收到的数据报直接按接收顺序提交给上层应用;
进一步,所述的基于UDP的可靠传输协议的可靠传输中,所述的基于UDP的可靠传输协议通过提供确认机制和超时重传机制来实现基于UDP的可靠传输:当本地主机需要发送可靠数据报时,首先将待发送数据报的相应标志位设置为可靠数据报;然后将该可靠数据报插入到待发送可靠消息列队中等待发送;发送函数周期性遍历各个待发送消息列队,将列队中的消息进行封装加上一个协议头并调用UDP层的套接字sendmsg()函数发送;
协议有3个待发送消息列队:待发送确认消息列队、待发送可靠消息列队和待发送不可靠消息列队,这三个消息列队用于存放待发送的确认消息、可靠消息和不可靠消息。消息封装的规则如下:
1)、协议优先查询待发送确认消息列队,如果待发送确认消息列队不为空,则将列队中的若干确认消息取出准备封装。
2)、如果待发送确认消息列队为空或者待发送确认消息列队中的确认消息已取出准备封装,则查询待发送可靠消息列队,并将该列队中满足发送条件的可靠消息取出准备封装。
3)、最后查询待发送不可靠消息列队,将该列队中满足发送条件的不可靠消息取出封装发送。
4)、如果封装数据报中包含可靠消息,则在该协议头添加一个时间戳选项。如果该封装数据报中不含有可靠消息,则不需要添加时间戳选项,只需包含对等主机号即可。
接收端周期性调用接收函数接收来自各个远程主机的可靠数据报;然后根据数据报报头中的对等主机号选择相应的对等主机进行处理;处理函数将已接收的可靠数据报根据可靠序列号按从小到大的顺序进行排序并将排好序的数据报提交给上层应用;然后根据接收数据报的可靠序列号创建一个确认消息,然后将该确认消息插入到待发送确认消息列队中等待发送;
发送端每次接收到远程主机发回的确认消息时,都根据确认消息中的已接收时间戳字段计算本次传输的实时RTT(Round Trip Time)值,并更新RTT平滑估计器的估计值R和RTT平滑估计器均值标准差D。然后将该确认消息中已接收可靠序列号指向的消息从已发送可靠消息列队中移除,并释放相应的内存资源;
协议周期性调用检查超时函数,当已发送可靠消息列队中的消息经过往返超时值还没收到该消息的确认消息时,将该消息从已发送可靠消息列队移至待发送可靠消息列队的队首进行重传。超时重传的策略为:首次超时的时间为:
RTO=R+4D
其中,R为RTT平滑估计器,D为RTT平滑估计器的均值标准差。平滑估计器R的计算式如下:
其中,加权因子β=5,M为实际测量的RTT值。平滑估计器R的均值标准差D的计算式如下:
D=D+h(|M-R|-D)
其中,增益因子h=0.25,M为实际测量的RTT值。
协议每次接收到来自远程主机的ACK时,都计算本次传输的RTT值M。然后用该实际测量的RTT值M更新RTT平滑估计器及其均值标准差D。
首次重传超时后,往返超时值RTO按照指数退避的方式递增:
RTO=2*RTO
当往返超时值大于等于往返超时值的最大值时,往返超时值不再递增,并按照该最大值重传丢失的数据报。当经过最大超时值还未收到该消息的确认消息时,则认为网络断开,执行相应的断开连接操作;
可靠传输提供了一种基于带宽估计的拥塞控制机制,该拥塞控制机制提供了一种估计当前网络实际可用带宽,并根据该估计值调整当前发送速率的功能。该带宽估计方法是一种基于RUDP吞吐量的估计方法。该方法的思想是当网络工作在饱和状态下时,根据接收端的接收速率来估计链路的实际可用带宽。具体为:接收端中保存有一个Data_Received的变量用于统计带宽估计期间接收到的数据量。接收端每接收到一条可靠数据消息,都将Data_Received变量值和该消息长度相加并重新赋值。在带宽估计期间,假设接收到第一条数据消息的时间为tk,接收到最后一条数据消息的时间为tk+1,则带宽估计B为:
接收端周期性进行带宽估计,并将带宽估计值封装在带宽通知消息中发送给发送端。
发送端在接收到带宽通知消息后,对带宽通知消息中的带宽估计值进行平滑估计,以减小链路抖动等因数对实际采样带宽值造成的影响:
Bavailable=αBavailable+(1-α)B
其中,α是平滑因子,Bavailable为实际可用带宽的估计值。发送端每次接收到带宽通知消息后,都用该带宽通知消息中的带宽估计值更新估计器Bavailable。
发送端保存一个发送窗口值Send_window用于控制网络中实际传输的数据量,发送端还保存一个统计已发送未确认数据量的变量。每次发送可靠数据消息前,都将该变量与待发送消息的数据长度相加并判断是否大于Send_window。如果大于,停止发送该可靠数据消息;如果小于,发送该消息并将相加值更新至该变量中。Send_window的初始值为W,每次当本地主机接收到远程主机发来的ACK消息时:
Send_window+=WinC
WinC是一个窗口值常量。每当本地主机检测到一个丢包时,如果
Bavailable*min{R}<Winmin:
Send_window=Winmin
否则:
Send_window=Bavailable*min{R}
其中,R是当前时刻链路的RTT估计值,Winmin是发送窗口最小值,min{R}表示没有排队时延的往返RTT值。
所述基于UDP的可靠传输协议的不可靠传输中,当本地主机需要发送不可靠数据报时,首先将待发送的数据报的相应标志位设置为不可靠数据报;然后将该不可靠数据报插入到待发送不可靠消息列队中等待发送;发送函数将各个待发送消息列队中消息进行封装(封装规则如上所述)加上一个协议头并调用UDP层的套接字sendmsg()函数发送;然后将该数据报从待发送不可靠消息列队移至已发送不可靠消息列队;再将该消息从已发消息列队移除并释放相应的内存资源;接收端周期性调用接收函数接收来自各个远程主机的不可靠数据报;并根据接收数据报头中的对等主机号选择相应的对等主机进行处理;处理函数将已接收的不可靠数据报根据可靠序列号和不可靠序列号进行排序;最后将排好序的数据报提交给上层应用。
不可靠数据报的排序规则如下:
①、首先根据可靠序列号按照从小到大的顺序进行排序。
②、可靠序列号相同时,根据不可序列号按照从小到大的顺序进行排序。
所述的基于UDP的可靠传输协议的乱序传输中,当本地主机需要发送乱序数据报时,首先将待发送数据报的相应标志位设置为乱序数据报;然后将该乱序数据报插入到待发送不可靠消息列队中等待发送;然后将各个待发送消息列队中的消息进行封装(封装规则如上所述)加上一个协议头并调用UDP层的套接字sendmsg()函数发送;接收端周期性调用接收函数接收来自各个远程主机的乱序数据报;然后根据接收数据报包头的对等主机号选择相应的对等主机进行处理;处理函数将已接收的乱序数据报按照接收顺序进行排序;最后将排好序的数据报提交给上层应用。
在所述的基于UDP的可靠传输协议中,协议有规定的最大传输单元MTU值,当数据报(可靠数据报、不可靠数据报或乱序数据报)长度大于MTU时,则需要对数据报进行分片处理,接收端接收到该分片数据报时在接收端进行组包然后排序并提交给上层应用。
本实施例的基于UDP的可靠传输方法是一种UDP层上的可靠传输协议。该可靠传输协议包括:可靠传输、不可靠传输和乱序传输。
所述协议的技术的主体构架是C语言,C语言是一种易于移植的高级语言。
图1是基于UDP的可靠传输协议的UDP/IP层级结构。基于UDP的可靠传输协议的UDP/IP层级结构由数据链路层、网络层、UDP层、基于UDP的可靠传输层和应用层组成。本发明是一种基于UDP的可靠传输层中的一种可靠传输协议。
图2是可靠数据消息的结构图,可靠数据消息的第一个字节是消息类型,消息类型用于指示本条消息的类型;接着一个字节是信道号,信道号用于指定发送消息的信道;接着两个字节是可靠序列号,可靠序列号用于对可靠消息的进行编序;接着两个字节是数据长度,数据长度用于指示可靠数据消息包含的数据消息长度;紧接着就是可靠数据消息包含的数据消息。
图3是不可靠数据消息的结构图,不可靠数据消息的第一个字节是消息类型,消息类型用于说明本条消息的类型;接着一个字节是信道号,信道号用于指定发送消息的信道;接着两个字节是可靠序列号,可靠序列号用于对可靠消息进行编序;接着两个字节是不可靠序列号,不可靠序列号用于对不可靠数据消息进行编序;接着两个字节是数据长度,数据长度用于指示不可靠数据消息包含的数据消息长度;紧接着就是不可靠数据消息包含的数据消息。
图4是乱序数据消息的结构图,乱序数据消息的结构除乱序组值外与不可靠数据消息相同,乱序组值用于对乱序数据消息进行编序。
图5是分片数据消息的结构图,分片数据消息的第一个字节是消息类型、第二个字节是信道号、第三、四字节是可靠序列号,其功能如上所述;接着两个字节是起始序列号,起始序列号用于指示分片数据消息从哪一个序列号开始;接着两个字节是数据长度,数据长度用于指示当前分片数据消息包含的数据消息长度;接着四个字节是分片数,分片数用于指示原始数据包被分成多少个分片消息;接着四个字节是分片号,分片号用于对各个分片数据消息进行编号;接着是四个字节的数据总长度,数据总长度用于指示原始数据包的长度;接着4个字节是分片偏移量,分片偏移量用于指示当前分片数据消息处于未分片数据中的位置;紧接着就是分片数据消息包含的数据消息。
图6是确认消息的结构图,确认消息包含一字节的消息类型、一字节的信道号、两字节的可靠序列号、两字节的已接收可靠序列号和两字节的已接收时间戳。消息类型、信道号和可靠序列号的作用与上面的相同;已接收可靠序列号即待确认消息的可靠序列号;已接收时间戳即待确认消息的时间戳,该时间戳用于计算往返时间。
图7是所述基于UDP的可靠传输协议的数据报封装格式(包含可靠数据消息),前20个字节是IP首部;接着8个字节是UDP首部;接着4个字节是RUDP的协议头;包含2字节的对等主机号和2字节的时间戳选项;只有当数据报中包含可靠数据消息时,数据报头才包含时间戳。接着是若干个8字节确认消息;接着是若干个不定长度的可靠数据消息;接着是若干个不定长度的不可靠数据消息或者乱序数据消息。
图8是所述基于UDP的可靠传输协议的数据报封装格式(不包含可靠数据消息),前20个字节是IP首部;接着8个字节是UDP首部;接着2个字节是RUDP的协议头,包含2字节的对等主机号;接着是若干个8字节确认消息;接着是若干个不定长度的可靠数据消息;接着是若干个不定长度的不可靠数据消息或者乱序数据消息。
所述基于UDP的可靠传输协议的可靠传输中,其总流程的步骤为:
9.1)当本地主机需要发送可靠数据报时,首先将待发送的数据报的相应标志位设置为可靠数据报;
9.2)将该数据报插入到待发送可靠消息列队中等待发送;
9.3)发送函数将各个待发送消息列队中的消息组包加上一个协议头并调用UDP层的sendmsg()函数发送;
9.4)接收端周期性调用接收函数接收来自各个远程主机的可靠数据报;
9.5)然后根据可靠数据报报头的对等主机号选择相应的对等主机进行处理;
9.6)处理函数将已接收的可靠数据报根据可靠序列号按从小到大的顺序进行排序并将排好序的数据报提交给上层应用;
9.7)根据接收数据报的可靠序列号创建一个确认消息并将该确认消息插入到待发送确认消息列队等待发送;
9.8)发送端每次接收到远程主机发回的确认消息,都根据确认消息中的已接收时间戳字段计算本次传输的实时RTT值并更新RTT平滑估计器R和RTT平滑估计器标准差D。然后将确认消息指向的消息从已发送可靠消息列队中移除并释放相应的内存资源;
9.9)协议周期性调用检查超时函数,如果已发送列队中的消息超时,则执行相应的重传或者断开连接操作;
所述的基于UDP的可靠传输协议的不可靠传输中,其总流程的步骤为:
10.1)当远程主机需要发送不可靠数据报时,首先将待发送的数据报的相应标志位设置为不可靠数据报;
10.2)将该数据报插入到待发送不可靠消息列队中等待发送;
10.3)发送函数将各个待发送消息列队中的消息组包加上一个协议头并调用UDP层的sendmsg()函数发送;
10.4)接收端周期想调用接收函数接收来自各个远程主机的不可靠数据报;
10.5)然后根据不可靠数据报报头的对等主机号选择相应的对等主机进行处理;
10.6)处理函数将已接收的不可靠数据报根据可靠序列号和不可靠序列号进行排序并提交给上层应用;
所述的基于UDP的可靠传输协议的乱序传输中,其总流程的步骤为:
11.1)当远程主机需要发送乱序数据报时,首先将待发送的数据报的相应标志位设置为乱序数据报;
11.2)将该数据报插入到待发送不可靠消息列队中等待发送;
11.3)发送函数将各个待发送消息列队中的消息组包加上一个协议头并调用UDP层的sendmsg()函数发送;
11.4)接收端周期性调用接收函数接收来自各个远程主机的乱序数据报;
11.5)然后根据乱序数据报报头的对等主机号选择相应的对等主机进行处理;
11.6)处理函数将已接收的乱序数据报按照接收顺序进行排序并提交给上层应用;
图9是基于UDP的可靠传输协议的OPNET仿真网络模型,Client是一个RUDP主机,Server是一个RUDP服务器,IP Network是一个IP网络,链路模型为PPP-DS3(带宽44.736Mbps),网络的丢包率为0.01%,网络延时服从Uniform(0.015,0.0175)(s)分布,图10为链路的背景流量随时间的关系图。图11为RUDP主机的发送速率随时间的关系图。图12为RUDP主机对RUDP服务器下行带宽的估计值随时间的关系图。图13为RUDP服务器的接收速率(下行带宽)随时间的关系图。图14为RUDP主机的发送窗口值随时间的关系图。
通过分析图10、图11、图12、图13和图14可以得出,本发明所提供的基于UDP的可靠传输协议:
13.1)可以较为精确地估计RUDP服务器的下行带宽;
13.2)可以根据下行带宽估计值实时调整RUDP主机的发送窗口值,在网络背景流比较大时,减小发送窗口值,降低发送速率;在网络背景流比较小时,增加发送窗口,增加发送速率;
13.3)可以将RUDP主机的发送速率锁定为RUDP服务器的实际下行带宽值,避免拥塞并提高网络的吞吐量。
Claims (7)
1.一种基于UDP的可靠传输方法,其特征在于:所述可靠传输方法是一种UDP层上的可靠传输协议,所述可靠传输协议包括可靠传输、不可靠传输和乱序传输;
所述可靠传输,用于在两个上层应用之间提供可靠的数据传输,接收的数据报需要进行确认,丢失的数据报需要进行重传,接收到的数据报按报文可靠序列号的顺序提交给上层应用;
所述不可靠传输,用于在两个上层应用之间提供不可靠的数据传输,接收的数据报不需要进行确认,丢失的数据报不需要进行重传,接收到的数据报按报文不可靠序列号的顺序提交给上层应用;
所述乱序传输,用于在两个上层应用之间提供乱序的数据传输,接收的数据报不需要进行确认,丢失的数据不需要进行重传,接收到的数据报直接按接收顺序提交给上层应用;
所述可靠传输中,通过提供确认机制和超时重传机制来实现基于UDP的可靠传输:当本地主机需要发送可靠数据报时,首先将待发送数据报的相应标志位设置为可靠数据报;然后将该可靠数据报插入到待发送可靠消息列队中等待发送;发送函数周期性遍历各个待发送消息列队,将列队中的消息进行封装加上一个协议头并调用UDP层的套接字sendmsg()函数发送;
设定3个待发送消息列队:待发送确认消息列队、待发送可靠消息列队和待发送不可靠消息列队,这三个消息列队用于存放待发送的确认消息、可靠消息和不可靠消息,消息封装的规则如下:
1)、协议优先查询待发送确认消息列队,如果待发送确认消息列队不为空,则将列队中的若干确认消息取出准备封装;
2)、如果待发送确认消息列队为空或者待发送确认消息列队中的确认消息已取出准备封装,则查询待发送可靠消息列队,并将该列队中满足发送条件的可靠消息取出准备封装;
3)、最后查询待发送不可靠消息列队,将该列队中满足发送条件的不可靠消息取出封装发送;
4)、如果封装数据报中包含可靠消息,则在该协议头添加一个时间戳选项,如果该封装数据报中不含有可靠消息,则不需要添加时间戳选项,只需包含对等主机号即可。
2.如权利要求1所述的基于UDP的可靠传输方法,其特征在于:接收端周期性调用接收函数接收来自各个远程主机的可靠数据报;然后根据数据报报头中的对等主机号选择相应的对等主机进行处理;处理函数将已接收的可靠数据报根据可靠序列号按从小到大的顺序进行排序并将排好序的数据报提交给上层应用;然后根据接收数据报的可靠序列号创建一个确认消息,然后将该确认消息插入到待发送确认消息列队中等待发送;
发送端每次接收到远程主机发回的确认消息时,都根据确认消息中的已接收时间戳字段计算本次传输的实时RTT值,并更新RTT平滑估计器的估计值R和RTT平滑估计器均值标准差D,然后将该确认消息中已接收可靠序列号指向的消息从已发送可靠消息列队中移除,并释放相应的内存资源;
协议周期性调用检查超时函数,当已发送可靠消息列队中的消息经过往返超时值还没收到该消息的确认消息时,将该消息从已发送可靠消息列队移至待发送可靠消息列队的队首进行重传,超时重传的策略为:首次超时的时间为:
RTO=R+4D
其中,R为RTT平滑估计器,D为RTT平滑估计器的均值标准差,平滑估计器R的计算式如下:
其中,加权因子β=5,M为实际测量的RTT值,平滑估计器R的均值标准差D的计算式如下:
D=D+h(|M-R|-D)
其中,增益因子h=0.25,M为实际测量的RTT值;
协议每次接收到来自远程主机的ACK时,都计算本次传输的RTT值M,然后用该实际测量的RTT值M更新RTT平滑估计器及其均值标准差D;
首次重传超时后,往返超时值RTO按照指数退避的方式递增:
RTO=2*RTO
当往返超时值大于等于往返超时值的最大值时,往返超时值不再递增,并按照该最大值重传丢失的数据报;当经过最大超时值还未收到该消息的确认消息时,则认为网络断开,执行相应的断开连接操作。
3.如权利要求1或2所述的基于UDP的可靠传输方法,其特征在于:所述可靠传输包括基于带宽估计的拥塞控制机制,估计当前网络实际可用带宽,并根据该估计值调整当前发送速率,该带宽估计方法是一种基于RUDP吞吐量的估计方法,当网络工作在饱和状态下时,根据接收端的接收速率来估计链路的实际可用带宽;接收端中保存有一个Data_Received的变量用于统计带宽估计期间接收到的数据量,接收端每接收到一条可靠数据消息,都将Data_Received变量值和该消息长度相加并重新赋值,在带宽估计期间,假设接收到第一条数据消息的时间为tk,接收到最后一条数据消息的时间为tk+1,则带宽估计B为:
接收端周期性进行带宽估计,并将带宽估计值封装在带宽通知消息中发送给发送端;
发送端在接收到带宽通知消息后,对带宽通知消息中的带宽估计值进行平滑估计,以减小链路抖动等因数对实际采样带宽值造成的影响:
Bavailable=αBavailable+(1-α)B
其中,α是平滑因子,Bavailable为实际可用带宽的估计值,发送端每次接收到带宽通知消息后,都用该带宽通知消息中的带宽估计值更新估计器Bavailable;
发送端保存一个发送窗口值Send_window用于控制网络中实际传输的数据量,发送端还保存一个统计已发送未确认数据量的变量,每次发送可靠数据消息前,都将该变量与待发送消息的数据长度相加并判断是否大于Send_window;如果大于,停止发送该可靠数据消息;如果小于,发送该消息并将相加值更新至该变量中,Send_window的初始值为W,每次当本地主机接收到远程主机发来的ACK消息时:
Send_window+=WinC
WinC是一个窗口值常量,每当本地主机检测到一个丢包时,如果Bavailable*min{R}<Winmin:
Send_window=Winmin
否则:
Send_window=Bavailable*min{R}
其中,R是当前时刻链路的RTT估计值,Winmin是发送窗口最小值,min{R}表示没有排队时延的往返RTT值。
4.如权利要求1或2所述的基于UDP的可靠传输方法,其特征在于:所述不可靠传输中,当本地主机需要发送不可靠数据报时,首先将待发送的数据报的相应标志位设置为不可靠数据报;然后将该不可靠数据报插入到待发送不可靠消息列队中等待发送;发送函数将各个待发送消息列队中消息进行封装加上一个协议头并调用UDP层的套接字sendmsg()函数发送;然后将该数据报从待发送不可靠消息列队移至已发送不可靠消息列队;再将该消息从已发消息列队移除并释放相应的内存资源;接收端周期性调用接收函数接收来自各个远程主机的不可靠数据报;并根据接收数据报头中的对等主机号选择相应的对等主机进行处理;处理函数将已接收的不可靠数据报根据可靠序列号和不可靠序列号进行排序;最后将排好序的数据报提交给上层应用。
5.如权利要求4所述的基于UDP的可靠传输方法,其特征在于:不可靠数据报的排序规则如下:
①、首先根据可靠序列号按照从小到大的顺序进行排序;
②、可靠序列号相同时,根据不可序列号按照从小到大的顺序进行排序。
6.如权利要求1或2所述的基于UDP的可靠传输方法,其特征在于:所述乱序传输中,当本地主机需要发送乱序数据报时,首先将待发送数据报的相应标志位设置为乱序数据报;然后将该乱序数据报插入到待发送不可靠消息列队中等待发送;然后将各个待发送消息列队中的消息进行封装加上一个协议头并调用UDP层的套接字sendmsg()函数发送;接收端周期性调用接收函数接收来自各个远程主机的乱序数据报;然后根据接收数据报包头的对等主机号选择相应的对等主机进行处理;处理函数将已接收的乱序数据报按照接收顺序进行排序;最后将排好序的数据报提交给上层应用。
7.如权利要求1或2所述的基于UDP的可靠传输方法,其特征在于:在所述可靠传输协议中,有规定的最大传输单元MTU值,当数据报长度大于MTU时,则需要对数据报进行分片处理,接收端接收到该分片数据报时在接收端进行组包然后排序并提交给上层应用。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201610543268.9A CN106130693B (zh) | 2016-07-08 | 2016-07-08 | 一种基于udp的可靠传输方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201610543268.9A CN106130693B (zh) | 2016-07-08 | 2016-07-08 | 一种基于udp的可靠传输方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN106130693A CN106130693A (zh) | 2016-11-16 |
CN106130693B true CN106130693B (zh) | 2019-04-23 |
Family
ID=57283617
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201610543268.9A Active CN106130693B (zh) | 2016-07-08 | 2016-07-08 | 一种基于udp的可靠传输方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN106130693B (zh) |
Families Citing this family (15)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN107046452A (zh) * | 2017-03-07 | 2017-08-15 | 西华师范大学 | 一种数据高带宽高可靠性传输方法 |
CN106790728A (zh) * | 2017-03-30 | 2017-05-31 | 北京深思数盾科技股份有限公司 | 消息推送方法和系统 |
CN107015817B (zh) * | 2017-05-25 | 2021-06-01 | 北京君泊网络科技有限责任公司 | 一种设备固件空中升级的方法 |
CN107181674A (zh) * | 2017-06-16 | 2017-09-19 | 深圳市盛路物联通讯技术有限公司 | 物联网中消息传递方法和装置 |
CN107920064A (zh) * | 2017-11-02 | 2018-04-17 | 河北科技大学 | 一种基于rudp的多移动机器人通信方法 |
CN109474688B (zh) * | 2018-11-27 | 2021-05-14 | 北京微播视界科技有限公司 | 即时通信网络请求消息的发送方法、装置、设备和介质 |
CN111327402B (zh) * | 2018-12-17 | 2021-12-31 | 杭州海康威视数字技术股份有限公司 | 重传数据的方法、装置和系统 |
CN110351028B (zh) * | 2019-07-15 | 2020-11-20 | 联想(北京)有限公司 | 一种数据处理方法及装置、以及电子设备 |
CN110572240A (zh) * | 2019-08-12 | 2019-12-13 | 武汉大学 | 一种不稳定网络下可靠数据通信方法 |
CN111049857A (zh) * | 2019-12-26 | 2020-04-21 | 山东方寸微电子科技有限公司 | 一种基于udp协议的网络存储系统及方法 |
CN113556213B (zh) * | 2020-04-23 | 2022-12-06 | 华为技术有限公司 | 超时重传时间rto确定方法及相关装置 |
CN114422589A (zh) * | 2020-10-12 | 2022-04-29 | 中国移动通信有限公司研究院 | 数据传输方法、装置、设备及存储介质 |
CN114584843A (zh) * | 2020-11-30 | 2022-06-03 | 华为技术有限公司 | 一种通信方法和设备 |
CN113259339B (zh) * | 2021-05-08 | 2022-09-30 | 珠海六点智能科技有限公司 | 一种基于udp的数据传输方法、系统及电子设备 |
CN113490154B (zh) * | 2021-07-01 | 2022-05-17 | 深圳市恒扬数据股份有限公司 | 广播数据传输方法、装置、终端设备及存储介质 |
Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN103490972A (zh) * | 2013-09-27 | 2014-01-01 | 迈普通信技术股份有限公司 | 多链路隧道报文传输方法及系统 |
WO2014110736A1 (en) * | 2013-01-16 | 2014-07-24 | Nokia Corporation | Web content communication |
CN104980257A (zh) * | 2015-05-29 | 2015-10-14 | 黑色水晶(北京)科技有限公司 | 物联网通讯方法及装置 |
CN105721454A (zh) * | 2016-01-28 | 2016-06-29 | 浙江工业大学 | 一种基于udp的可靠传输的连接管理方法 |
-
2016
- 2016-07-08 CN CN201610543268.9A patent/CN106130693B/zh active Active
Patent Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
WO2014110736A1 (en) * | 2013-01-16 | 2014-07-24 | Nokia Corporation | Web content communication |
CN103490972A (zh) * | 2013-09-27 | 2014-01-01 | 迈普通信技术股份有限公司 | 多链路隧道报文传输方法及系统 |
CN104980257A (zh) * | 2015-05-29 | 2015-10-14 | 黑色水晶(北京)科技有限公司 | 物联网通讯方法及装置 |
CN105721454A (zh) * | 2016-01-28 | 2016-06-29 | 浙江工业大学 | 一种基于udp的可靠传输的连接管理方法 |
Non-Patent Citations (1)
Title |
---|
简单可靠实时传送UDP协议的研究和应用;朱华刚,等;《水雷站与舰船防护》;20100831;第50-53页 * |
Also Published As
Publication number | Publication date |
---|---|
CN106130693A (zh) | 2016-11-16 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN106130693B (zh) | 一种基于udp的可靠传输方法 | |
US7600037B2 (en) | Real time transmission of information content from a sender to a receiver over a network by sizing of a congestion window in a connectionless protocol | |
CN112165355B (zh) | 一种面向卫星网络的基于udp的可靠数据传输方法 | |
EP2316182B1 (en) | Method for transporting data over a data connection and network component | |
US7706274B2 (en) | High performance TCP for systems with infrequent ACK | |
CN100534069C (zh) | 非对称和多并发网络的加速方法 | |
US7656800B2 (en) | Transmission control protocol (TCP) | |
CN101656747A (zh) | 流媒体数据的传输方法及系统 | |
CN102790913B (zh) | 一种基于3g网络音视频传输方法 | |
CN106341738A (zh) | 流媒体网络传输的带宽计算方法、服务器端和系统 | |
CN104113884B (zh) | 一种无线网络中实时多媒体传输速率控制机制 | |
CN101854297B (zh) | 一种卫星网络中传输控制协议跨层的设计方法 | |
US10645012B2 (en) | System and method for reducing bandwidth usage of a network | |
CN104486690A (zh) | 一种基于tcp协议的移动视频传输优化方法 | |
CN110011758B (zh) | 一种多链路下tcp的ack传输优化方法、相关装置及系统 | |
CN101557273A (zh) | 一种同时适用于有线和无线网络的实时流媒体传输的方法 | |
WO2015026746A1 (en) | Method & implementation of zero overhead rate controlled (zorc) information transmission via digital communication link | |
CN104980365A (zh) | 一种基于连续丢包拥塞判断的tcp传输加速方法 | |
CN104796235B (zh) | 基于丢包率的卫星通信自适应拥塞控制方法 | |
CN103607255A (zh) | 无线信道视频通信丢包率控制方法 | |
CN105406915A (zh) | 一种面向星地链路的文件传输方法 | |
CN107046452A (zh) | 一种数据高带宽高可靠性传输方法 | |
US10063489B2 (en) | Buffer bloat control | |
CN115348336A (zh) | 异构数据流的通用传输架构 | |
Zhong et al. | Perils of using cqic in lte network and a quick fix with delayed ack |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |