什么是组播?让我们一起解密组播协议(IGMP、PIM)
写在前面:本人是一名计算机系大二的学生,会不定时的将我的学习笔记分享给大家!如果需要更多的学习资源可以通过我的GitHub自行下载!
组播技术
-
传统的点到点
-
单播存在的问题
- 重复流量过多
- 消耗设备资源、带宽资源
- 难以保证传输质量
概述
-
信息发送者:组播源
-
接受相同的信息接受这过程一个组播组,并且接受者都是
-
定义:一点发出,多点接应
优势
- 提高效率
- 优化性能
- 分布式应用
缺点
- 基于udp
- 尽力而为
- 报文重复
- 报文失序
- 缺少拥塞避免机制6
1、ip组播
(1) 对于IP 组播,需要关注下列问题:
- 组播源将组播信息传输到哪里?即组播寻址机制;
- 网络中有哪些接收者?即主机注册;
- 这些接收者需要从哪个组播源接收信息?即组播源发现;
- 组播信息如何传输?即组播路由。
(2) IP 组播属于端到端的服务,组播机制包括以下四个部分:
- 寻址机制:借助组播地址,实现信息从组播源发送到一组接收者;
- 主机注册:允许接收者主机动态加入和离开某组播组,实现对组播成员的管理;
- 组播路由:构建组播报文分发树(即组播数据在网络中的树型转发路径),并通过该分发树将报文从组播源传输到接收者;
- 组播应用:组播源与接收者必须安装支持视频会议等组播应用的软件,TCP/IP 协议栈必须支持组播信息的发送和接收。
为了让组播源和组播组成员进行通信,需要提供网络层组播地址,即IP 组播地址。同时必须存在一种技术将IP 组播地址映射为链路层的组播MAC 地址。
(3) IP 组播地址
- IANA(Internet Assigned Numbers Authority,互联网编号分配委员会)将D类地址空间分配给IPv4组播使用,范围从224.0.0.0到239.255.255.255,具体分类及其含义如下表所示。
组播地址
D类地址范围 | 含义 |
---|---|
224.0.0.0-224.0.0.255 | 为路由协议预留的永久组地址 |
224.0.1.0-231.255.255.255 / 233.0.0.0-238.255.255.255 |
用户可用的asm临时组地址,全网范围有效 |
232.0.0.0-232.255.255.255 | 用户可用ssm临时组地址,全网范围内有效 |
239.0.0.0-239.255.255.255 | 用户可用的asm临时组地址,尽在特定的本地管理域内有效,陈伟本地管理组播地址 |
IPv4 组播地址的范围及含义
说明:
- 组播组中的成员是动态的,主机可以在任何时刻加入或离开组播组。
- GLOP 是一种AS(Autonomous System,自治系统)之间的组播地址分配机制,将AS 号填入该范围内组播地址的中间两个字节中,每个AS 都可以得到255 个组播地址。有关GLOP 的详细介绍请参见RFC 2770。
2、组播模型分类
根据接收者对组播源处理方式的不同,组播模型分为以下三类:
(1) ASM 模型
:Any-Source Multicast,任意信源组播
-
在ASM 模型中,任意一个发送者都可以作为组播源向某组播组地址发送信息。众多接收者通过加入由该组播组地址标识的组播组以获得发往该组播组的组播信息。
-
在ASM 模型中,接收者无法预先知道组播源的位置,但可以在任意时间加入或离开该组播组。
(2) SFM 模型
:Source-Filtered Multicast,信源过滤组播
-
该模型继承了ASM 模型,从发送者角度来看,两者的组播组成员关系完全相同。SFM 模型在功能上对ASM 模型进行了扩展。
-
在SFM 模型中,上层软件对收到的组播报文的源地址进行检查,允许或禁止来自某些组播源的报文通过。
-
因此,接收者只能收到来自部分组播源的组播数据。从接收者的角度来看,只有部分组播源是有效的,组播源被经过了筛选。
(3)SSM 模型
:Source-Specific Multicast,指定信源组播
-
在现实生活中,用户可能只对某些组播源发送的组播信息感兴趣,而不愿接收其它源发送的信息。该模型为用户提供了一种能够在客户端指定组播源的传输服务。
-
SSM 模型与ASM 模型的根本区别在于:SSM 模型中的接收者已经通过其它手段预先知道了组播源的具体位置。SSM 模型使用与ASM/SFM 模型不同的组播地址范围,直接在接收者与其指定的组播源之间建立专用的组播转发路径。
组播服务模型:针对接受者对源如何进行选择
模型 | 备注 |
---|---|
asm | any-source multicast,任意源组播 ,任意发送者都可以成为组播,接受者无法预先只掉组播的位置,接受者可以在任意时间加入或离开该主机组,要求组播地址必须整个组播网络中唯一 (同一个时刻一个asm地址只能被一种组播应用使用) |
ssm | source-secific multicast,源指定组播 ,接受者在加入组播以后,主机只会收到指定源发送该组的数据,主播地址不再要求全网唯一,只需要每个组播源上保持唯一(同一个源上不同的组播应用必须使用不同的ssm地址来区别) |
sfm | Source-Filtered Multicast,信源过滤组播 .该模型继承了ASM 模型,从发送者角度来看,两者的组播组成员关系完全相同。SFM 模型在功能上对ASM 模型进行了扩展。 |
asm模型
- 接收端只能加入某组播组,而无法具体选择组播源
ssm模型
- 接收端指定组播源
组播ip地址
永久地址 | 含义 |
---|---|
224.0.0.1 | 所有系统,包含主机与路由器 |
224.0.0.2 | 所有组播路由器 |
224.0.0.3 | 未分配 |
224.0.0.4 | DVMRP(distance vector multicast routing protocol,,距离矢量组播路由协议)路由器 |
224.0.0.5 | ospf(open shorter path first,开放式最短路径)路由器 |
224.0.0.6 | ospf指定路由器\备用指定路由器 |
224.0.0.7 | ST(shared tree,共享树)路由器 |
224.0.0.8 | ST主机 |
224.0.0.9 | rip-2(routing information protocol version 2,路由信息协议版本2)路由器 |
224.0.0.11 | 移动代理 |
224.0.0.12 | DHCP(dynamic host configuration protocol,动态主机配置协议)服务器/中继代理 |
224.0.0.13 | 所有pim(protocol independent multical,协议无关组播)路由器 |
组播mac地址
-
高24bit=0x01005e,第25bit=0,第23bit=组播ip地址的第23bit
-
mac地址=01-00-5e(前缀)
- 优于ip地址的前4bit是1110,代表主笔标识,而后28bit中只有23bit被映射到mac地址表,这样ip地址中就有5bit信息丢失,直接的结果就是出现32个ip组播地址映射到同一个mac地址上。
组播的基本架构
- 数据发送
- 转发
- 接受
关注事项 | 备注 |
---|---|
哪里有组播接受者 | 组播邻居建立 |
从哪里可以获得组播数据 | 组播源发现技术 |
将组播数据传输到哪里 | 组播寻址机制 |
如何传输组播信息 | 组播路由 |
- 组播路由协议包括
作用 | |
---|---|
DVMP | distance vector multicast routing protocol,距离矢量组播路由协议 ,一种密集式协议,该协议有跳数限制,最大32跳 |
MOSPF | ospf路由协议的扩展,他通过定义新的lsa来支持组播 |
PIM | protocol independent multicast,协议无关组播, 分为DM和SM两种模型,当接受者分布为较密集时,使用DM,较为稀疏时,使用SM。PIM必须和单播路由协议同工作 |
#
PIM DM
#
MPLS 1
MPLS ldp
mpls 12vpn
mpls lsr-id 1.1.1.1
#
- 域间组播协议
名称 | |
---|---|
MSDP | multicast source discovery protocol,能够跨越as传播组播源信息 |
MPBGP | multprotocol border getway protocol 能够跨越as传播组播路由 |
- 对于ssm模型,没有域内和域间划分。优于接受者预先只掉组播的具体位置,因此可以借助pim sm的功能直接创建组播传输路劲
3、IGMP
IGMP(Internet Group Management Protocol)
互联网组管理协议是TCP/IP 协议族中负责IP组播成员管理的协议,用来在IP主机和与其直接相邻的组播路由器之间建立、维护组播组成员关系。
到目前为止,IGMP 有三个版本:
- IGMPv1(由RFC 1112 定义)
- IGMPv2(由RFC 2236 定义)
- IGMPv3(由RFC 3376 定义)
所有版本的IGMP 都支持ASM(Any-Source Multicast,任意信源组播)模型;IGMPv3
可以直接应用于SSM(Source-Specific Multicast,指定信源组播)模型,而IGMPv1 和IGMPv2
则需要在IGMP SSM Mapping 技术的支持下才能应用于SSM 模型。
工作机制
- 主机加入或离开朱伯伯
- 路由器维护组播组
- 查询器选举
- 成员报告抑制
igmp
- 负责主笔成员管理,运行主机和路由器之间
- 主机侧:通过ICMP协议向路由通告组承欢关系
- 路由器侧:通过icmp维护组成员关系
版本 | 备注 |
---|---|
igmpv1 | 定义了基本的组成员查询和报告过程,rfc1112 |
igmpv2 | 在igmpv1的基础上太那几了查询选举器和离开机制,rfc2236 |
igmpv3 | 成员可以指定接收或不接受某些组播源的报文,rfc3376 |
- 所有版本都支持asm模型
- igmpv3可以直接用用与ssm模型,igmpv1和v2则需要ssm-mapping技术的支持
- 圆形igmp高版本路由器可以识别低版本的(向前兼容)
IGMP 工作机制
1. IGMPv1 工作机制
IGMPv1 主要基于查询和响应机制来完成对组播组成员的管理。当一个网段内有多台组播路由器时,由于它们都能从主机那里收到IGMP
成员关系报告报文(Membership Report Message)。因此,只需其中一台路由器发送IGMP 查询报文(Query
Message)就足够了。这时就需要有一个查询器(Querier)的选举机制来确定由哪台路由器作为IGMP查询器。
对于IGMPv1 来说,由组播路由协议(如PIM)选举出唯一的组播信息转发者DR(Designated Router,指定路由器)作为IGMP 查询器。
IGMP 查询相应示意图
如上图所示,假设Host B与Host C想要收到发往组播组G1 的组播数据,而Host A想要收到发往组播组G2
的组播数据,那么主机加入组播组以及IGMP查询器(Router B)维护组播组成员关系的基本过程如下:
- 主机将主动发送IGMP 成员关系报告报文到其要加入的组播组,以声明加入,而不必等待IGMP查询器发来的IGMP 查询报文
- IGMP 查询器周期性地以组播方式,向本地网段内的所有主机与路由器发送IGMP 查询报文(目的地址为224.0.0.1);
- 在收到该查询报文后,关注G1 的Host B 与Host C 其中之一(这取决于谁的延迟定时器先超时),譬如Host B
会首先以组播方式向G1 发送IGMP 成员关系报告报文,以宣告其属于G1。
由于本地网段中的所有主机和路由器都能收到Host B 发往G1 的报告报文,因此当Host C
收到该报告报文后,将不再发送同样针对G1的报告报文,因为IGMP 路由器(Router A和Router B)已知道本地网段中有对G1
感兴趣的主机了。这个机制称为主机上的IGMP 成员关系报告抑制机制,该机制有助于减少本地网段的信息流量;
4.与此同时,由于Host A 关注的是G2,所以它仍将以组播方式向G2 发送报告报文,以宣告其属于G2;
5.经过以上的查询和响应过程,IGMP 路由器了解到本地网段中有G1 和G2 的成员,于是由组播路由协议(如PIM)生成(,G1)和(,G2)组播转发项作为组播数据的转发依据,其中的“*”代表任意组播源;
6.当由组播源发往G1 或G2 的组播数据经过组播路由到达IGMP 路由器时,由于IGMP 路由器上存在(,G1)和(,G2)组播转发项,于是将该组播数据转发到本地网段,接收者主机便能收到该组播数据了。
IGMPv1 没有专门定义离开组播组的报文。当运行IGMPv1
的主机离开某组播组时,将不会向其要离开的组播组发送报告报文。当网段中不再存在该组播组的成员后,IGMP
路由器将收不到任何发往该组播组的报告报文,于是IGMP 路由器在一段时间之后便删除该组播组所对应的组播转发项。
2. IGMPv2 的改进
与IGMPv1 相比,IGMPv2 增加了查询器选举机制和离开组机制。
(1) 查询器选举机制
在IGMPv1 中,当某共享网段上存在多个组播路由器时,由组播路由协议(如PIM)选举的指定路由器充当查询器。
在IGMPv2 中,增加了独立的查询器选举机制,其选举过程如下:
- 所有IGMPv2 路由器在初始时都认为自己是查询器,并向本地网段内的所有主机和路由器发送IGMP 普遍组查询(General Query)报文(目的地址为224.0.0.1);
- 本地网段中的其它IGMPv2 路由器在收到该报文后,将报文的源IP地址与自己的接口地址作比较。通过比较, IP 地址最小的路由器将成为查询器, 其它路由器成为非查询器(Non-Querier);
- 所有非查询器上都会启动一个定时器(即其它查询器存在时间定时器Other Querier Present Timer)。在该定时器超时前,如果收到了来自查询器的IGMP 查询报文,则重置该定时器;否则,就认为原查询器失效,并发起新的查询器选举过程。
(2) 离开组机制
在IGMPv1 中,主机离开组播组时不会向组播路由器发出任何通知,导致组播路由器只能依靠组播组成员查询的响应超时来获知组播组成员的离开。
而在IGMPv2 中,当一个主机离开某组播组时:
- 该主机向本地网段内的所有组播路由器(目的地址为224.0.0.2)发送离开组(Leave Group)报文;
- 当查询器收到该报文后, 向该主机所声明要离开的那个组播组发送特定组查询(Group-Specific Query)报文(目的地址字段和组地址字段均填充为所要查询的组播组地址);
- 如果该网段内还有该组播组的其它成员,则这些成员在收到特定组查询报文后,会在该报文中所设定的***响应时间(Max Response Time)内发送成员关系报告报文;
- 如果在***响应时间内收到了该组播组其它成员发送的成员关系报告报文,查询器就会继续维护该组播组的成员关系;否则,查询器将认为该网段内已无该组播组的成员,于是不再维护这个组播组的成员关系。
3. IGMPv3 的改进
IGMPv3 在兼容和继承IGMPv1 和IGMPv2 的基础上,进一步增强了主机的控制能力,并增强了查询和报告报文的功能。
(1) 主机控制能力的增强
IGMPv3 增加了针对组播源的过滤模式(INCLUDE/EXCLUDE),使主机在加入某组播组G的同时,能够明确要求接收或拒绝来自某特定组播源S的组播信息。当主机加入组播组时:
- 若要求只接收来自指定组播源如S1、S2、……的组播信息,则其报告报文中可以标记为INCLUDE Sources(S1,S2,……);
- 若拒绝接收来自指定组播源如S1、S2、……的组播信息,则其报告报文中可以标记为EXCLUDE Sources(S1,S2,……)。
指定源组的组播流路经
-
如上图所示,网络中存在Source 1(S1)和Source 2(S2)两个组播源,均向组播组G发送组播报文。Host B仅对从Source1 发往G的信息感兴趣,而对来自Source 2 的信息没有兴趣。
-
如果主机与路由器之间运行的是IGMPv1 或IGMPv2,Host B 加入组播组G 时无法对组播源进行选择,因此无论Host B 是否需要,来自Source 1 和Source 2 的组播信息都将传递给Host B。
-
当主机与路由器之间运行了IGMPv3 之后,Host B 就可以要求只接收来自Source 1、发往G 的组播信息(S1,G),或要求拒绝来自Source 2、发往G 的组播信息(S2,G),这样就只有来自Source 1 的组播信息才能传递给Host B 了。
(2) 查询和报告报文功能的增强
a. 携带源地址的查询报文
IGMPv3 不仅支持IGMPv1 的普遍组查询和IGMPv2 的特定组查询,而且还增加了对特定源组查询的支持:
- 普遍组查询报文中,既不携带组地址,也不携带源地址;
- 特定组查询报文中,携带组地址,但不携带源地址;
- 特定源组查询报文中,既携带组地址,还携带一个或多个源地址。
b. 包含多组记录的报告报文
IGMPv3 报告报文的目的地址为224.0.0.22,可以携带一个或多个组记录。在每个组记录中,包含有组播组地址和组播源地址列表。组记录可以分为多种类型,如下:
IS_IN
:表示组播组与组播源列表之间的过滤模式为INCLUDE,即只接收从指定组播源列表发往该组播组的组播数据。IS_EX
:表示组播组与组播源列表之间的过滤模式为EXCLUDE,即只接收从指定组播源列表之外的组播源发往该组播组的组播数据。TO_IN
:表示组播组与组播源列表之间的过滤模式由EXCLUDE 转变为INCLUDE。TO_EX
:表示组播组与组播源列表之间的过滤模式由INCLUDE 转变为EXCLUDE。ALLOW
:表示在现有状态的基础上,还希望从某些组播源接收组播数据。如果当前的对应关系为INCLUDE,则向现有组播源列表中添加这些组播源;如果当前的对应关系为EXCLUDE,则从现有组播源列表中删除这些组播源。BLOCK
:表示在现有状态的基础上,不再希望从某些组播源接收组播数据。如果当前的对应关系为INCLUDE,则从现有组播源列表中删除这些组播源;如果当前的对应关系为EXCLUDE,则向现有组播源列表中添加这些组播源。
IGMPv1
工作机制
- 普遍组查询与响应。
- 响应抑制机制。
支持的报文
- 普遍组查询报文(General Query):路由器周期性地向224.0.0.1地址(表示同一网段内所有主机和路由器)发送通用查询报文,默认查询周期为60秒,发送周期可以通过命令配置。
- 成员关系报告报文(Membership Report):用于主机加入某个组播组。
成员加入
- 不等待普遍组查询报文
组成员离开
- 没有离开的组消息
查询器选举
- 没有路由选举机制,依赖组播协议在某段网络中选举一个查询器
IGMPv2
组成员离开
- 向组播源发送特定的组查询,发送两次后还没有收到,就认为组播成员离开
查询器选举
以小为优
,将报文的源ip地址和自己的接口地址比较,ip地址小的成为查询器
igmpv1和v2比较
IGMPv1报文:
- 版本:包含IGMP版本标识,因此设置为1。
- 类型:普遍组查询 (0x11),成员关系报告 (0x12)。
- 组地址:普遍组查询报文中,组地址为0;成员关系报告报文中,组地址为成员想要加入的组播组的地址。
IGMPv2报文
:IGMPv2报文与IGMPv1报文略有不同,它取消了版本字段,增加了最大响应时间字段。
- 类型:相比于IGMPv1,IGMPv2新增了两种报文:
- 特定组查询报文(0x11):查询器向共享网段内指定组播组发送的查询报文,用于查询该组播组是否存在成员。
- 成员离开报文(0x17):成员离开组播组时主动向路由器发送的报文,用于宣告自己离开了某个组播组。
- 最大响应时间:表示主机响应查询返回报告的最大时间。
- 对于普遍组查询,最大响应时间默认为
10
秒。 - 对于特定组查询,最大响应时间默认为
1
秒。
- 对于普遍组查询,最大响应时间默认为
- 组地址:
- 普遍组查询报文中,组地址设置为0。
- 特定组查询报文中,组地址为需要查询的组地址。
- 在成员报告或离开组的消息中,组地址为需要报告或离开的组地址。
IGMPv3
- 报文类型
- 查询报文:含普遍组查询报文和特定组查询报文,还新增了特定源组
- 报告报文:含主机想要加入的组播组,而且包含主机想要接收来自哪些组播源的数据
- 没有专门的成员离开报文,成员离开通过特定类型的报告报文来传达。
IGMP配置
命令 | 备注 |
---|---|
multicast routing-enable | 启用组播路由 |
igmp enable | 接口开启igmp |
igmp version 2 | 配置igmp版本 |
display igmp interface | 验证igmp接口 |
display igmp group | 验证igmp组信息 |
igmp static-group 255.1.1.1 | 配置静态igmp表项 (解决bug) |
igmp版本比较
机制 | igmpv1 | igmpv2 | igmpv3 |
---|---|---|---|
查询器选举方式 | 依靠pim协议 | 自己选举 | 自己选举 |
成员离开方式 | 静默离开 | 主动发送离开报文 | 主动发送离开报文 |
特定组查询 | 不支持 | 支持 | 支持 |
指定源、组 | 不支持 | 支持 | 支持 |
成员报告报文 | 支持 | 支持 | 支持 |
成员离开报文 | 不支持 | 支持 | 没有定义专门的成员离开报文,成员离开通过特定类型的报告报文来传达 |
指定组播源 | 不支持 | 不支持 | 支持 |
可识别协议版本 | igmpv1 | igmpv1,igmpv2 | igmpv1,igmpv2,igmpv3 |
asm模型 | 支持 | 支持 | 支持 |
ssm模型 | 需要igmp ssm mapping支持 | 需要igmp ssm mapping支持 | 支持 |
IGMP snooping
- IGMP Snooping,是Internet Group Management Protocol Snooping(互联网组管理协议窥探)的简称,它是运行在二层设备上的组播约束的机制,用于管理和控制组播组。
- IGMP Snooping监听IGMP协议包,提取相应的信息,形成组播成员关系表,然后对组播业务按照组成员关系进行转发,保证组成员收到正确的的组播业务,而其余主机无法收到。
- IGMP Snooping相对于路由器和主机是透明的,它仅仅监听两者之间的IGMP报文,来建立自己的组播成员关系表
工作原理
- IGMP Snooping是二层组播的基本功能,可以实现组播数据在数据链路层的转发和控制。当主机和上游三层设备之间传递的IGMP协议报文通过二层组播设备时,IGMP Snoopin g分析报文携带的信息,根据这些信息建立和维护二层组播转发表,从而指导组播数据在数据链路层按需转发。
路由端口 (Router Port)
-
路由器端口都是指二层组播设备上朝向组播路由器的接口,而不是指路由器上的接口。
-
二层组播设备上朝向三层组播设备(DR或IGMP查询器)一侧的接口,二层组播设备从此接口接收组播数据报文。
-
由协议生成的路由器端口叫做动态路由器端口。
-
收到源地址不为0.0.0.0的IGMP普遍组查询报文或PIM Hello报文(三层组播设备的PIM接口向外发送的用于发现并维持邻居关系的报文)的接口都将被视为动态路由器端口。
-
手工配置的路由器端口叫做静态路由器端口。
成员端口 (Member Port)
-
如SwitchA和SwitchB上×××方框表示的接口。
-
又称组播组成员端口,表示二层组播设备上朝向组播组成员一侧的端口,二层组播设备往此接口发送组播数据报文。
由协议生成的成员端口叫做动态成员端口。收到IGMP Report报文的接口,二层组播设备会将其标识为动态成员端口。 -
手工配置的成员端口叫做静态成员端口。
路由器端口和成员端口,是二层组播转发表项中的一个重要信息:出接口。其中路由器端口相当于上游接口,成员端口相当于下游接口。通过协议报文学习到的端口,对应的为动态表项;而手工配置的端口,对应的为静态表项。 -
除了出接口外,每条表项还包括组播组地址和VLAN编号。
组播组地址,可以为组播IP地址,也可以为组播IP地址映射后的组播MAC地址。按照IP地址转发的模式可以避免MAC地址转发模式中的地址重复问题。 -
VLAN编号,指定了二层广播域范围。如果使用了组播VLAN功能,入VLAN编号为组播VLAN的编号,出VLAN编号为主机所在的用户VLAN编号。否则入VLAN编号和出VLAN编号均为主机所在VLAN的编号。
端口角色 | 作用 | 如何生成 |
---|---|---|
路由器端口 | 接收组播数据,上游接口 | a、收到源地址不为0.0.0.0的igmp普遍组查询报文或pim hello报文的接口都将被叫为动态路由器端口 ;b、手工配置的路由器端口叫做静态路由器端口 |
成员端口 | 发送组播数据,下游接口 | a、收到igmp report报文的接口,叫做动态成员端口 ;b、手工配置的成员端口叫做静态成员端口 |
例子
#
multicast routing-enable
interface G0/0/1
ip address 192.168.1.1 255.255.255.0
igmp enable
igmp version 2
#
配置
命令 | 备注 |
---|---|
igmp-snooping | 开启igmp-snooping,系统 |
vlan x / igmp-snooping enable | 开启vlan下的igmp-snooping |
display igmp-snooping router-port vlan x | 验证igmp-snooping路由器端口 |
display igmp-snooping port-info | 验证igmp-snooping成员端口 |
bug
成员接口配置igmp s退出后还在,同一个交换机另外的成员查询被隔离,报告也被隔离
- 解决:
igmp static-group 255.1.1.1
4、pim
概述
-
协议无关组播,利用rpf检查
-
运行于路由器与路由器之间
-
给组播提供路由可以是一种单播路由协议
pim-dm
- PIM定义了两种模式道:密集模式(Dense-Mode)和稀疏模式(Sparse-Mode)。
- 协议无关协议
- 使用推方式来传送数据
- 使用小型网络
工作流程
- 邻居发现、扩散、剪枝
选举规则
- 到组播源的
优先级高
者 - 到组播源的
度量值较小
的 - 本地
接口地址较大
者
构建SPT
- 扩散过程
- rpf检查
- 剪枝过程
状态刷新
- 周期性得刷新剪枝状态
机制
-
graft
:新的成员加入主播后快速得到组播报文 -
assert
:避免重复组播报文-
竞选规则
-
单播路由协议
优先级小
的 -
组播路由协议
开销小
的 -
接受者MA网络接口
ip地址大
的 -
竞选结果
-
assert winner
:获胜的一方,负责后续对该网段报文的转发 -
assert loser
:落败的一方,不会对该网段传输组播报文,PIM路由器也会将其从(S,G)表项下游接口列表中删除。 -
Assert竞选结束后,该网段上只存在一个下游接口,只传输一份组播报文。
-
所有Assert Loser可以周期性地恢复组播报文转发,从而引发周期性的Assert机制。
-
配置
命令 | 备注 |
---|---|
multicast routing-enable | |
pim dm | 开启pim协议 |
dis pim routing-table | 查看路由表 |
dis pim neighbor | 查看邻居关系 |
局限性
- PIM-DM适用于组播成员分布较为密集的园区网络。
- PIM-DM的局限性:
- 在组播成员分布较为稀疏的网络中,组播流量的周期性扩散会给网络带来较大负担。
pim-sm
基本概述
-
使用“拉(Pull)模式”转发组播报文。
-
PIM-SM的关键任务:
- 建立RPT(Rendezvous Point Tree,汇聚点树也称共享树)。
- 建立SPT(Shortest Path Tree,最短路径树)。
-
适用于组播成员分布较为稀疏的网络环境。
汇聚点RP(rendezvous point)
- 充当RPT树的根节点。
- 共享树中的所有组播流量都经过RP转发给接收者。
- 所有PIM路由器都要知道RP的位置。
- RP的作用:
- RP是PIM-SM域中的核心路由器,担当RPT树根节点。
- 共享树里所有组播流量都要经过RP转发给接收者。
- RPT的建立过程:
-
主机加入某个组播组时,发送IGMP成员通告。
-
最后一跳路由器向RP发送(*,G)Join消息。
-
(,G)Join消息到达RP的过程中,沿途各路由器都会生成相应的(*,G)组播转发条目。
-
DR
-
运行PIM-SM的网络,都会进行DR(Designated Router)的选举。其中有两种DR分别称为接收者侧DR和组播源侧DR。
- 组播接收者侧DR:与组播组成员相连的DR,负责向RP发送(*,G)的Join加入消息。
- 组播源侧DR:与组播源相连的DR,负责向RP发送单播的Register消息。
-
PIM-SM中DR的选举原则与PIM-DM相同。
STP建立
- 组播源向组播组发送第一个组播报文。
- 源端DR将该组播报文封装成Register报文并以单播方式发送给相应的RP。
- RP收到注册消息后,一方面从Register消息中提取出组播报文,并将该组播报文沿RPT分支转发给接收者。
- 另一方面,RP向源端DR发送(S,G)Join消息,沿途路由器上都会生成相应(S,G)表项。从而建立了一颗由组播源至RP的SPT树。
- SPT树建立后,组播源发出的组播报文沿该SPT转发至RP。
RP沿SPT收到该组播报文后,向源端DR单播发送Register-stop消息。
(*,G)与(S,G)条目关系
switchover机制
- 用户端DR周期性检测组播报文的转发速率,一旦发现从RP发往组播组G的报文速率超过阈值,则触发SPT切换:
- 用户端DR逐跳向源端DR发送(S,G)Join报文并创建(S,G)表项,建立源端DR到用户端DR的SPT。
- SPT建立后,用户端DR会沿着RPT逐跳向RP发送剪枝报文,收到剪枝报文的路由器将(*,G)复制成相应的(S,G),并将相应的下游接口置为剪枝状态。剪枝结束后,RP不再沿RPT转发组播报文到组成员端。
- 如果SPT不经过RP,RP会继续向源端DR逐跳发送剪枝报文,删除(S,G)表项中相应的下游接口。剪枝结束后,源端DR不再沿“源端DR-RP”的SPT转发组播报文到RP。
(*,G)与(S,G)条目关系
配置
multicast routing-enable
int xxx
pim sm //开启pim sm 模式(接口下)
----
pim
static-rp xxxx //静态配置地址
--验证--
dis pim routing-table
dis pim neighbor
本文均属原创,如有错误或不详,敬请指出!
本文作者:肉肉
版权声明:博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明出处!