224.0.0.0-239.255.255.255 组播IP地址是D类。
224.0.0.0-224.0.0.255 本地网络使用,不进行路由转发。
232.0.0.0–232.255.255.255为特定源组播地址
组播mac地址的高24bit为0x01005e,mac 地址的低23bit为组播ip地址的低23bit。

源发现
接收者发现
拓扑发现(组播路由器之间的拓扑,网络单播路由信息)
分发树生成
IGMP(V1,V2,V3)
v1 Membership Query, Membership Report
当组成员离开组播组时,它只是简单地不再回应成员关系查询。hold time 130s。
V2 membership query,membership report, Leave Group
路由器收到Leave Group消息之后,立即进行特定组查询。
查询器选举机制:IP地址最小的路由器将成为查询器
V3 SSG 允许主机指定它要从其接收通信流量的主机对象。新增了特定源组查询报文(Group-and-Source-Specific Query)。
IGMPv1不支持查询器选举,需要依靠组播路由协议PIM选举。同网段所有组播设备上需配置相同版本的IGMP。
IGMP Proxy 通常被部署在 IGMP Querier 和 Multicast Receiver 间的三层设备上。在IGMP代理设备的上游接口上配置IGMP Proxy功能,在下游接口上配置IGMP功能。
配置IGMP Proxy示例(主备模式)
IGMP Snooping 通常被部署在 IGMP Querier 和 Multicast Receiver 间的二层设备上。
配置基于VLAN的IGMP Snooping示例
IGMP Snooping Proxy也部署在二层设备上。
配置基于VLAN的IGMP Snooping Proxy
有些情况下,成员主机只能运行IGMPv1或IGMPv2,为了使这部分主机也能够使用SSM服务,可以在组播交换机上配置IGMP SSM Mapping功能。
配置IGMP SSM Mapping功能示例
希望长期稳定的接收组播组,可以配置静态加入组播组示例
[R3]int g0/0/1
[R3-GigabitEthernet0/0/1]pim sm
[R3-GigabitEthernet0/0/1]igmp enable
[S2]igmp-snooping enable
[S2]vlan 10
[S2-vlan10]igmp-snooping enable
PIM-SM/DM
PIM-SM根据服务模型又分为:PIM-SM(ASM)和PIM-SM(SSM)
PIM通常版本为PIMv2,封装在IP报文中,协议号为103,组播地址为224.0.0.13.
组播路由表项只能基于PIM(S,G)路由表项生成。PIM(*,G)路由表项缺少入接口信息无法形成组播路由表。
MDT: 在PIM组播域中,以组播组为单位建立从组播源到组成员的点到多点的组播转发路径,由于组播转发路径呈现树型结构,也称为组播分发树(MDT,Multicast Distribution Tree)。MDT又分为SPT(源树/最短路径树)和RPT(共享树)。
PIM路由表项即通过PIM协议建立的组播协议路由表项,PIM网络中存在两种路由表项:

PIM路由表中Flag字段的意义:
| Flag值 | 描述 |
|---|---|
| 2msdp | RP最近收到注册消息并学习到(S,G)信息,准备通知MSDP,在下一个SA消息中包含该(S,G)表项 |
| act | 已经有实际数据到达的组播路由表项 |
| del | 准备删除的组播路由表项 |
| exprune | RPT上的表项被剪枝且RPT上没有接收者对源感兴趣 |
| ext | 包含了由其他组播路由协议提供的出接口的路由表项 |
| loc | 在于组播源网段直连的设备上的组播路由表项 |
| msdp | RP最近从收到的MSDP SA消息中学习到的路由表项 |
| niif | 为确定入接口的路由表项 |
| nonbr | 找不到朝向RP或源的上游邻居地址(link-local地址)的路由表项 |
| none | 无任何标志的路由表项 |
| rpt | 处于共享树上但不使用共享树数据的路由表项 |
| sg_rcvr | 表示路由器有源S的本地(S,G)接收者,且PIM是下游接口的Owner |
| sgjoin | 表示路由器有源S的本地(S,G)接收者,但PIM不是下游接口Owner |
| spt | 最短路径树上的路由表项 |
| swt | 处在向SPT切换过程中的路由表项 |
| upchg | 路由变化的标志,表示当前的表项在适用原来的上游转发数据,正在等待数据从新的接口到来 |
| wc | 表示(*,G)表项 |
PIM路由表项与组播路由表项
在不同的组播路由器上,组播路由表项会基于不同的表项汇总形成

