多播省的是「源端重复发送」,不是「链路带宽」。 没有 IGMP、PIM、IGMP Snooping 三样,多播会退化成广播。
上一节讲「把包包一层」,这一节讲「一份数据送给很多人」。 这个技术在运营商 IPTV 里天天用,在企业网里却很少——原因值得想清楚。
一、三种送法的账
同一路视频要送给 100 个人,三种送法的代价完全不同。
方式 源端要发 链路上有几份 谁能收到
单播 收件人数 × 码率 100 份 指定的 100 人 广播 1 份 1 份(同一广播域) 所有人,包括不关心的 多播 1 份 1 份(按需分叉) 加入组的那些人
单播的瓶颈在源端:源端上行要扛住「人数 × 码率」,100 个人看 4 Mbps 就要 400 Mbps 上行。 多播只要 4 Mbps。
广播与多播都只发一份,差别在「谁能收到」:广播送给所有人然后各自丢掉,多播只送给要的人。 所以广播不能替代多播——它省了源端,却没省链路。
二、多播地址与 MAC 的映射
IPv4 多播地址是 224.0.0.0/4,也就是 224 到 239 开头这一段。 其中 224.0.0.0/24 是本地链路保留,路由器不转发。
映射到 MAC 的规则是固定的:取 01:00:5E 作前缀,加一位 0,再取 IP 地址的低 23 位。
问题就在这 23 位:IP 多播有 28 位可用,MAC 只放得下 23 位, 所以 32 个不同的多播组会映射到同一个 MAC。 网卡层面分不清,只能靠 IP 层再过滤一次。
三、三样协议缺一样就退化
一、IGMP:主机告诉本地路由器「我要这个组」,也告诉它「我不要了」。 没有它,路由器不知道该往这个网段送什么。 二、PIM:路由器之间建多播分发树。没有它,多播包只会在本地网段打转,出不了这台路由器。 三、IGMP Snooping:二层交换机要偷看 IGMP 报文,才知道哪个端口有人要这个组。 没有它,多播会被当成广播泛洪到所有端口。
三样缺任何一样,多播就退化成广播:所有设备都收到,然后自己丢掉。 表现是「能看,但网络里全是冗余流量」——而且很难查,因为业务是通的。
四、今天多播在哪用
运营商 IPTV 是最大的用户:一路直播频道送一栋楼,用多播比用单播省几十倍的城域网带宽。
企业网里用得很少,原因有三个:「需要一份数据送很多人」的场景不多;维护 PIM 的复杂度高; 而且今天的替代方案更好用——CDN、本地缓存、或者干脆用单播加应用层分发。
一条判断标准: 接收者在同一城域网内、数量上百、内容完全相同,才值得上多播。否则单播 + CDN 更省心。
五、动手 Demo:多播省了多少带宽,怎么算
这段按「100 个接收者看同一路 4 Mbps 视频」算三种送法的源端上行, 再算多播地址到 MAC 的映射冲突比例。
n, rate = 100, 4
P(u" 单播源端上行:%d Mbps。" % (n * rate))
P(u" 多播源端上行:%d Mbps。" % rate)
P(u" 相差 %d 倍。" % n)
实跑输出:
--------------------------------------------------------------------
多播省了多少带宽,怎么算
--------------------------------------------------------------------
**多播解决的问题是「一份数据送给很多人」**:单播要复制 N 份,多播只发一份。
**算一个典型场景**:100 个接收者看同一路 4 Mbps 的视频。
方式 源端要发 链路上有几份 源端上行
---------------------------------------------------
单播 400 Mbps 100 400 Mbps
广播 4 Mbps 1 4 Mbps
多播 4 Mbps 1 4 Mbps
**单播要 400 Mbps 上行,多播只要 4 Mbps,差 100 倍。**
这就是多播存在的全部理由——**它省的是「源端的重复发送」,不是「链路带宽」。**
**广播那一行要看清**:它也只发一份,
**但广播会送到「所有」设备,包括不关心的那些。**所以广播不能替代多播。
**多播是「只送给要的人」,广播是「送给所有人」。**
**多播的代价在「要靠协议维护成员关系」**:
1. **主机要告诉路由器「我要这个组」**——IGMP。
2. **路由器之间要建多播分发树**——PIM。
3. **二层要抑制多播泛洪**——IGMP Snooping。
**三样缺一样,多播就会退化成广播**:所有设备都收到,然后自己丢掉。
**表现是「能看,但网络里全是冗余流量」。**
**最后一条现状**:多播在运营商 IPTV 里用得很多,
**但在企业网里用得很少**——因为「需要一份数据送很多人」的场景不多,
而维护多播的复杂度比省下的带宽更贵。**今天的替代方案常常是 CDN 或者「在接入层做本地缓存」。**
100 倍这个数字就是多播存在的全部理由, 但要注意它只省「源端上行」——链路上该占的带宽一分不少,只是不再重复。
MAC 映射冲突那段容易被忽略:32 个组共用一个 MAC, 所以「同一网段加入两个冲突的组」时,网卡会把两个组的包都收上来,再由 IP 层丢掉不需要的。 这就是「多播会多吃一点 CPU」的原因。
最后一条现状要老实说:多播是个「设计得很好但部署很麻烦」的技术。 它的复杂度主要不在协议,在「跨域、跨厂商、跨运维团队」的协同上。这也是为什么企业网宁愿用 CDN。
30 秒实验
- 查一下你的网络里有没有 IPTV,它用的是不是多播。
- 在交换机上看有没有开 IGMP Snooping。
- 用 ipconfig 看你的网卡有没有加入任何多播组。
常见误区
- 以为多播能省链路带宽。省的是源端重复发送。
- 以为多播等于广播。多播只送给加入组的人。
- 以为配了 PIM 就能用。没有 IGMP Snooping 会在二层泛洪。
自测三问(点开对答案)
1. 多播省下的是哪一部分带宽? —— 源端的重复发送:单播要发 N 份,多播只发 1 份。 2. 为什么 32 个多播组会映射到同一个 MAC? —— IP 多播有 28 位可用,MAC 只放得下 23 位。 3. IGMP Snooping 解决什么问题? —— 让二层交换机知道哪个端口有人要这个组,避免多播泛洪成广播。下一节:路由选择讲完了,看路由器还能干什么——功能的分类。
- ☐ (本节完,下一节 03.06.01 路由器功能的分类)