UDP文件传输在什么场合有优势?
目前UDP传输文件的工具和协议都很多,说明还是有某些方面的优势的,但具体到UDP一定比TCP快,也没有确切的根据,至少像一些专门的下载网站,也没有去支持基于UDP的下载协议。恰巧本人最近之前了一段时间喷泉码,感觉这个东西可以应用于UDP文件传输,但是究竟UDP传输本身有多大价值,适用什么情况却不甚明了,希望和大家讨论讨论。
首先是在正常的独享有限带宽的网络环境下,目前的下载工具的速度是否能达到满负荷。单线程TCP肯定是不行的,多线程TCP理论上应该可以吧,但是线程开得太多的话,每个线程要在文件的不同位置写入,会造成磁头频繁的移动,磁盘IO也可能成为瓶颈,所以一般推荐5-10个线程,可能是因为多数硬盘是4-8个磁头吧(我猜的),这种情况下是不是能达到满负荷我就不清楚了。而UDP做到这一点应该不难吧,因为它不需要应答,想发多快都可以,超过负荷顶多是丢包,并不降低有效的数据传输速度。要搞清楚是否满负荷也不很容易,首先实际的带宽未必是供应商所号称的那么大,其次是目前带宽限制的机理我也不是太清楚,比如4M ADSL,是完全真正的限速还是和邻近的用户争夺有限的设备能力呢?争夺带宽的考虑后面会谈到。
第二是在不太理想的网络环境下,UDP所具有的优势。这些不理想的情况包括,丢包率较高、高延迟(PING值大)、可用带宽不稳定地抖动。高延迟似乎对TCP的影响是很大的,因为TCP需要应答,虽然有多线程和滑动窗口(Slide Window)的机制可以同时发送多个数据包,但是TCP的拥塞控制策略使得它的实际传输速率一直在随着丢包波动,当延迟较大时他就需要更长的时间才能从波谷回到波峰。当三个不理想的情况凑在一起时,TCP估计开多少线程都没办法了吧。有的下载工具是修改TCP底层参数来改善这些状况的,具体情况我就不太清楚了。对于UDP,还是以不变应万变,不受这些因素的影响。单向通讯和广播也是UDP方式下载的优势,但这种情况不太常见,就不多谈论了。
第三是在与其他用户争夺带宽的情况下。最常见的就是局域网用户共享一个出口了。(关于广域网用户,我曾见过老外写的比较有趣的实测,当两个特定子网的用互频繁通讯的时候,实际的带宽利用情况是像正弦波一样波动的,效率低的可怜。这是因为所有用户的延迟都一样,TCP的拥塞控制趋于同步,一起涨就阻塞,然后一起降就空闲,如此循环。题外话完毕)。在这种情况下,UDP的主要优势就是和TCP争抢带宽,如果不加任何的拥塞控制,不知是否能把TCP赶尽杀绝,独占所有带宽,也不知目前的UDP下载能否做到,是否有明显的效果。
本来想在最后简单介绍一下TCP的拥塞控制算法、滑动窗口机制,多线程下载原理,以及UDP文件传输如何处理丢包和重组的,但是因为前面写得太长了,估计没有人会有耐心看下去了,热心的朋友可以帮忙介绍一下。随时等候各位的宝贵建议。