前言 · 如何使用本手册
组播(Multicast)是网络通信里最容易让人"一听就懂、一配就懵"的技术。它的核心思想其实朴素得不能再朴素:一份数据,从源出发,只发一次,沿途按需复制,最终精准抵达所有想接收的人,而完全不惊扰无关的人。听起来像广播?像,但本质不同——广播是"挨家挨户敲门",组播是"只把传单塞进举手说'我要'的信箱"。
本手册的定位是一本可上手、能讲透、配得通的实验指南。我们不以考试或背诵为目标,而是带你从"为什么需要组播"出发,逐层拆解地址、协议、树、RP、跨域,最后落到 EVE-NG 真机上一条一条敲命令、看现象、读输出。每一章先讲"它解决什么问题、脑子里该有怎样一幅图",再给出实验命令与show输出示范。
关于符号约定:文中所有以!开头的行是 Cisco IOS 注释;所有以浅色显示、带Router#提示符的块是可执行命令;以浅蓝字展示的块是期望看到的输出示例。本手册命令均基于 Cisco IOS 15.x / IOS-XE,绝大多数在 EVE-NG 中运行的 vIOS / IOL(IOS on Linux)镜像上可原样复现。
第1章 组播是什么:从"快递"说起
想象一个讲师在千人礼堂里发讲义。有三种派发方式,恰好对应网络里三种通信模型:
1.1 单播(Unicast):点对点,一人一份
讲师把同一份讲义复印一千份,挨个递给每位学员。网络里就是源给每个接收者单独发一个完整 IP 包。代价显而易见:源要发 N 份,带宽随接收者数量线性增长。直播一万人时,源的带宽就被榨干。单播适合"一对一私聊",不适合"一对多群发"。
1.2 广播(Broadcast):全网洪泛,不管你要不要
讲师把讲义往空中一撒,礼堂里所有人都收到,哪怕睡觉的人也被砸醒。网络里是发往 255.255.255.255 或子网广播地址,二层全网洪泛。代价是:无关主机被迫处理、跨网段无法传递(路由器默认不转发广播)、无法精细控制。广播只适合"同网段内极少量控制信令"。
1.3 组播(Multicast):只对"举手的人"投递
讲师只把讲义发给举手的学员,且只在每个过道(链路)上传递一份,由过道尽头的组长负责复印分发给本排举手的人。网络里:源只产生一份流量(以组地址 239.x.x.x 为目的),路由器在有接收者的分支上复制转发,在没有接收者的分支上完全不浪费。带宽开销与接收者分布有关,而与单纯的数量弱相关。
1.4 组播到底用在哪
- IPTV / 视频会议 / 网络电视:一对多实时流,最经典的组播场景。
- 金融行情推送:交易所把行情以组播发给所有券商终端,毫秒级、低开销。
- 企业内网直播 / 培训:CEO 讲话,千人同时看,源不爆。
- 软件分发 / 镜像下发:向全网终端同时推送系统镜像或病毒库。
- 某些路由协议与发现机制:OSPF 用 224.0.0.5/6、RIP 用 224.0.0.9、PIM 用 224.0.0.13,这些链路本地组播是协议自身运转的"内部语言"。
第2章 组播地址与 MAC 映射:信号的"门牌号"
组播通信里有两个必须分清的地址概念:组播 IP 地址(三层,给路由器寻路用)和组播 MAC 地址(二层,给交换机在局域网里转发用)。理解它们的映射关系,是排查"为什么二层收到了不想要的组播"的关键。
2.1 IPv4 组播地址范围
IPv4 组播地址占用整个 224.0.0.0/4 块,即 224.0.0.0 ~ 239.255.255.255,共约 2.68 亿个地址。它不属于任何主机,而属于"一个组"。常见的细分:
| 范围 | 名称 | 用途 / 示例 |
|---|---|---|
| 224.0.0.0 – 224.0.0.255 | 链路本地(保留) | 路由协议内部用,路由器不转发。如 224.0.0.1 全主机、224.0.0.2 全路由器、224.0.0.5/6 OSPF、224.0.0.9 RIP、224.0.0.13 PIM、224.0.0.22 IGMPv3 |
| 224.0.1.0 – 224.0.1.255 | 互联网控制 | 如 224.0.1.1 NTP、224.0.1.39/40 Auto-RP |
| 224.0.2.0 – 238.255.255.255 | AD-HOC / 用户可分配(ASM 范围) | 企业内普通组播业务,如 239.1.1.1 视频流 |
| 232.0.0.0/8 | SSM 指定源组播 | PIM-SSM 专用,(S,G) 模型,必须指定源 |
| 233.0.0.0/8 | GLOP / AS 内 | 早期与 AS 号绑定的分配方案 |
| 239.0.0.0/8 | 管理 scoped(私有) | 类似私网地址,企业内部随意用,不跨公网,强烈推荐 |
2.2 组播 IP 到 MAC 的映射(必考且易错)
以太网组播 MAC 地址有固定的"前缀":01:00:5E 开头。映射规则如下:
- MAC 前 25 位固定为
0000 0001 0000 0000 0000 0101 1110(即 01:00:5E)。 - 把 32 位的组播 IP 地址的前 4 位(1110)去掉,取其低 23 位,直接拼到 01:00:5E 后面。
- 因此一个组播 MAC 只承载了 IP 的 23 位,而 IP 组地址 28 位可变 → 存在 32:1 的地址重叠(2^(28-23)=32)。即多个不同组播 IP 可能映射到同一个 MAC。
2.3 把规则算一遍(例子)
以 239.1.1.1 为例:
; 239.1.1.1 的二进制(只看后 28 位,前 4 位 1110 固定): ; 239 = 11101111 → 去掉最高 1110,剩 1111(=15的高4位) ; 更简单做法:取 IP 后三段对应的低23位 ; 01:00:5E : (低23位) ; 239.1.1.1 → MAC = 01:00:5E:01:01:01 ; 高字节 01:00:5E,然后 01:01:01 直接对应 IP 的后三段低23位
更一般地:组 IP 234.a.b.c → MAC 01:00:5E:(a & 0x7F):b:c。注意 a 的最高位被丢弃(这就是为什么重叠)。例如 225.1.1.1 与 224.1.1.1 映射到相同 MAC,因为 a=224 和 a=225 的低 7 位都是 0000001。
2.4 源地址与组地址的角色
组播包里:目的 IP = 组地址(G),源 IP = 发送者单播地址(S)。组播的"寻址"不是找源,而是找"哪个组"。路由时用 (S, G) 或 (*, G) 这样的"源-组"对来标识一条流,这是后续所有组播路由表的核心条目格式。
第3章 组播服务模型:ASM 与 SSM
在你动手配命令之前,必须先决定用哪种"服务模型"——它决定了接收者如何表达"我要加入"。这就像订牛奶:是"不管谁送的,只要是鲜奶就要"(ASM),还是"我只认准老张家的奶,别家不要"(SSM)。
3.1 ASM(Any-Source Multicast,任意源)
接收者只关心"组地址 G",不关心也不指定源是谁。任何源只要往 G 发,接收者都收。这是最传统、最通用的模型,也是 PIM-SM/DM 工作的基础。
- 优点:接收者零配置源信息,适合"不知道谁在发"的场景(如 IPTV 频道,频道号就是 G)。
- 代价:需要一个"会合点"(Rendezvous Point, RP)来把源和接收者撮合到一起,协议复杂度高。
- 典型地址范围:224.0.0.0 – 238.255.255.255(含 239.x 私有)。
3.2 SSM(Source-Specific Multicast,指定源)
接收者加入时必须同时指定源 S 和组 G,形式为 (S, G)。它只收"来自 S 发往 G"的流量。
- 优点:根本不需要 RP,直接从源建一棵树,架构极简、安全(防私搭源)、延迟低。
- 代价:接收者(或 IGMPv3/应用)必须知道源的 IP;依赖 IGMPv3 或 MLDv2。
- 典型地址范围:
232.0.0.0/8(Cisco 默认 SSM 范围)。
3.3 一个贯穿全书的记号
组播路由表里你会反复看到两种条目:
(*, G)—— 共享树(RPT)条目,表示"本路由器已为组 G 建立了朝向 RP 的接收通道,愿意接收来自任意源的 G 流量"。(S, G)—— 源树(SPT)条目,表示"本路由器已建立从具体源 S 到自己的最短路径树条目"。
记住这两个记号,后面 PIM 的所有行为都是在维护、切换、剪枝这两类条目。
第4章 IGMP:最后一公里的"举手协议"
IGMP(Internet Group Management Protocol,互联网组管理协议)运行在主机与直连路由器(最后一跳路由器,即 DR/接收者侧网关)之间。它的唯一使命:让路由器知道"我这个网段上,有没有人想收某个组"。它就是那个"举手登记"的过程。
4.1 三个版本对比
| 特性 | IGMPv1 | IGMPv2 | IGMPv3(SSM 基石) |
|---|---|---|---|
| 离开机制 | 无主动离开,靠超时 | 有 Leave 报文,快速离开 | 有,且可携带多组 |
| 查询器选举 | 靠上层单播路由协议(如 OSPF DR) | 自身 IP 地址比较选举 | 自身选举 |
| 成员报告 | Report | Report + Leave | Report 含 (S,G) 列表(支持 SSM) |
| 指定源 | 不支持 | 不支持 | 支持(INCLUDE/EXCLUDE 源) |
| SSM | 否 | 否 | 是 |
现代网络几乎一律用 IGMPv2(ASM)或 IGMPv3(SSM)。Cisco 默认在接口上使用的是 v2(若未显式开启 v3)。
4.2 IGMP 的工作流程(以 v2 为例)
- 查询(Query):网段上的查询器(Querier)周期性(默认每 60s)发一个目的 224.0.0.1(所有主机)的 General Query,问"谁要哪个组?"
- 报告(Report):主机想收 G,就回一个目的为 G 的 Report。为避免同网段多主机重复上报,IGMP 用"报告抑制":先监听一小段随机时间,若别人已报,自己就静音。
- 加入即上报:主机启动想接收时,不必等查询,立刻主动发 Report(立即加入)。
- 离开(Leave):主机不想收了,发 Leave 给 224.0.0.2(所有路由器)。查询器收到后发特定组查询(Group-Specific Query)确认"还有人要吗?",没人回就撤掉该组状态。
4.3 查询器(Querier)选举与定时器
一个网段可能有多台路由器(冗余网关)。为避免"群龙治水",只留一个当查询器:比较接口 IP,IP 最小者胜出。落选者沉默,但照常转发流量。
关键定时器(接口级,可调整):
query-interval:查询周期,默认 60s。query-timeout / querier-timeout:若这么久没收到别人更优的查询,就认为自己该当查询器。max-response-time:主机收到查询后,最多多久内必须回应(随机退避上限),默认 10s。last-member-query-interval:收到 Leave 后,追问"还有人吗"的间隔,默认 1s。
第5章 IGMP Snooping:让交换机"听得懂"组播
二层交换机天生"看不懂" IP,它只认 MAC。对组播帧,默认行为是当未知目的 MAC 处理——于是在 VLAN 内洪泛,和广播一样糟糕。这就完全丧失了组播"不惊扰无关主机"的优势。IGMP Snooping 就是用来修正这一点的。
5.1 Snooping 在做什么
交换机"偷听"(snoop)主机和路由器之间的 IGMP 报文,建立一张 组播 MAC → 端口 的映射表。于是组播帧只从"有成员"的端口转发出去,其余端口安静如初。
- 监听 IGMP Report:把上报端口加入该组的转发表。
- 监听 IGMP Leave:把离开的端口从组里摘除。
- 监听 IGMP Query:识别哪台路由器是查询器,把"路由器端口(mrouter port)"标记出来,确保组播能上行到路由器。
5.2 必须知道的几个细节
- mrouter 端口:交换机必须知道"组播该往哪个口送回路由器",否则接收者发的 Report 到不了路由器。Snooping 通过监听 Query 自动发现;也可手动指定
ip igmp snooping mrouter …或静态加入。 - 报告抑制(Report Suppression):主机为省带宽会"别人报了我就闭嘴"。但这会让交换机只看到一个端口的 Report,误以为只有一台主机。Cisco 提供
ip igmp snooping report-suppression(默认视平台)来优化,必要时关闭抑制让交换机看清每台主机。 - 查询器问题:若 VLAN 内没有路由器(纯二层环境,比如接收者和源都在交换机下、由三层交换机做网关但不发 IGMP Query),交换机会因为没有 Query 而学不到 mrouter 端口。此时需在交换机上启用
ip igmp snooping querier,让交换机自己发 Query。
5.3 MLD Snooping(IPv6 对应)
IPv6 里对应协议是 MLD(Multicast Listener Discovery),二层对应是 MLD Snooping,原理完全一致,只是报文类型从 IGMP 换成 MLD。Cisco 命令形如 ipv6 mld snooping。
第6章 组播分发树、RPF 与 Assert:路由器怎么"不绕路、不环回"
PIM(协议无关组播)负责在路由器之间建"转发树"。理解树、RPF、Assert 这三个概念,就理解了组播路由 90% 的行为逻辑。
6.1 两种分发树
- SPT(Shortest Path Tree,最短路径树 / 源树):以源 S 为根,沿单播路由的"源到接收者最短路径"建树,条目为
(S, G)。优点:路径最优、延迟最低;缺点:每个源一棵树,状态多。 - RPT(Rendezvous Point Tree,共享树 / 会合树):以RP 为根,所有接收者先朝 RP 聚合,条目为
(*, G)。优点:状态少、收敛快(先有树再找源);缺点:路径可能不是最优(要经过 RP)。
6.2 RPF(Reverse Path Forwarding,反向路径转发)
组播最怕两件事:环路和重复包。RPF 是组播的"防伪标签"机制:
- 当路由器从某接口收到一个
(S, G)包,它去查单播路由表:"要到源 S,最佳出接口是哪个?" - 如果这个包的入接口正好等于"去往 S 的最佳出接口"(即 RPF 接口),则通过 RPF 检查,转发;否则丢弃。
- 换句话说:组播包必须"顺着单播回到源的路"进来,才被认为是合法的。这巧妙杜绝了环路和重复。
ip mroute 配置静态组播路由指定 RPF 接口;或配 ip pim rp-address 等。记住:没有去往源的路由 = RPF 失败 = 组播不通。这是排错第一刀。6.3 Assert(断言):多路由器争一路时谁说话
当一条链路上连着两台及以上的下游路由器都收到了同一个 (S, G) 包(典型:两台路由器都连到同一个多接入网段,且都朝该网段转发),它们会互相发 Assert 报文争吵"该谁转发"。规则:
- 比较 去往源 S 的管理距离(AD),小者胜;
- AD 相同比 度量值(Metric),小者胜;
- 都相同比 路由器 IP,大者胜(Cisco 实现)。
输家会在该接口上把自己"剪掉"(prune),只留赢家转发,从而避免同网段重复包。
6.4 TTL 与组播边界
组播包也有 TTL,默认发送 TTL=1(链路本地)。路由器转发时会减 1。可用 ip multicast ttl-threshold 在接口设阈值,或 ip multicast boundary 用 ACL 限制哪些组能进出某接口,实现"组播管理边界"(scoping),防止内部组播泄漏到其他域。
第7章 PIM-DM 密集模式:先全部发,再剪掉不要的
PIM(Protocol Independent Multicast)"协议无关"的意思是:它不自己算路由,而是"借用"任何现成的单播路由协议(OSPF/EIGRP/静态)来当 RPF 依据。PIM 分 DM(密集)和 SM(稀疏)两种模式。
7.1 DM 的核心哲学:洪泛-剪枝(Flood & Prune)
DM 假设"网络里处处都要组播"(接收者密集)。所以源一发包:
- 扩散(Flood):从源开始,沿所有 PIM 邻居接口把
(S, G)包全发出去(靠 RPF 防环)。 - 剪枝(Prune):某下游路由器发现自己这棵分支没有接收者(没有 IGMP 成员、也没有 PIM 下游要),就向上游发
Prune,上游在该接口"剪掉"。 - 状态维持:被剪掉的分支并非永久沉默。每过一段时间(默认 3 分钟 Prune 定时器 / State Refresh),会重新扩散一次,确认是否还有人要。
7.2 配置要点
DM 不需要 RP,配置极简:全局开组播路由 + 接口开 dense-mode 即可。
! 全局启用组播路由 Router(config)# ip multicast-routing ! 在需要参与组播转发的接口上开启 PIM 密集模式 Router(config)# interface GigabitEthernet0/1 Router(config-if)# ip pim dense-mode Router(config-if)# interface GigabitEthernet0/2 Router(config-if)# ip pim dense-mode
ip pim dense-mode。漏一个接口,树就断在那。7.3 DM 的验证
! 看 PIM 邻居(DM 也会建邻居) Router# show ip pim neighbor PIM Neighbor Table Neighbor Interface Uptime/Expires Ver DR 10.0.12.2 GigabitEthernet0/1 00:15:22/00:01:25 v2 1/0 ! 看组播路由表,DM 主要是 (S,G) 条目 Router# show ip mroute 239.1.1.1 (192.168.1.10, 239.1.1.1), 00:02:10/00:02:48, flags: T Incoming interface: GigabitEthernet0/1 ; RPF 接口 RPF neighbor: 10.0.12.2 Outgoing interface list: GigabitEthernet0/2, Forward/Sparse-Dense, 00:02:10/00:00:00
第8章 PIM-SM 稀疏模式:先找 RP 会合,再切最优路径
SM(稀疏模式)假设"接收者稀少分散",不能无脑洪泛。它引入一个关键角色——RP(Rendezvous Point,会合点),作为源和接收者初次"相亲"的中介。
8.1 SM 的两个阶段
阶段一:共享树 RPT(接收者侧先动)
- 接收者侧路由器收到 IGMP 加入,生成
(*, G)条目,沿"朝向 RP"的 RPF 路径向上逐跳建共享树。 - 此时树根是 RP,所有接收者通过这个
(*, G)通道"等着收"。
阶段二:源注册(源侧先动)
- 源一开始发包,第一跳路由器(DR)发现没有下游要,但知道 RP,于是把包单播封装成 Register 报文发给 RP(这就是"注册")。
- RP 解封装,沿 RPT 把流量发给接收者。同时 RP 沿"朝向源"的 RPF 路径向源发
(S, G)Join,建立真正的源树 SPT。 - 源树建好后,流量直接从源经 SPT 流到 RP,再经 RPT 到接收者。此时 RP 发
Register-Stop给源 DR,停止单播注册封装。
8.2 SPT 切换(RPT→SPT)
流量经 RP 绕路,可能不是最优。SM 有个优化:当接收者侧路由器发现某 (S, G) 流量"大到阈值"(默认速率超 0 kbps,即一收到就切),就直接向源 S 发起 (S, G) Join,建立直达源的 SPT,并把自己从 RPT 上剪掉。这就是 SPT 切换(SPT Switchover),让流量走最优路径。
! 调整 SPT 切换阈值(默认 0 = 立即切换)。设为 128kbps: Router(config)# ip pim spt-threshold 128 ! 也可指定只对某些组切换;或设 infinity 永远不切(一直走 RPT)
8.3 PIM-SM 的基础配置(静态 RP 版,详见实验4)
! 全局启用 + 接口 sparse-mode Router(config)# ip multicast-routing Router(config)# interface range Gi0/1 - 2 Router(config-if-range)# ip pim sparse-mode ! 静态指定 RP(全网一致) Router(config)# ip pim rp-address 3.3.3.3
8.4 PIM 路由器角色补充
- DR(Designated Router,指定路由器):在源侧,DR 负责把源注册到 RP;在接收者侧,DR 负责把 IGMP 加入朝 RP 上送。多路由器网段通过比较优先级(
ip pim dr-priority,大者胜;相同比 IP 大者)选一个 DR 干活,避免重复注册/加入。 - BSR / Auto-RP:动态发现 RP 的机制(第9章)。
第9章 RP 发现机制:静态、Auto-RP 与 BSR
SM 里所有路由器都得知道"RP 是谁、在哪"。有三种方式让全网达成共识:
9.1 静态 RP(手工指定)
最简单、最可控:每台路由器手工敲 ip pim rp-address <IP>。优点是无依赖、好排错;缺点是 RP 变了要全网改,且无法做 RP 冗余(一台挂全网瘫)。
! 每台路由器都配(通常指向 RP 的环回口地址) Router(config)# ip pim rp-address 3.3.3.3 ! 可只对特定组生效(ACL 限定),实现"不同组用不同 RP" Router(config)# access-list 10 permit 239.1.1.0 0.0.0.255 Router(config)# ip pim rp-address 3.3.3.3 10
9.2 动态 RP 的两套机制
| 机制 | Auto-RP(Cisco 私有) | BSR(Bootstrap Router,标准 RFC5059) |
|---|---|---|
| 标准 | Cisco 私有 | IETF 标准,跨厂商通用 |
| 角色 | 候选 RP 发 224.0.1.39(Announce);映射代理 224.0.1.40(Discovery) | 候选 BSR + 候选 RP,BSR 收集后全网泛洪 |
| 依赖 | 需 PIM 先跑起来;SM 模式下需 ip pim autorp listener 让 39/40 组走稀疏 | BSR 消息用 PIM 原生携带,不依赖组播组 |
| 冗余 | 支持多个候选 RP(按 hash 分配组) | 支持多个候选 RP + BSR 主备 |
9.3 Auto-RP 配置
; ===== 在 RP 候选路由器上 ===== Router(config)# ip pim send-rp-announce Loopback0 scope 10 ; ↑ 宣告自己 Loopback0 是候选 RP,scope=10 限制泛洪 TTL 范围 ; ===== 在映射代理(可与 RP 同机或独立)===== Router(config)# ip pim send-rp-discovery Loopback0 scope 10 ; ===== 若接口跑 sparse-mode,必须放行 224.0.1.39/40 ===== Router(config)# ip pim autorp listener
ip pim autorp listener 让这两个组以 dense 方式传递;② 或接口用 sparse-dense-mode(既能 sparse 又能 dense)。9.4 BSR 配置(推荐,标准做法)
; ===== 在候选 BSR 上(通常就是 RP 或独立设备)===== Router(config)# ip pim bsr-candidate Loopback0 0 ; ↑ 0 是哈希掩码长度,决定组到 RP 的映射粒度 ; ===== 在候选 RP 上 ===== Router(config)# ip pim rp-candidate Loopback0 ; ===== 其余路由器无需额外命令,自动从 BSR 消息学习 RP =====
9.5 验证 RP 映射
! 看本机学到的 RP 映射表 Router# show ip pim rp mapping PIM Group-to-RP Mappings Group(s) 224.0.0.0/4 RP 3.3.3.3 (?), v2 Info source: 3.3.3.3 (?), elected via Auto-RP Uptime: 00:30:12, expires: 00:02:25 ! 看某个组当前的 RP 是谁 Router# show ip pim rp 239.1.1.1
第10章 Anycast RP:一台 RP 挂了,另一台无缝顶上
静态 RP 没有冗余;动态 RP 虽有多候选,但每个组只映射到一个 RP,那个 RP 挂了,对应组的组播就瘫。Anycast RP 解决这个问题:让多台 RP 共用同一个 RP 地址(anycast 地址),通过单播路由(IGP)让每台路由器自动把流量送到"最近的"那台 RP。
10.1 工作原理
- 给所有 RP 配置相同的环回地址(如 3.3.3.3/32),并把它通告进 IGP。由于单播路由选最近,每台路由器"去 3.3.3.3"自然指向离自己最近的 RP。
- 但问题是:源在 RP-A 注册,接收者在 RP-B 会合,两者看不到彼此的 (S,G) 状态,组播就不通。所以需要 MSDP 在 RP 之间同步"源活跃信息"。
- 因此 Anycast RP = 相同 RP 地址 + MSDP 互联。任一 RP 故障,IGP 收敛后流量自动切到另一台,且 MSDP 已让所有 RP 都知道了源。
10.2 配置要点
; ===== 每台 RP(以 RP-A 为例)===== Router(config)# interface Loopback0 Router(config-if)# ip address 3.3.3.3 255.255.255.255 ; 所有 RP 相同 Router(config)# ip pim rp-address 3.3.3.3 ; 用 BSR 或静态通告该 RP(静态需在每台路由器配,BSR 在候选上配) Router(config)# ip pim rp-candidate Loopback0 ; 配置 MSDP 邻居(指向其他 RP 的真实环回地址,不是 anycast 地址!) Router(config)# ip msdp peer 4.4.4.4 connect-source Loopback1 Router(config)# ip msdp originator-id Loopback1 ; 用唯一地址标识自己
第11章 PIM-SSM:不要 RP,直接从源建树
SSM(Source-Specific Multicast)是组播里"返璞归真"的模型:接收者明确说"我只收来自源 S 的组 G"。既然源已知,根本不需要 RP 来撮合,直接建 (S, G) 最短路径树即可。
11.1 为什么 SSM 简单又安全
- 没有 RP → 没有 RP 单点、没有注册过程、没有 RPT→SPT 切换抖动。
- 指定源 → 天然防"私搭源冒充",因为只有白名单里的 (S,G) 才被接收。
- 依赖 IGMPv3(接收者上报时带源列表)或 MLDv2。
11.2 配置(极简)
; 1) 开启 SSM 默认范围(232.0.0.0/8,Cisco 默认已开,显式写更清晰) Router(config)# ip pim ssm default ; 或自定义范围:ip pim ssm range <ACL> ; 2) 接口用 sparse-mode(SSM 跑在 sparse 框架上,但行为像直连源树) Router(config)# interface Gi0/1 Router(config-if)# ip pim sparse-mode Router(config-if)# ip igmp version 3 ; 接收者侧需 v3
11.3 接收者如何加入 (S, G)
在最后一跳路由器(或主机)上用 IGMPv3 指定源:
! 在接收者侧接口上静态模拟"指定源加入"(实验常用) Router(config)# interface Gi0/2 Router(config-if)# ip igmp version 3 Router(config-if)# ip igmp join-group 232.1.1.1 source 192.168.1.10
此时路由器直接朝源 192.168.1.10 建 (192.168.1.10, 232.1.1.1) 的 SPT,全程无 RP 参与。看 show ip mroute 会出现 Joined: (192.168.1.10, 232.1.1.1) 且无 RPT 标记。
第12章 MSDP:让组播跨越 AS / 管理域
MSDP(Multicast Source Discovery Protocol,组播源发现协议)解决一个具体问题:不同 PIM 域(不同 AS 或不同管理域)各有各的 RP,彼此不知道对方的源在哪。MSDP 让一个域的 RP 把"我这里有源 S 在发组 G"的消息,通过 TCP 告诉对端域的 RP,从而让对端接收者也能建树收到。
12.1 为什么需要 MSDP
PIM-SM 的 RP 只在本域有效。源在域 A 注册到 RP-A,域 B 的接收者只认 RP-B,两者隔阂。MSDP 在 RP 之间建立 TCP 邻居,互发 Source-Active (SA) 消息:"我是 RP-A,源 1.1.1.1 正在发 239.1.1.1"。RP-B 收到后,若本地有接收者要 239.1.1.1,就朝源 1.1.1.1 建跨域 SPT 拉流。
12.2 配置
; 在 RP 上配置 MSDP 邻居(对端 RP 的真实地址) Router(config)# ip msdp peer 200.1.1.2 connect-source Loopback0 Router(config)# ip msdp originator-id Loopback0 ; 可选:限制只和对端交换特定组的 SA Router(config)# ip msdp sa-filter out 200.1.1.2 list 20 Router(config)# ip msdp cache-sa-state ; 缓存 SA,加速收敛
12.3 验证
! 看 MSDP 邻居状态(应为 Up) Router# show ip msdp peer Peer address: 200.1.1.2, AS 65001, local address: 3.3.3.3 State: Up, Resets: 0, Connection retries: 0 ! 看收到的 SA 缓存(源活跃条目) Router# show ip msdp sa-cache (192.168.1.10, 239.1.1.1) RP 200.1.1.2 Uptime 00:10:02
第13章 EVE-NG 平台准备:把"实验室"搭起来
EVE-NG(Emulated Virtual Environment - Next Generation)是网络工程师的"虚拟机箱",能在单台物理服务器/PC 上跑 Cisco、Juniper、Arista 等多厂商设备的镜像,用浏览器就能连控制台。本手册所有实验都基于它。
13.1 EVE-NG 是什么、为什么用它
- 不用真机:一台笔记本跑 EVE-NG,就能模拟十几台路由器,省下几十万设备费。
- 拓扑可视化:拖拽节点、连线,像画网络图一样搭实验。
- 多厂商:除了 Cisco IOS/IOL/XE,还能跑其他厂商,方便对比。
- 支持云化:可装在 Proxmox/ESXi/裸机,团队共享。
13.2 安装与初始登录
- 下载 EVE-NG 社区版(Community)或专业版 ISO,装到 VM(建议 4 核 8G 起步,组播实验多节点可 8 核 16G)。
- 启动后浏览器访问
http://<EVE-IP>/,默认账号admin / eve。 - 左侧 Add / Lab 新建一个实验室,命名如 "Multicast_Lab"。
13.3 导入 Cisco 镜像(关键!)
EVE-NG 本身不带厂商镜像(版权原因),需自行准备并上传。组播实验推荐镜像:
| 镜像类型 | 说明 | 适合 |
|---|---|---|
| Cisco vIOS / IOL (IOS on Linux) | 轻量、启动快、完整支持 PIM/IGMP | 首选,跑大量节点不卡 |
| Cisco IOSv / IOSvL2 | 更接近真实 IOS,L2 镜像支持 Snooping | 需要二层交换实验时 |
| Cisco CSR1000v (IOS-XE) | 真 XE 特性全,但吃资源 | 需要 XE 专属命令时 |
上传步骤(以 IOL 为例):用 WinSCP/SCP 把镜像目录传到 /opt/unetlab/addons/iol/bin/,然后在 EVE Web 里 Tools → Fix Permissions。镜像文件夹命名需符合 EVE 规范(如 i86bi_linux_l3-...)。
13.4 推荐基础拓扑(贯穿全书实验)
地址规划(示例):
- 路由器环回口 Lo0:R1=1.1.1.1,R2=2.2.2.2,R3=3.3.3.3(RP),R4=4.4.4.4,R5=5.5.5.5。
- 互联链路:10.0.12.0/30、10.0.13.0/30、10.0.14.0/30、10.0.23.0/30、10.0.34.0/30、10.0.35.0/30。
- 源网段(R1 后):192.168.1.0/24,源 IP 192.168.1.10。
- 接收者网段(R5 后):192.168.5.0/24,PC 192.168.5.10,网关 R5 Gi 接口。
- 组地址:239.1.1.1(ASM 实验)、232.1.1.1(SSM 实验)。
13.5 所有实验的"地基"配置
无论做哪个实验,先把这些敲好(以 R1、R3 为例,其余类比):
; ---- 通用:环回口 + 接口 IP ---- R1(config)# interface Loopback0 R1(config-if)# ip address 1.1.1.1 255.255.255.255 R1(config-if)# interface GigabitEthernet0/0 ; 连 R2 R1(config-if)# ip address 10.0.12.1 255.255.255.252 R1(config-if)# no shutdown ; ---- 通用:IGP(OSPF)让全网单播通 ---- R1(config)# router ospf 1 R1(config-router)# router-id 1.1.1.1 R1(config-router)# network 1.1.1.1 0.0.0.0 area 0 R1(config-router)# network 10.0.12.0 0.0.0.3 area 0 R1(config-router)# network 192.168.1.0 0.0.0.255 area 0 ; ---- 通用:验证单播已通 ---- R1# ping 3.3.3.3 ; 应能通,否则组播必失败
ping 通所有环回口和源/接收者地址。单播不通,组播免谈。RPF 检查查的就是这些路由。实验1 环境搭建与三层组播基础
目标在 EVE-NG 中搭好图13-1 拓扑,全网 OSPF 通,启用组播路由,验证 PIM 邻居建立,用环回口模拟源发组播,确认 (S,G) 条目生成。
步骤 1:搭拓扑 & 配基础 IP/OSPF
按第 13.5 节把 5 台路由器的接口 IP 与 OSPF 配好,确保任意两环回口互 ping 通。
步骤 2:全局启用组播路由
; 每台路由器都执行 R1..R5(config)# ip multicast-routing
步骤 3:在互联接口与用户接口开 PIM(先以 DM 演示基础)
; 暂用 dense 快速看到现象(实验3 再深入 DM) R1(config)# interface range Gi0/0 - 2 R1(config-if-range)# ip pim dense-mode ; 接收者侧接口(R5 连 PC 的口)也要开 R5(config)# interface Gi0/3 R5(config-if)# ip pim dense-mode
步骤 4:模拟接收者加入 & 源发包
; 在 R5 接收者接口静态加入组(实验用,免去真 PC) R5(config)# interface Gi0/3 R5(config-if)# ip igmp join-group 239.1.1.1 ; 在 R1 源接口(或环回)用流量生成器发组播(实验也可直接 ping 组地址) R1# ping 239.1.1.1 source 192.168.1.10 repeat 5
步骤 5:验证
! PIM 邻居应看到对端 R3# show ip pim neighbor Neighbor Interface Uptime/Expires Ver DR 10.0.23.2 Gi0/0 00:20:10/00:01:20 v2 1/0 10.0.34.4 Gi0/1 00:20:10/00:01:21 v2 1/0 ! 组播路由表应有 (S,G) R5# show ip mroute 239.1.1.1 (192.168.1.10, 239.1.1.1), 00:00:05/00:02:50, flags: T Incoming interface: GigabitEthernet0/0 Outgoing interface list: GigabitEthernet0/3, Forward/Dense, 00:00:05/00:00:00
Incoming interface 是 RPF 接口(朝源),Outgoing interface list 是朝接收者的出接口且状态 Forward。看到这俩,恭喜,三层组播基础通了。实验2 IGMP 与 IGMP Snooping
目标验证 IGMP 查询器选举、成员加入/离开、报告抑制;再用一台 IOSvL2 交换机验证 IGMP Snooping 的二层转发表与 mrouter 端口。
2.1 IGMP 查询器与成员
; 接收者侧(R5 连 PC 口)开 IGMP 并加入 R5(config)# interface Gi0/3 R5(config-if)# ip igmp version 2 R5(config-if)# ip igmp join-group 239.1.1.1 ; 若同网段还有另一台路由器 R6,比较 IP 看谁当查询器 R5# show ip igmp interface Gi0/3 GigabitEthernet0/3 is up, line protocol is up Internet address is 192.168.5.1/24 IGMP is enabled on interface Current IGMP version is 2 IGMP query interval is 60 seconds IGMP querier timeout is 120 seconds IGMP querier is 192.168.5.1 (this system) ; 本机是查询器
2.2 看成员组与离开
! 查看本机已加入的组 R5# show ip igmp groups Group Address Interface Uptime Expires 239.1.1.1 Gi0/3 00:05:10 00:00:50 ; 取消加入,观察 Leave 报文与状态消失 R5(config)# interface Gi0/3 R5(config-if)# no ip igmp join-group 239.1.1.1 R5# show ip igmp groups ; 239.1.1.1 应消失
2.3 IGMP Snooping(二层交换机)
; 在 IOSvL2 交换机上 SW(config)# ip igmp snooping ; 默认已开,确认 SW(config)# vlan 10 SW(config-vlan)# ip igmp snooping ; 若 VLAN 内无路由器(纯二层),必须开 snooping querier SW(config)# ip igmp snooping querier SW(config)# ip igmp snooping vlan 10 querier address 192.168.5.254
! 验证 snooping 表 SW# show ip igmp snooping groups Vlan Group Type Version Port List 10 239.1.1.1 IGMP v2 Gi0/5 ; 仅成员端口 SW# show ip igmp snooping mrouter Vlan ports 10 Gi0/1 ; 路由器端口(上行)
实验3 PIM-DM 密集模式
目标理解 DM 的"扩散-剪枝"。观察无接收者分支如何被 Prune,有接收者分支如何 Forward;观察 Prune 定时器到期后的重新扩散。
3.1 配置
; 全网接口 dense-mode(参照实验1 步骤3,确保所有相关口都开) R1..R5(config)# ip multicast-routing R1..R5(config)# interface range Gi0/0 - 3 R1..R5(config-if-range)# ip pim dense-mode ; 只在 R5 接收者口加组成员 R5(config)# interface Gi0/3 R5(config-if)# ip igmp join-group 239.1.1.1
3.2 源发包,观察扩散
; R1 持续发组播 R1# ping 239.1.1.1 source 192.168.1.10 repeat 1000 ! 在"无接收者"的 R4 上看:接口应被 prune(不在出接口列表) R4# show ip mroute 239.1.1.1 (192.168.1.10, 239.1.1.1), 00:01:00/00:02:40, flags: T Incoming interface: GigabitEthernet0/0 Outgoing interface list: NULL ; 无出接口 = 已剪枝 ! 在 R3(通往 R5 的路径上)看:出接口应包含朝 R5 的口 R3# show ip mroute 239.1.1.1 Outgoing interface list: GigabitEthernet0/2, Forward/Dense, 00:01:00/00:00:00
3.3 观察 Prune 与重新扩散
! 看接口的 prune 状态(DM 会周期性重扩散) R4# show ip pim interface detail Gi0/0 ... Dense mode, Prune limit: 3 min ... ; 停掉 R5 的 join,再看 R3 出接口应变为 NULL(被 R5 剪枝) R5(config)# interface Gi0/3 R5(config-if)# no ip igmp join-group 239.1.1.1 R3# show ip mroute 239.1.1.1 ; 出接口列表变 NULL
实验4 PIM-SM 与静态 RP
目标配置 PIM-SM + 静态 RP(R3=3.3.3.3),完整走一遍"接收者建 RPT → 源注册 → RP 建 SPT → 流量下发 → 接收者切 SPT"的全过程,并读关键状态。
4.1 配置
; 1) 全网启用组播 + 接口 sparse-mode R1..R5(config)# ip multicast-routing R1..R5(config)# interface range Gi0/0 - 3 R1..R5(config-if-range)# ip pim sparse-mode ; 2) 全网一致指定静态 RP(指向 R3 环回) R1..R5(config)# ip pim rp-address 3.3.3.3 ; 3) 接收者侧加组 R5(config)# interface Gi0/3 R5(config-if)# ip igmp join-group 239.1.1.1
4.2 验证 RPT 建立(接收者侧)
! R5 应有 (*,G) 条目,出接口朝接收者,入接口朝 RP R5# show ip mroute 239.1.1.1 (*, 239.1.1.1), 00:00:30/stopped, RP 3.3.3.3, flags: SJC Incoming interface: GigabitEthernet0/0 (toward RP) Outgoing interface list: GigabitEthernet0/3, Forward/Sparse, 00:00:30/00:02:30 ; 沿途 R4/R3 也应有 (*,G) 朝 RP 上行 R4# show ip mroute 239.1.1.1 ; 显示 (*,G) 入接口朝 R3
4.3 源发包,走注册流程
; R1 发包 R1# ping 239.1.1.1 source 192.168.1.10 repeat 5 ! R1(源 DR)应出现 (S,G),并朝 RP 发 Register(先单播) R1# show ip mroute 239.1.1.1 (192.168.1.10, 239.1.1.1), 00:00:03/00:02:57, flags: T Incoming interface: GigabitEthernet0/0 Outgoing interface list: GigabitEthernet0/1, Register, 00:00:03/00:00:00 ; 单播注册中 ! R3(RP)应同时有 (*,G) 和 (S,G),并向源建树 R3# show ip mroute 239.1.1.1 (*, 239.1.1.1), 00:05:00/stopped, RP 3.3.3.3, flags: S (192.168.1.10, 239.1.1.1), 00:00:05/00:02:55, flags: T Incoming interface: GigabitEthernet0/0 (toward source)
4.4 观察 SPT 切换
; 接收者侧 R5 收到 (S,G) 流量后,默认立即切 SPT R5# show ip mroute 239.1.1.1 (192.168.1.10, 239.1.1.1), 00:00:10/00:02:50, flags: T Incoming interface: GigabitEthernet0/0 (now toward SOURCE, not RP) Outgoing interface list: GigabitEthernet0/3, Forward/Sparse, 00:00:10/00:02:30 ; 看 SPT 切换计数 R5# show ip pim topology 239.1.1.1 ; 可见 SPT 标志
(*,G) 朝 RP;② R1 出现 Register 出接口;③ R3 同时有 (*,G) 与 (S,G);④ 流量通后 R5 的 (S,G) 入接口从"朝 RP"变成"朝源"。四步全看到 = SM 真正跑通。实验5 动态 RP:Auto-RP 与 BSR
目标去掉静态 RP,分别用 Auto-RP 和 BSR 让全网自动发现 RP=3.3.3.3,对比两种机制并验证收敛。
5.1 方案 A:Auto-RP
; 先清掉静态 RP R1..R5(config)# no ip pim rp-address 3.3.3.3 ; 接口改为 sparse-dense-mode(让 224.0.1.39/40 以 dense 传递,破解鸡生蛋) R1..R5(config)# interface range Gi0/0 - 3 R1..R5(config-if-range)# ip pim sparse-dense-mode ; 在 R3(候选 RP)上宣告 R3(config)# ip pim send-rp-announce Loopback0 scope 10 ; 在 R3(兼映射代理)上发发现消息 R3(config)# ip pim send-rp-discovery Loopback0 scope 10 ; 若接口仍想用纯 sparse,则加:ip pim autorp listener(放行 39/40)
! 验证:全网应自动学到 RP R1# show ip pim rp mapping Group(s) 224.0.0.0/4 RP 3.3.3.3, Info source: 3.3.3.3, elected via Auto-RP
5.2 方案 B:BSR(推荐,标准)
; 清掉 Auto-RP,接口改回 sparse-mode R3(config)# no ip pim send-rp-announce Loopback0 R3(config)# no ip pim send-rp-discovery Loopback0 R1..R5(config)# interface range Gi0/0 - 3 R1..R5(config-if-range)# ip pim sparse-mode ; R3 同时当候选 BSR 和候选 RP R3(config)# ip pim bsr-candidate Loopback0 0 R3(config)# ip pim rp-candidate Loopback0 ; 其余路由器无需命令,自动从 BSR 消息学习
! 验证 BSR R1# show ip pim bsr-router PIMv2 Bootstrap information BSR address: 3.3.3.3 (?), priority 0 Uptime: 00:02:10 R1# show ip pim rp mapping RP 3.3.3.3, Info source: 3.3.3.3, elected via bootstrap
rp-candidate 即可。实验6 PIM-SSM 指定源组播
目标用 SSM 模型,接收者明确指定源 192.168.1.10 和组 232.1.1.1,验证全程无 RP、直接建 (S,G) 源树、流量通。
6.1 配置
; 1) 开启 SSM 默认范围 R1..R5(config)# ip pim ssm default ; 2) 接口 sparse-mode(SSM 跑在 sparse 框架,但无 RP 行为) R1..R5(config)# interface range Gi0/0 - 3 R1..R5(config-if-range)# ip pim sparse-mode ; 3) 接收者侧用 IGMPv3 指定源加入(无需 RP!) R5(config)# interface Gi0/3 R5(config-if)# ip igmp version 3 R5(config-if)# ip igmp join-group 232.1.1.1 source 192.168.1.10
6.2 源发包 & 验证
; R1 往 232.1.1.1 发 R1# ping 232.1.1.1 source 192.168.1.10 repeat 5 ! R5 应直接出现 (S,G),且无 (*,G)、无 RP 参与 R5# show ip mroute 232.1.1.1 (192.168.1.10, 232.1.1.1), 00:00:04/00:02:56, flags: sT ; 注意 's' = SSM Incoming interface: GigabitEthernet0/0 (toward source directly) Outgoing interface list: GigabitEthernet0/3, Forward/Sparse, 00:00:04/00:02:30 ; 确认 RP 表里 232 不在静态/动态 RP 范围 R5# show ip pim rp mapping 232.1.1.1 SSM domain, no RP required
mroute 条目标记含 s(SSM)、有 (S,G) 但无 (*,G)、RP mapping 显示"SSM domain, no RP required"。三者齐 = SSM 跑通,且无任何 RP 配置。实验7 Anycast RP 冗余
目标配置两台 RP(R3=3.3.3.3、R4=3.3.3.3 共用 anycast 地址),用 BSR 通告,MSDP 互联(用各自真实环回 Lo1),验证任一 RP 故障后组播不中断。
7.1 配置 anycast 地址与 BSR
; R3 和 R4 都配相同 anycast 环回(作为 RP 地址) R3(config)# interface Loopback0 R3(config-if)# ip address 3.3.3.3 255.255.255.255 R4(config)# interface Loopback0 R4(config-if)# ip address 3.3.3.3 255.255.255.255 ; 与 R3 相同! ; 各自再有一个唯一真实环回用于 MSDP R3(config)# interface Loopback1 R3(config-if)# ip address 33.33.33.33 255.255.255.255 R4(config)# interface Loopback1 R4(config-if)# ip address 44.44.44.44 255.255.255.255 ; 全网接口 sparse + BSR 通告 anycast RP R3(config)# ip pim rp-candidate Loopback0 R3(config)# ip pim bsr-candidate Loopback0 0 R4(config)# ip pim rp-candidate Loopback0 R4(config)# ip pim bsr-candidate Loopback0 0
7.2 配置 MSDP(用真实地址互联)
; R3 的 MSDP 邻居指向 R4 的真实地址 44.44.44.44 R3(config)# ip msdp peer 44.44.44.44 connect-source Loopback1 R3(config)# ip msdp originator-id Loopback1 ; R4 反向 R4(config)# ip msdp peer 33.33.33.33 connect-source Loopback1 R4(config)# ip msdp originator-id Loopback1
7.3 验证与故障演练
! MSDP 邻居 Up R3# show ip msdp peer Peer 44.44.44.44, state Up, local 33.33.33.33 ! 源在 R1 注册到"就近 RP",R5 会合到"就近 RP",MSDP 让两者互通 R1# ping 239.1.1.1 source 192.168.1.10 repeat 10 ; 演练:shutdown R3 的 Lo0,观察流量是否切到 R4(IGP 收敛后) R3(config)# interface Loopback0 R3(config-if)# shutdown ; R5 的 RP 映射应自动指向 3.3.3.3 但下一跳变为 R4,流量不中断 R5# show ip pim rp mapping ; RP 仍是 3.3.3.3,但路由走 R4
实验8 MSDP 跨域组播
目标把拓扑拆成两个 AS(域 A:R1-R2-R3,域 B:R4-R5),各自有 RP,通过 MSDP 让域 B 接收者收到域 A 源发的组播,理解 SA 消息跨域同步。
8.1 域划分与 RP
- 域 A:R1(源DR)、R2、R3(RP-A=3.3.3.3),AS 65001,内部 OSPF。
- 域 B:R4、R5(RP-B=5.5.5.5,接收者在此),AS 65002,内部 OSPF。
- R3 与 R4 之间用 eBGP 或静态互联(模拟跨 AS 链路),需互相可达(可借底层 IGP 或静态路由让环回通)。
8.2 配置域内 PIM-SM + RP
; 域 A R3(config)# ip pim rp-address 3.3.3.3 ; 或 BSR ; 域 B R5(config)# ip pim rp-address 5.5.5.5
8.3 跨域 MSDP
; RP-A 与 RP-B 建立 MSDP 邻居 R3(config)# ip msdp peer 5.5.5.5 connect-source Loopback0 R3(config)# ip msdp originator-id Loopback0 R5(config)# ip msdp peer 3.3.3.3 connect-source Loopback0 R5(config)# ip msdp originator-id Loopback0
8.4 验证
; 域 A 源发包 R1# ping 239.1.1.1 source 192.168.1.10 repeat 10 ; 域 B 接收者加入 R5(config)# interface Gi0/3 R5(config-if)# ip igmp join-group 239.1.1.1 ! RP-A 发出 SA,RP-B 收到并建跨域 (S,G) R5# show ip msdp sa-cache (192.168.1.10, 239.1.1.1) RP 3.3.3.3, Uptime 00:00:30 R5# show ip mroute 239.1.1.1 (192.168.1.10, 239.1.1.1), ... Incoming interface: Gi0/0 (toward R4/R3)
实验9 综合排错实战
目标模拟 5 类典型故障,训练"从现象到根因"的排错肌肉。每个故障给出症状 → 排查命令 → 根因 → 修复。
故障1:RPF 失败(最常见)
- 症状:
show ip mroute里(S,G)的入接口是 NULL 或显示 RPF 失败,收不到流。 - 排查:
show ip rpf <源IP>,若返回"fail"则单播路由缺失或下一跳不对。 - 根因:没通告源网段进 IGP,或用了默认路由导致 RPF 接口错乱。
- 修复:把源网段
network进 OSPF;必要时ip mroute <源> <掩码> <下一跳>静态指定 RPF 接口。
; 验证 RPF R5# show ip rpf 192.168.1.10 RPF information for 192.168.1.10 RPF interface: GigabitEthernet0/0 RPF neighbor: 10.0.35.3 Routing Table: ospf 1, 192.168.1.0/24
故障2:接口没开 PIM
- 症状:邻居看不到对端,
mroute无条目。 - 排查:
show ip pim interface看接口是否 listed、模式对不对。 - 修复:漏的接口补
ip pim sparse-mode/dense-mode。
故障3:RP 不可达 / RP 映射错误
- 症状:只有
(*,G)但没流量,或在 RP 上(S,G)不出现。 - 排查:
show ip pim rp mapping看 RP 是否正确、RP 环回能否 ping 通。 - 修复:修正静态 RP、或修复 BSR/Auto-RP;确保 RP 环回进 IGP。
故障4:二层 Snooping 把流量吃了
- 症状:路由器侧
mroute正常,但 PC 收不到;或交换机端口看不到组成员。 - 排查:
show ip igmp snooping groups、show ip igmp snooping mrouter。 - 修复:确认 snooping 已开、mrouter 端口正确;纯二层环境补
ip igmp snooping querier。
故障5:SSM 用错版本 / 没指定源
- 症状:232 组不通,
mroute只有(*,G)或无条目。 - 排查:接口是否
ip igmp version 3;加入命令是否带source;是否配ip pim ssm default。 - 修复:补齐 v3 + source + ssm 范围。
附录 A 命令速查表
| 功能 | 命令 |
|---|---|
| 全局启用组播路由 | ip multicast-routing |
| 接口开 PIM 密集 | ip pim dense-mode |
| 接口开 PIM 稀疏 | ip pim sparse-mode |
| 接口开 PIM 稀疏-密集 | ip pim sparse-dense-mode |
| 静态指定 RP | ip pim rp-address <IP> [ACL] |
| Auto-RP 宣告候选 | ip pim send-rp-announce <接口> scope <n> |
| Auto-RP 映射代理 | ip pim send-rp-discovery <接口> scope <n> |
| 放行 Auto-RP 组 | ip pim autorp listener |
| BSR 候选 | ip pim bsr-candidate <接口> <hash> |
| RP 候选 | ip pim rp-candidate <接口> |
| 开启 SSM 默认范围 | ip pim ssm default |
| IGMP 版本 | ip igmp version 2|3 |
| 静态加入组(测试) | ip igmp join-group <G> [source <S>] |
| IGMP Snooping 查询器 | ip igmp snooping querier |
| MSDP 邻居 | ip msdp peer <对端IP> connect-source <接口> |
| 静态 RPF 路由 | ip mroute <源> <掩码> <下一跳/接口> |
常用查看命令
| 看什么 | 命令 |
|---|---|
| PIM 邻居 | show ip pim neighbor |
| 组播路由表 | show ip mroute [group] |
| PIM 接口 | show ip pim interface |
| RP 映射 | show ip pim rp mapping |
| BSR 状态 | show ip pim bsr-router |
| RPF 检查 | show ip rpf <源IP> |
| IGMP 接口/组 | show ip igmp interface / show ip igmp groups |
| Snooping 组/路由器口 | show ip igmp snooping groups / show ip igmp snooping mrouter |
| MSDP 邻居/SA | show ip msdp peer / show ip msdp sa-cache |
| PIM 拓扑细节 | show ip pim topology [group] |
附录 B 术语表
| 缩写 | 全称 | 一句话 |
|---|---|---|
| ASM | Any-Source Multicast | 任意源组播,接收者只认组不认源 |
| SSM | Source-Specific Multicast | 指定源组播,必须指定 (S,G),无 RP |
| IGMP | Internet Group Management Protocol | 主机-路由器间"举手"协议 |
| PIM | Protocol Independent Multicast | 路由器间组播路由,借用单播路由 |
| DM / SM | Dense / Sparse Mode | 密集(洪泛剪枝) / 稀疏(经RP会合) |
| RP | Rendezvous Point | 会合点,SM 中源与接收者中介 |
| RPT / SPT | 共享树 / 源树 | (*,G) 树 / (S,G) 最短路径树 |
| RPF | Reverse Path Forwarding | 反向路径转发检查,防环防重 |
| Assert | — | 多路由器争一路时的转发权裁决 |
| BSR | Bootstrap Router | 标准动态 RP 发现机制 |
| Auto-RP | — | Cisco 私有动态 RP 发现 |
| MSDP | Multicast Source Discovery Protocol | 域间/Anycast RP 间同步源信息 |
| DR | Designated Router | 指定路由器,源侧注册/接收侧加入的干活者 |
| SPT 切换 | SPT Switchover | RPT 收到流量后切到直达源的 SPT |
附录 C 写给进阶者的话
恭喜你走完这本手册。如果还想继续深挖,方向有:① BiDir-PIM(双向共享树,无注册过程,适合很多源 many-to-many,如视频会议);② MLD / PIMv6(IPv6 组播,命令几乎同构);③ 组播流量工程(用 MBGP 携带组播路由、与单播路由分离);④ 组播 OAM(mtrace 追踪组播路径,定位断点神器);⑤ 在真实 Cisco 设备与 EVE-NG 的差异(部分 TCAM / 硬件复制行为需真机验证)。
组播不是"高级而冷门"的技术——它恰恰是视频、行情、会议这些最"烧带宽"的业务背后的功臣。把本手册的 9 个实验在 EVE-NG 上亲手敲一遍,你会对"一份流量、按需复制"有肌肉记忆级别的理解。祝你实验顺利,包包 Forward,树树 SPT!