精通
英语
和
开源
,
擅长
开发
与
培训
,
胸怀四海
第一信赖
UDT协议的特性包括以下几个方面:
1) 基于UDP的应用层协议;
2) 面向连接的、可靠的协议;
3) 双工的协议;
4) 单播的数据流;
5) 新的拥塞控制算法,并且具有可扩展的拥塞控制框架。
面向连接:意味着两个使用协议的应用在彼此交换数据之前必须先建立一个连接。
UDT是逻辑上存在的连接通道。
可靠性:包序号机制;接收者的ACK响应和丢包报告;ACK序号机制;重传机制(基 于丢包报告和超时处理)。
连接的维护:握手;Keep-alive;关闭连接。
双工的:每个UDT实例包含发送端和接收端的信息。
新的拥塞控制算法:不同于基于窗口的TCP拥塞控制算法(慢启动和拥塞避免),是混 合的基于窗口的、基于速率的拥塞控制算法。
可扩展的拥塞控制框架:开源的代码和拥塞控制的C++类架构,可支持开发者派生专 用的拥塞控制算法。
UDT支持可靠的数据流(STREAM)和不可靠的消息(DGRAM)。数据流语意上和TCP的 数据流相似;不可靠的消息语意上可以视为SCTP协议[RFC4960]的子集。
UDT协议框架的分层架构如下图所示:
应用程序使用UDT Socket的API接口,如同使用系统的Socket一样。UDT提供了一个 拥塞控制类(CC)。CC包含了一个必要的用户自定义的回调函数集合,用以处理不同的控制 事件。应用程序可以自定制,派生拥塞控制类。
UDT位于UDP之上的应用层。应用程序通过UDT Socket交换数据。
内存拷贝为了减少处理时间,绕过了UDT。
下图着眼于分层里的UDT部分,展现了UDT的软件架构:
上图的实线表示数据流,虚线表示控制流。
阴影的块(Buffer和Loss List)是4个数据组件。空白的块(API、UDP Channel 、Sender 、Receiver和Listener)是功能组件。
因为UDT是双向的,所有的UDT实体都有相同的结构。
被发送的数据转发给Sender的缓冲区,然后被Sender发送给UDP通道。
在连接的另一侧,Receiver从UDP通道读取数据,转发给Receiver的缓冲区,重新 排序数据以及检查信息包的丢失。Receiver也处理接收到的控制包信息。它更新Sender的 丢失链表(当NAK控制包被接收)和Receiver的丢失链表。一些控制事件会触发Receiver去 更新拥塞控制模块(负责Sender的包发送)。
应用程序可以从Receiver缓冲区里读取数据。
UDT的Socket选项能控制Sender/Receiver(同步模式),缓存管理模块(缓存大小), UDP通道(UDP的Socket选项),Listener(待办订单)和CC(拥塞控制算法)。这些选项可以 从这些模块中读取,并且通过API模块提供给应用程序。