一种基于UDP协议的可靠传输机制研究

时间:2022-07-06 10:17:03

一种基于UDP协议的可靠传输机制研究

摘要:可靠数据传输是网络的一项重要应用。虽然TCP协议提供面向连接的可靠的字节流服务,但TCP协议的拥塞控制策略并不能高效公平的利用可用带宽,这不能满足对在低速网络下需要一定带宽支持的网络应用的需求。而UDP协议具有效率高、速度快和占用资源少等优点,但其面向事务的简单不可靠数据传输服务机制不能满足应用对可靠性的需求。本文对可靠数据传输技术进行了研究,在此基础上设计了一个基于UDP的可靠数据传输的机制。

关键词:UDP;数据传输;可靠传输;低速网络

中图分类号:TN919.3 文献标识码:A文章编号:1007-9599 (2011) 13-0000-02

UDP-Based Reliable Transmission Mechanism

Li Jianqiang

(National Computer Network Emergency Response Technical Team Coordination Center,Beijing100029,China)

Abstract:Reliable data transmission is an important network applications.Although the TCP protocol provides reliable connection-oriented byte stream service,but the congestion control of TCP is not efficient and equitable use of available bandwidth,which can not meet the needs of the low-speed network under a certain bandwidth to support network applications.The UDP protocol has a high efficiency,speed and small footprint,etc.,but the simple transaction-oriented data transfer service is not reliable mechanism can not meet the application requirements for reliability.In this paper,reliable data transmission technology have been studied on the basis of the design of a reliable UDP-based data transfer mechanism.

Keywords:UDP;Data transmission;Reliable transmission;Low speed network

一、基于UDP的可靠传输的基本概念

随着网络带宽时延乘积(BDP)的增加,通常的TCP协议开始变的低效。这是因为它的AMID(Additive Increase Multiplicative Decrease,即当TCP发送方感受到端到端路径无拥塞时就线性的增加其发送速度,当察觉到路径拥塞时就乘性减小其发送速度,简称“和式增加,积式减少”)算法虽然减少了TCP拥塞窗口,但不能快速的恢复可用带宽。理论上的流量分析表明TCP在BDP增加到很高的时候比较容易受数据包丢失的影响。

另外,源于TCP拥塞控制的不公平的RTT(Round-Trip Time,往返时延,表示从发送端发送数据开始,到发送端收到来自接收端的确认,总共经历的时延)也成为在分布式数据密集应用中的严重问题。拥有不同RTT的并发TCP流将不公平地分享带宽。尽管在BDP小的网络中可以使用通常的TCP实现来相对平等的共享带宽,但在拥有大量BDP的网络中,通常的基于TCP的程序就必须承受严重的不公平的问题。这个RTT基于的算法严重的限制了其在广域网分布式应用的效率,例如互联网上的网络数据备份。

一直到今天,对标准的TCP的提高一直都不能在带宽的利用效率和公平性方面达到一个令人满意的程度(特别是基于RTT的问题),这对运行在低速网络中的应用影响尤为严重。针对TCP的修改提出了一系列框架,如RFC1423(高性能扩展)、RFC2018(SACK)、RFC2582(New Reno)、RFC2883(D-SACK)、和RFC2988(RTO计算),这些框架在一定程度上提高了TCP传输效率,但最根本的AMID算法没有解决。考虑到上面的背景,需要一种在低速网络中支持高效利用可用带宽的数据传输协议。为此,本文设计了一个应用程序级别的基于UDP的数据传输协议。

(一)设计目标。基于UDP的可靠传输协议主要目标是效率、稳定。应该利用所有的可用带宽,即使带宽变化的很剧烈,以保证在低速网络情况下,能够为需一定带宽支持的应用尽可能提供其所需的传输速率。稳定性要求不能像TCP那样遇到丢包时产生传输速率的大幅波动,分组发送速率应该一直快速会聚可用带宽。

(二)模块的设计概述。本协议是数据传输是单向的,有两个部分:发送方和接收方。发送方根据流量控制发送(和重传)数据,触发和处理所有的控制事件,如RTT估计、超时检测和重传。接收者接收数据分组和控制数据报,并根据接收到的数据报发送控制数据报。接收程序使用一个固定UDP端口来发送和接收。