PIM-DM在形成SPT的过程中,除了扩散(Flooding)、剪枝(Prune)机制外,还会涉及邻居发现(Neighbor Discovery)、嫁接(Graft)、断言(Assert)和状态刷新(State Refresh)机制。
PIM-DM模式首次形成组播分发树主要依赖扩散机制、剪枝机制、断言机制与DR选举机制。
在DM模式中,DR除了担任IGMPv1的查询器外,没有其它作用。
当某组播源S开始向组播组G发送数据时,PIM路由器接收到组播报文后,首先根据单播路由进行RPF检查,如果检查通过则创建一个(S,G)表项,然后数据向网络上所有下游PIM-DM节点转发,这个过程称为扩散(Flooding)。PIM-DM形成的(S,G)表项有老化时间(默认210秒)。
PIM-DM对没有组播数据转发的分支进行Prune剪枝操作,只保留包含接收者的分支。如果下游节点没有组播成员,则向上游节点发Prune剪枝消息,通知上游节点不用再转发数据到该分支。上游节点接收到Prune剪枝消息后,就将相应的接口从某组播转发表项(S,G)对应的输出接口列表中至于Prune状态(列表中删除),剪枝过程继续直到PIM-DM中仅剩下了必要的分支,这就建立了一个组播源S为根的SPT。
剪枝的触发条件:



当下游接口被剪枝后:

PIM-DM通过嫁接机制,使得有新组成员加入的网段快速得到组播报文。
叶子路由器通过IGMP了解到与其相连的用户网段上,组播组G有新的组成员加入。随后叶子路由器会基于本地组播路由表向上游发送Graft报文,请求上游路由器恢复相应出接口转发,将其添加在(S,G)表项下游接口列表中。上游路由器恢复向该下游节点转发的状态的同时,会向其发送一个Graft-Ack消息。如果下游节点没有收到应答报文,将重新发送Graft报文直到得到确认为止。




触发规则:一台路由器的OIL列表接口收到一份多播信息,会触发发送PIM assert报文。
网络中的各路由器通过发送Assert报文选出一条最优的路径,获胜路由器称为该(S,G)项的上游邻居,由它负责该(S,G)组播报文的转发,而其他落选路由器则剪掉对应的接口以禁止转发信息。
通过断言机制的选举规则将决定组播路由器的转发行为:
选举规则:
PIM路由器在接收到邻居路由器发送的相同组播报文后,会向该网段发送断言(Assert)报文,进行Assert选举。Assert报文内会携带到组播源的单播路由前缀、路由优先级与开销。
Assert选举失败的设备会抑制转发,并将这种抑制转发的状态保持一段时间,这段时间就被称为Assert保持时间(默认180秒)。Assert保持时间超时后,竞选失败的设备会恢复转发从而触发新一轮竞选。
1、Hello报文。
主要用于PIM邻居的发现、保活,同时也会协商PIM的相关参数。
2、Join/Prune(加入/剪枝)报文
John报文用于加入组播分发树,Prune用于告诉上游端口不用给自己发送组播流量,相当于修剪组播分发树。
3、Graft(嫁接)报文
用于通告上游路由器加入组播分发树。因为某些网络没有组播组成员,因此这些分支会被pruned掉,但如果突然有新的组播组成员要求加入组播组,这时组播组成员会主动发送一个report报文给DR,DR收到后不是发送join报文来加入树,而是改为发送graft报文来嫁接到组播树。Graft报文源地址为本地接口IP地址,以单播形式发送,目的地址为上游路由器/RPF邻居的IP地址。
Graft/Graft-Ack报文与Join/Prune消息格式相同,仅部分字段取值有差异。
Type: Graft报文值为6,Graft-Ack报文值为7
Upstream Neighbor Address: 在Graft消息中填写上游邻居接口地址,在Graft-Ack消息中填写Graft消息发送者地址。
Holdtime: 0
4、Graft-Ack报文
一个设备在收到Graft报文后,需要以单播形式给对方回送Graft-Ack报文,以便告知对方收到Graft报文。
5、Assert(断言)报文
主要用于断言机制。即当一个网络中有多个PIM可以发送组播流量时,断言机制可以使得所有的组播路由器选举处一个路由器发送组播流量,这样可以减少网络内的组播流量。
使用PIM的位置:
1 连接组播源的接口
2 组播路径经过的接口
+++++++++++++++++++++++++++++++
pim // 进入PIM视图
multicast routing-enable // 在路由器全局开机组播路由功能
interface G 0/0/0 // 进入接口模式
pim dm // 设置接口为PIM的DM模式
+++++++++++++++++++++++++++++++
Display pim routing-table // 查看PIM-DM组播路由表
Display pim neighbor // 查看PIM邻居
Display pim interface verbose // 查看PIM接口配置
PIM-SM(ASM)模式首次形成组播分发树主要依赖RPT构建机制,组播源注册机制与DR选举机制。

