当前位置: 首页 > 后端技术 > Java

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

时间:2023-04-01 20:50:39 Java

简介简单就是美。在网络协议的世界里,TCP和UDP是建立在IP协议之上的两个非常常见的协议。我们现在经常使用的HTTP协议是建立在TCP协议基础上的。等同于TCP的稳定性,UDP由于其在数据传输上的不可靠性,被用于一些特定的场合,比如直播、广播消息、视频和音频流处理等,不需要验证数据的完整性。与TCP协议相比,UDP的特点是简单,它去掉了TCP协议中的各种限制特性,保证了报文的准确性。简单的好处是速度!今天给大家讲解一下,基于UDP的高速数据传输协议UDT。UDT协议UDP由于其简单的特点,可以做很多TCP做不到的事情,比如快速传输大量数据。这不是要比较TCP和UDP。毕竟每个协议的适配场景是不一样的。它们之所以受欢迎,是因为它们可以在特定场景中发挥重要作用。套用一句中国谚语:不管黑猫白猫,抓到老鼠就是好猫。利用好UDP协议,我们可以快速传输大量数据。这个协议就是UDT协议。也就是说,这些基础协议都是老外发明的,中国的互联网巨头争先恐后地搭建平台,做流量生意。真的没什么好说的...UDT项目始于2001年,由谷云红在伊利诺伊大学芝加哥分校国家数据挖掘中心(NCDM)攻读博士期间开发,并持续维护和维护毕业后升级。UDP的出现是因为当时出现了速度更快、成本更低的光纤网络,取代了之前的铜缆和双绞线,大大提高了信息传输的效率。这时候大家发现使用TCP协议传输大数据会有很大的问题。于是,出现了基于UDP的UDT协议。UDT的第一个版本,也称为SABUL(SimpleAvailableBandwidthUtilityLibrary),UDT通过支持批量数据传输,方便了私有网络中的数据传输。需要注意的是,第一版UDTSABUL使用UDP协议传输数据,同时使用单独的TCP协议连接传输控制消息。UDT的初始版本是在超高速网络(1Gbit/s、10Gbit/s等)上开发和测试的。2003年10月,NCDM实现了从美国芝加哥到荷兰阿姆斯特丹的平均每秒6.8Gbit。传播。在30分钟的测试中,他们传输了大约1.4TB的数据。从2004年发布的2.0版本开始,SABUL更名为UDT。UDT的全称是UDP-basedDataTransferProtocol,是一种基于UDP的数据传输协议。为什么要改成UDT?因为在UDT2.0中,删除了SABUL中的TCP控制连接,改用UDP来处理数据和控制信息。此外,UDT2还引入了一种新的拥塞控制算法,允许协议动态调整UDT和TCP流,实现UDT和TCP流的并发运行。2006年,UDT协议升级到第3版,不仅运行在私有网络,还扩展到商业互联网。同时,UDT3中的拥塞控制可以调整和优化以在低带宽环境下运行,并允许用户轻松定义和安装自己的拥塞控制算法。此外,UDT3显着降低了系统资源(CPU和内存)的使用。2007年优化UDT4版本,在高并发和防火墙穿透方面性能提升。UDT4允许多个UDT连接绑定到同一个UDP端口,也支持统一连接设置进行UDP打洞。什么是UDP打洞?UDP打洞通常用于网络地址转换(NAT)。用于维护用户UDP报文穿越NAT的流量。它是一种使用网络地址转换器在专用网络中的Internet主机之间建立双向UDP连接的方法。什么是网络地址转换?大家都知道IPV4地址是有限的,很快IPV4地址就用完了,那么如何解决这个问题呢?治本当然是IPV6,但是IPV6推出了这么多年,似乎并没有真正普及。如果不使用IPV6,有什么解决方案?这种方法就是NAT(网络地址转换器)。NAT的原理是将局域网的IP和端口映射到NAT设备的IP和端口上。NAT内部维护着一张翻译表。这样,许多局域网服务器可以通过一个NATIP地址和不同的端口连接起来。那么NAT有什么问题呢?NAT的问题是内部客户端不知道自己的外网IP地址,只知道内网IP地址。如果是在UDP协议中,因为UDP是无状态的,所以需要NAT重写每个UDP包中的源端口和地址,以及IP包中的源IP地址。如果client告诉server它在应用程序内部的IP地址,想和server建立连接,肯定是建立不起来的。因为找不到客户端的公网IP。即使找到了公共IP,任何到达NAT设备外部IP的数据包都必须有一个目标端口,并且NAT转换表中必须有一个条目将其转换为内部主机的IP地址和端口号.否则可能会出现下图所示的连接失败问题。如何解决?第一种方法是使用STUN服务器。STUN服务器是具有已知IP地址的服务器。客户端要通信之前,先去STUN服务器查看自己的外网IP和端口,然后再使用这个外网IP和端口进行通信。但有时UDP数据包会被防火墙或其他应用程序阻止。这时候就可以使用中继器技术TraversalUsingRelaysaroundNAT(TURN)。双方都向转发服务器发送数据,转发服务器负责转发数据。请注意,这不再是P2P。最后,我们有一个主控协议,叫做ICE(InteractiveConnectivityEstablishment):它其实是一种直连,是STUN和TURN的结合。能直连的时候就可以直连。如果不能直接连接,可以使用STUN。如果不能,使用STUN就使用TURN。在使用STUN和ICE的过程中,我们会有一台网络主机建立端口映射并维护其他UDP端口的状态,但是UDP的状态通常会在短短的几十秒到几分钟内过期,为了为了保证UDP处于NAT状态和生命周期,所以就有了UDP打洞技术。通过定期发送保活数据包来更新NAT中的UDP状态。UDT的缺点是UDT是基于UDP协议的,但是UDP协议因为简单,不具备安全特性。因此,基于它的UDT协议缺乏安全特性,因此其在商业环境中的应用会受到一定的限制。不过新版UDT已经在开发中,大家可以期待一下。总结UDT广泛应用于高性能计算,例如通过光纤网络进行高速数据传输。后面我们会告诉大家如何在netty中使用UDT协议。本文已收录于http://www.flydean.com/11-udt/最流行的解读,最深刻的干货,最简洁的教程,很多你不知道的小技巧等你来发现!欢迎关注我的公众号:《程序那些事儿》,懂技术,更懂你!