个人认为,理解报文就理解了协议。通过报文中的字段可以理解协议在交互过程中相关传递的信息,更加便于理解协议。
因此本文将在PIMv2协议报文的基础上进行介绍,以详细介绍组播协议PIM。
这里需要说明的是,一下内容都针对的是ASM模型下的PIM协议。SSM模型类似于PIM-SM但不做说明。
关于PIMv2-DM相关内容,可参考2005年发布的RFC3973等相关内容
关于PIMv2-SM相关内容,可参考2006年发布的RFC4601等相关内容。
组播PIM协议(Protocol Independent Multicast,协议无关组播协议),主要是相比于其他组播路由协议DVMRP(Distance Vector Multicast Routing Protocol,距离矢量组播路由协议)和MOPSF(Multicast OSPF,组播OSPF)协议而言。
DVMRP依靠于RIP协议实现,MOPSF依靠OSPF协议实现。而PIM协议仅依靠路由转发表即可,而无需关注实现路由的协议。
相同的这3种协议都是域内组播路由协议。域外组播路由协议可学习MSDP协议(Multicast Source Discovery Protocol,组播源发现协议)。
第2章节基本述了PIM概念的相关内容,第3和4章节描述了PIM协议报文的相关内容。可直接阅读相关内容。
目录
PIM
- 目录
- 1.组播基础内容
-
- 1.1.组播IP
- 1.2.组播MAC
- 2.PIM基本概念
-
- 2.1.RPF
- 2.2.源树-SPT
- 2.3.共享树-RPT
- 2.4.工作模式-DM
- 2.4.工作模式-SM
- 3.PIM协议
-
- 3.1.PIM-Hello
- 3.2.PIM-DM的加组Join/剪枝Prune
- 3.3.PIM-DM的嫁接Graft/Graft-Ack
- 3.4.PIM-DM的状态刷新State Refresh
- 3.5.PIM-DM/SM的断言Assert
- 4.PIM-SM
-
- 4.1.PIM-SM模型
- 4.2.PIM-SM的注册register/register-stop
- 4.3.PIM-SM的Bootstrap/Candidate-RP-Advertisement
- 4.4.PIM-SM的RPT树向SPT树的切换
- 5.PIM行为+配置
-
- 5.1.PIM-DM组播处理
- 5.2.PIM-SM组播处理
- 5.3.PIM配置
1.组播基础内容
1.1.组播IP
传统分类网络进行地址分配时,将IPv4网络分为5类。
A类:1.0.0.0-126.0.0.0
B类:128.0.0.0-191.254.0.0
C类:192.0.0.0-223.255.255.0
D类:224.0.0.0-239.255.255.255
E类:240.0.0.0-239.255.255.255,保留地址
Note:224=1110 0000(2进制);239=1110 1111(2进制)。也即组播IP前4bits固定为1110
其中D类地址称为组播IP。虽然目前CIDR无类域间路由和VLSM可变长子网掩码的出现淡化了IP分类,但组播IP范围并未发生变化。
其中组播IP又可进行如下划分
224.0.0.0-224.0.0.255==预留永久组播地址
//通常为协议所使用,例如OSPFv2使用224.0.0.5和224.0.0.6
224.0.1.0-231.255.255.255
233.0.0.0-238.255.255.255
//ASM(Any Source Multicast)模型使用
232.0.0.0-232.255.255.255
//SSM(Source-Specific Multicast)模型使用
239.0.0.0-239.255.255.255
//本地管理组地址。也即私网组播IP。
PIM协议使用224.0.0.13
1.2.组播MAC
MAC地址为48bits,6字节。
1@第1个字节的最后1个bit=1,表明该MAC为组播MAC。否则表明为单播MAC。
2@并且MAC地址的前3个字节24bits称为OUI厂商标识,需要向IEEE购买分配。后24bits,由厂家自行分配。
3@组播MAC由于没有明确的目的主机,因此规定组播MAC由组播IP映射而来。映射规则如下:
组播MAC的高24bit=0x01005e;
组播MAC的第25位bit固定为0;
组播MAC的剩余后23bit由组播IP的后23bit直接对应而来。
组播IP实际上有32-4=28bits,因此存在5bits数据无法进行对应
实际上每2^5=32个组播IP对应一个组播MAC。
此外还有协议规定组播MAC:
01-80-c2为IANA规定的协议组播MAC。
例如01-80-c2-00-00-00用于BPDU组播MAC,集成ISIS使用01-80-c2-00-00-14和01-80-c2-00-00-15等
点击此处回到目录
2.PIM基本概念
2.1.RPF
RPF(reverse path forwarding,逆向路径转发)指的是,组播路由器接收到组播流量时进行检查。首先记录接收组播流量的端口(上游端口),并检查到达发送该组播流量的组播源的路由表(单播路由表)。
如果路由转发表中记录到达该组播源的端口为接收该组播流量的端口时,允许接收该流量。
利用单播路由表实现流量无环,并且实现组播最短路径。
1@:比较协议优先级。越小越优。
这里的协议不仅指的是单播路由表,还指的是组播路由表。例如上图建立组播静态路由,以及其他组播路由协议都可以生成组播路由表。
2@:组播静态>MBGP>单播。
同样的,组播路由协议也可以指定协议的优先级。(组播静态优先级默认=1)。当以上协议优先级一致时,按本原则进行选择。
单播路由协议优先级点击此处查看。
3@:有多条到组播源S的单播路由,采取掩码最长匹配原则。
4@:否则优选下一条IP大的。
通过以上原则,可唯一确定组播路由器的上游RPF邻居。
发
Note:Cisco还在第3个原则后额外进行比较到S的Metirc,此时优选开销小的
RPF检查原则2:最长掩码优先
此时此时先比较单播组播路由表的掩码,随后比较协议优先级和下一跳IP。
2.2.源树-SPT
组播中以(S,G)描述相关的组播内容。S=组播源,也即组播服务器的地址。G=组播组,组播服务器提供组播服务的组播地址。(*,G)表示任意组播源。
在组播路由协议中仅允许一个(上游)接口接收来自S的G地址的组播流量,也即RPF检查。而向组播组成员的端口转发则不受影响。但是不可能存在一个端口既为上游端口又为下游接口。
而源树SPT(Source Path Tree)的概念是指,组播源S会以自己为根计算到达组播组成员的路径树。这一行为类似于OSPF的最短路径树计算。
2.3.共享树-RPT
共享树与源树相同都需进行生成树计算,不同点在于。共享树RPT以RP为根,计算到达组播组成员的路径树。然而此时用(*,G)表项进行描述。
同样的也需要进行RPF检查。
流量行为上,组播源S会先将流量发送给RP。由RP将组播流量发送给组播组成员。
RP=Rendezvous Point,一个静态或动态定义的汇聚点。用于集中处理组播流量。
DR:广播网上选举出对PIM协议进行相关相应的路由器,类似于OSPF的DR。
可分为两种
1@:源端DR。发送注册Register报文和接收注册停止Register-stop报文,构建SPT树。
第一跳组播路由器形成。
2@:成员端DR。发送加组join报文构建RPT树。
并且在组成员离组(组播组无成员)时,向DR发送Prune报文。裁剪RPT树。
倒数第一跳组播路由器形成。
DR选举:
1@:优先级越大越优。PIM-hello包中携带。
2@:比较接口IP地址。越大越优。
2.4.工作模式-DM
PIM协议定义了两种工作模式DM(Dense Mode,密集模式)和SM(Sparse Mode,稀疏模式)。
PIM-DM认为网络中所有设备都有加入组播组的需求,因此在建立连接时使用PUSH模式发送报文。经RPF检查后,将组播流量从所有其他PIM接口(out list)转发出去。
这一行为称为PIM-DM的扩散机制。out list,详细来说指的是非RPF的PIM邻居接口+成员接口。
下游设备接收到组播流量后,也进行相应扩散行为。
即使某一网络中不存在组播组成员,也会定期询问是否加组。将其纳入需要发送组播源的范围中去。该模式对网络带宽要求较高,适用于小型网络。
在该模式下,(S,G)表项的建立通过组播流量的成功刷新来完成。
这里指的是不仅要有组播流量,还需要RPF检查通过!!!
2.4.工作模式-SM
PIM-SM认为网络中所有设备都没有加入组播组的需求,需要接收者主动加组并由RP来决定需要将哪些组播流进行转发。对接收者来说,在建立组播表项时实际上相当于RP成为了组播源。
此时组播源S和RP之间单播建立(S,G)表项的SPT树,RP和接收者之间建立(*,G)表项的RPT树。
点击此处回到目录
3.PIM协议
PIM组播协议,可以同时支持IPv4和IPv6网络。在此对PIM报文格式进行介绍。
数据链路层:SMAC使用自己的接口MAC,DMAC使用组播MAC。
组播MAC由组播IP转发而来
网络层/IP层:SIP使用自己的接口IP,DIP使用预留组播IP=224.0.0.13。
并且需要注意的是与IGMP相同其TTL都=1。
PIM的公共头部比较简单:4bits的版本号,4bits的PIM协议类型,8bits的保留字段,16bits的校验和字段。除类型字段外,不再做过多介绍。并且只在介绍协议原理时进行穿插介绍。
Type:PIM协议的类型,4bits。目前定义了10种PIM报文。
0: Hello( PIM-DM 与 PIM-SM 都适用)
1: Register(只适用于 PIM-SM)Note:单播发送
2: Register-Stop(只适用于 PIM-SM)Note:单播发送
3: Join/Prune( PIM-DM 与 PIM-SM 都适用)
4: Bootstrap(只适用于 PIM-SM)
5: Assert( PIM-DM 与 PIM-SM 都适用)
6: Graft(只适用于 PIM-DM)
7: Graft-Ack(只适用于 PIM-DM)
8: Candidate-RP-Advertisement(只适用于 PIM-SM)
9: State Refresh(只适用于 PIM-DM)
3.1.PIM-Hello
PIM-Hello报文的主要作用在于协商参数,发现和维护PIM邻居。PIM-Hello主要以TLV格式定义报文。Type2字节,Length2字节。
Opt1-Hold time:维护邻居关系的时间,默认105s。
相当于deadtime105s,是hello发送间隔30s*3.5
或//hello发送间隔,默认30s。报文中不携带,因此是一个本地概念。
Opt19-DR Pri:选举DR优先级,默认1。
Opt20-Generation ID:随机数,表示当前邻居状态。如果状态发生更新则随机数也会更新。邻居收到改变或丢失随机数的Hello认为邻居状态改变。
Opt2:LAN Prune Delay表示共享网段上传递 Prune 消息的延迟时间,默认500ms;Override Interval表示共享网段上执行剪枝前的否决时间,默认2500ms;T-bit置1表示 join 消息抑制能力。
Opt21-State Refresh Capable:邻居状态刷新时间间隔,默认60s。
PIM-DR作用:选举时优先级越大越优,否则选IP大的。
1@:作为IGMPv1的查询者。
2@:PIM-SM模式下
3.2.PIM-DM的加组Join/剪枝Prune
当路由器本身不存在任何下游接口时,触发剪枝:
1@:向上游接口/RPF接口发送剪枝报文。
2@:上游设备收到剪枝报文后,将该下游接口将其从(S,G)表项下游接口“删除”。
3@:如果上游设备的下游接口为空,则向上上游发送剪枝报文。这一过程会持续进行。
显然,这里接收并响应的应该是自己上游RPF邻居。
这里重点提出的原因是自己上游的PIM网络很有可能有多个邻居!!
因此应由IP大的进行剪枝操作。(实际指的是RPF选择的邻居)
报文格式
Upstream-Neighbor:PIM上游邻居地址。实际应当是RPF地址。
Num Groups:组播组/组播IP数目。
Holdtime:路由器保持相应接口加入/剪枝状态的时间。默认210s。
例如PIM-DM模式认为所有PIM路由器都需要加入组播组。此时PIM路由器如果收到剪枝报文而将收到该报文的接口剔除相应(S,G)表项。
在经过Holdtime后,PIM路由器会自动将该端口重新加入到下游接口。或//join-prune报文中holdtime字段的保持时间,默认210s。
Group Record:加组或剪枝信息。携带了组播组/组播IP,及其与之相关的加组或剪枝的组播源IP信息。
从报文上可以看出组播的加组和剪枝时通过Record字段来实现的。
由上游的RPF邻居地址来确定。此时不仅要求接口,如果上游有多个PIM邻居还选择IP大的作为PRF剪枝。
剪枝报文示例
RFC定义了join/prune的Group Record字段中的Flags位,这里说明下。
Sparse-bit:PIM-SM模式,置位1表示兼容PIMv1;
WildCard-bit:置位1表示建立的是RPT共享树;此时也表示该join报文的join地址是RP而非组播源S的。
Rendezvous Point Tree-bit:RPT-bit置位1表示需要发送给RP。否则是发送给组播源S。
PIM-DM的加组/剪枝:
PIM利用扩散机制实现组播流量的泛洪。通过剪枝完成网络中不存在组播成员网络的流量消除。
加组时:
1@:用户首先发送IGMP报文进行加组
2@:PIM末节路由器发送PIM-join/prune报文进行加组。
离组时
3@:用户发送IGMPv2离组报文/或者IGMP查询者未在组内收到成员关系报告报文。
4@:PIM末节路由器发送PIM-join/prune报文进行剪枝。如果上游在自己的(S,G)表项的出接口没有其他接口。则继续向上游发送剪枝报文。
5@:PIM-prune报文中携带holdtime字段,默认为210s。上游设备接收到prune剪枝报文后,在该端口启动一个修剪等待定时器为210s。当该定时器为0时,将强制PUSH发送组播流。下游设备重新进行判断是否剪枝或向下游发送。
从以上处理过程来看,剪枝并不是删除相应的(S,G)表项。实际上PIM路由器只是将(S,G)表项的下游接口由forward状态转变为prune状态。
在holdtime之后重新进行流量发送。(如果没有prune定时发送的话)
//这里可以看到下游接口为P(Prune)状态,PT的holdtime剩余3min04s。
小知识点:
实际上上游设备收到下游的Prune剪枝消息,不会立刻将下游端口进行剪枝。而是等待3s,这3s称为剪枝等待时延。
如果3s内收到下游设备发送的join加组报文,则不进行剪枝。
作用:防止下游设备是一个局域网网络。而该网络中还存在该组的其他的组播接收者或组播路由器。
剪枝等待时延由2部分组成=
LAN Prune Delay默认500ms和Override Interval默认2500ms组成。
值得注意的是,仅在LAN中出现。也即P2P网络中无需3s等待时延!!!
该字段在PIM-Hello包中进行定义。
点击此处回到目录
3.3.PIM-DM的嫁接Graft/Graft-Ack
Graft报文仅适用于PIM-DM模式。
作用:用于在已剪枝的网络中有设备需要重新加入组播网络。快速结束DM模式的Holdtime定时器时间。
从报文上看,Graft和join/prune报文字段几乎完全相同。
Graft-Ack报文和Graft报文区别在于:upstream-neighbor填充的是下游地址。也是单播发送。
Graft和join/prune报文的区别
1@:嫁接报文使用单播发送。
SIP=自己的接口IP,DIP=RPF上游邻居IP。
2@:Holdtime置0。
3@:嫁接报文的join ip address是填充了组播源的IP。这也意味着即使网络中无相应组播功能,PIM路由器实际上也维护相应的(S,G)。
如果PIM设备本身无(S,G)表项也就无法实现嫁接功能。
也即嫁接要求PIM设备上原本运行过该组播功能。
PIM-DM本身也只是将端口的状态由forward转变为Prune状态。
扩展场景:
Q:如果新接入了一个Prune状态的PIM组播网络,此时如何处理?
A:按照刚刚的分析,新接入的PIM设备无法通过组播流建立(S,G)。只能在holdtime210s后重新等待上游接口加入forward状态。如果上游接口一直Prune,岂不永远无法接入网络?
因此新增机制,一旦Prune接口创建了新的PIM邻居会自动将端口转变为forward状态。
3.4.PIM-DM的状态刷新State Refresh
PIM的State-refresh报文仅适用于PIM-DM模式,属于PIM-DM的增强功能。
状态刷新机制:PIM的第一跳路由器周期性(60s)向邻居发送状态刷新报文。TTL=1。用于刷新pim邻居的(S,G)表项和刷新剪枝接口的超时定时器。
1@:下游PIM邻居接收到后,继续向下游发送状态刷新报文。
2@:组播源不在发送组播流量,PIM的第一跳路由器也不在发送状态刷新报文。组播网络的表项可正常老化删除。
//华为默认开启。一般仅在第一跳PIM节点上进行配置即可。
//状态刷新间隔,默认60s。
3.5.PIM-DM/SM的断言Assert
PIM的Assert报文对PIM-DM和PIM-SM都适用。
场景:主要用于竞选向下游发送组播报文。如果 PIM 路由器从(S,G)或(*,G)表项的下游接口收到(S,G)报文,则表示该网段存在其他的转发者。
注意这里指的是自己发送组播流量对应的报文。
作用:路由器从该下游接口发出 Assert 消息,参与竞选。竞选落败者停止下游接口的转发,并且发送剪枝报文用于防止优胜者发送组播流量。用于防止组播流的重复发送。
如果断言优胜者/RPF上游接口在3s内没有收到PIM-DM的join报文,就将该接口从(S,G)出接口删除。
这也是PIM-DM唯二发送join报文的场景!
另一个发送join报文的场景:局域网连接了多个末节PIM路由器。
Group Address和Source Address:描述了组播的(S,G)表项。
R:描述了断言表项。置0表示断言为(S,G)表项,反之断言(*,G)表项。
Metric Preference:到S的单播路由表的优先级
Metric:到S的路由Metric。
断言的选举:
1@:到组播源的单播路由协议优先级越小者越优
2@:到组播源的Metric越小越优
3@:接口地址IP大的优先
1@在使用默认配置情况下,断言优胜者与DR相同。
2@断言要求RPF选举必须选择断言优胜者作为邻居。
断言的原理:组播流量防环
1@:(S,G)表项出接口收到了(S,G)组播报文触发断言
2@:选举完成后,非win/断言失败设备启动断言定时器。默认180s。180s结束后重新进行断言选举
//指定发送断言报文的间隔。默认180s。
3@:win/断言优胜者周期60s发送断言报文,刷新非win的本地定时器。
这一过程和RPF检查某种程度上有点类似。
但是RPF检查并不能减少组播流量的发送,只能拒绝组播流。
PIM-SM的断言:
PIM-SM虽然是PULL方式,但是在特定场景下也具有断言需求。
AR2作为AR4的RPF邻居,而AR3作为AR5的RPF邻居。
点击此处回到目录
4.PIM-SM
PIM-SM 稀疏模式Sparse Mode采用Pull模式以RT为根而建立(*,G)表项。
PIM-DM以Push模式以S为根建立(S,G)表项。
4.1.PIM-SM模型
PIM-SM模型简介:
1@:对接收者来说,RP相当组播源的存在。在RP和接收者之间建立最短路径树RPT。
组播流量由RP转发给接收者。
2@:对组播源来说,RP相当于接收者的存在。在RP和组播源之间建立最短路径树SPT。
组播流量为避免泛洪,以单播注册方式建立SPT树。(Register报文通知RP存在组播源S,RP接收到反向向S发送PIM-join报文完成SPT树表项建立)。在该路径树上进行组播流量转发。
也即RP是PIM-SM网络的核心!RP可分为静态RP和动态RP。
静态RP@–在设备上进行指定
这里指的是默认RP为所有组播组G的IP提供RP服务。同时也可以指定静态RP为ACL指定的组播组IP转发该G的报文。此时如果有多个静态RP对应G时,需要根据厂家实际情况选择相应的RP。
动态RP@–由Bootstrap/Candidate-RP-Advertisement报文选举产生
实际上动态RP也可指定ACL,仅为指定的组播组IP转发该G的报文
1@:组播源发送组播流,第一跳PIM路由器为避免泛洪单播封装一个PIM报文发向RP。
2@:RP解封装该组播报文。(有相应表项,)向第一跳组播路由器发送(S,G)PIM-join报文。该报文为224.0.0.13组播报文,但逐跳向上游RPF邻居发送直到到达组播源。
这一过程实际上建立了SPT的(S,G)表项。
其实RP也会回送一个注册停止报文,将在4.2.章节详细。
3@:第一跳PIM组播路由器接收到接收者请求后主动加组,发送(*,G)的join报文。该join报文由其他组播路由器以RP为根进行RPF邻居转发直到RP。这里实际上也就完成了PULL拉流操作。
详细内容将在报文介绍章节4.2和4.3时进行详细介绍。
PIM-SM注意点:
1@:PIM-SM建立的(*,G)通过该join报文生成。同时末端的IGMP成员关系报告也可生成。
2@:PIM-SM同样需要进行RPF检查。但RPF检查的单播地址为RP的地址,因此RP需要全网可达。
3@:PIM-SM按需进行剪枝和加组,并也同样存在剪枝否决。
PIM-SM默认认为网络中组播设备较少,需要下游设备周期60s发送(*,G)join表项进行加组。
或
//仅在SM下生效,设置向上游发送join报文的周期时间。默认60s。该值必须小于join报文中hold字段的周期时间。
值得注意的是,PIM-DM是强推PUSH模式也即上游设备会强推组播流。虽然有剪枝机制,但还是需要下游在接收到组播流进行发送。(不考虑状态刷新机制)。
PIM-SM不同是PULL模式,是需要下游主动周期性发送join去维护表项!!!
4.2.PIM-SM的注册register/register-stop
PIM的register/register-stop报文仅适用于PIM-SM模式。
作用:register报文用于第一跳PIM组播路由器向RP通知组播源的存在,并建立(S,G)表项。
第一跳PIM组播路由器以
SIP=组播源侧接口IP,DIP=RP。单播发送。
并携带(S,G)报文表项进行S到RP之间SPT树的建立。
B-bit:边界位。
N-bit:空注册位。
Multicast Data Packet:携带(S,G)组播信息。不定长。
Group Address:组播组地址。
Source Address:组播源地址。
这里携带的是RP所需的(S,G)表项信息。
RP接收Register:
相应(S,G)的RPF检查,并在本地查询组播S路由表是否具有(*,G)。
1@:具有相应表项。向第一跳PIM组播路由器发送(S,G)的join的表项。并同时发送Register-stop报文。
此时其实在RP和组播源之间建立的也是SPT树。
第一跳PIM组播路由器接收到Register-stop报文,在本地启动一个注册停止定时器。该定时器为60s。定时器结束时重新周期发送Register报文。
PIM-SM的Register逻辑:
1@:组播源的第一跳组播路由器发送单播携带组播流量,在组播源和DR建立(S,G)表项。只有S和DR对组播进行封装解封装。
既完成了组播流量的传递,又仅在S和DR之间的单播通道内建立(S,G)防止了组播流的过度泛洪。
当然(S,G)表项的建立要和join报文配合完成
需要说明的是,这里的第一跳组播路由器应该是组播源的DR!
2@:Register报文本质是变组播为单播流量。因此RP要发送Register-stop,防止流量的二次发送并且阻止设备对组播流量的过度封装解封装占用设备资源。
3@:Register报文的一个重要特性是通知RP,S的存在。第一跳PIM路由器收到Register-stop注册停止报文后会停止发送Register报文。但在周期60s后重新发送Register报文进行刷新维护。
当S不存在则不在发送Register注册报文。
其他需要注意的1:
S-DR和RP之间建立的是SPT树,此时仅需要S-DR需要知道RP位置,从而单播发送注册报文。
而C-DR和RP之间是RPT树,此时树上的所有设备都需要知道RP位置。因为要向RP进行加组,发送(*,G)join报文建立表项。
这里在(*,G)join报文的S地址上其实填充的是RP的地址
该(*,G)表项由下游PIM路由器每隔60s进行维护。
Note:RP向组播源发送的是(S,G)join表项。
其他需要注意的2:
register报文是单播发送的,且第一跳PIM路由器发送该单播报文时默认以通向组播源S的本地接口作为SIP。
其他需要注意的3:
在华为设备上,第一跳组播路由器总是发送Register注册报文而RP总是回应Register-stop注册停止报文。
1@无组成员时:RP需要通知组播源S拒绝发送组播流。
2@有组成员时:RP需要通知组播源S拒绝发送单播形式的组播流。此时组播源S沿着(S,G)表项直接发送组播报文。(当然需要RP发送join报文建立相应表项)。
这是由于Register报文不仅承担了组播流量的功能,而且有通知S的效果。
其他需要注意的4:
由于单播路由的特性,去方向的路由和会方向的路由不一定完全一致此时出现一个特别的现象。
S和S-DR之间的SPT树不一定完全沿着S-DR和RP最短路径,但一定是RP到组播源的最短路径
点击此处回到目录
4.3.PIM-SM的Bootstrap/Candidate-RP-Advertisement
PIM-SM使用BSR(Bootstrap Router)机制来完成RP的动态选举。
原理:
1@:每台PIM-SM都可在本地指定一个地址作为C-BSR(候选Candidate-BSR)。每台PIM-SM通过Bootstrap消息获取整个PIM-SM域中的C-BSR,从而唯一选举出BSR并同时向整个PIM-SM域发布BSR信息。当然这个选举是动态的,一旦失效重新选举并周期维护。
2@:每台PIM-SM都可在本地指定一个地址作为C-RP(候选Candidate-RP)。C-RP接收到BSR发送的Bootstrap消息后将自己所提供服务的组播组在PIM-SM域中Candidate-RP-Advertisement报文单播发送给BSR。从而BSR可以收集全网PIM-SM域的C-RP信息。当然这个选举是动态的,一旦失效重新选举并周期维护。3@:BSR周期性60s发送Bootstrap报文携带C-RP集合和唯一确定的BSR地址信息。并其他C-BSR在本地维护BSR信息,维护计时器默认130s。//C-BSR发送Bootstrap的间隔,默认60s。//C-BSR的维护周期,默认130s。
//C-RP发送Candidate-RP-Advertisement的间隔,默认60s。//C-RP的维护周期,默认150s。
BSR ( Bootstrap Router)则相当于组播网络中的管理中心,对动态选举RP的整个过程进行管理。
Bootstrap报文:使用接口作为SIP,使用224.0.0.13作为DIP,一般发往永久预留组播地址的报文TTL都是1。
Fragment Tag:随机数,用来区分 Bootstrap 消息。
Hash Mask length:C-BSR 的 Hash 掩码长度。
BSR-priority:C-BSR 优先级。
BSR-Address:C-BSR 地址。
Group Address:组播组地址。
默认为所有组播组提供服务因此是224.0.0.0/4的组播组。
RP-Count:希望为该组服务的 C-RP 的总数。
Frag RP-Count:在本段内包含的 C-RP 地址的个数。分片场景下使用。
RP-address:C-RP 的地址。
RP-holdtime: C-RP 的有效时间。
RP-priority:C-RP 的优先级。
示例:
————————————————————————————————————
BSR的选举规则:
1@:比较优先级,优先级大者优先。默认为0。2@:比较接口IP地址,IP地址大者优先。
BSR的选举过程:
1@:每台C-BSR初始都认为自己是BSR因此发送Bootstrap报文并在全网的PIM-SM域进行泛洪
2@:竞选失败的C-BSR不在发送Bootstrap报文,而是由优胜者BSR在网络中周期60s泛洪。
同时竞选失败者建立默认C-BSR的holdtime=130s的定时器,在130s内没有收到优胜者的Bootstrap报文认为BSR失效,自己重新泛洪。
3@:为了防止C-BSR环路,根据Bootstrap报文中的BSR地址为根进行RPF检查。
————————————————————————————————————
Candidate-RP-Advertisement报文:单播发送SIP=接口IP,DIP=BSR地址。
RP的选举规则:
1@:比较组播组的掩码长度,越大越优。
2@:比较RP优先级,越大越优。默认为0。3@:比较HASH(组地址,RP值,掩码)值,越大越优。掩码默认30。
4@:比较IP地址,越大越优。
RP的选举过程:
1@:每台C-RP向BSR发送竞选报文Candidate-RP-Advertisement报文。携带RP相关信息。
2@:BSR收集全网PIM-SM域的C-RP信息向全网PIM-SM域进行Bootstrap报文泛洪
3@:PIM路由器根据自己实际情况选择相应的C-RP作为自己的RP
也即每个区域的RP实际上都有可能不同。
这里的实际情况指的是根据提供的多个C-RP选择最短路径的RP。当然也要考虑RP所提供的组播组G是否是自己所需要的。
————————————————————————————————————
其他注意事项:
1@:当配置静态RP和动态RP时,动态RP优先。
2@:进行选举的C-RP和C-BSR都需要加入PIM进程中才能进行选举
3@:进行选举的C-RP和C-BSR都需要满足RPF检查
4@:这里需要说明的是一般来说C-RP和C-BSR都应全网可达,才能具有选举的资格。
这里的3和4实际上是重复的,但是需要说明下。
5@:报文中没有相应的协商字段,因此BSR和RP的选举实际上是支持抢占的。
4.4.PIM-SM的RPT树向SPT树的切换
PIM-SM模型下,实际上是由RP作为接收者的组播源。接收者和组播源的通信往往是非次优路径。该这种情况下提出了RPT树向STP树切换的优化机制。
首先有一点需要注意的是:这一切换只能在倒数第一跳组播路由器上完成。
这是因为RPT树首先是在RP和倒数第一跳组播路由器之间形成的。其次PIM网络的加组离组表项建立实际上都是RP和倒数第一跳组播路由器来完成的。其他的RPT树的路由器实际上只需泛洪PIM报文,根据接收到的PIM报文和组播报文完成(*,G)和(S,G)表项的建立。并且最重要的一点是,RPT树中间节点的SPT最短路径并不一定代表了接收者到源的最短路径!
场景:倒数第一跳PIM路由器上接收到RPT表项的组播流业务,发现到该组播源S的RPF检查优于RPT树建立的路径。
实现:
此时会有SPT树和RPT树不同上游接口传递的组播流,此时需要
1@:倒数第一跳路由器在RPT树上进行 (S,G)剪枝操作。该剪枝报文的RP-bit会置位以便进行区分。RP上如果没有相应的接收者,则触发PIM-SM的剪枝相关操作。
这里需要注意的是(S,G)表项是RPT流量刷新而来,会被剪掉。但是RPT树的(*,G)还是会保留所以周期加组。
2@:倒数第一跳路由器在SPT树上进行 (S,G)加组操作。
上述过程可参考相关章节。
//在倒数第一跳PIM路由器上设置RPT树向SPT树切换阈值。默认收到组播报文就切换。
点击此处回到目录
5.PIM行为+配置
5.1.PIM-DM组播处理
组播源:
组播源发送组播流量。组播流量由PIM第一跳组播路由器接收到。
PIM路由器:
第一跳组播路由器被组播流量刷新,因此
1@:建立组播路由表
也即此时PIM邻居被自动识别为组播的下游接口。此时为直连,RPF检查必然成功。
2@:建立PIM路由表,向PIM邻居/转发流量。
也即PUSH方式,无论有没有表项都向邻居(默认为下游接口)推送组播流。而下游接口根据需要建立组播表项或进行prune剪枝操作。
3@:其他PIM路由器接收到后,进行相似处理。但是此时取决于PIM路由器状态。
=>如果PIM有相应表项则转发流量;
=>如果无表项则向上游周期60s发送Prune报文。上游设备在3s的剪枝等待延时内没有收到join报文,则以接收到Prune中Holdtime字段210s为定时器将下游端口状态由forwarding转变为prune维持。
(这一定时器被下游周期发送的Prune报文刷新。定时器为0时将下游端口转变为forwarding,加入到PIM组播表项的出接口转发组播流量)。
详情可查看3.2章节。
4@:最后一跳PIM路由器接收到组播流量,建立(S,G)表项。向相应的接收者转发流量。(如果有接收者的话)
5@:对于prune状态新加入接收者,向上游发送Graft嫁接报文,上游随之删除该prune端口的定时器过渡到forward状态开始转发流量。
5.2.PIM-SM组播处理
组播源:
组播源发送组播流量。组播流量由PIM第一跳组播路由器接收到。
PIM路由器:
第一跳组播路由器被组播流量刷新,因此将组播流(S,G)封装入单播PIM-register报文中发送给RP。
RP组播路由器:
1@有相应的(*,G)表项:向组播源/第一跳组播路由器发送(S,G)的join报文,建立组播表项将组播流量引入RP。
这里的前提是RP完成了相应S的RPF检查。
此时RP上有(S,G)又有(*,G)表项。这里有一个定义是(*,G)表项是对应(S,G)的父项。此时(S,G)会继承(*,G)表项的出接口,从而完成整个PIM域的组播流量的发送。根据该规则不断在全网都形成(S,G)表项。
这里有一个有意思的点是:在RP未向S发送(S,G)join报文时,只有在第一跳PIM路由器和RP路由器上存在一个被组播流传输形成的(S,G)表项。而在RP和S之间的组播路由器是没有表项的。
这里的表项是由于第一跳组播路由器发送的单播Register报文中封装组播流量而形成的。中间设备处理单播报文是不进一步解封装的。
2@没有相应的表项:RP向第一跳组播路由器发注册停止Register-stop报文。第一跳组播路由器在该端口上启动一个注册停止计时器,在计时器结束后重新向RP发送单播注册报文。
倒数第一跳组播路由器由接收者触发建立(*,G),并逐跳发送(*,G)join报文给RP。
此时在倒数第一跳PIM路由器☞☞☞RP的路径路由器上都建立(*,G)表项。指定组播的上下游接口。
如果RP也是倒数第一跳组播路由器,那么IGMP的成员关系报文当然也可以建立(*,G)表项。
RP收到后,将RP上的表项与该(*,G)表项比对。随后将接收该(*,G)表项的接口加入组播路由表的出接口中。这样就完成了表项的建立。
1@:在最终传输组播流量时,RP和C-DR之间的组播流量还会导致(S,G)表项的出现。也即PIM-SM的RPT树也是会有(S,G)表项的!
2@:PIM-SM模式下修剪等待机制同样适用。
1-当接收者退出组播组后,剪枝报文首先沿着RPT树到达RP。
2-如果RP也没有相应的出接口,则继续向S发送剪枝报文。
需要时刻注意
1@:满足RPF检查,PIM-SM的RP也需要满足RPT检查。
2@:与PIM-DM模型相同,PIM-SM的也具有剪枝操作。当(*,G)表项的下游接口全部删除,此时向上游发送(*,G)的prune剪枝报文。
5.3.PIM配置
PIM协议配置比较简单,这里以下图AR4为例进行PIM-SM介绍:
sysname AR4
#
multicast routing-enable
#
interface GigabitEthernet0/0/0
ip address 10.1.234.4 255.255.255.0
pim sm
#
interface GigabitEthernet0/0/1
ip address 10.4.5.4 255.255.255.0
pim sm
#
interface GigabitEthernet0/0/2
ip address 10.4.6.4 255.255.255.0
pim sm
#
interface LoopBack1
ip address 4.4.4.4 255.255.255.255
pim sm
#
pim
c-bsr LoopBack1
c-rp LoopBack1
static-rp 4.4.4.4 preferred
#
PIM的配置比较简单,这里重点说明配置要点:
1@:第一跳路由器的S接口和倒数一条路由器的C接口都需加入PIM进程。
因为要建立组播表项的上下游接口,并且需要进行RPF检查。
PIM-SM模型的C-BSR和C-RP也需要如此。
2@:对于PIM-SM模型,属于SPT树的组播路由器仅有第一跳需要知道RP的地址进行Register注册。而RPT树的路由器都需要知道RP地址。
点击此处回到目录