1、Hello报文
用于PIM邻居发现,协议参数协商,PIM邻居关系维护等。

Version: PIM版本,为2
Type: Hello类型值为0
Reserved: 发送时设为0,接收时忽略
Checksum: 校验和
Hello Option: Hello参数,采用TLV格式
| 参数类型值 | 名称 |
|---|---|
| 1 | holdtime |
| 2 | LAN Prune Delay(传递Prune消息的延迟时间), Override Interval(剪枝否决时间), T(join消息抑制能力位) |
| 19 | DR Priority |
| 20 | Generation ID随机数,表示邻居状态 |
| 21 | State Refresh Capable状态刷新时间间隔 |
| 24 | Address List PIM接口的从地址列表 |
2、Join/Prune报文
加入报文用于加入组播分发树,剪枝则用于修剪组播分发树。报文源地址为本地接口地址,目的地址为224.0.0.13,TTL等于1.

Group J/P Record字段格式:

Type: 值为3
Upstream Neighbor Address: 接收消息的路由器进行Join/Prune操作的下游接口地址。
Holdtime: 接收Join/Prune消息的路由器保持相应接口加入/剪枝状态的时间。
3、Assert报文
用于断言机制。以组播形式发送。

Type: 值为5
Source Address: 组播源地址或者RP地址
R: 如果竞选(*,G)表项的唯一转发者,该位设为1;如果竞选(S,G)表项的唯一转发者,该位设为0.
上述三种报文,同DM模式格式和作用相同,此外,SM模式特有的报文有:
4、Register注册报文
该报文是与组播源直接相连的第一跳路由器发送给RP的,主要是通知RP,组播源已经上线,可以开始组播流量的分发了。

Version: PIM版本,为2
Type: Register类型值为1
Reserved: 发送时设为0,接收时忽略
Checksum: 校验和
B: 边界位
N: 空注册位
Reserved2: 发送时设为0,接收时忽略
Multicast Data Packet: 组播数据报文。
5、Register-Stop注册停止报文
该报文是RP发往组播源端,主要用于告诉组播源端路由器停止发送组播流量。
以下三种情况时会发送该报文:
①已经没有下游接受者。
②RP本身不再提供该组的组播服务。
③组播路径已经由RPT切换到SPT。

Version: PIM版本,为2
Type: Register-Stop类型值为2
Reserved: 发送时设为0,接收时忽略
Group Address: 组播组地址
Source Address: 组播源地址
6、Bootstrap自举报文
该报文是想要竞选BSR的路由器发送的,也用来向全网通告C-RP的信息。当网络使用动态RP时,所有配置了C-BSR的路由器会发送Bootstrap报文,用于参加BSR竞选。竞选结束后,获胜者将继续发送该报文携带RP-Set信息给它的PIM邻居,最终达到全网泛洪。报文以组播形式发送。

Group-RP Record格式:

Type: 值为4
Fragment Tag: 随机数,用来区分Bootstrap消息
Hash Mask Length: C-BSR的Hash掩码长度
RP-Count: 希望为该组服务的C-RP的总数
Frag RP-cnt: 在本段内包含的C-RP地址的个数。对于一个给定的组来说,如果Bootstrap消息分片,Frag RP-cnt将便于RP-Set分片。
RP-holdtime: C-RP发出的advertisement消息的老化时间,表示C-RP的有效时间。
7、Candidate-RP-Advertisement候选RP通告
该报文用于C-RP向BSR发送选举信息,包括IP地址、优先级和服务的组范围。以单播形式发送。

Type: 值为8
Holdtime: Advertisement消息的老化时间
静态RP:在网络中的所有PIM路由器上配置相同的RP地址,静态指定RP的位置
动态RP:通过选举机制在多个C-RP(Candidate-RP,候选RP)之间选举出RP
静态RP或动态RP在设置时均可以指定该RP为哪些组播组提供服务。
一个RP可以服务于多个组播组,但是一个组播组只能对应一个RP。
一台设备可以同时充当C-RP和C-BSR。
动态选举RP会涉及两类角色C-BSR(Candidate-Bootstrap Router)与C-RP(Candidate-RP)。
BSR选举
优先级较高者获胜(优先级数值越大优先级越高)。
如果优先级相同,IP地址较大者获胜。
RP选举
根据Bootstrap消息中的RP Set信息,为特定组播组选举其对应的RP。选举规则:
与用户加入的组地址匹配的C-RP服务的组范围掩码最长者获胜。
如果以上比较结果相同,则C-RP优先级较高者获胜(优先级数值越小优先级越高)。
如果以上比较结果都相同,则执行Hash函数,计算结果较大者获胜。
如果以上比较结果都相同,则C-RP的IP地址较大者获胜。


