网络协议之:基于UDP的高速数据传输协议UDT

简介简单就是美 。在网络协议的世界中,TCP和UDP是建立在IP协议基础上的两个非常通用的协议 。我们现在经常使用的HTTP协议就是建立在TCP协议的基础上的 。相当于TCP的稳定性来说,UDP因为其数据传输的不可靠性,所以用在某些特定的场合,如直播、广播消息、视频音频流处理等不太需要校验数据完整性的场合 。
UDP相对TCP协议而言,其特点就是简洁,它删除了在TCP协议中为了保证消息准确性的各种限制性特征 。简洁带来的好处就是快!今天给大家讲解一下,基于UDP的高速数据传输协议UDT 。
UDT协议UDP因为其简单的特性,所以可以做到很多TCP做不到的事情,比如进行大数据量的快速传输 。这里并不是要将TCP和UDP分个好坏高下,毕竟各个协议的适应场景不同,他们之所以流行,就是因为可以在特定的场景发挥出重要的作用 。套用中国的一句谚语就是:不管白猫黑猫,能抓到老鼠的,就是好猫 。
用好UDP协议,我们就可以快速的传递大量的数据,这个协议就是UDT协议 。
话说,像这些基础协议都是老外发明的,而中国的互联网巨头都在抢着做平台、做流量的生意,真的是无话可说....
【网络协议之:基于UDP的高速数据传输协议UDT】UDT项目开始于2001年,是由Yunhong Gu在芝加哥伊利诺伊大学国家数据挖掘中心 (NCDM)读博士期间开发的,并在毕业之后持续的进行维护和升级改进 。
UDP的出现是因为那时候,传输更快更便宜的光纤网络出现了,代替了之前的铜缆线和双绞线,从而极大的提升了信息传输的效率 。这时候大家就发现之前使用TCP协议来进行大数据的传输会有很大的问题 。从而基于UDP的UDT协议出现了 。
UDT的第一个版本,也称为SABUL(Simple Available Bandwidth Utility Library),UDT通过支持批量数据传输,从而方便在私有网络中进行数据的传输 。
要注意的是UDT的第一个版本SABUL使用UDP协议进行传输数据,同时使用单独的TCP协议连接传输控制消息 。
UDT的初始版本是在超高速网络(1 Gbit/s、10 Gbit/s等)上进行开发和测试的,2003年10月,NCDM实现了从美国芝加哥到荷兰阿姆斯特丹的平均每秒6.8G比特的传输 。在30分钟内的测试中,他们传输了大约1.4TB的数据 。
从2004年发布的2.0版本开始,SABUL改名为UDT,UDT的全称是UDP-based Data Transfer Protocol,也就是基于UDP的数据传输协议 。
为什么要改成UDT呢?因为在UDT2.0中,删除了SABUL中的TCP 控制连接,并使用UDP来处理数据和控制信息 。另外,UDT2还引入了一种新的拥塞控制算法,允许协议动态调整UDT和TCP流,实现UDT和TCP流的并发运行 。
在2006年,UDT协议升级到了3版本,该协议不仅是在私有网络中运行了,而是扩展到了商业互联网中 。同时UDT3中的拥塞控制可以进行调整优化,可以在低带宽的环境中运行,并且允许用户轻松定义和安装自己的拥塞控制算法 。另外,UDT3还显着减少了系统资源(CPU和内存)的使用 。
2007年,UDT4版本在高并发和防火墙穿透方面进行优化和性能的提升 。UDT4允许多个UDT连接绑定到同一个UDP端口,它还支持集合连接设置,以便UDP hole punching 。
什么是UDP hole punching呢?
UDP hole punching通常被用在网络地址转换 (NAT)中 。用来维护穿越NAT的用户UDP数据包流 。它是一种使用网络地址转换器在专用网络中的Internet主机之间建立双向UDP连接的方法 。
什么是NAT呢?
大家都知道IPV4地址是有限的,很快IPV4地址就快用完了,那怎么解决这个问题呢?
当然,一个永久解决的办法是IPV6,不过IPV6推出这么多年了,好像还没有真正的普及 。
不使用IPV6的话还有什么解决办法呢?
这个办法就是NAT(Network Address Translators) 。

网络协议之:基于UDP的高速数据传输协议UDT

文章插图
 
NAT的原理是将局域网的IP和端口和NAT设备的IP和端口做个映射 。
NAT内部维护着一张转换表 。这样就可以通过一个NAT的IP地址和不同的端口来连接众多的局域网服务器 。
那么NAT有什么问题呢?
NAT的问题在于,内部客户端不知道自己外网IP地址,只知道内网IP地址 。
如果是在UDP协议中,因为UDP是无状态的,所以需要NAT来重写每个UDP分组中的源端口、地址,以及IP分组中的源IP地址 。
如果客户端是在应用程序内部将自己的IP地址告诉服务器,并想跟服务器建立连接,那么肯定是建立不了的 。因为找不到客户端的公网IP 。
即使找到了公网IP,任何到达NAT设备外网IP的分组还必须有一个目标端口,而且NAT转换表中也要有一个条目可以将其转换为内部主机的IP地址和端口号 。否则就可能出现下图的连接失败的问题 。


推荐阅读