组播
IP数据传输三种方式:单播、组播、广播
- 组播网络也需要单播可达(因为需要RPF检查)
- 现网中组播:IPTV
- 组播较单播,节省带宽
协议组播:各协议的Hello、BSR自举报文等(TTL=1,逐跳发送)
普通组播:从源到接收者
组播IP地址
- 组播IP地址 = D类地址(1110打头) = [224.0.0.0,240.0.0.0)
- 仅作为目的地址,不作为源地址
- 组播地址没有掩码
224.0.0.1 节点
224.0.0.2 路由器
224.0.0.5 OSPF路由器
224.0.0.6 OSPF DR/BDR
224.0.0.13 PIM路由器
224.0.0.18 VRRP
224.0.0.22 IGMPv3成员关系报告
- VRRP中 报文DIP=224.0.0.18 MAC=0100-5E00-0012
虚拟IP=配置 MAC=0000-5E00-0101(vrid)
组播地址范围 224.0.0.0/4
224.0.0.0/24 协议组播地址段(预留,TTL=1)
[224.0.1.0,239.0.0.0) ASM+SSM
其中232.0.0.0/8 SSM
239.0.0.0/8 私有组播组地址
0.0.0.0 作为组地址=普遍组查询(DIP=224.0.0.1)
作为SIP,表示IGMP(Snooping)Proxy代发的报文
组播MAC地址
- 三层:组播组IP地址 → 二层:组播MAC
- 为什么需要组播MAC?
单播可以通过ARP请求得到对方MAC
组播只能通过自己生成MAC,封装二层头部
组播MAC = 0100 - 5E +0(1bit) +组播IP后23bit
前25bit固定
- MAC地址第一个字节末位 =0 单播MAC =1 组播MAC
- 组播IP地址前4位固定(1110),32-4-23=5bit。因此有25=32个IP→相同组播MAC
IPv6 末32位映射
组播MAC = 3333-xxxx-xxxx
写出0100-5E01-0101对应的32个组播IP地址
MAC后23bit = 000 0001 0000 0001 0000 0001 组播IP末23bit
组播IP 1110打头
因此,组播IP= 1110 XXXX X000 0001 0000 0001 0000 0001
名词解释
ASM Any-Source Multicast 任意源组播
SSM Source-Specific Multicast 特定源组播
IGMP Internet Group Management Protocol 互联网组管理协议
PIM Protocol Independent Multicast 协议无关组播
PIM-DM PIM-Dense Mode PIM密集模式
PIM-SM PIM-Sparse Mode PIM稀疏模式
RPF Reverse Path Forwarding 反向路径转发(检查)
RP Rendezvous Point 聚集点(路由器)
SPT Source Path Tree 源路径树
RPT Rendezvous Point Tree RP树
BSR BootStrap Router 自举路由器
组播基本概念
组播源
Server为组播源,目的地址=组播组地址
- 组播源可以向多个组播组发送数据
- 多个组播源也可以向一个组播组发送数据
- 组播源不需要运行组播协议
组播组
每一个D类地址是一个组播组。组播源向组播组发送组播数据,接收者加入组播组接收组播数据
组播路由器
运行组播路由协议的路由器,图中R1、R2、R3为组播路由器。其中,
头一跳路由器first-hop router:R1
最后一跳路由器last-hop router:对于PC1是R2,对于PC2是R3
- 头一跳路由器在PIM-SM中用于组播源注册
- 最后一跳路由器运行IGMP协议
组播路由协议
常见的组播路由协议:IGMP、PIM、MOSPF、MSDP、MBGP等
PIM协议又包括:PIM-DM、PIM-SM、PIM-SSM
组播 路由表
display multicast routing-table 全局组播路由表
display pim routing-table PIM组播路由表
display igmp routing-table IGMP组播路由表
- 最后一跳路由器, 仅开启IGMP时,有IGMP组播路由表
同时开启IGMP和PIM时,没有IGMP组播路由表,只能看IGMP组
display igmp group 查看IGMP组表
1. 组播协议路由表
PIM路由表
display pim routing-table
- PIM路由表记录了组播路由表项:组播源地址、组播组地址、上游接口、下游接口
- (*,G)=(任意组播源,组播组)
(S,G)=(组播源地址,组播组)
2. IGMP路由表
display igmp routing-table
- IGMP运行在接收者和最后一跳路由器之间,且此间可以不运行PIM协议
- 图中可以看出,路由器通过PC发送的IGMP协议接收了两个组播组的数据
(10.10.10.10,232.1.1.3)PIM-SSM+IGMPv3的特定源组播 和
(*,229.1.2.3)的任意源组播
3. 组播路由表
display multicast routing-table
- 组播路由表是全局唯一的组播数据转发路由表,它的内容来自于各个组播协议路由表(类似于IP路由表数据来自于ospf、is-is、bgp的优选路由)
- 图中看到有2个来自不同协议发现的下游接口,可以参考图7-1中R2路由器,连接PC端靠IGMP发现了下游接口,连接下游路由器R3靠PIM协议发现的下游接口
4. 组播转发表
display multicast forwarding-table
- 类似于FIB表
组播模型ASM & SSM
ASM任意源组播(*,G)
接收者事先不知道源
源和接收者二者独立工作
接收者加组/离组,和源无关
支持ASM的协议:PIM-DM、PIM-SM(ASM) IGMPv1、IGMPv2、IGMPv3
SSM特定源组播(*,G)
接收者事先知道源
接收者在PC上指定源
支持SSM的协议:PIM-SSM IGMPv3
- SSM使用特定的地址:232.0.0.0/8网段
域内、域间、跨AS域组播
1. 单PIM域内组播
组播域内:PIM(必须)
最后一跳路由器和接收者之间:IGMP(必须)
Switch A的VLAN内部属IGMP Snooping/IGMP Snooping proxy(可选)
2. 跨PIM-SM域组播
组播域之间(RP-RP之间):MSDP
如果使用PIM-SSM,则不需要MSDP协议
3. 跨AS域组播
- PIM协议依赖于单播路由表,组播转发路径与单播转发路径是一致的
因此,在接收者和组播源跨AS的情况下,需要在AS边缘路由器上部属MBGP协议,以生成一张独立于单播BGP路由表的组播BGP路由表
★RPF检查(Reverse Path Forwarding反向路径转发)
作用:
对于流量:防环
对于建树:形成正确的组播转发表项
- 单播中,通过目的地址,确定最佳转发路径
- 组播中,目的地址=组播地址。因此只能靠组播源地址确定转发路径是正确的
哪些过程需要RPF检查?
- R收到组播流量
- R主动建树 朝着RP建RPT树 / 朝着S建SPT树
- R收到Bootstrap报文(携带BSR IP)进行RPF检查
RPF检查:收到组播流量(有源IP)的接口,是否= RPF路由的接口
RPF路由优选规则:
组播静态路由、MBGP路由表(组播BGP)、单播路由表中各选一条最优的,
最长匹配(若配置) > 路由优先级 > 组播静态路由 > MBGP > 单播路由表
- 若匹配到单播路由,且有多个下一跳,以下操作方式3选1
优选下一跳IP↑(默认)
最长匹配
负载分担(基于S、基于G、基于S/G),不RPF检查
[R] multicast longest-match //最长匹配,默认没配
组播静态路由
[R] ip rpf-route-static x.x.x.x/xx y.y.y.y
MBGP(组播BGP)
[R] bgp 100
ipv4-family multicast
peer x.x.x.x enable //BGP传递组播路由
- 组播静态路由、MBGP传递的路由,仅用于改变RPF邻居(从而改变RPF接口)
流量入接口、(S,G)入接口、RPF接口
为了快速转发,流量到来时,先比较流量入接口、(S,G)入接口是否一致,不一致再RPF检查
R无表项、仅(*,G)表项时,进行RPF检查,计算RPF接口
R有(S,G)表项时,
流量入接口=(S,G)入接口,说明正确,所有出接口转发数据
流量入接口≠(S,G)入接口,说明存在错误,进行RPF检查
RPF检查结果:RPF接口=(S,G)入接口,说明流量入接口错误,丢弃
RPF检查结果:RPF接口=流量入接口,说明(S,G)表项入接口过时,更新
为什么ospf的hello、LSU不需要RPF检查?会不会环?
hello和bootstrap报文对比来看
hello报文TTL=1,只在邻居之间发送
bootstrap报文由C-BSR逐跳、组播、周期发送,其他PIM路由器都会转发(可能环)
那,LSU(LSA)为什么不会成环发送?
比如X路由逆时针传了一圈,
- 但R3接收但不会使用这条LSA(因为LSA“一样新”,优选本地始发的)
- 即使使用,也不会再发给R2(因为R3收到关于这条LSA的LSAck后,只会周期1800s泛洪)
组播协议各类time
IGMPv1
普遍组查询周期60s 最大响应时间10s 删表时间130s
IGMPv2、v3
普遍组查询周期60s(首次成为查询器第0、15s发2次) 最大响应时间10s
特定组查询、特定组/源查询1s*2次(第0、1s) 最大响应时间1s*2=2s删表
异常离组(未发离组报文),130s删表
MLD 普遍组查询周期125s
其他查询器存活时间 = 健壮系数*普遍组查询周期+1/2*最大响应时间=2*60+1/2*10
= 125s(超时后认为查询器失效,重新选举)
PIM Hello=30s Hold Time=3.5*Hello=105s
Join周期60s 删表时间60*3.5=210s
剪枝周期210s(被剪枝接口重新出现在下游接口) 剪枝延迟=3s
状态刷新周期60s(抑制剪枝接口出现)
断言AT计时器180s(超时前保持剪枝)
注册抑制计时器60s(超时源DR向RP单播注册。第55s源DR发送空注册报文,RP若无接收者,回复注册停止报文)
Bootstrap周期60s “最优”C-BSR等待130s成为BSR
C-RP Advertisement周期60s BSR上RP映射超时时间150s
IGMP
Internet Group Management Protocol
- 基于IP报文,协议号=2
- IGMP协议工作在接收者和最后一跳路由器之间,加组/离组
IGMP配置
[R] multicast routing-enable //全局使能组播
[R-G] igmp enable