1组播是什么:从「一对多」的魔法说起
先别管协议、地址、RFC,我们用一个生活场景把组播的本质说清楚。
想象你是一个公司的行政,今天要通知 200 名同事「下午 3 点开会」。
- 单播(Unicast,一对一):你挨个给 200 个人发微信私聊。你累到手抽筋,而且同一条消息被你发了 200 遍。网络里这就是「服务器给每个用户单独发一份拷贝」。
- 广播(Broadcast,一对全体):你在公司大群里吼一嗓子,所有人都能听见——包括正在开重要客户会的销售、正在午休的同事。广播不挑食,谁都收,而且跨不了网段(路由器默认不转发广播)。
- 组播(Multicast,一对多/按需多):你建了一个「3 点开会通知群」,只有主动进群的同事才会收到消息。你只发一条,群里自动同步给所有人,没进群的人完全不受影响。
为什么组播重要?看一组数字就懂了:
| 场景 | 单播需要的带宽 | 组播需要的带宽 |
|---|---|---|
| 1 路 4 Mbps 直播,1000 人观看 | 1000 × 4 = 4 Gbps(服务器+接入全炸) | ≈ 4 Mbps(核心到每个分支仅复制一份) |
| 同一份视频,源到第一跳路由器 | 每用户一份 | 始终一份 |
这就是组播的杀手锏:带宽消耗只和「内容路数」有关,和「观众人数」几乎无关。这在 IPTV、视频会议、金融行情、直播带货推流里价值连城。
组播的「三要素」心智模型
理解组播,脑子里要常驻三个角色:
① 组播源(Source)
产生流量的一方,比如电视台的编码器、直播推流服务器。它不管有多少人在看,只管往组地址发。
② 组地址(Group)
一个「频道号」,比如 239.1.1.1 代表「央视一套」。源把数据发往这个地址,接收者「订阅」这个地址。
③ 接收者(Receiver)
想看内容的主机,比如机顶盒。它通过 IGMP 告诉网络「我要看 239.1.1.1」。
中间的网络(路由器+交换机)负责把源发出的、去往组地址的数据,智能地只转发到「有接收者」的分支上——这是组播最精妙的地方。
2单播、广播、组播:一张表看明白
这是面试和方案选型的高频题,务必记牢。
| 维度 | 单播 Unicast | 广播 Broadcast | 组播 Multicast |
|---|---|---|---|
| 通信模型 | 一对一 | 一对全体(本网段) | 一对多 / 多对多(按需) |
| 目标地址 | 唯一单播 IP | 本网段广播地址(如 192.168.1.255) | D 类组播地址(224.0.0.0/4) |
| 是否跨网段 | 可以 | 不可以(路由器不转发) | 可以(靠组播路由协议) |
| 带宽随接收者 | 线性增长(人越多越炸) | 一次占满本网段 | 基本不增长 |
| 接收者是否自主选择 | 源主动发 | 强制接收(谁都收) | 主动加入才收 |
| 典型应用 | 网页、文件下载、微信私聊 | ARP、DHCP 发现 | IPTV、视频会议、行情推送、OSPF |
3组播 IP 地址:D 类地址与「频道号」分配
组播地址就像电视频道号:224.0.0.0 ~ 239.255.255.255 这整整 2^28 个地址,都是「频道」。
3.1 地址范围总览
IPv4 地址分五类,组播用的是 D 类(224.0.0.0 ~ 239.255.255.255,即 /4)。注意:组播地址永远只能作为「目的地址」,绝不能做源地址,也没有子网掩码那种「主机位」概念——它只是一个逻辑组标识。
| 地址块 | 名称 / 用途 | 说明 |
|---|---|---|
| 224.0.0.0/24 | 本地链路保留(Local Network Control) | 路由器不转发,只在直连网段用。如 224.0.0.1(所有主机)、224.0.0.2(所有路由器)、224.0.0.5/6(OSPF)、224.0.0.13(PIM) |
| 224.0.1.0/24 ~ 224.0.1.255 | 互联网范围组播(保留) | 如 224.0.1.1 是 NTP,属全局保留,公网谨慎用 |
| 232.0.0.0/8 | SSM(源特定组播)地址块 | 配合 IGMPv3,指定「从哪个源看哪个组」 |
| 233.0.0.0/8 | GLOP 地址(AS 编号映射) | 早期用于根据 BGP AS 号分配,现较少用 |
| 239.0.0.0/8 | 管理范围(私有组播 / 内网) | 企业最爱!约等于单播里的 10.0.0.0/8,可在内网随意用、不进公网 |
ip multicast boundary 可以限制哪些组能进来。
3.2 地址到底代表什么?
记住一个比喻:组播地址 = 电视频道号,不是某台电视的身份证。一台源可以同时往多个组发(多个频道),一个接收者也可以同时加入多个组(同时看多个频道)。组地址本身不携带位置信息,路由协议负责把「去往 239.1.1.1 的流量」引到「有接收者的地方」。
4组播 MAC 地址:二层是怎么「认领」组播的
IP 包要到网卡,最终得变成 MAC 帧。组播 IP 怎么变成 MAC?这里有门「映射数学」,也有个著名的「坑」。
4.1 映射规则
以太网组播 MAC 固定以 01:00:5E 开头(十六进制)。规则:
- 第 25 位固定为 0;
- 把组播 IP 的后 23 位直接搬过来,填到 MAC 地址的后 23 位。
例如组 239.1.1.1:IP 后 23 位算出 MAC 为 01:00:5E:01:01:01。交换机看到目的 MAC 是 01:00:5E 开头,就知道「这是组播帧,得按组播方式转发」。
4.2 那个著名的「坑」:32 位映射到 23 位
组播 IP 有 28 位可用(224.0.0.0/4),但 MAC 只塞进了后 23 位,少了 5 位。后果:每 32 个组播 IP 会映射到同一个 MAC 地址。比如 224.1.1.1、225.1.1.1、226.1.1.1 … 共 32 个地址,MAC 全是 01:00:5E:01:01:01。
这意味着交换机在二层无法靠 MAC 区分这 32 个组。怎么办?
- 网卡收到帧后,靠 IP 层进一步过滤:看 IP 头里的目的组地址,不是自己订阅的组就丢掉(所以「误收」会被上层丢弃,只是多费点 CPU)。
- 规划时尽量避开会冲突的地址(不同高 5 位、低 23 位相同的组)。
5IGMP:主机如何「举手」加入一个组
源在发,组地址在飘,那接收者怎么告诉网络「我要看这个频道」?答案:IGMP(Internet Group Management Protocol,互联网组管理协议)。
IGMP 跑在主机和直连路由器(称为 IGMP Querier 查询者)之间,是「最后一跳」的协议。它干三件事:
- Membership Report(成员报告):主机说「我想加入 239.1.1.1」。
- Query(查询):路由器定时问「还有谁在看 239.1.1.1 吗?」
- Leave(离开):主机说「我不看了」(v2/v3 才有)。
| 版本 | 关键能力 | 是否支持 SSM |
|---|---|---|
| IGMPv1 | 只有 Report 和 Query;靠超时才判断离开(慢);查询者靠组播路由协议选 | 否 |
| IGMPv2 | 增加 Leave 报文,响应快;自己选举查询者(IP 小者优先) | 否 |
| IGMPv3 | 支持指定源(INCLUDE/EXCLUDE 源列表),是 SSM 的基石;可「只看某源」 | 是 |
5.1 IGMP 工作流程(v2 为例)
5.2 思科路由器上的 IGMP 配置
在「连接接收者的接口(最后一跳)」上开启组播路由并启用 IGMP:
! 全局开启组播路由(思科必开,否则一切免谈)
R1(config)# ip multicast-routing
! 在面向接收者的接口上
R1(config)# interface GigabitEthernet0/1
R1(config-if)# ip pim sparse-mode ! 接口启用 PIM-SM(同时承载 IGMP)
R1(config-if)# ip igmp version 3 ! 推荐用 v3,支持 SSM
R1(config-if)# ip igmp query-interval 60 ! 查询间隔(秒),默认125
! 查看状态
R1# show ip igmp interface g0/1
R1# show ip igmp groups ! 看有哪些组、哪些成员
R1# show ip igmp groups 239.1.1.1 detail
6IGMP Snooping:让交换机「懂组播」
二层交换机默认是个「组播文盲」:它收到目的 MAC 是 01:00:5E 开头的帧,会像广播一样洪泛到所有端口。这可不行——没看 IPTV 的电脑也会被淹。
IGMP Snooping(IGMP 侦听)是交换机的一项功能:它「偷听」主机和路由器之间的 IGMP 报文,学习到「哪个端口连着看 239.1.1.1 的主机」,然后只把该组的流量精准转发到那些端口。
| 状态 | 组播帧去向 | 结果 |
|---|---|---|
| 关闭 Snooping(或交换机不支持) | 洪泛到所有端口 | 浪费带宽,非接收者也被打扰 |
| 开启 Snooping | 只发往有成员端口 + 路由器端口 | 精准、省带宽 |
思科交换机配置
! 全局开启(多数 Catalyst 默认已开)
Switch(config)# ip igmp snooping
Switch(config)# ip igmp snooping vlan 10 ! 针对 VLAN 10 启用
! 配置 IGMP 查询者(若网段没有路由器作查询者,可让交换机顶上)
Switch(config)# ip igmp snooping querier
Switch(config)# ip igmp snooping vlan 10 querier address 192.168.10.254
! 快速离开:主机 Leave 后立刻停止转发,不必等查询超时(IPTV 切台更爽快)
Switch(config)# ip igmp snooping vlan 10 immediate-leave
! 查看
Switch# show ip igmp snooping groups
Switch# show ip igmp snooping mrouter ! 看哪个端口连着组播路由器
7为什么需要「组播路由协议」
IGMP 解决了「主机怎么告诉最后一跳路由器」。那中间那么多路由器,流量怎么从源一路流到接收者?这就得靠组播路由协议。
单播路由里,每个路由器看「目的 IP」,查路由表,往下一跳扔。组播不一样:
- 目的地址是组地址,每个人都订阅同一个组,不能按「目的 IP 找最优路径」那么简单;
- 组播转发是反向的:从接收者「往回」建树到源;
- 中间路由器要决定:这份组播包,该从哪些接口复制出去?
于是有了专门的组播路由协议。它们大致分两派:
密集模式(Dense)
假设「几乎人人都想看」,先把流量洪泛全网,不要的再剪掉。适合接收者密集的小网。
稀疏模式(Sparse)
假设「没几个人想看」,接收者显式申请才建树。适合大型、接收者稀疏的网络(企业、运营商)。
| 协议 | 类型 | 现状 |
|---|---|---|
| DVMRP | 密集 | 老旧,MBone 时代,现基本淘汰 |
| MOSPF | 密集 | 依赖 OSPF,部署少 |
| PIM(DM/SM/SSM) | 均可 | 事实标准,思科主推,本文重点 |
| CBT | 稀疏(共享树) | 学术为主,少用 |
8PIM 协议家族:DM、SM、SSM 一家三口
PIM = Protocol Independent Multicast(协议无关组播)。「无关」指它不依赖某一种单播路由协议,OSPF、EIGRP、IS-IS、BGP 都能给它当「底图」。
8.1 PIM 路由器如何「认识彼此」
PIM 路由器在直连链路上互发 Hello 报文(目的 224.0.0.13),选举指定路由器 DR(Designated Router),并建立邻居关系。DR 负责在源侧把组播注册进网络、在接收者侧代为发送 Join。
R1(config)# interface g0/0
R1(config-if)# ip pim sparse-mode
R1(config-if)# ip pim dr-priority 100 ! 调高 DR 优先级(越大越优先)
R1# show ip pim neighbor ! 看 PIM 邻居
R1# show ip pim interface ! 看哪些接口跑了 PIM、谁是 DR
8.2 三种模式一句话区分
| 模式 | 建树方式 | 是否需要 RP | 适用 |
|---|---|---|---|
| PIM-DM | 泛洪 + 剪枝,自然形成源树(SPT) | 否 | 小型、接收密集 |
| PIM-SM | 先经共享树(RPT)到 RP,再切源树(SPT) | 是(RP 是核心) | 大型、稀疏(主流) |
| PIM-SSM | 直接建源树,指定 (S,G) | 否 | IPTV/直播,已知源 |
9PIM-DM 密集模式:先泼全网再擦掉
PIM-DM 的逻辑很「粗暴」但好懂:先把组播流量泛洪到所有 PIM 接口,谁不要,谁发剪枝(Prune)把自己摘掉。
9.1 工作原理
- 泛洪(Flood):源一发包,从第一跳 DR 起,向所有 PIM 邻居接口转发。
- 剪枝(Prune):某下游路由器发现「本分支没人看这个组」,就向上游发 Prune,上游把该接口标记为「剪掉」。
- 状态刷新(State Refresh):周期性重新泛洪,避免剪枝状态因超时丢失(思科特性)。
- 嫁接(Graft):之前剪掉的分支后来有人想看了,发 Graft 重新接回树。
9.2 思科配置(超简单)
R1(config)# ip multicast-routing
R1(config)# interface g0/0
R1(config-if)# ip pim dense-mode ! 所有 PIM 接口都设 dense
R1(config-if)# interface g0/1
R1(config-if)# ip pim dense-mode
! 验证
R1# show ip mroute ! 看 (*,G) 与 (S,G) 条目
R1# show ip mroute 239.1.1.1 ! 看特定组
R1# show ip pim interface dense-mode
10PIM-SM 稀疏模式:RP 是灵魂
PIM-SM 是当今企业网和运营商的绝对主力。它的核心发明是一个叫 RP(Rendezvous Point,汇聚点)的角色。
10.1 什么是 RP?
把 RP 想成「组播交易中心」或「相亲中介」:
- 所有源先把流量「注册」给 RP(源树:源 → RP);
- 所有接收者先向 RP 申请加入(共享树 RPT:接收者 → RP);
- 于是在 RP 处,源和接收者「会师」,流量从源经 RP 流向接收者。
源树 SPT(S,G 树):以具体源 S 为根,直达接收者。性能更好(路径最短)。
10.2 完整流程(SM 的「两段式」)
- 接收者发 IGMP 加入组 → 最后一跳路由器向 RP 发 (*,G) Join,建立 RPT(共享树)。
- 源开始发流 → 第一跳 DR 用 Register 单播把首包封装发给 RP;RP 解封装后沿 RPT 下发。
- 最后一跳路由器收到来自 RP 的、实际源 S 的流量后,发现「走共享树绕远了」,于是直接向源 S 发 (S,G) Join,建立 SPT(源树)。
- 随后流量改走最短的源树,最后一跳向 RP 发 (S,G) Prune,剪掉 RPT 上那段多余路径。这叫 SPT 切换(SPT Switchover)。
10.3 RP 怎么来?三种方式
| 方式 | 做法 | 优缺点 |
|---|---|---|
| 静态 RP | 每台路由器手动指 ip pim rp-address | 简单、可控;但 RP 挂了要手动改,扩展性差 |
| Auto-RP(思科私有) | 用候选 RP + 映射代理自动通告 | 自动发现;需 ip pim autorp listener 配合 |
| BSR(Bootstrap Router,标准) | BSR 收集候选 RP 信息并全网洪泛 | 行业标准,推荐;跨厂商兼容好 |
配置示例 A:静态 RP(最直观)
! 在所有 PIM 路由器上指向同一个 RP(如 10.0.0.100)
R(config)# ip multicast-routing
R(config)# ip pim rp-address 10.0.0.100
! 接口启用 SM
R(config)# interface range g0/0 - 1
R(config-if-range)# ip pim sparse-mode
! 只让某些组用这个 RP(可选,地址映射)
R(config)# ip pim rp-address 10.0.0.100 239.1.0.0 255.255.0.0
配置示例 B:BSR 动态 RP(推荐生产用)
! 在 RP 候选路由器上
RP(config)# ip multicast-routing
RP(config)# ip pim rp-candidate Loopback0 priority 10
! 在 BSR 路由器上(可和 RP 同一台或分开)
BSR(config)# ip pim bsr-candidate Loopback0 30
! 其他路由器只需启用 PIM-SM,自动从 BSR 学到 RP
R(config)# interface range g0/0 - 1
R(config-if-range)# ip pim sparse-mode
! 验证 RP
R# show ip pim rp mapping ! 看学到了哪个 RP
R# show ip pim bsr-router ! 看 BSR 状态
R# show ip pim neighbor
配置示例 C:Auto-RP(思科私有,老网络常见)
! RP 候选
RP(config)# ip pim send-rp-announce Loopback0 scope 16
! 映射代理(把 RP 信息发到 224.0.1.39/40)
MAP(config)# ip pim send-rp-discovery scope 16
! 所有路由器需能收发 Auto-RP 组播(用稀疏-密集或 listener)
R(config)# ip pim autorp listener
R(config)# interface g0/0
R(config-if)# ip pim sparse-dense-mode
ip pim spt-threshold {kbps | infinity} 调整;设为 infinity 则永远走 RPT(适合 RP 就在中心、不想折腾切换的场景)。
11PIM-SSM 源特定组播:已知源的最简方案
很多场景源是固定的:IPTV 直播源就那几台编码器、公司直播就一个推流服务器。既然源已知,何必还绕 RP?——这就是 SSM(Source-Specific Multicast)。
11.1 SSM 的思想
SSM 直接用 (S,G) 建源树,不需要 RP,不需要 Register,不需要 RPT。接收者通过 IGMPv3 明确说「我要看从源 S 发往组 G的流量」。
- 地址范围默认用 232.0.0.0/8(也可自定义 SSM 范围)。
- 主机必须支持 IGMPv3(指定源)。
- 思科把 SSM 当作 PIM-SM 的「特例」运行,配置极简。
11.2 思科配置
! 1) 定义 SSM 地址范围(默认已是 232.0.0.0/8,可改)
R(config)# ip pim ssm default
! 或自定义:ip pim ssm range 名字(用 ACL)
! 2) 所有接口用 sparse-mode(SSM 在 SM 框架内)
R(config)# interface range g0/0 - 1
R(config-if-range)# ip pim sparse-mode
R(config-if-range)# ip igmp version 3
! 3) 接收者主机用 IGMPv3 指定源加入,例如:
! 想看 源 10.1.1.10 发往 组 232.1.1.1 的流
! (主机侧由播放器/STB 发起,网络侧无需 RP)
R# show ip mroute 232.1.1.1 ! 直接看到 (10.1.1.10, 232.1.1.1) 源树
R# show ip igmp ssm-mapping
11.3 SSM 与「频道 = (S,G)」
在 SSM 世界里,一个「频道」不是单一组地址,而是 (源IP, 组IP) 这一对。比如卫视直播可以规划为:
央视一套 : (10.1.1.10, 232.1.1.1)
央视二套 : (10.1.1.10, 232.1.1.2)
地方台 : (10.1.1.11, 232.1.1.1)
这样同一组地址可被不同源复用,互不干扰,频道规划非常灵活。
12RPF 检查与组播转发:防环的「铁律」
组播包会被复制转发,万一形成环路,流量会指数级爆炸。PIM 靠一条铁律防止环路:RPF(Reverse Path Forwarding,反向路径转发)检查。
12.1 RPF 是什么
「收到组播包的那个入接口,必须正好是回源(单播路由表里去往源 S 的出口)的那个接口,否则丢弃。」
换句话说:组播流量必须沿着「单播去往源」的反方向进来,才被认为是「合法的上游来向」。这保证了组播树是一棵无环的树。
12.2 RPF 信息从哪来?
RPF 默认查单播路由表(哪个协议都行:OSPF/EIGRP/BGP)。但组播有时需要独立的 RPF 拓扑(比如组播用 MBGP 的 multicast 地址族),这时可配 multicast static route / mroute 或 MBGP。
! 静态 mroute:强制指定去往源 10.1.1.0/24 的 RPF 接口/下一跳
R(config)# ip mroute 10.1.1.0 255.255.255.0 192.168.0.2
! 或指定入接口
R(config)# ip mroute 10.1.1.0 255.255.255.0 GigabitEthernet0/2
! 验证 RPF
R# show ip rpf 10.1.1.10 ! 看去往该源的 RPF 接口与路由
R# show ip mroute 239.1.1.1 ! 看 RPF 失败计数 (RPF failure)
show ip mroute 里若出现 RPF failure 计数增长,99% 是「回源路径」和「组播入接口」不一致——典型原因:单播路由不对称(比如去和回走了不同链路/不同协议度量)。用 ip mroute 或调整单播路由解决。
13Cisco 实战案例:搭一套可跑的组播网络
纸上谈兵结束,来一套端到端可落地的思科配置。场景:总部有直播源,分支有 200 个机顶盒看 IPTV。
13.1 拓扑
13.2 核心路由器 R-CORE(兼 RP 与 BSR)
hostname R-CORE
!
ip multicast-routing
ip routing
!
! 单播路由(OSPF 举例,保证全网可达 + 提供 RPF 底图)
router ospf 1
network 0.0.0.0 255.255.255.255 area 0
!
! 环回口作为 RP/BSR 身份
interface Loopback0
ip address 10.0.0.1 255.255.255.255
ip pim sparse-mode
!
interface GigabitEthernet0/0 ! 连直播源
ip address 10.1.1.1 255.255.255.0
ip pim sparse-mode
!
interface GigabitEthernet0/1 ! 连分支1
ip address 172.16.1.1 255.255.255.252
ip pim sparse-mode
!
interface GigabitEthernet0/2 ! 连分支2
ip address 172.16.2.1 255.255.255.252
ip pim sparse-mode
!
! 本机作为 RP 候选 + BSR
ip pim rp-candidate Loopback0
ip pim bsr-candidate Loopback0 30
13.3 分支路由器 R-BR1(最后一跳)
hostname R-BR1
!
ip multicast-routing
!
router ospf 1
network 0.0.0.0 255.255.255.255 area 0
!
interface GigabitEthernet0/0 ! 连核心
ip address 172.16.1.2 255.255.255.252
ip pim sparse-mode
!
interface GigabitEthernet0/1 ! 连接入交换机/用户
ip address 192.168.10.1 255.255.255.0
ip pim sparse-mode
ip igmp version 3
!
! 分支不需要手动指 RP——BSR 会自动通告 10.0.0.1
R-BR1# show ip pim rp mapping ! 应看到 RP = 10.0.0.1
13.4 接入交换机(IPTV 关键)
hostname SW-BR1
!
! 启用 IGMP Snooping(IPTV 必开)
ip igmp snooping
ip igmp snooping vlan 10
ip igmp snooping vlan 10 querier
ip igmp snooping vlan 10 immediate-leave
!
! 上联口连路由器(mrouter 口,自动学习或手动指定)
interface GigabitEthernet1/0/24
description TO-R-BR1
!
! 用户口接 STB
interface range GigabitEthernet1/0/1 - 20
switchport access vlan 10
!
SW# show ip igmp snooping groups ! 看哪些端口有 239.1.1.1 成员
13.5 端到端验证「三连击」
① 源在发吗?
R-CORE# show ip mroute 239.1.1.1
--应看到 (10.1.1.10, 239.1.1.1) 条目,Outgoing 有接口
② 接收者入组了吗?
R-BR1# show ip igmp groups 239.1.1.1
--应看到成员接口(如 g0/1)
③ RPF 通吗?
R-BR1# show ip rpf 10.1.1.10
--RPF interface 应指向核心方向
④ 真机顶盒能看?
--在 STB 上加入 239.1.1.1,用 VLC 等拉流测试
14落地应用:IPTV、直播、点播怎么用组播
理论和配置都讲完了,现在回答最实际的问题:这些技术到底怎么用在真实业务里?
14.1 IPTV(交互式网络电视)
IPTV 是组播最经典的舞台。运营商/酒店/校园网把上百路电视频道编码成组播流,用户切台就是「加入/离开一个组」。
- 直播频道:每路频道 = 一个组地址(如 239.1.x.x)。机顶盒(STB)通过 IGMP 切台即换组。
- 组播承载:核心/汇聚用 PIM-SM 或 SSM 分发;接入交换机开 IGMP Snooping + immediate-leave,保证切台秒级、不串台。
- 带宽优势:1000 人同时看春晚,核心链路只跑 1 份 4~8 Mbps 流,而不是 1000 份。
ip multicast boundary 限制组范围,防私接组播源。
14.1.1 IPTV 端到端架构(一张图看全链路)
一条 IPTV 直播流的完整旅程:
- 内容源 / 编码:电视台信号或卫星经编码器转成 IP 组播流(如 239.1.1.1),推入运营商核心。多个频道 = 多个组地址并行。
- 组播骨干:城域核心网运行 PIM-SM/SSM,把组播流按需复制到各区域,没人的区域不复制。
- BRAS/BNG(宽带网络网关):用户接入的「大门」,负责用户认证(IPoE/PPPoE)、IGMP 查询、组播复制点,是组播从网络侧进入用户侧的边界。
- OLT / DSLAM(接入):光纤/铜线接入设备,把组播流送到千家万户。
- 家庭网关 HG + 机顶盒 STB:STB 通过 IGMP 加组收看,遥控器切台 = 离开旧组 + 加入新组(典型 <1 秒)。
14.1.2 频道规划(可直接抄作业)
| 频道 | 组地址 | 码率/清晰度 | 备注 |
|---|---|---|---|
| 央视一套 | 239.1.1.1 | SD 4 Mbps | 基础频道 |
| 央视一套 HD | 239.1.1.2 | HD 8 Mbps | 高清同频道 |
| 央视二套 | 239.1.2.1 | SD 4 Mbps | 第二套 |
| 卫视合集 | 239.1.3.1 ~ 239.1.3.50 | 4~8 Mbps | 按序号映射 |
| 本地/区域台 | 239.2.x.x | 4 Mbps | 区域专属 |
| 4K 专区 | 239.9.x.x | 25~50 Mbps | 高带宽单独规划 |
14.1.3 组播 VLAN(MVR)—— 接入带宽的「省流秘籍」
家庭用户各在不同 VLAN(vlan 10/11/12…),如果每份组播流在每个用户 VLAN 各复制一份,接入交换机上行带宽会被重复占用。思科接入交换机的 MVR(Multicast VLAN Registration,组播 VLAN 注册) 解决方案:把组播源放在独立的「组播 VLAN」,交换机只从组播 VLAN 拉一份流,再按需复制到各用户 VLAN。
! 假设组播 VLAN = 100,用户 VLAN = 10/11/12
Switch(config)# ip igmp snooping vlan 100 mvr
Switch(config)# ip igmp snooping vlan 100 mvr mode transparent
Switch(config)# ip igmp snooping vlan 100 mvr group 239.1.0.0 255.255.0.0
! 上行口(连 BRAS 方向)作为 MVR 源
Switch(config)# interface g1/0/24
Switch(config-if)# ip igmp snooping vlan 100 mvr type source
! 用户口(连 STB 方向)作为 MVR 接收
Switch(config)# interface range g1/0/1 - 20
Switch(config-if-range)# switchport access vlan 10
Switch(config-if-range)# ip igmp snooping vlan 100 mvr type receiver
Switch# show ip igmp snooping mvr ! 验证 MVR 状态
14.1.4 QoS 与用户侧控制
视频流是「时延敏感、丢包敏感」业务,必须在网络侧打高优先级标记并做限速/防私接:
! ① 给组播视频流打 DSCP 标记(汇聚/BRAS 上)
R(config)# ip access-list extended MCAST-VIDEO
R(config-ext-nacl)# permit ip any 239.1.0.0 0.0.255.255
R(config)# class-map match-all MCAST-VIDEO
R(config-cmap)# match access-group name MCAST-VIDEO
R(config)# policy-map MARK-VIDEO
R(config-pmap)# class MCAST-VIDEO
R(config-pmap-c)# set dscp cs4
R(config)# interface g0/1
R(config-if)# service-policy input MARK-VIDEO
! ② 限制每接口 IGMP 报文速率,防伪造 Join 攻击
R(config-if)# ip igmp limit 100
! ③ 用边界 ACL 限定允许的组范围,防私接非法组播源
R(config)# access-list 10 permit 239.1.0.0 0.0.255.255
R(config)# access-list 10 deny any
R(config)# interface g0/0
R(config-if)# ip multicast boundary 10
immediate-leave 后,Leave 立刻生效,切台体验 <1 秒。若切台卡顿,第一反应是检查 Snooping 是否开启快速离开。
14.2 直播(Live / 低时延推送)
这里要分清两种「直播」:
| 直播类型 | 组播角色 | 说明 |
|---|---|---|
| 内网直播(企业大会、赛事、监控) | 主角 | 源→组播→分支大屏/电脑,省带宽、低延迟 |
| 公网直播(抖音/B站/带货) | 几乎不用组播 | 公网不互通组播,靠 CDN 单播/分片分发(见第15章) |
| 直播推流回源 | 内部可用 | 编码器→源站可用组播汇聚,再经 CDN 对外 |
一句话:组播是「内网一对多实时分发」之王;出了内网,交给 CDN。
14.3 点播 VOD(Video on Demand)
点播和组播是「天生的不同」:点播是每个人看不同内容、不同进度(个性化),这本质是单播。但组播仍能在 VOD 里发光:
- 热门内容「近播」:当很多人同时点同一部刚上线的电影,可临时用组播「近直播」推送,到点播单播衔接(near-VOD)。
- 组播+单播混合架构:直播频道用组播,回看/点播用单播;用户「看直播」走组播,「拖进度看回放」切单播。
- 组播文件分发:企业向内网几千台终端同时推送同一个大文件/系统镜像,用组播(如
WF6 / UDP 组播分发)比单播快 N 倍。
14.4 其他组播「隐藏用例」
金融行情
交易所行情一对多秒级推送,组播是唯一能扛住「一源万客户端」的低延迟方案。
视频会议 / 庭审直播
多方音视频,配合 SSM 防止非法源混入。
数据同步
集群配置下发、缓存预热、软件批量分发。
工业/监控
摄像头多画面同时上墙、告警广播。
14.5 OTT:Over-The-Top 互联网视频是怎么「拿到」视频的
前面讲的 IPTV 走的是运营商专用网络,而你我手机上刷的抖音、智能电视上的 Netflix/爱奇艺/腾讯视频,走的是另一套——OTT(Over-The-Top,过顶内容):内容服务商绕过传统广电/电信专用网络,直接通过互联网把音视频送到你的 App。
14.5.1 OTT 获取视频的完整流程
- 用户在 App 选片,客户端向调度服务请求播放地址(含鉴权 Token)。
- GSLB / Anycast DNS 根据用户位置,把请求引导到最近的 CDN 边缘节点。
- 边缘节点用 HLS(.m3u8 + .ts)或 DASH(.mpd) 把视频切成小片段(如 2~6 秒一片),以 HTTP/HTTPS 单播发给用户。
- 客户端 ABR(自适应码率) 实时测速,在 480p/720p/1080p/4K 间无缝切换,弱网自动降码率。
- DRM 对内容加密,防止盗录与非法分发。
14.5.2 OTT 与组播的关系(关键认知)
- 公网 OTT 基本不用组播:互联网由无数自治域组成,组播路由(PIM/MSDP)跨域复杂、计费与安全难以落地,且 OTT 强调个性化单用户会话——这天然是单播的活。
- OTT 服务商「内部」仍可用组播:源站集群之间、数据中心到 CDN 父节点,常把直播源以组播(SSM)汇聚,再在边缘「终结」成单播切片(见第 15.3 节黄金组合)。
- 融合趋势:组播 ABR / IPTV over OTT:运营商把直播频道用组播推到家庭网关,网关再转成 HLS 单播给家庭内多个屏幕——这是 IPTV 的可靠性与 OTT 的灵活性相结合,常被称作「全 IP 视频」。
14.5.3 OTT 关键技术栈(了解即可)
HLS / DASH
把视频切片 + 清单文件,HTTP 分发,天然穿越防火墙、易缓存。
ABR 自适应
按带宽动态选码率,弱网不卡顿,是 OTT 体验核心。
LL-HLS / LL-DASH
低延迟切片(亚秒级),让 OTT 直播逼近传统直播时延。
WebRTC / SRT / RIST
超低延迟互动直播(WebRTC) 与公网可靠传输(SRT/RIST)。
14.6 IPTV vs OTT vs 广电:一张表分清
| 维度 | IPTV(运营商内网) | OTT(公网视频) | 传统广电(有线) |
|---|---|---|---|
| 承载网络 | 运营商专用 IP 网 | 公共互联网 | 同轴电缆广播 |
| 传输方式 | 组播为主 | 单播 CDN 为主 | 广播 |
| 是否依赖运营商 | 强(需开户) | 弱(有网即可) | 强(需缴费) |
| 个性化/点播 | 中(混合单播) | 强 | 弱 |
| 直播时延 | 极低(秒级内) | 低(LL-HLS 亚秒) | 低 |
| 统计计费 | 易(BRAS 可控) | 易(按请求) | 难 |
| 典型终端 | 专用 STB | 智能电视/手机/PC | 电视机+机顶盒 |
15CDN 与组播:公网分发的左膀右臂
前面说「公网不通组播」,那 B 站、抖音怎么把直播送到几百万人的?答案是 CDN(内容分发网络)。本节讲清它和组播的关系与边界。
15.1 CDN 是什么
CDN 把内容缓存到离用户近的边缘节点(POP)。用户看视频,不是直连源站,而是连最近的边缘服务器。源站→边缘之间叫回源(origin pull),边缘→用户叫最后一跳分发。
15.2 为什么公网不用组播,而用 CDN
- 组播不跨公网域:运营商之间不互通组播路由(PIM/MSDP 跨域复杂、计费与安全难),互联网本质是多自治域单播网络。
- CDN 用「单播 + 缓存 + 分片(HLS/DASH)」:把直播切成小切片,边缘节点用单播 TCP/HTTP 发给用户,天然兼容、可控、可统计、可防盗链。
- 规模经济:CDN 用大量廉价单播连接 + 智能调度,反而比全网组播更现实。
| 维度 | 组播 | CDN(单播分片) |
|---|---|---|
| 适用边界 | 内网 / 单自治域 | 全球公网 |
| 延迟 | 极低(无缓存) | 略高(切片+边缘缓存,仍可亚秒) |
| 个性化 | 弱(同一份) | 强(每用户独立会话) |
| 跨域部署 | 难 | 易 |
| 统计/计费 | 难 | 易(按请求) |
15.3 组播 + CDN 的「黄金组合」
真正的现代视频平台,往往在内部用组播,外部用 CDN:
- 源站内部:编码器把直播源以组播(SSM)推送到源站集群/多数据中心,省内部带宽。
- 源站 → CDN 边缘:CDN 回源拉流(单播/专线),把组播流在源站「终结」成单播交给 CDN。
- CDN 边缘 → 用户:HLS/DASH 分片单播分发。
16高级主题与故障排查(高手进阶)
到了高手段位,要掌握跨域、冗余、安全与 IPv6,以及一套靠谱的排错方法论。
16.1 Anycast RP:RP 不再单点
前面 RP 是一台路由器,挂了全网组播瘫痪。Anycast RP:让多台 RP 用同一个 IP(任播地址),靠单播路由把流量引到「最近」的 RP;RP 之间用 MSDP(组播源发现协议) 互相同步「源注册信息」,保证任一 RP 都知道全网吧的源在哪。
! 两台 RP 配相同任播地址到 Loopback,MSDP 互指
RP1(config)# interface Loopback0
RP1(config-if)# ip address 10.0.0.100 255.255.255.255 ! 任播 RP 地址
RP1(config)# ip msdp peer 10.0.0.101 connect-source Loopback0
RP1(config)# ip msdp originator-id Loopback0
! 另一端 RP2 配 10.0.0.100 同地址 + 互指 MSDP peer
R# show ip msdp peer
R# show ip msdp sa-cache ! 看源活跃(SA)缓存
16.2 MSDP:跨域/跨 RP 的「源黄页」
MSDP 在 RP 间传递 SA(Source Active)消息:「我这边有个源 S 在发组 G」。接收者域的 RP 收到后,就能向该源拉流。它是不同 PIM 域之间共享源信息的关键(PIM 本身不跨域)。
16.3 组播 VPN(MVPN):在 MPLS VPN 里跑组播
企业用 MPLS L3VPN 时,客户 A、B 的组播要隔离又要在各自 VPN 内互通。MVPN 用 MDT(组播分发树) 在运营商核心为每 VPN 建一棵「隧道树」,把客户的组播包封装进去跨域传输。思科支持 Rosen(GRE/IP 封装)和 MPLS 直连(mLDP)两种。
16.4 BIER:组播的「未来形态」
传统组播每台路由器都要维护每流的 (S,G) 状态,规模一大就重。BIER(Bit Index Explicit Replication) 把「复制给哪些下游」编码进报文头的 BitString,中间节点无状态转发——更适合超大规模、SDN 化网络。了解一下趋势即可。
16.5 IPv6 组播与 MLD
IPv6 里组播是一等公民(没有广播,连地址解析都用组播)。对应 IGMP 的是 MLD(Multicast Listener Discovery),PIM 同样适用。IPv6 组播地址以 FF00::/8 开头(如 FF02::1 所有节点、FF02::2 所有路由器)。
R(config)# ipv6 multicast-routing
R(config-if)# ipv6 pim sparse-mode
R(config-if)# ipv6 mld version 2
16.6 组播安全
| 风险 | 防护 |
|---|---|
| 非法源冒充频道 | SSM(只允许指定源);ip igmp access-group |
| 私接组播源泛滥 | ip multicast boundary 限制组范围 |
| 非法 Join 耗尽资源 | IGMP 限速、接口 ACL |
| 组播风暴 | RPF 检查 + TTL 阈值(ip multicast ttl-threshold) |
16.7 高手排错「七件套」
show ip multicast-routing ! ① 组播路由开了没
show ip pim neighbor ! ② PIM 邻居建起来没
show ip pim rp mapping ! ③ RP 学到了没(SM)
show ip igmp groups ! ④ 接收者入组没
show ip rpf <源IP> ! ⑤ RPF 路径对不对
show ip mroute <组> ! ⑥ 转发树有没有出接口
debug ip pim / debug ip igmp ! ⑦ 必要时开 debug(生产谨慎)
16.8 最佳实践清单(收藏级)
- ✅ 企业内网默认用 PIM-SM + BSR;源固定用 SSM(IGMPv3)。
- ✅ 组播地址一律 239.0.0.0/8(内网),直播可规划 232/SSM 段。
- ✅ RP 用 Anycast RP + MSDP 做冗余(生产环境)。
- ✅ 接入交换机必开 IGMP Snooping + immediate-leave。
- ✅ 全局开启
ip multicast-routing,所有相关接口配 PIM。 - ✅ 用
ip multicast boundary+ TTL 阈值做安全边界。 - ✅ 组播不通先查 RPF,再查 RP/IGMP,最后查 PIM 邻居。
- ✅ 公网分发用 CDN(HLS/DASH),组播留内网。
17EVE-NG 组播实验实战:把理论跑成真流量
光看配置不过瘾。本章带你在 EVE-NG(Emulated Virtual Environment,基于 KVM 的网络仿真平台)上,搭一套可真实跑组播流量的实验,亲眼看 IGMP 加组、PIM 建树、mroute 出接口出现。
17.1 EVE-NG 是什么,为什么选它
- 是什么:EVE-NG 是个「网络设备的虚拟机管理器」,浏览器里就能拉出多台路由器/交换机/PC,用虚拟线缆连成拓扑,相当于一台随身的网络实验室。
- 支持什么:Cisco IOL / CSR1000v、Juniper vMX、华为 CE/USG、Linux、VPCS 等,组播实验首选 Cisco 节点。
- 为什么适合学组播:不用真机、不用买License 风险,随时快照、随时「故障注入」,是验证 PIM/RPF/IGMP 的最佳沙盘。
17.2 实验目标与拓扑
目标:在 EVE-NG 上复刻第 13 章拓扑,让一台 VPCS 通过组播收到另一台「源路由器」发出的流量,并实测 SSM、IGMP Snooping、RPF 故障。
17.3 镜像准备
| 节点 | 推荐镜像 | 说明 |
|---|---|---|
| 路由器 ×3 | CSR1000v(最稳) | 完整 IOS-XE,组播特性全;资源够就用它。IOL 也可但老版本组播可能不全 |
| 交换机 ×1 | L2 IOU / vIOS-L2 | 用于演示 IGMP Snooping;也可用路由器代替(关路由当二层) |
| 接收者 ×2 | VPCS | 内置轻量 PC,支持 igmp join,做机顶盒最方便 |
| 组播源 | 路由器 ping 组地址 | 无需额外镜像,用 R-SOURCE 自身产生流 |
17.4 搭建八步
- 建 Lab:浏览器登录 EVE-NG → 右键 Folder → Add Lab,命名
Multicast_Lab,设置管理网段。 - 加节点:分别添加 3× CSR1000v、1× L2 IOU、2× VPCS(Node 类型选对应镜像)。
- 启动:全选节点 → Start,等 Console 状态变绿(CSR 启动约 2~3 分钟)。
- 连线:按拓扑拖拽连接——R-SOURCE g0/0 ↔ R-CORE g0/0;R-CORE g0/1 ↔ R-BR1 g0/0;R-BR1 g0/1 ↔ SW g0/1;SW g0/2 ↔ VPCS1;SW g0/3 ↔ VPCS2。
- 基础 IP + 单播路由:给所有接口配 IP,跑 OSPF 让全网可达(RPF 的地基)。
- 开组播:全局
ip multicast-routing,PIM 接口配 sparse-mode,R-CORE 配 RP/BSR,接入口配 IGMP + Snooping。 - 起流量:R-SOURCE 持续 ping 组地址;VPCS 用
igmp join加组。 - 验证:在 R-CORE / R-BR1 上
show ip mroute看是否出现出接口。
17.5 节点配置(精简可抄版)
① R-SOURCE(组播源)
hostname R-SOURCE
ip multicast-routing
!
interface Loopback0
ip address 10.1.1.10 255.255.255.255
ip pim sparse-mode
!
interface GigabitEthernet0/0 ! 连 R-CORE
ip address 10.1.1.1 255.255.255.0
ip pim sparse-mode
ip igmp join-group 239.1.1.1 ! 让本机也"收",便于 ping 自测
!
router ospf 1
network 0.0.0.0 255.255.255.255 area 0
!
! 产生组播流:目的地址直接写组地址
R-SOURCE# ping 239.1.1.1 repeat 1000
② R-CORE(RP + BSR,核心)
hostname R-CORE
ip multicast-routing
!
interface Loopback0
ip address 10.0.0.1 255.255.255.255
ip pim sparse-mode
!
interface GigabitEthernet0/0 ! 连源
ip address 10.1.1.2 255.255.255.0
ip pim sparse-mode
interface GigabitEthernet0/1 ! 连分支
ip address 172.16.1.1 255.255.255.252
ip pim sparse-mode
!
router ospf 1
network 0.0.0.0 255.255.255.255 area 0
!
ip pim rp-candidate Loopback0
ip pim bsr-candidate Loopback0 30 ! 动态 RP,全网自动学到
③ R-BR1(最后一跳,连接收者)
hostname R-BR1
ip multicast-routing
!
interface GigabitEthernet0/0 ! 连核心
ip address 172.16.1.2 255.255.255.252
ip pim sparse-mode
interface GigabitEthernet0/1 ! 连 SW/用户
ip address 192.168.10.1 255.255.255.0
ip pim sparse-mode
ip igmp version 3
!
router ospf 1
network 0.0.0.0 255.255.255.255 area 0
! 无需手动指 RP,BSR 会自动通告 10.0.0.1
④ SW-L2(接入交换机,IPTV 关键)
hostname SW
ip igmp snooping
ip igmp snooping vlan 1
ip igmp snooping vlan 1 querier
ip igmp snooping vlan 1 immediate-leave
! 上联口(连 R-BR1)自动学习为 mrouter;用户口接 VPCS
SW# show ip igmp snooping groups
⑤ VPCS(接收者,模拟机顶盒)
VPCS> ip 192.168.10.20 255.255.255.0 192.168.10.1
VPCS> ip 192.168.10.21 255.255.255.0 192.168.10.1 ! 第二台
VPCS> igmp join 239.1.1.1 ! 加入频道
VPCS> show ip igmp ! 确认已加入
VPCS> igmp leave 239.1.1.1 ! 离开(切台)
17.6 验证命令(在 EVE 控制台逐条敲)
R-BR1# show ip igmp groups 239.1.1.1 ! ① 收到成员了吗
R-CORE# show ip pim rp mapping ! ② RP = 10.0.0.1 ?
R-CORE# show ip pim neighbor ! ③ PIM 邻居建起来没
R-BR1# show ip rpf 10.1.1.10 ! ④ 回源路径对不对
R-BR1# show ip mroute 239.1.1.1 ! ⑤ 转发树出接口有没有
VPCS> ping 239.1.1.1 ! ⑥ 能通?通了就大功告成
show ip mroute 239.1.1.1 里出现 (10.1.1.10, 239.1.1.1) 条目且 Outgoing 接口列表含 GigabitEthernet0/1;VPCS ping 239.1.1.1 有回复——说明组播从源一路复制到了接收者。17.7 五个动手实验(进阶练习)
| 实验 | 做法 | 观察点 |
|---|---|---|
| ① PIM-SM 基础 | 按上述配置跑通 | VPCS ping 通 239.1.1.1;mroute 有出接口 |
| ② SSM 实验 | 频道改 232.1.1.1,接收者用 IGMPv3 指定源;VPCS 不支持 v3 指定源时改用路由器 ip igmp join-group 232.1.1.1 | 直接建 (S,G) 源树,不经过 RP |
| ③ IGMP Snooping | SW 上 show ip igmp snooping groups | 流量只转发到 VPCS 端口,不洪泛 |
| ④ RPF 故障注入 | 在 R-BR1 改 OSPF 度量让回源走错接口 | show ip rpf 失败、mroute 出现 RPF failure,流量中断;改回即恢复 |
| ⑤ SPT 切换 | show ip mroute 看从 (*,G) 到 (S,G);调整 ip pim spt-threshold | 理解共享树→源树的切换过程 |
17.8 组播源 / 接收者模拟技巧(必会)
让路由器发组播流
开启 ip multicast-routing 后,直接 ping 239.1.1.1 repeat 1000,目的 IP 是组地址即从 PIM 接口发出。
让路由器当接收者
接口下 ip igmp join-group 239.1.1.1(CPU 收,测试用)或 ip igmp static-group(只触发转发状态)。
VPCS 当接收者
igmp join 239.1.1.1 / igmp leave,最轻量,模拟机顶盒切台。
真实视频源
挂 Linux 节点跑 VLC/cvlc 推流,体验真实 IPTV 画面。
17.9 EVE-NG 排错清单
- 节点起不来:宿主机 CPU/内存不足,或镜像未正确上传到
/opt/unetlab/addons/对应目录。 - 组播不通但配置对:八成是 IOL 镜像组播支持不全,换 CSR1000v。
- mroute 无出接口:先查
show ip igmp groups(接收者加组没)、show ip rpf(RPF 对不对)。 - VPCS 收不到:确认 SW 开了 Snooping 且上联口被识别为 mrouter(
show ip igmp snooping mrouter)。 - 跨节点不通:先保证单播 OSPF 全网可达,组播 RPF 依赖单播路由。