组播传输的特点是单点发送,多点接收
相比单播,用户的增加不会导致信息源负载的加重,不会导致网络资源消耗的显著增加。
相比广播,不会造成网络资源的浪费,并能提高信息传输的安全性,而且组播可以实现跨网段的传输。
组播名词:
- 组播组:用IP组播地址进行标识的一个集合。任何用户主机(或其他接收设备),加入一个组播组,就成为了该组成员,可以识别并接收发往该组播组的组播数据。
- 组播源:信息的发送者称为“组播源”
- 组播组成员:所有加入某组播组的主机便成为该组播组的成员
- 组播路由器:支持三层组播功能的路由器或交换机
组播网络基本架构:
源端网络:将组播源产生的组播数据发送至组播网络。
组播转发网络:形成无环的组播转发路径,该转发路径也被称为组播分发树(Multicast Distribution Tree)。
成员端网络:让组播网络感知组播组成员位置与加入的组播组。
组播基础
组播数据报文结构:
组播地址
在IPv4地址空间中,D类地址(224.0.0.0/4)被用于组播。一个组播地址就表示一个点到多点的数据流,比如IPTV数据流,语音会议数据流。
范围 | 含义 |
---|---|
224.0.0.0—224.0.0.255 | 为路由协议预留的永久组地址供路由协议、拓扑查找等使用,不用于组播转发。 |
224.0.1.0—231.255.255.255
233.0.0.0—238.255.255.255 |
Any-Source临时组播组地址其中,224.0.1.39和224.0.1.40是保留地址,不建议使用。 |
232.0.0.0—232.255.255.255 | 缺省情况下的SSM组播地址,全网范围内有效。 |
239.0.0.0—239.255.255.255 | 本地管理的Any-Source临时组播组地址仅在本地管理域内有效 |
常用组播地址
IPV4:
地址 | 作用 |
---|---|
224.0.0.1 | 所有节点 |
224.0.0.2 | 所有的路由器 |
224.0.0.5 | 运行ospf协议路由器侦听的地址 |
224.0.0.6 | ospf中的DR和BDR侦听地址 |
224.0.0.12 | DHCP服务器/中继代理 |
224.0.0.13 | PIMV2路由侦听的地址 |
224.0.0.18 | VRRPbackup路由器侦听的地址 |
IPV6: |
地址 | 作用 |
---|---|
FF02::1 | 链路本地的所有节点 |
FF02::2 | 链路本地的所有路由器 |
FF02::5 | 所有启用OSPFV3的路由器 |
FF02::6 | OSPFV3DR和BDR侦听的地址 |
FF02:: D | PIMV2路由侦听的地址 |
FF02::12 | VRRPbackup路由器侦听的地址 |
组播MAC地址
IPv4组播MAC地址的高24位为0x01005e,第25位为0,低23位为IPv4组播地址的低23位,例如组播组地址224.0.1.1对应的组播MAC地址为01-00-5e-00-01-01。 IETF认为同一个局域网中两个或多个组地址生成相同的MAC地址的几率非常低,不会造成太大的影响。
组播服务模型
组播组成员在接收组播数据时可以对于组播数据源进行选择,因此产生了ASM(Any-Source Multicast,任意源组播)和SSM(Source-Specific Multicast,指定源组播)两种组播服务模型。
ASM:组成员加入组播组以后,组成员可以接收到任意源发送到该组的数据。
SSM:组成员加入组播组以后,组成员只会收到指定源发送到该组的数据。
RPF检查
路由器收到一份组播报文后,会根据报文的源地址通过单播路由表查找到达“报文源”的路由,查看到“报文源”的路由表项的出接口是否与收到组播报文的入接口一致。如果一致,则认为该组播报文从正确的接口到达,从而保证了整个转发路径的正确性和唯一性。这个过程就被称为RPF检查。
由于组播转发容易产生环路,次优,重复报文,所以组播路由表项除了目的网络和出接口外还需要添加组播源和入接口的信息。启用RPF检查使设备仅转发从特定唯一的入接口收到的组播数据,从而避免组播转发时产生环路,次优,重复报文(部分解决)等问题。
对于相同的组播源,设备通过RPF(Reverse Path Forwarding,反向路径转发)检查可以确定设备上唯一的组播流量入接口
RPF路由选举规则
除单播路由外,MBGP路由、组播静态路由也是RPF检查的依据。当路由器收到一份组播报文后,如果这三种路由表都存在,具体检查过程如下:
-
分别从单播路由表、MBGP路由表和组播静态路由表中各选出一条最优路由。
-
- 如果配置了按照最长匹配选择路由则从这三条路由中选出最长匹配的那条路由
- 如果这三条路由的掩码一样,则选择优先级最高的那条路由;
- 如果它们的优先级也相同,则按照组播静态路由、MBGP路由、单播路由的顺序进行选择
-
如果没有配置按照最长匹配选择路由
- 则从这三条路由中选出优先级最高的那条路由
- 如果它们的优先级相同,则按照组播静态路由、MBGP路由、单播路由的顺序进行选择。
即
1. 掩码最长匹配
2. 路由最优优先级(Pre值)
3. 组播静态路由>MBGP路由>单播路由
组播协议
通过RPF机制与组播路由协议,组播网络可以最终形成无环、无次优且无重复包的组播转发路径,该路径可以被称为组播分发树
组播分发树以组播源为根,以组成员为叶子形成转发路径,组播数据在转发时都基于组播分发树进行转发。
组播协议介绍
-
工作在成员端网络的主要是IGMP(Internet Group Management Protocol,因特网组管理协议)协议,用于告知组播网络,组成员的位置与所加组播组。
-
工作在组播转发网络的协议主要有PIM,MSDP,MBGP。
PIM(Protocol Independent Multicast,协议无关组播)协议主要作用是生成AS域内的组播分发树。
MSDP(Multicast Source Discovery Protocol,组播源发现协议)主要作用是帮助生成AS域间的组播分发树。
MBGP(Multicast BGP,组播BGP)主要作用是帮助跨域组播流进行RPF校验。
IGMP
IGMP是TCP/IP协议族中负责IPv4组播成员管理的协议,用来在接收者主机和与其直接相邻的组播路由器之间建立和维护组播组成员关系。通过IGMP(Internet Group Management Protocol,因特网组管理协议),组成员可以将加组消息发送给组播网络,从而让组播网络感知到组成员的位置和所加组播组。IGMP报文封装在IP报文中
组播网络感知组播组成员有两种方法:
-
手工静态配置:在组播路由器上静态指定连接组播组成员的接口,静态配置组成员加组信息。
手工静态方式灵活性差,配置工作量大,但相对比较稳定,对于新上线的组成员能够快速建立组播转发通路。
-
动态感知:通过IGMP协议通知组播网络,组播网络根据IGMP消息感知组播组成员所在接口,以及组成员加组信息。
动态感知方式较为灵活,且配置简单,现网一般使用动态感知方式。
IGMP有三个版本 IGMPv1,IGMPv2,IGMPv3
组播路由器表项
组播路由器与组成员间交互报文后会生成IGMP路由表项与IGMP组表项。
组播路由表项需要基于IGMP路由表项与IGMP组表项的信息生成。
IGMP组表项是由用户主机发送的IGMP加入报文触发创建的,用于维护组加入信息并通知组播路由协议(通常所说的为PIM协议)创建相应(*,G)表项。
IGMPv1
IGMPv1主要基于查询和响应机制完成组播组管理
报文
- 普遍组查询报文(General Query):查询器向共享网络上所有主机和路由器发送的查询报文,用于了解哪些组播组存在成员。查询报文目的地址为224.0.0.1。
- 成员报告报文(Report):主机向查询器发送的报告报文,用于申请加入某个组播组或者应答查询报文。
当一个网段内有多个组播路由器时,由于它们都可以接收到主机发送的成员报告报文,只需要选取其中一台组播路由器发送查询报文就足够了,该组播路由器称为IGMP查询器(Querier)。
在IGMPv1中,没有基于IGMP的查询器选举机制,由组播路由协议PIM选举出唯一的组播信息转发者(Assert Winner或DR)作为IGMPv1的查询器,负责该网段的组成员关系查询。
普遍组查询和响应机制
通过普遍组查询和响应,IGMP查询器可以了解到该网段内哪些组播组存在成员。
- IGMP查询器发送目的地址为224.0.0.1(表示同一网段内所有主机和路由器)的普遍组查询报文;收到该查询报文的组成员启动定时器。
普遍组查询报文是周期性发送的,发送周期可以通过命令配置,缺省情况下每隔60秒发送一次。HostA和HostB是组播组G1的成员,则在本地启动定时器Timer-G1。缺省情况下,定时器的范围为0~10秒之间的随机值。
- 第一个定时器超时的组成员发送针对该组的报告报文。
假设HostA上的Timer-G1首先超时,HostA向该网段发送目的地址为G1的报告报文。也想加入组G1的HostB收到此报告报文,则停止定时器Timer-G1,不再发送针对G1的报告报文。这样报告报文被抑制,可以减少网段上的流量。
- IGMP查询器接收到HostA的报告报文后,了解到本网段内存在组播组G1的成员,则由组播路由协议生成(*,G1)组播转发表项,网络中一旦有组播组G1的数据到达路由器,将向该网段转发。
组成员加组
- 主机HostC不等待普遍组查询报文的到来,主动发送针对G2的报告报文以声明加入。
- IGMP查询器接收到HostC的报告报文后,了解到本网段内出现了组播组G2的成员,则生成组播转发项(*,G2)。网络中一旦有G2的数据到达路由器,将向该网段转发。
组成员离开机制
IGMPv1没有专门定义离开组的报文。主机离开组播组后,便不会再对普遍组查询报文做出回应。
-
假设HostA想要退出组播组G1
HostA收到IGMP查询器发送的普遍组查询报文时,不再发送针对G1的报告报文。由于网段内还存在G1组成员HostB,HostB会向IGMP查询器发送针对G1的报告报文,因此IGMP查询器感知不到HostA的离开。
-
假设HostC想要退出组播组G2
HostC收到IGMP查询器发送的普遍组查询报文时,不再发送针对G2的报告报文。由于网段内不存在组G2的其他成员,IGMP查询器不会收到G2组成员的报告报文,则在一定时间(缺省值为130秒 60*2+10)后,删除G2所对应的组播转发表项。
IGMPv2
IGMPv1在离组机制与查询器选举机制上有一定缺陷:
- IGMPv1离组使用超时机制,组成员只能静默离组。在未超时的时间内,组播流量依然会被组播路由器转发。
- IGMPv1查询器选举必须要依赖PIM协议,导致查询器选举不够灵活。
IGMPv2改善了IGMPv1的缺陷:
- IGMPv2组成员加组机制与IGMPv1基本相同
- IGMPv2增加了离开组机制
- IGMPv2增加了查询器选举机制
除了普遍组查询报文和成员报告报文之外,IGMPv2新增了两种报文:
- 成员离开报文(Leave):成员离开组播组时主动向查询器发送的报文,用于宣告自己离开了某个组播组。
- 特定组查询报文(Group-Specific Query):查询器向共享网段内指定组播组发送的查询报文,用于查询该组播组是否存在成员。
IGMPv2对普遍组查询报文格式也做了改进,添加了最大响应时间(Max Response Time)字段。此字段取值可以通过命令配置,用于控制成员对于查询报文的响应速度。
在工作机制上,与IGMPv1相比,IGMPv2增加了查询器选举和离开组机制。
查询器选举机制
IGMPv2使用独立的查询器选举机制,当共享网段上存在多个组播路由器时,IP地址最小的路由器成为查询器。
-
最初,所有运行IGMPv2的组播路由器都认为自己是查询器,向本网段内的所有主机和组播路由器发送普遍组查询报文。
RouterA和RouterB在收到对方发送的普遍组查询报文后,将报文的源IP地址与自己的接口地址作比较。RouterA的接口地址小于RouterB,则RouterA当选为查询器,RouterB为非查询器。
-
此后,将由IGMP查询器(向本网段内的所有主机和其他组播路由器发送普遍组查询报文,而非查询器则不再发送普遍组查询报文。
非查询器(RouterB)上都会启动一个定时器(即其他查询器存在时间定时器Other Querier Present Timer)。在该定时器超时前,如果收到了来自查询器的查询报文,则重置该定时器;否则,就认为原查询器失效,并发起新的查询器选举过程。
离开组机制
- HostA向本地网段内的所有组播路由器(目的地址为224.0.0.2)发送针对组G1的离开报文。
- 查询器收到离开报文,会发送针对组G1的特定组查询报文。发送间隔和发送次数可以通过命令配置,缺省情况下每隔1秒发送一次,共发送两次。同时查询器启动组成员关系定时器(Timer-Membership=发送间隔x发送次数)。
- 该网段内还存在组G1的其他成员,这些成员(HostB)在收到查询器发送的特定组查询报文后,会立即发送针对组G1的报告报文。查询器收到针对组G1的报告报文后将继续维护该组成员关系。如果该网段内不存在组G1的其他成员,查询器将不会收到针对组G1的报告报文。在Timer-Membership超时后,查询器将删除(*,G1)对应的IGMP组表项.当有组G1的组播数据到达查询器时,查询器将不会向下游转发。
IGMPv3
IGMPv1与IGMPv2的报文中均无法携带组播源的信息,因此无法配合SSM使用(可使用SSM Mapping功能解决这个问题)。
IGMPv3主要是为了配合SSM(Source-Specific Multicast)模型发展起来的,提供了在报文中携带组播源信息的能力,即主机可以对组播源进行选择
IGMPv3报文包含两大类:查询报文和成员报告报文。IGMPv3没有定义专门的成员离开报文,成员离开通过特定类型的报告报文来传达。
查询报文:普遍组查询报文和特定组查询报文,还新增了特定源组查询报文(Group-and-Source-Specific Query)
成员报告报文不仅包含主机想要加入的组播组,而且包含主机想要接收来自哪些组播源的数据。
IGMPv3增加了针对组播源的过滤模式(INCLUDE/EXCLUDE)
- INCLUDE:希望接收来自特定组播源的组播流量
- EXCLUDE:希望过滤来自特定组播源的组播流量
成员加组
在工作机制上,与IGMPv2相比,IGMPv3增加了主机对组播源的选择能力。IGMPv3成员关系报告报文没有成员关系报告报文抑制机制
IGMPv3的成员报告报文的目的地址为224.0.0.22(表示同一网段所有使能IGMPv3的路由器)。通过在报告报文中携带组记录,主机在加入组播组的同时,能够明确要求接收或不接收特定组播源发出的组播数据。
离组机制
与v2相同不过查询器发送特定源组查询报文(Group-and-Source-Specific Query)
差异
项目 | IGMPv1 | IGMPv2 | IGMPv3 |
---|---|---|---|
查询器选举方式 | 依靠组播路由协议PIM选举 | 同网段组播路由器之间竞争选举 | 同网段组播路由器之间竞争选举 |
普遍组查询报文 | 支持 | 支持 | 支持 |
成员报告报文 | 支持 | 支持 | 支持 |
特定组查询报文 | 不支持 | 支持 | 支持 |
成员离开报文 | 不支持 | 支持 | 没有定义专门的成员离开报文,成员离开通过特定类型的报告报文来传达 |
特定源组查询报文 | 不支持 | 不支持 | 支持 |
指定组播源 | 不支持 | 不支持 | 支持 |
可识别报文协议版本 | IGMPv1 | IGMPv1、IGMPv2 | IGMPv1、IGMPv2、IGMPv3 |
ASM模型 | 支持 | 支持 | 支持 |
SSM模型 | 需要IGMP SSM Mapping技术支持 | 需要IGMP SSM Mapping技术支持 | 支持 |
IGMP Snooping
当组播数据从最后一跳路由器发往组播组成员时,往往会经过交换机。由于组播数据的目的MAC地址是组播MAC地址,默认情况下交换机将泛洪此类数据帧,有可能导致不同组的组播流量会被别组的成员接收。
IGMP Snooping可以实现组播数据在数据链路层的转发和控制。使主机只收到加入的组播组的组播报文
当主机和上游三层设备之间传递的IGMP协议报文通过二层组播设备时,IGMP Snooping分析报文携带的信息,根据这些信息建立和维护二层组播转发表,从而指导组播数据在数据链路层按需转发
二层组播转发表项中存在两类接口:
- 路由器端口(Router Port):二层组播设备上朝向三层组播设备(DR或IGMP查询器)一侧的接口,二层组播设备从此接口接收组播数据报文。
- 成员端口(Member Port):又称组播组成员端口,表示二层组播设备上朝向组播组成员一侧的端口,二层组播设备往此接口发送组播数据报文。
IGMP SSM Mapping
IGMP SSM Mapping通过静态的将组播源与组播组进行绑定,使得IGMPv1与IGMPv2的组成员也能接入SSM组播网络。
IGMP SSM Mapping的机制是:通过在路由器上静态配置SSM地址的映射规则,将IGMPv1和IGMPv2报告报文中的(*, G)信息转化为对应的(G, INCLUDE, (S1, S2...))信息,以提供SSM组播服务。
IGMP Proxy
通过IGMP Proxy功能可减少IGMP查询器接收IGMP成员关系报告/离开报文的数量,减轻IGMP查询器压力。
IGMP Proxy通常被部署在IGMP查询器和成员主机之间的三层设备上。
为了缓解IGMP查询器压力,IGMP Proxy设备将成员关系报告/离开报文汇聚后统一上送给IGMP查询器。
IGMP Proxy设备也可以代理IGMP查询器向成员主机发送查询报文,维护组成员关系,基于组成员关系进行组播转发。
IGMP Proxy中定义了以下两种类型的接口:
-
上游接口:指IGMP代理设备上配置IGMP Proxy功能的接口,该接口执行IGMP代理设备的主机行为,因此也称为主机接口(Host Interface)。
-
下游接口:指IGMP代理设备上配置IGMP功能的接口,该接口执行IGMP代理设备的路由器行为,因此也称为路由器接口(Router Interface)。
PIM
PIM(Protocol Independent Multicast,协议无关组播)协议的主要作用就是构建组播分发树。
PIM主要有两种模式:
- PIM-DM(PIM-Dense Mode,PIM密集模式)
- PIM-SM(PIM-Sparse Mode,PIM稀疏模式)
- PIM-SM(ASM):为任意源组播建立组播分发树。
- PIM-SM(SSM):为指定源组播建立组播分发树。
PIM-DM:密集模式,采用的是“推”模式,适用于成员比较少,相对密集的场景
PIM-SM:稀疏模式 采用的是“拉”模式,适用于成员多,但是成员不集中的场景
组播分发树的分类
- 以组播源为根,组播组成员为叶子的组播分发树称为SPT(Shortest Path Tree)。SPT同时适用于PIM-DM网络和PIM-SM网络。
- 以RP(Rendezvous Point)为根,组播组成员为叶子的组播分发树称为RPT(RP Tree)。RPT适用于PIM-SM网络。
PIM路由表项
PIM路由表项即通过PIM协议建立的组播路由表项。PIM网络中存在两种路由表项:(S,G)路由表项或(*,G)路由表项。S表示组播源,G表示组播组,*表示任意。
- (S,G)路由表项主要用于在PIM网络中建立SPT。对于PIM-DM网络和PIM-SM网络适用。
- (*,G)路由表项主要用于在PIM网络中建立RPT。对于PIM-SM网络适用。
PIM路由器上可能同时存在两种路由表项。当收到源地址为S,组地址为G的组播报文,且RPF检查通过的情况下,按照如下的规则转发:
- 如果存在(S,G)路由表项,则由(S,G)路由表项指导报文转发。
- 如果不存在(S,G)路由表项,只存在(*,G)路由表项,则先依照(*,G)路由表项创建(S,G)路由表项,再由(S,G)路由表项指导报文转发。
PIM-DM
PIM-DM的关键工作机制包括邻居发现、扩散、剪枝、嫁接、断言和状态刷新。其中,扩散、剪枝、嫁接是构建SPT的主要方法。
报文
PIM协议报文直接采用IP封装,目的地址224.0.0.13,IP协议号103。
报文类型 | 报文功能 |
---|---|
Hello | 用于PIM邻居发现,协议参数协商,PIM邻居关系维护等 |
Join/Prune(加入/剪枝) | 加入报文用于加入组播分发树,剪枝报文则用于修剪组播分发树。加入及剪枝报文在PIM中使用相同的报文格式,只不过报文载荷中的字段内容有所不同 |
Graft(嫁接) | 用于将设备所在的分支嫁接到组播分发树 |
Graft-ACK(嫁接确认) | 用于对邻居发送的Graft报文进行确认 |
Assert(断言) | 用于断言机制 |
邻居发现
组播转发路径只能在PIM邻居之间建立,因此邻居发现是形成组播分发树的先决条件。
PIM路由器上每个使能了PIM协议的接口都会对外发送Hello报文。封装Hello报文的组播报文的目的地址是224.0.0.13(表示同一网段中所有PIM路由器)、源地址为接口的IP地址、TTL数值为1。
Hello报文的作用:发现PIM邻居、协调各项PIM协议报文参数、维持邻居关系。
-
发现PIM邻居
同一网段中的PIM路由器都必须接收目的地址为224.0.0.13的组播报文。这样直接相连的PIM路由器之间通过交互Hello报文以后,就可以彼此知道自己的邻居信息,建立邻居关系。
只有邻居关系建立成功后,PIM路由器才能接收其他PIM协议报文,从而创建组播路由表项。
-
协调各项PIM协议报文参数
每隔30s发送一个Hello报文,Hello报文中携带多项PIM协议报文参数,主要用于PIM邻居之间PIM协议报文的控制。具体如下:
-
DR_Priority:表示各路由器接口竞选DR的优先级,优先级越高越容易获胜。DR_Priority只在PIM-SM网络的DR竞选中用到
-
Holdtime:表示保持邻居为可达状态的超时时间。如果在超时时间内没有收到PIM邻居发送的Hello报文,路由器则认为邻居不可达。默认105s
-
LAN_Delay:表示共享网段内传输Prune报文的延迟时间。
-
Neighbor-Tracking:表示邻居跟踪功能。
-
Override-Interval:表示Hello报文中携带的否决剪枝的时间间隔。
-
-
维持邻居关系
PIM路由器之间周期性地发送Hello报文。如果Holdtime超时还没有收到该PIM邻居发出的新的Hello报文,PIM路由器就认为该邻居不可达,将其从邻居列表中清除。
形成组播分发树
PIM-DM模式首次形成组播分发树主要依赖扩散机制、剪枝机制、断言机制与DR选举机制。
-
扩散机制:组播数据包向所有的PIM邻居泛洪,同时组播路由器产生组播路由表项。
-
断言机制:当组播转发过程中存在多路访问网络,则需要选举出一个组播转发路由器,避免重复组播报文。
-
剪枝机制:如果组播路由器下没有组成员,则将源到该组播路由器的组播转发路径剪枝。
扩散
组播源发送的组播报文会在全网内扩散。当PIM路由器接收到组播报文,先进行RPF检查,通过后会在该路由器上创建(S,G)表项,之后会向所有PIM邻居发送。
PIM-DM形成的(S,G)表项有老化时间(默认210s),如果老化时间超时前没有收到新的组播报文,则删除(S,G)表项。
扩散机制会周期性(默认180s)全网扩散组播数据,周期性扩散的主要目的是探测是否有新成员加组,但是由于全网扩散组播数据会浪费大量带宽,所以现在的组播网络一般使用“状态刷新机制”加上“嫁接机制”来实现周期性全网扩散感知新成员加组的目的。
断言
当一个网段内有多个相连的PIM路由器RPF检查通过向该网段转发组播报文时,则需要通过断言机制来保证只有一个PIM路由器向该网段转发组播报文。
PIM路由器在接收到邻居路由器发送的相同组播报文后,会以组播的方式向本网段的所有PIM路由器发送Assert报文,其中目的地址为永久组地址224.0.0.13。其它PIM路由器在接收到Assert报文后,将自身参数与对方报文中携带的参数做比较,进行Assert竞选。竞选规则如下:
- 单播路由协议优先级较高者获胜。
- 如果优先级相同,则到组播源的开销较小者获胜。
- 如果以上都相同,则下游接口IP地址最大者获胜。
- Assert选举失败的设备会抑制转发,并将这种抑制转发的状态保持一段时间,这段时间就被称为Assert保持时间,默认180s。
根据Assert竞选结果,路由器将执行不同的操作:
-
获胜一方的下游接口称为Assert Winner,将负责后续对该网段组播报文的转发。
-
落败一方的下游接口称为Assert Loser,后续不会对该网段转发组播报文,PIM路由器也会将其从(S,G)表项下游接口列表中删除。
剪枝
当PIM路由器接收到组播报文后,RPF检查通过,但是下游网段没有组播报文需求。此时PIM路由器会向上游发送剪枝报文,通知上游路由器禁止相应下游接口的转发,将其从(S,G)表项的下游接口列表中删除。剪枝操作由叶子路由器发起,逐跳向上,最终组播转发路径上只存在与组成员相连的分支。
剪枝过程如下:
- RouterB向上游RouterC发送Prune报文,通知RouterC不用再转发数据到该下游网段。
- RouterC收到Prune报文后,停止该下游接口转发,将该下游接口从(S,G)表项中删除。由于RouterC上还存在其他处于转发状态的下游接口,剪枝过程停止。后续到达的报文只向RouterA转发。
剪枝接口会有一个计时器,210s,计时器超时,接口将加入下游接口,转发组播报文
当下游接口被剪枝后:
- 如果下游叶子路由器有组成员加入,并且希望在下次“扩散-剪枝”前就恢复组播报文转发,则执行嫁接动作。
- 如果下游叶子路由器一直没有组成员加入,希望该接口保持抑制转发状态,则执行状态刷新动作。
状态刷新
在PIM-DM网络中,为了避免被裁剪的接口因为“剪枝定时器”超时而恢复转发,离组播源最近的第一跳路由器会周期性地触发State Refresh报文在全网内扩散。收到State Refresh报文的PIM路由器会刷新剪枝定时器的状态。被裁剪接口的下游叶子路由器如果一直没有组成员加入,该接口将一直处于抑制转发状态。状态刷新报文60s发一次
状态刷新过程如下:
- RouterC触发状态刷新,将State Refresh报文向RouterA和RouterB扩散。
- RouterC上存在被裁剪接口,刷新该接口的“剪枝定时器”的状态。下一次“扩散-剪枝”来临时,由于RouterB上仍然没有组成员加入,RouterC上被裁剪的接口将被抑制转发组播报文。
嫁接
当有新成员加入组播组后,组播网络需要更新组播分发树,才能将组播数据发往组成员。PIM-DM模式在使用“扩散-剪枝”的方式建立组播分发树后,通过状态刷新机制,使下行接口一旦被抑制就无法自动恢复。
PIM-DM模式更新组播分发树的方法有两种:
-
等待组播路由表超时后,全网重新泛洪。该方法不可控,在现网中无法实现
-
使用嫁接(Graft)机制,当新成员加组后,主动反向建立组播分发路径。现网中一般使用嫁接机制来实现新成员加组。
PIM-DM通过嫁接机制,使有新组成员加入的网段快速得到组播报文。叶子路由器通过IGMP了解到与其相连的用户网段上,组播组G有新的组成员加入。随后叶子路由器会向上游发送Graft报文,请求上游路由器恢复相应出接口转发,将其添加在(S,G)表项下游接口列表中。
嫁接过程从叶子路由器开始,到有组播报文到达的路由器结束。
嫁接过程如下:
- RouterB希望在下一次“扩散-剪枝”来临前恢复对HostB组播报文的转发,向上游路由器RouterC发送Graft报文,请求恢复相应出接口转发组播报文。
- RouterC收到Graft报文后,恢复该接口转发,将该接口添加到(S,G)表项中的下游接口列表中。由于RouterC上有组播报文到达,嫁接过程停止。后续到达的报文向RouterB转发。
PIM-SM
PIM-DM的局限性:
-
使用“扩散-剪枝”方式需要全网扩散组播报文,对于网络有一定冲击。
-
所有组播路由器均需要维护组播路由表,即使该组播路由器无需转发组播数据。
-
对于组成员较为稀疏的组播网络,使用“扩散-剪枝”形成组播分发树的效率不高
PIM-SM (ASM)
-
在网络中维护一台重要的PIM路由器:汇聚点RP(Rendezvous Point),可以为随时出现的组成员或组播源服务。网络中所有PIM路由器都知道RP的位置。
-
当网络中出现组成员(用户主机通过IGMP加入某组播组G)时,最后一跳路由器向RP发送Join报文,逐跳创建(*,G)表项,生成一棵以RP为根的RPT。
-
当网络中出现活跃的组播源(组播源向某组播组G发送第一个组播数据)时,第一跳路由器将组播数据封装在Register报文中单播发往RP,在RP上创建(S,G)表项,注册源信息。
报文
报文类型 | 报文功能 |
---|---|
Hello | 用于PIM邻居发现,协议参数协商,PIM邻居关系维护等 |
Register(注册) | 用于事先源的注册过程。这是一种单播报文,在源的注册过程中,组播数据被第一跳路由器封装在单播注册报文中发往RP |
Register-Stop(注册停止) | RP使用该报文通知第一跳路由器停止通过注册报文发送组播流量 |
Join/Prune(加入/剪枝) | 加入报文用于加入组播分发树,剪枝则用于修剪组播分发树 |
Assert(断言) | 用于断言机制 |
Bootstrap(自举) | 用于BSR选举。另外BSR也使用该报文向网络中扩散C-RP(Candidate-RP,候选RP)的汇总信息 |
Candidate-RP-Advertisement
(候选RP通告) |
C-RP使用该报文向BSR发送通告,报文中包含该C-RP的IP地址及优先级等信息 |
RP
一个RP可以同时为多个组播组服务,但一个组播组只能对应一个RP。目前可以通过以下方式配置RP:
-
静态RP:在网络中的所有PIM路由器上配置相同的RP地址,静态指定RP的位置。
-
动态RP:在PIM域内选择几台PIM路由器,配置C-RP(Candidate-RP,候选RP)来动态竞选出RP。同时,还需要通过配置C-BSR(Candidate-BSR,候选BSR)选举出BSR,来收集C-RP的通告信息,向PIM-SM域内的所有PIM路由器发布。
BSR的作用是收集C-RP的信息并形成RP-Set信息,BSR通过PIM报文将RP-Set信息扩散给所有PIM路由器。
C-BSR在竞选的时候,开始时每个C-BSR都认为自己是BSR,向全网发送Bootstrap报文。Bootstrap报文中携带C-BSR地址、C-BSR的优先级。每一台PIM路由器都收到所有C-BSR发出的Bootstrap报文,通过比较这些C-BSR信息,竞选产生BSR。竞选规则如下: -
优先级较高者获胜(优先级数值越大优先级越高)。
-
如果优先级相同,IP地址较大者获胜。
-
C-RP向BSR发送Advertisement报文,报文中携带C-RP地址、服务的组范围和C-RP优先级。
-
BSR将这些信息汇总为RP-Set,封装在Bootstrap报文中,发布给全网的每一台PIM-SM路由器。
-
各PIM路由器根据RP-Set,使用相同的规则进行计算和比较,从多个针对特定组的C-RP中竞选出该组RP。规则如下:
-
与用户加入的组地址匹配的C-RP服务的组范围掩码最长者获胜。
-
如果以上比较结果相同,则C-RP优先级较高者获胜(优先级数值越小优先级越高)。
-
如果以上比较结果都相同,则执行Hash函数,计算结果较大者获胜。
-
如果以上比较结果都相同,则C-RP的IP地址较大者获胜。
-
-
由于所有PIM路由器使用相同的RP-Set和竞选规则,所以得到的组播组与RP之间的对应关系也相同。PIM路由器将“组播组—RP”对应关系保存下来,指导后续的组播操作。
DR竞选
在组播源或组成员所在的网段,通常同时连接着多台PIM路由器。这些PIM路由器之间通过交互Hello报文成为PIM邻居,Hello报文中携带DR优先级和该网段接口地址。PIM路由器将自身条件与对方报文中携带的信息进行比较,选举出DR来负责源端或组成员端组播报文的收发。竞选规则如下:
-
DR优先级较高者获胜(网段中所有PIM路由器都支持DR优先级)。
-
如果DR优先级相同或该网段存在至少一台PIM路由器不支持在Hello报文中携带DR优先级,则IP地址较大者获胜。
在ASM模型中,DR主要作用如下: -
在连接组播源的共享网段,由DR负责向RP发送Register注册报文。与组播源相连的DR称为源端DR。
-
在连接组成员的共享网段,由DR负责向RP发送Join加入报文。与组成员相连的DR称为组成员端DR。
组播分发树
PIM-SM(ASM)模式首次形成组播分发树主要依赖RPT构建机制,组播源注册机制与DR选举机制。
-
RPT构建机制:组播叶子路由器主动建立到RP的组播分发树(RPT)
-
组播源注册机制:通过该机制形成组播源到RP的组播分发树(SPT)
-
DR选举机制:DR负责源端或组成员端组播报文的收发,避免重复组播报文,同时成员端DR还负责发送Join加组消息。
组播源注册
组播源注册机制帮助形成源端DR到RP的组播分发树(SPT)
在PIM-SM网络中,任何一个新出现的组播源都必须首先在RP处“注册”,继而才能将组播报文传输到组成员。具体过程如下:
- 组播源将组播报文发给源端DR。
- 源端DR接收到组播报文后,将其封装在单播Register报文中,发送给RP。
- RP接收到单播Register报文,将其解封装,建立(S,G)表项,并将组播数据沿RPT发送到达组成员。
SPT建立后,RP使用Register-Stop报文通知源端DR后续报文可以以组播报文形式发送。
RPT构建
PIM-SM RPT是一棵以RP为根,以存在组成员关系的PIM路由器为叶子的组播分发树
当网络中出现组成员(用户主机通过IGMP加入某组播组G)时,组成员端DR向RP发送Join报文,在通向RP的路径上逐跳创建(*,G)表项,生成一棵以RP为根的RPT。
在RPT构建过程中,PIM路由器在发送Join报文时,会进行RPF检查:查找到达RP的单播路由,单播路由的出接口为上游接口,下一跳为RPF邻居。Join报文从组成员端DR开始逐跳发送,直至到RP。
RPT次优路径问题
在PIM-SM网络中,一个组播组只对应一个RP,只构建一棵RPT。在未进行SPT切换的情况下,所有发往该组的组播报文都必须先封装在注册报文中发往RP,RP解封装后,再沿RPT分发。RP是所有组播报文必经的中转站,当组播报文速率逐渐变大时,对RP形成巨大的负担。为了解决此问题,PIM-SM允许RP或组成员端DR通过触发SPT切换来减轻RP的负担。
-
RP触发SPT切换
RP收到源端DR的注册报文后,将封装在Register报文中的组播报文沿RPT转发给组成员,同时RP会向源端DR逐跳发送Join报文。发送过程中在PIM路由器创建(S,G)表项,从而建立了RP到源的SPT。
SPT树建立成功后,源端DR直接将组播报文转发到RP,使源端DR和RP免除了频繁的封装与解封装。
-
组成员端DR触发SPT切换
组成员端DR周期性检测组播报文的转发速率,一旦发现(S,G)报文的转发速率超过阈值,则触发SPT切换:
- 组成员端DR逐跳向源端DR逐跳发送Join报文并创建(S,G)表项,建立源端DR到组成员DR的SPT。
- SPT建立后,组成员端DR会沿着RPT逐跳向RP发送剪枝报文,删除(*,G)表项中相应的下游接口。剪枝结束后,RP不再沿RPT转发组播报文到组成员端。
- 如果SPT不经过RP,RP会继续向源端DR逐跳发送剪枝报文,删除(S,G)表项中相应的下游接口。剪枝结束后,源端DR不再沿“源端DR-RP”的SPT转发组播报文到RP。
缺省情况下,设备一般未设置组播报文转发速率的阈值,RP或者组成员端DR在接收到第一份组播报文时都会触发各自的SPT切换。
PIM-SM(SSM模型)
SSM模型是借助PIM-SM的部分技术和IGMPv3/MLDv2来实现的,无需维护RP、无需构建RPT、无需注册组播源,可以直接在源与组成员之间建立SPT。
SSM的特点是网络用户能够预先知道组播源的具体位置。因此用户在加入组播组时,可以明确指定从哪些源接收信息。组成员端DR了解到用户主机的需求后,直接向源端DR发送Join报文。Join报文逐跳向上传输,在源与组成员之间建立SPT。
在SSM模型中,PIM-SM的关键机制包括邻居发现、DR竞选、构建SPT。
SPT构建
SPT的建立过程如下:
- RouterD、RouterE借助IGMPv3/MLDv2协议了解到用户主机有到相同组播组不同组播源的组播需要,逐跳向源方向发送Join报文。
- PIM路由器通过Join报文分别创建(S1,G)、(S2,G)表项,从而分别建立了源S1到组成员HostA、源S2到组成员HostB的SPT。
- SPT建立后,源端就会将组播报文沿着SPT分发给组成员。
比较
协议 | 名称 | 模型分类 | 适用场景 | 工作机制 |
---|---|---|---|---|
PIM-DM | Protocol Independent Multicast-Dense Mode 协议无关组播—密集模式 | ASM模型 | 适合规模较小、组播组成员相对比较密集的局域网。 | 通过周期性“扩散-剪枝”维护一棵连接组播源和组成员的单向无环SPT。 |
PIM-SM | Protocol Independent Multicast-Sparse Mode 协议无关组播—稀疏模式 | ASM模型 | 适合网络中的组成员相对比较稀疏,分布广泛的大型网络。 | 采用接收者主动加入的方式建立组播分发树,需要维护RP、构建RPT、注册组播源。 |
SSM模型 | 适合网络中的用户预先知道组播源的位置,直接向指定的组播源请求组播数据的场景。 | 直接在组播源与组成员之间建立SPT,无需维护RP、构建RPT、注册组播源。 |
配置
[Huawei] multicast routing-enable 开启路由器组播功能
[Huawei - GigabitEthernet1/0/0] pim sm 在接口上使能PIM-SM
[Huawei - GigabitEthernet1/0/0] pim dm 在接口上使能PIM-DM
pim-sm配置RP:
[AR1]pim
[AR1-pim]static-rp 3.3.3.3 通常用路由器的loopback口
[Huawei - GigabitEthernet1/0/0] igmp enable 使能IGMP功能
[Huawei]igmp-snooping enable 全局使能IGMP snopping功能
<Huawei> display igmp interface 查看接口的IGMP配置和运行信息
<Huawei> display igmp group 查看加入组播组的成员信息
<Huawei> display pim neighbor 查看PIM邻居参数
<Huawei> display pim routing-table 看PIM路由表参数
Comments NOTHING