基于UDP的实时数据可靠传输

2018-01-17 22:06袁和张光锋
电子技术与软件工程 2017年24期

袁和+张光锋

摘 要

为解决分布式链路聚合对网络数据传输快速性和可靠性的需求,提出RUDP(Reliable UDP)模型。该模型通过增加报文保序机制、报文确认和快速重传机制、报文分片重组机制,实现一种基于UDP的可靠传输协议。实验数据表明,该模型提高了數据传输的可靠性和效率。

【关键词】分布式链路 聚合 可靠传输 UDP协议 快速重传

1 引言

当前,分布式链路聚合技术在网络数据备份链路中应用十分广泛。为了保证分布式聚合口上的各协议计算正确,设备间需要实时同步大量的配置和运行数据,要求网络数据传输高效可靠。目前网络数据传输协议主要是TCP,SCTP和UDP[1]。TCP和SCTP协议是面向连接的可靠传输层协议,保证数据传输的高可靠性。但其控制机制复杂,效率低下。UDP协议是无连接的传输层协议,数据传输效率高,但数据传输可靠性差。

根据标准协议的不足,本文在UDP传输协议的基础上提出RUDP(Reliable UDP)模型。该模型在网络通信的传输层和应用层之间新增一个RUDP层,通过封装可靠传输的协议头,建立可靠传输控制机制来实现实时数据的高效可靠传输。本文论述了RUDP模型原理及实现机制,并实验验证其可行性。

2 RUDP模型

UDP是基于消息和非面向连接的传输协议,可以应用在基于消息的通信传输中,但是由于它是无连接的传输协议,缺少复杂的数据传输控制机制,所以不能保证数据的可靠传输。

根据TCP/IP网络架构体系结构,RUDP模型是在传输层和应用层之间增加可靠传输控制层,将传统模式设计成五层网络架构。可靠传输控制层具有报文保序、报文确认、报文超时重传、报文分片与重组等功能。RUDP具有与TCP类似的工作机制,为保证数据可靠传输,在建立连接时也需要进行三次握手,但RUDP没有使用窗口机制,其保证可靠传输的控制策略比TCP控制策略简单。由于网络层使用的是UDP协议进行数据传输,本模型继承了UDP通信高效性的特点。

3 RUDP实现机制

RUDP模型使用多种机制来保证数据传输的可靠性。下面将系统阐述RDUP协议层模型中报文属性定义,报文保序机制、报文确认和快速重传机制、报文分片重组机制,证明本文方法的可行性和有效性

3.1 报文属性定义

为满足报文可靠传输,在发送报文发送之前给每个报文封装一个报文头,报文主要字段如表1所示。

3.2 报文保序

初始情况下两端是无法感知对端序号的,所以在建立连接时采用三次握手过程进行序号交换。发送方发送第一个报文在报文中设置一个初始标记(INIT),并进入INIT_SEND状态,等待接收方确认。当接收方收到初始标记(INIT)报文之后,记录下发送方的初始序号,回应一个ACK,ACK序列号为发送方初始序列号加1,同时发送一个带初始标记(INIT)报文,报文中携带本端初始序列号,接收方进入INIT_RCVD状态。发送方收到接收方发送的带初始标记(INIT)报文和ACK后,记录发送方携带的初始序列号,进入ESTABLISHED状态,并发送一个ACK,ACK序列号为接收方初始序列号加1。接收方收到发送方的ACK后,进入ESTABLISHED状态。此时,两端设备就可以开始双向传递数据了。

为了保证报文的按序处理,每次发送报文时需要为报文分配一个序列号。本文中采用类似TCP实现方式,将接收端回应给发送端的ACK报文序号作为发送端的下一个报文的序号。当接收端报文接收缓冲区出现报文乱序时需要将乱序报文暂时缓存,待此序号之前的报文收集完整后再上送应用模块处理。

3.3 报文确认和超时重传

