前段时间写过一篇
《闲谈文件传输》,里面谈到多线程下载的有效性问题。近日,因为比较关注TCP协议在广域网中的表现,所以感觉以前的讨论不够全面,本文重新探讨多线程下载在广域网中的有效性问题。
我这里所谈及的广域网是具有大带宽,长延时的网络环境,专业术语为Long Fat pipe
Network,简写为LFN。比较典型的例子为卫星链路。因为TCP协议是面相连接的,提供可靠服务的传输层协议,所以发送方必须等到它所发送的数据得
到确认后,才能将本地的缓存里面的数据丢弃,不然就有可能造成数据的丢失。
为了简单,不考虑网络中可能发生的拥塞,即差错率为0%。发送端为了确保链路的可靠性,不得不在每次将数据包送出后,等待此数据包的回应,在此时间段内链
路基本处于空闲,整体的效率也就很低了。为了充分利用现有的网络带宽,就必须使等待的时间降为0,这就需要加大发送窗口,到底需要多大的发送窗口呢?
理想窗口大小 = 带宽 × 延时
带宽利用率 = 窗口大小 / (带宽 × 延时)
|
可见在带宽未达到饱和的情况下,带宽利用率和窗口大小是成正比关系的。可实际的情况呢?
考虑带宽为2Mbps,延时为500ms的情况,理想的发送端口大小最小为:128K bytes,实际上在TCP协议的实现过程中多选择的窗口大小为64K bytes,实际的带宽利用率也就只有50%了。 |
作为下载方,我们对于发送方的窗口大小没办法做优化,但是我们可以通过增加下载线程数来变相增加发送方的窗口大小,进而获得更高的传输速率。在上面的理想情况下,我们只需要开两个线程,就能动力十足了。实际情况,所需线程数可能略有增加,但整体偏差不会差得太多。
可见,多线程下载,在广域网中还有变相加大发送方发送窗口大小的作用,那么它能加速文件传输的秘密也就不是什么秘密了。
阅读(1489) | 评论(0) | 转发(0) |