本协议将应用层数据封装成固定的大小进行传输,和TCP相似的是,称这个固定的数据报大小叫做MSS(最大分组大小,适宜于快速传输大块数据流。MSS可以通过应用程序来设置,MSS的选择对传输效率会有影响。

通过滑动窗口的流水技术来进行流量控制,在参数合适事能够充分利用当前可用带宽。

考虑到系统开销,协议并没有引入如流数据加密或身份认证等安全机制,它依赖于应用程序提供的授权和底层提供的安全机制。然而,由于UDP是无连接的,实现可靠数据传输时,应该检查所有达到的数据报是否是预期的数据报。

二、体系结构

从计算机网络层次体系的角度来看,基于UDP的可靠数据传输协议的层次结构如图1所示。因此,本协议是在原TCP/IP协议的传输层的UDP协议和应用层之间加入了一层

图1:基于UDP的可靠传输协议的层次

为保证可靠数据传输而实现的,加入了基于UDP的可靠数据传输协议而形成的一个五层体系结构。这样就可以利用TCP/IP的UDP协议实现一种基于UDP的面向连接的可靠数据传输机制。

本协议提供的主要功能有:(l)基于数据报的收发功能,协议调用传输层的UDP协议提供的服务,因而它会将数据分割成合适发送的大小来发送。(2)处理比特差错,UDP本身具有的校验功能,能够检测出数据包的错误并丢弃出错的数据报。(3)处理重复的数据报。(4)处理乱序的数据报。(4)动态估计RTT。(5)超时重发功能,采用和TCP类似的超时重发机制来保证数据分组的可靠传输。

三、报文结构

协议有两类数据报:应用数据报和控制数据报。它们数据报类型域来区分的。

(一)应用数据报

图2:应用数据报格式

数据报里含有四个域:序列号,是四个字节的无符号整数,每个非重传的应用数据报都有一个相对应的序列号,且每个非重传的应用数据报都序号增加1;时间戳,是一个四字节的无符号整数。数据报类型域里有数据报对应的值DATA,紧跟在这些数据后面的是应用程序数据。

(二)控制数据报。控制报文有三种:

图3:协议连接握手报文

图3是建立连接时的数据报,其中包含所要传输的数据报个数和文件名。

图4:应答报文

图4是应答(ACK)报文,序列号域填写的是希望接收到的下一报文的序列号。时间戳填入引起此应答的数据报文的时间戳。

图5:关闭连接报文

确认报文和关闭连接报文不包含三个域以外的控制信息,图中的类型域所填的值是三个宏定义。

对于应用数据报和控制数据报来说,都不需要增加报文长度域,因为可以从UDP协议头中得到实际的数据报大小。数据报大小信息能被用来得到数据报有效载荷和控制数据报中的控制信息字段大小。

四、协议实现机制

UDP是一个简单的面向数据报的运输层协议,它把应用程序交给它的数据添加上简单的包头就传给IP层发送出去,没有可靠性保证。基于UDP的可靠数据传输协议是一个面向连接的可靠数据传输协议,在分析它的技术实现问题时,使用了以下实现可靠数据传输所必需的关键技术,并在其中做出了选择。

(一)建立连接。作为一种面向连接的协议,在利用协议进行数据通信之前,首先必须在通信的双方之间建立一条连接。在的实现中,参考了下图中TCP中的3次握手方式。

图6:TCP三次握手的过程

但是由于协议是单工的,所以在第三个包开始已经传输应用数据了。

(二)关闭连接。关闭连接也参考了TCP的方式,TCP在关闭连接时的是以4次握手方法进行连接的关闭的,而且在永久连接的链路中正常情况下是不需要关闭连接的,只有在出现错误的情况下才会进行关闭操作。根据本协议特点做了一定的修改,过程如下:发送方收到接收方对最后一个数据报的确认后发送关闭连接数据报而后结束本次连接关闭完成。接收方发出最后的一个数据报发出确认后启动定时器等待关闭连接数据报,此过程中如果收到最后一个数据报的则发送相应确认,重启定时器;若定时器超时则表明FIN丢失,但是可知在这种情况无论超时与否都可知数据已正确传输完毕。若在传输过程中发送方检测到发送多次超时或接收方检测到超时,都会导致关闭连接,并检测出数据没有发送成功。

(三)差错检测。UDP头部具有检验和域,提供了差错检测功能,由于本协议是调用UDP提供的服务,因此不需要另外增加校验码就可提供此功能。

(四)确认技术。发送方需要接收方对收到数据的反馈来检测数据是否发送成功。常用的确认技术有逐个确认,捎带确认、累积确认和超时确认,否定确认以及扩展确认这几种方式的结合来实现确认。其中前几种确认方式和TCP中的用法一致,在这里要简单介绍一下扩展确认的使用。

在接收方收到对端的失序数据报时,为了最大限度地减少重传,并不是简单将其丢弃,而是将其存储在本地的失序缓冲队列中,并设置失序数据报计数器。接收方在计数器超过阐值或者确认定时器超时后,向发送方发送扩展确认数据报。该数据报中携带本端己经收到的最大按序数据报序号和收到的所有失序数据报的序号信息。

发送端收到接收端传来的扩展确认数据报后,将根据最大确认序号和对端收到的失序数据报的序号计算出应重传的数据报序号,并从重传队列中取出相应的数据报进行快速重传。

综合考虑开销,效率和实现复杂性,本协议采用累积确认。

(五)超时重发。数据报文和应答文都有可能丢失,而且UDP协议会丢弃错误的数据报而不向本端应用层或发送方提供任何提示信息,发送方发现这些事件的方法是等待确认时启动超时重发定时器,若发生超时则判断为上述三个事件之一发生,由于无法区分确认丢失还是另外两个事件发生,发送方选择的处理策略是万能的重发,当然它会引入新的问题,但下一机制可以解决。

(六)序列号。由于数据会以UDP数据报的方式传输,而UDP数据包的到达可能会失序,因此它本协议的数据报的到达也可能失序,如果必要,需要对收到的数据报文进行重新排序,以便能收到的数据以正确的顺序交给应用层。对报文的丢失处理方式是重传,这样就引进了报文的重复,包括数据报和应答报文,序列号可以解决这些乱序、丢失和重复的问题。

(七)流水线技术。为了避免等停协议的弊端,充分利用可用带宽,本协议使用了流水线技术,通过允许一次传输多个未被确认的分组提高效率,同时通过限制发送方仅发送那些序号落在一个指定范围内的分组,实现了发送速率的控制。本协议中的序列号用了四个字节,这是一个性能和实现的折中,大的序列号空间使得实现得到了一定程度上的简化。

五、小结

本文在对可靠数据传输技术进行了深入研究的基础上,使用UDP协议作为传输层协议,引入了确认,RTT测量,RTO估算,超时重传,流水线技术等机制,阐述了基于UDP的可靠数据传输协的模块设计、报文的结构和协议的所采用的实现机制,设计了一个基于UDP的可靠数据传输的协议,可用于特定环境下对可靠数据传输的需求。

上一篇:FPGA与DDS研究可编程频率信号源设计和实现 下一篇:幼儿多媒体学习软件的设计与实现