这是一个基本的问题,但我希望有人有更多的网络经验,提供一个更全面的答案。
假设我在外部服务器上有3个文件,每个文件为1GB。为了下载,我会这样做:
$ wget https://server.com/file1.mov在并行执行这三个项方面(例如,在三个单独的选项卡/shell/线程中),或者以串联方式执行,例如:
$ wget https://server.com/file1.mov \
&& wget https://server.com/file2.mov \
&& wget https://server.com/file3.mov \在下列情况下:
对于第一种情况,我们显然希望使用并行下载,如果外部服务器上的开销是固定的,那么对于另外两种情况,为什么其中一种会比另一种更好呢?
发布于 2021-02-28 11:24:54
对于所有这三种情况,实际结果取决于若干限制因素。您已经列出了下载和上传带宽,但是瓶颈也可能出现在磁盘I/O、CPU和RAM以及数据传输协议和其他方面。
通常,分段文件传输是获取数据的一种较好方式,因为它减少了TCP拥塞控制(假设我们使用TCP协议)和异构环境的影响。正如“跨广域网传输高带宽数据的应用技术”(Jason Lee,Dan Gunter,Brian Tierney)中所述,论文:
TCP通过不断增加窗口大小来探测连接的可用带宽,直到丢包为止,这时它会将窗口切成两半,然后开始“加高”连接。带宽延迟产品越高,这种提升所需的时间就越长,可用带宽的持续时间也就越少。“
和
“为了改善这种网络成为瓶颈的情况,可以使用并行流。该技术是通过将要传输的数据划分为N个部分并用单独的TCP连接传输每个部分来实现的。N个并行流的效果是将单个流所经历的带宽延迟乘积减少一个N的因子,因为它们都共享单流带宽(u)。对于Q (<0.001)的合理值的随机分组丢失通常一次发生在一个流中,因此,当它们与拥塞链路上的连接竞争时,它们对总吞吐量的影响将降低,每个并行流将不太可能被选择来丢弃它们的分组,因此必须通过过早避免拥塞或慢启动的潜在带宽的总数量被减少。
值得一提的是,拥塞算法在带宽分配中起着重要的作用,但仍然需要根据网络的“类别”进行设置。宽带、卫星、3G、WiFi --它们都有物理环境决定的特性,而且CWND的实现表现也不同。
另一个需要考虑的问题是拥挤网络中并行和并发数据传输的行为。从理论上讲,传输的数据越多,就越有可能阻塞网络并激活ISP端的策略,从而开始丢弃或形成连接。然而,即使在这种情况下,用几个小的并行链接交换数据的概率也比一个大的连接高。
同样,这是一个非常通用的解释,连接吞吐量可能会因各种因素而有很大差异。还可能发现自己处于这样一种情况,即单个连接将执行与多线程相同的功能,同时不需要额外的工作和代码来实现。
发布于 2021-02-28 21:17:29
tl;博士:TCP拥塞控制
解释
真正的答案是,这几乎不重要!
创建TCP会话后,TCP将处理带宽,并尝试使用拥塞控制机制达到最大速度:
传输控制协议(TCP)使用一种网络拥塞避免算法,该算法包括加性增加/乘性减少(AIMD)方案的各个方面,以及包括慢启动和拥塞窗口在内的其他方案,以实现拥塞避免。
拥塞避免既可以是线路上两个数据包之间的“真正”拥塞,也可以是数据包丢失,因为您的CPU/NIC/其他东西无法处理数据包带宽。
,为什么这几乎不重要?
这是因为在某些情况下,由于两个并行会话,我们可能会出现拥塞。
下面是一个愚蠢的例子,它将解释为什么它会很重要:
带宽为8位/秒的计算机可以尝试创建并行会话。一旦他同时发送"SYN“,就会出现拥塞。由于8位是此特定计算机可以发送的数据包的最小位,因此拥塞将不允许计算机使用因特网。
发布于 2021-02-26 23:27:18
根据您的TCP窗口功能/方法,总是使用并行下载会更快。
另外,如果某个中间节点(接入点/交换机/路由器/防火墙/代理)饱和。它得丢几个包。
他们做这件事的最简单的方法就是甩尾。但是防火墙和路由器也可以有更复杂的流量塑造器。
如果您尝试并行下载,并且带宽在其他通信量之间共享,则生成更多的数据包或更多的连接(用于每个连接流量整形),这样就可以获得一定的速度。
https://stackoverflow.com/questions/66296395
复制相似问题