为了保证报文的可靠性传输,需要实现对报文的确认和超时重传,接收端对每个接收到数据报文(纯ACK报文不需要确认)都需要确认,发送端只有当收到ACK确认消息之后才能够将报文从发送缓冲区中释放。当前TCP协议栈对报文的确认有如下几种方式:

(1)收到报文之后立即进行确认;

(2)当有数据发送时在发送数据时顺便携带ACK;

(3)支持经受延迟ACK,收到报文时不立即进行ACK的确认,当定时器超时之后再进行ACK的确认。为简化处理使用方式1进行报文确认。

发送方在一定时间内未收到ACK报文需要进行报文重传,在TCP协议栈中TCP超时定时器采用的是指数退避的方式,本模型直接采用固定超时的方式进行超时重传,发送方在发送报文成功后立即启动重传定时器(对于已经启动的不需要再启动),当重传定时器超时之前收到了ACK报文并且报文缓冲区中不存在未被确认报文时停止定时器,如果存在尚未确认的报文重新启动定时器,当重传定时器超时之后尚未收到ACK可以将缓冲区中序号最小的报文进行重传。为了加速报文的重传,采用快速重传机制,在收到到3个重复ACK时可以认为报文已经丢失,不需要等待重传定时器超时,直接将报文进行重传。如图1所示,对于报文发送端在收到接收端对报文1的3个重复ACK后,就可认为报文2已经丢弃不需要等待定时超时,直接重发报文2。

3.4 报文分片重组

在网络通信中,物理网络层一般要限制每次发送数据帧的最大长度,这个最大长度称为最大传输单元(MTU)。当负载数据和固定报文头的总长度超过MTU时,需要对数据报进行分片处理。每个分片数据报需要封装可靠传输协议头,报文头中标识字段值被复制到所有分片的标识字段中,其中DF位置0,MF位置1(最后一个分片数据报不需要将MF置1),并计算出每个数据报对应的数据偏移值。

接收端需要创建分片重组队列,当收到的报文总长度大于MTU时,需要将分片报文放入队列缓存起来,等待所有的分片报文收集完全之后按分片报文序列号进行重组之后再入socket接收缓冲区。对于分片报文需要等到所有分片收集完整之后再进行ACK确认。为了防止分片导致分片缓冲区堆积大量分片,需要对分片队列进行定时老化,当定时器超时后分片没有收集完整,需要删除缓存区中所有分片,并等待发送方进行报文重传。

4 实验论证

本实验使用点对点通信模型,将两台CPU为2GHz,内存4G的计算机对连,在10Mbps的网络传输环境中,分别测试RUDP和TCP协议的传输速率,RUDP测试结果如图2所示,稳定传输速率约为0.873MB/s,TCP测试结果如图3所示,稳定传输速率约为0.756MB/s。经计算可知,RUDP传输效率较TCP提高了15.48%。

5 结束语

本文阐述了一种基于UDP的可靠传输协议实现方法,采用报文保序机制、报文确认和快速重传机制、报文分片重组机制来保证数据传输的可靠性和高效性。试验表明,RUDP模型提高了数据传输的可靠性和效率。

参考文献

[1]X.Hei,J.Chen,H.Lu,G.Xie and H.Meng, "A UDP-based way to improve data transmission reliability," 2017 29th Chinese Control And Decision Conference (CCDC),Chongqing,2017,pp.2612-2617.

[2]王斌,陈元琰,胡愚,冯伟.TCP Vegas拥塞避免机制的改进算法[J].计算机应用,2010,30(09):2485-2487+2500.

[3]刘喜作,周晶,梁德清.基于UDP的大数据包可靠传输[J].电讯技术,2012,52(01):96-100.

作者简介

袁和(1993-),男,湖北省宜昌市人。现为南京理工大学学生。研究方向电子与通信工程。

作者单位

南京理工大学电子工程与光电技术学院 江苏省南京市 210094endprint