网络如何在途中复制数据包

网络工程 路由 互联网
2021-07-07 21:23:23

如果这不是问这个问题的好地方,我很抱歉,但我不确定要使用哪个 stackexchange。我不是网络工程师,但我对互联网如何运作的一个方面感到好奇,但我找不到任何关于它的信息。

我知道当用户访问网站时,他们会向主机服务器发送数据请求,然后主机服务器以数据包流进行响应,根据需要通过许多数据中心、ISP 和路由器进行路由。我的问题是当两个相对较近的客户端同时请求相同的数据时会发生什么。主机服务器是否发送两倍的数据量,每个客户端一个,或者是否有一种协议发送单个数据包,然后在某个节点复制该数据包,更靠近终端客户端。

例如,在一个国家总理的直播中,有 100 万公民正在观看。首都的服务器是否需要向所有人发送相同的数据流,还是每个城市都有一个数据流,然后根据需要进行复制和拆分?我知道在这种特定情况下,可能有一个选定的 ISP 托管流,并且他们可能会在其数据中心之间处理类似这样的系统,但我是在更一般的意义上询问。

3个回答

当两个相对较近的客户端同时请求相同的数据时会发生什么。主机服务器是否发送两倍的数据量,每个客户端一个,或者是否有一种协议发送单个数据包,然后在某个节点复制该数据包,更靠近终端客户端。

前者。不同的请求使用不同的连接并且彼此没有关系,即使它们携带完全相同的数据。在任何较低层上都没有应用层数据的重复数据删除。这种方法称为单播

正如@manish_ma 所解释的,多播是一种特殊的分发形式,用于将相同的服务器数据发送到多个客户端。不同之处在于它不是请求-响应模型,而是由服务器发起传输(可能由客户端事件触发)。然后客户端可以订阅多播 - 并获取副本 - 或不订阅

然而,多播并没有在开放的互联网上只有在专用网络中工作。像 Youtube 这样的网站实际上向每个客户端流式传输单独的流,即使许多人观看相同的(实时)视频。

主机服务器是否发送两倍的数据量,每个客户端一个

是的,但是可能有不止一个“主机服务器”。

例如,在一个国家总理的直播中,有 100 万公民正在观看。首都的服务器是否需要向所有人发送相同的数据流,还是每个城市都有一个数据流,然后根据需要进行复制和拆分?

大规模互联网视频分发通常由所谓的内容分发网络(简称 CDN)处理。这些可以由向客户提供视频的提供商构建,也可以作为服务运营。内容分发网络将尝试将服务器放置在尽可能靠近预期用户的位置,在许多情况下,他们会与“访问”ISP 达成协议,将服务器放置在其网络内。

某些机制*用于将携带视频的客户端连接定向到内容分发网络中的本地节点。这些节点将从上游节点请求视频并根据需要进行复制。确切的设计将取决于目标,点播视频服务将有与直播电视流不同的需求。

* 有许多可能的机制,包括地理感知 DNS 服务器、IP 任播、服务于引用视频内容的网页的服务器中的地理感知。

当多个客户端对来自流媒体服务器的完全相同的流感兴趣时,多播很有用。在这种类型的传输中,数据仅在源中生成一次,并在到达接收方的途中由支持多播的路由器复制。如果此类数据在传输过程中丢失或损坏,则不会进行重传(如果有,是否会发送给所有接收方?)。这些类型的流量通常在 UDP 数据报中发送。UDP 协议不支持数据重传,更适合这些类型的流量。对于视频/音频流,轻微的数据丢失通常是可以的(您甚至可能没有注意到)。

另一方面,单独发送到每个主机的流量 - 即单播,可以重新传输,因为每个主机从源获取它自己的副本 - 这种重新传输通常由 TCP 传输协议促进,但也可以在应用层实现.