先比较优先级再比较接口IP地址。
DR(源端DR,组成员端DR)作用:
1 .在最后一跳路由器给IGMPV1充当查询器;
2 .在最后一跳路由器只有DR路由器才会向RP建立RPT树(避免收到重复组播流);
3 .在最后一跳路由器由DR发出RPT树向SPT树切换;
4 .在第一跳路由器由DR向RP发出注册。

在成员端网络,如果有多台组播路由器,则组播路由器的下行接口需要同时开启IGMP与PIM。
RPT(RP Tree/共享树)是一棵以RP为根,以存在组成员关系的PIM路由器为叶子的组播分发树。
当网络中出现组成员(用户主机通过IGMP加入某组播组G)时,组成员端DR向RP发送Join报文,在通向RP的路径上逐跳创建(*,G)表项,生成一棵以RP为根的RPT。

在RPT构建过程中,PIM路由器在发送Join报文时,会进行RPF检查:查找到达RP的单播路由,单播路由的出接口为上游接口,下一跳为RPF邻居。Join报文从组成员端DR开始逐跳发送,直至到RP。

// RPT-共享树,SPT-源路径树。
当网络中出现活跃的组播源(组播源向某组播组G发送第一个组播数据)时,第一跳路由器(源端DR)将组播数据封装在Register报文中单播发往RP,在RP上创建(S,G)表项,注册源信息。RP接收到Register报文,将其解封装,建立(S,G)表项,并将组播数据沿RPT发送到达组成员。
注册报文和注册停止报文在组播源活跃期间会一直发送。源端DR会在组播源活跃期间每个55s发送一次空的注册报文给RP。
1 RP如果已经存在关于组播源的(S,G)表项,则会发送注册停止报文(表示自己已经有此组播源表项)
2 RP如果不存在关于组播的(*,G)表项,则会发送注册停止报文(表示此组播源下无成员,不需要)
3 RP如果存在关于组播的(*,G)表项,但是没有关于组播源的(S,G)表项,则不会发送注册停止报文(表示自己需要组播源注册建立SPT树)
源端DR在发送空的注册报文后,如果5s内收不到注册停止报文,就会发送带组播流量的单播注册报文到RP。
PIM-SM允许RP或组成员端DR通过触发SPT切换来减轻RP的负担。
1 RP触发SPT切换
a. RP收到源端DR的注册报文后,将封装在Register报文中的组播报文沿RPT转发给组成员,同时RP会向源端DR逐跳发送Join报文。发送过程中在PIM路由器创建(S,G)表项,从而建立了源端DR到RP的SPT。
b. SPT树建立成功后,源端DR直接将组播报文转发到RP,使源端DR和RP免除了频繁的封装与解封装。同时RP发送注册停止报文到源端DR。
2 组成员端DR触发SPT切换
缺省情况下,设备一般未设置组播报文转发速率的阈值(为0),RP或者组成员端DR在接收到第一份组播报文时都会触发各自的SPT切换。设置了阈值,则一旦发现(S,G)报文的转发速率超过阈值时,触发SPT切换:
a. 组成员端DR向源端DR逐跳发送Join报文并创建(S,G)表项,建立源端DR到组成员DR的SPT。
b. SPT建立后,组成员端DR会沿着RPT逐跳向RP发送剪枝报文,删除(*,G)表项中相应的下游接口。剪枝结束后,RP不再沿RPT转发组播报文到组成员端。
c. 如果SPT不经过RP,RP会继续向源端DR逐跳发送剪枝报文,删除(S,G)表项中相应的下游接口。剪枝结束后,源端DR不再沿“源端DR-RP”的SPT转发组播报文到RP。
如果组播在一段时间后(默认210秒)没有流量则SPT树会消失,成员端DR恢复到RP的RPT树。

剪枝

multicast routing-enable
interface G 0/0/0
pim sm
pim
static-rp 10.1.1.1
c-rp LoopBack 0
c-bsr LoopBack 0
+++++++++++++++
display pim rp-info
display pim routing-table
适合网络中的用户预先知道组播源的位置,直接向指定的组播源请求组播数据的场景。
IANA保留的SSM组地址范围为232.0.0.0/8.
MSDP属于PIM家族,互联多个IPv4 PIM稀疏模式(PIM-SM)域,使PIM-SM有集合点(RP)冗余和域间组播。
MSDP(Multicast Source Discovery Protocol,组播源发现协议)主要作用是帮助生成AS域间的组播分发树
提供一套专门供组播进行RPF检查的单播路由。
IGMP Snooping 控制组播数据在二层按需转发。




IPTV
