我知道,由于数据必须传输的距离,而且光速如此之快,连接将花费更长的时间,并且第一位应该比从更近的服务器下载要慢,但是一旦第一位从服务器,其余的不应该紧随其后吗?
例如,如果有 100 辆汽车从法国出发前往西班牙,那么第一辆汽车用不了多长时间就可以到达,而且它们都应该同时到达。如果他们从中国出发去西班牙,时间会长很多,但是第一辆车到了之后,其他人不就是源源不断地到了吗?
或者它是否发送一个位(或一个数据包),然后在它发送下一个时,已经发送了一些其他位/数据包,因此两者之间存在“流量”?
我知道,由于数据必须传输的距离,而且光速如此之快,连接将花费更长的时间,并且第一位应该比从更近的服务器下载要慢,但是一旦第一位从服务器,其余的不应该紧随其后吗?
例如,如果有 100 辆汽车从法国出发前往西班牙,那么第一辆汽车用不了多长时间就可以到达,而且它们都应该同时到达。如果他们从中国出发去西班牙,时间会长很多,但是第一辆车到了之后,其他人不就是源源不断地到了吗?
或者它是否发送一个位(或一个数据包),然后在它发送下一个时,已经发送了一些其他位/数据包,因此两者之间存在“流量”?
使用汽车类比,法国中部和西班牙中部之间有 1000 多公里。在一定数量的汽车到达目的地后,您需要通过向另一个方向发送汽车来确认它们已到达,这会导致延迟。为了尽量减少长管道的影响,您需要保持道路两侧的交通。这与窗口大小的问题有关,以使管道保持满状态。当然,我们假设应用程序能够不让网络缓冲区刷新并且没有任何东西可以发送。
Tuning TCP for High Bandwidth-Delay Networks给出了关于带宽延迟产品的 Long Fat Network 问题的简明技术解释,并通过一些简单的动画来说明在两个方向上保持管道满的问题!
与远距离服务器的连接通常比本地服务器慢的原因有几个。
发送方不知道一次可以安全地将多少数据包发送到通道中。它必须根据从目的地返回的确认进行猜测。延迟越高,速度稳定到可用容量所需的时间就越长。
旧版本的 TCP 对一次可以“传输”的数据量有硬性限制。后来的扩展提高了这个限制,但一些系统可能不支持它们或者可能有一个本地硬编码限制。
链中的跃点越多,其中一个跃点在任何给定时间出现问题的可能性就越大。更长的距离通常意味着更多的跳跃。
本地流量(尤其是在欧洲)经常通过廉价的对等链接直接从内容提供商传递到访问提供商。长途流量必须通过更昂贵的中转链路到达全球主要网络(通常但不总是 1 级供应商)。如果内容或访问提供商是小气鬼,则这些链接可能过小。