https://blog.csdn.net/asdfghjkl1993/article/details/57417074
UDT协议学习笔记(一)UDT概述
本人近来就职于国内某著名互联网血汗工厂,从事分布式后台相关的工作,最近的项目主要是网络相关。我们有许多海外的proxy节点,为了加速海外proxy与国内某机房的通信速率及抢占更多的带宽,于是开始调研一些udp based的应用层协议,如udt,quic等等。目前还处于调研状态中,尚未投入使用,这里算是分享下一些学到的东西,欢迎大家一起讨论~
一,引入UDT的原因
互联网上的标准数据传输协议TCP在高带宽长距离网络上性能很差,且无法充分的利用带宽。其原因主要有一下几点:
1)现行的tcp拥塞窗口机制在高带宽长距离的环境下无法很好的工作,拥塞窗口太小,而且增加过于缓慢直接导致吞吐
率不高,无法充分利用带宽。
此外TCP的AIMD拥塞控制算法过激地降低拥塞窗口的大小,但是不能快速回复到高位充分利用带宽。
2)目前的tcp拥塞控制算法在BDP网络下具有较差的RTT公平性,rtt会影响拥塞窗口的增长,越不容易达的链接的拥塞
窗口增加得越慢,其发送速度越慢,因此会导致越远的链接发送速率越慢。
由此看来,随着网络带宽的不断增长,传统的TCP协议已经无法满足日益增长的海量传输的需求,于是一种新的能够在高BDP网络下有良好性能的网络协议的需求变变得十分强烈。
二,UDT概述
1,首先UDT是什么?
UDT是基于UDP的数据传输协议。UDT是开源软件,主要目的是针对“TCP在高带宽长距离网络上的传输性能差”的问题,尽可能全面支持BDP网络上的海量数据传输。UDT是建立与UDP之上的面向双向的应用层协议,引入了新的拥塞控制算法和数据可靠性控制机制。它不仅可以支持可靠的数据流传输(STREAM 类型TCP)和部分可靠的数据报(DGRAM类似网络上发广播消息)传输,也可以应用在点对点技术,防火墙穿透,多媒体数据传输等领域。
2,层次结构
这里值得注意的一点是UDT是基于UDP的一种应用层协议,这除了意味着他除了继承了UDP所能有的那些优点之外,
更意味着它是被大部分操作系统所兼容,这也为UDT的普及提供了可能。
图1
图1可以很好的表示UDT协议的分层架构。应用程序使用UDT Socket的API接口,如同使用系统的Socket一样。UDT提供了一个 拥塞控制类(CC)。CC包含了一个必要的用户自定义的回调函数集合,用以处理不同的控制 事件。应用程序可以自定制,派生拥塞控制类。
UDT位于UDP之上的应用层。应用程序通过UDT Socket交换数据。 内存拷贝为了减少处理时间,绕过了UDT。
图2
图2所表示的是UDT的软件结构。上面的实线表示数据流,虚线表示控制流。
UDT是双向的,所有实体具有相同结构。当数据需要被发送时,被发送的数据转发到Sender的缓冲区,然后被Sender发送给底层的UDP channel。而在连接的另一侧,Receiver从底层UDPchannel获取数据,转发给Receiver的缓冲区,将数据进行rerank,并查看是否有数据报丢失。此外Receiver也用来处理控制包。它会更新Receiver和Sender的LostList。并且触发相应的事件,如拥塞控制等等。UDT的功能有上面的模块进行封装,并通过提供API为应用程序服务。
3,UDT的特性
UDT的特性主要包括在以下几个方面:
1)基于UDP的应用层协议
2)面向连接的可靠协议
3)双工的协议
4)拥有新的拥塞控制算法,并具有可拓展的拥塞控制框架。
此外UDT协议在高BDP网络相对于TCP协议的优势,可以用下面几点来表示:
1)UDT是基于UDP协议,并且是定时器做的发送,不像tcp需要等待ack后才能开始下一轮发送
2)UDT的拥塞控制算法,能够实现在慢启动阶段快速增长抢占带宽,而在接近饱和时逐渐降低增长速度,使它趋于稳定。
3)UDT对包丢失的处理算法,和对噪声链路的容忍性,使得在网络波动比较大的环境中,它比传统的TCP协议更加的稳定。
体的协议细节和原理,将有下节开始与大家分享和讨论。