为了清楚地说明我的问题,我将使用相当高的数字。文件服务器通过 1 gbps 线路连接到互联网。服务器正在向客户端发送一个 100 gb 的文件。该文件被分割成数据包,并以 1 gbps 的速度发送到客户端 ISP。然而,客户端通过 1 mbps 线路连接到 ISP。这意味着 ISP 必须保存/缓存从文件服务器发送给它的所有数据,直到客户端收到所有数据。
这是如何完成的,还是服务器以某种方式以与服务器和客户端之间最慢的线路相同的速率发送数据包?
答案1
互联网并不只使用一种协议。它甚至不只在某一时刻使用一种协议:它实际上同时使用几种协议,这些协议相互叠加,以执行各种不同的任务。如果我们将事情简化一点,可以说它使用了四种协议。
- 链路层:一种协议,可让您通过电线(或无线电波、闪光或其他方式)将信号发送到另一端的另一台机器。示例包括 PPP、WiFi 和以太网。
- 网络层:一种协议,可让您通过一系列机器发送信号,以便您可以在不直接连接的机器之间传输数据。这是 IP 和 IPv6 存在的地方。
- 传输层:一种协议,可以让您从信号中获取一些基本信息。有些协议(如 TCP)在两台机器之间建立“虚拟连接”,就好像它们之间有一条直线一样。其他协议(如 UDP)只是将数据位从一台机器发送到另一台机器。不同的协议有不同的优点和缺点,这也是为什么有这么多协议的原因之一。
- 应用层:这些就是我们通常所认为的“协议”。它们专门用于特定类型的数据,用于特定目的。一些示例包括 FTP、HTTP 和 BitTorrent,它们都用于传输文件。
我提到的那些文件传输协议通常堆叠在 TCP 之上(而 TCP 本身又堆叠在 IP 之上),这就是我们要回答您的具体问题的地方。TCP 会尽其所能,像机器之间的直接线路一样工作:当服务器发送数据包时,它可以确保客户端收到了它,并且可以确保客户端收到的数据包的顺序与服务器发送的顺序相同。它这样做的部分原因是,服务器发送的每个数据包都必须是承认由客户端:它发回一个小信号说“好的,我收到了你发送的数据包;我准备好接收下一个数据包了。”如果服务器没有收到确认,它会继续发送数据包,直到收到为止(或者决定这样做不会成功并放弃)。
这是回答你问题的关键。服务器在知道数据包 1 已发送之前不能发送数据包 2,而这只有在数据包 1 得到确认后才能发生,并且那在数据包 1 真正完成之前,这种情况不会发生。链中间的服务器不必缓存任何数据(一次最多一个数据包),因为当机器看到数据包 2 时,它就知道不再需要数据包 1 了。
最后一点:从技术上讲,这仅意味着互联网不必须以您所说的方式缓存数据。如果有人真的想缓存所有这些数据,他们可以;协议中没有任何东西可以真正阻止这种情况发生。但互联网没有需要这些缓存才能工作。
答案2
大多数服务器(Web、FTP 等)使用带宽限制以避免一台计算机占用所有可用带宽。每个连接可能被限制在一定速度,以便多个客户端可以连接而不会受到速度减慢的影响。至少,不会太多。请记住,您的连接受到链中最慢的链接的限制。