单播、广播、组播与任播详解

在网络中发送数据并不总是一对一的方式——这里整理了决定流量目的地的四种基本方式,以及它们各自实际应用在哪些场景中。

单播(Unicast)

一个发送方只向一个接收方发送数据,是最常见的一对一通信方式。浏览网站、即时通讯软件对话等日常互联网通信绝大多数都属于单播。

广播(Broadcast)

一次性向同一网络(子网)内的所有设备发送数据的方式。在不知道对方硬件(MAC)地址时发送的ARP请求就是典型例子,不过网络规模越大,由此带来的不必要流量负担也会随之增加。

组播(Multicast)

不是发给所有设备,而是只发送给加入了特定组的设备的方式。IGMP等协议负责管理哪些设备属于哪个组,常用于IPTV、视频会议这类需要把同一份数据流高效发送给多个参与者的场景。

任播(Anycast)

多台服务器共用同一个IP地址,用户发出请求后会自动被路由到路径上最近(或响应最快)的那台服务器的方式。分布在全球各地的根DNS服务器和CDN边缘节点服务器通常就是以这种方式运作的。

四种方式一览对比

单播是"一对一",广播是"一对全体",组播是"一对群组",任播是"一对(最近的)一个"。即便同样是"向多个目标发送"的情形,根据目的不同,采用的方式也完全不一样。

IPv6中已经取消了广播

IPv6从设计之初就取消了广播这一概念,把大部分应用场景改用组播来实现。例如IPv4中相当于ARP广播的功能,在IPv6中也是通过基于组播的邻居发现(Neighbor Discovery)机制来处理的。

为什么选对传输方式很重要

如果给某个场景选错了传输方式,就会浪费网络资源:明明只有少数设备需要接收的信息如果用广播发送,会让该网段内的每台设备都被迫接收到不必要的流量,而组播则能把同一份数据流更高效地只发送给真正感兴趣的那一群设备,这正是视频会议和IPTV等应用依赖组播而非广播的原因。

任播让全球化服务感觉像"就在身边"

一次DNS查询或从CDN下载文件之所以无论用户身处世界哪个角落都感觉很快,任播功不可没:请求不会都涌向一台中心服务器,而是会自动被路由到网络上众多相同服务器中距离最近的那一台。也正因如此,依赖任播的服务能在某个节点出现故障时悄悄把流量切换到其他节点,用户几乎不会察觉。

常见问题

组播是不是就是规模更小的广播?

并不完全一样。广播是不带任何"加入"概念、字面意义上发送给该网段内所有设备的方式,而组播只会发送给通过IGMP之类协议明确加入了特定组的设备。

任播为什么不仅关乎速度,还关乎可靠性?

因为多台服务器共用同一个任播地址,一旦某个节点变得不可达,请求会自动路由到下一个最近的可用服务器。这也是为什么任播被广泛用于DNS根服务器这类关键基础设施,而不仅仅是为了提速。