组播
一个发送者需要同时向多个接收者发送完全相同的信息时,如果采用单播方式,则网络需要传输大量的报文,相比之下,采用组播的方式可以大大减少需要传输的报文数量,从而可以节约大量的网络资源。随着Internet的不断发展,电子商务,网络会议、视频点播、远程教学等服务大量兴起,这些服务大多符合点到多点的模式,特别适合于IP组播的应用。
组播的优势:
① 提高效率:降低网络流量、减轻意见负荷
② 优化性能:减少冗余流量、节约网络带宽、降低网络负载
③ 分布式应用:使多点应用成为可能
组播基于UDP传送,存在劣势:
① 采用尽力而为
② 没有拥塞避免机制
③ 报文重复
④ 报文失序
一. 组播地址分类:
1.组播IP地址:
一个组播地址就是一个IP地址,该地址不表示具体的主机,而是表示一些列的系统集合。IANA将IP中的D类作为组播IP地址,范围为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.255 |
用户可用的ASM临时组地址,仅在特定的管理域内有效,称为本地管理组播地址 |
注:D类组播地址不存在网络地址和广播地址。
(1)保留地址:
224.0.0.0~224.0.0.255为预留的组播地址(永久组地址),地址224.0.0.0保留不做分配,其它地址供路由协议使用。
组播地址IP |
协议类型 |
224.0.0.1 |
所有设备(PC、路由器)都会侦听此地址 |
224.0.0.2 |
子网中所有组播路由器都会侦听 |
224.0.0.3 |
此地址不做分配 |
224.0.0.5 |
OSPF路由协议中所有的路由器都会侦听此地 址 |
224.0.0.6 |
OSPF中DR和BDR侦听地址 |
224.0.0.9 |
RIPv2路由器侦听此地址 |
224.0.0.10 |
EIGRP路由协议中的路由器侦听此地址 |
224.0.0.13 |
所有运行PIM的路由器侦听此地址 |
224.0.0.18 |
VRRP协议交换机侦听此地址 |
(2)公网组播地址:
224.0.1.0/8~238.255.255.255/8为用户可用的组播地址(临时组地址),全网范围内有效。
① ASM组播地址:
- 224.0.1.0~231.255.255.255
- 233.0.0.0~238.255.255.255
- 232.0.0.0~232.255.255.255
② SSM组播地址:
③ 域间组播地址:
233.x.x.0~233.x.x.255,在中间两个字节插入AS号码(x.x),剩余的8bit作为域内组地址范围
(3)私网组播地址:
239.0.0.0/8~239.255.255.255/8为本地管理组播地址,仅在特定的本地范围内有效。
2.组播MAC地址:
组播的MAC地址不会变化的,是根据IP地址得来的:
① 前25bit是固定的:01-00-5E-0
② 后23bir根据IP得来:取IP后23bit
注1:组播MAC地址第一个字节的最后一个bit为1;单播MAC地址第一个字节的最后一个bit为0
注2:不同的IP地址对应的组播MAC地址可能会出现重复的问题。
二. 网络模型:
组播网络模型分为三种类型,分别为ASM,SFM和SSM。
D类地址范围 |
含义 |
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临时组地址,仅在特定的本 地管理域内有效,称为本地管理组播地址 |
1. ASM:
Any-Source Multicast,任意源组播,主要包含PIM-DM和PIM-SM两种模式。
ASM模型仅针对组地址提供组播分发。一个组播组地址作为一个网络服务的集合,任何源发布到该组地址的数据得到同样的服务。接收者主机加入组播组以后可以接收到任意源发送到该组的数据。
为了提高安全性,可以在路由器上配置针对组播源的过滤策略,允许或禁止来自某些组播源的报文通过。最终从接收者角度看,数据是经过筛选的。
ASM模型要求组地址必须整个组播网络中唯一。“唯一”指的是同一时刻一个ASM地址只能被一种组播应用使用。如果有两种不同的应用程序使用了同一个ASM组地址发送数据,他们的接收者会同时收到来自两个源的数据。这样一方面会导致网络流量拥塞,另一方面也会给接收者主机造成困扰。
2. SSM:
Source-Specific Multicast,特定源组播,SSM模型借助PIM-SM的部分技术和IGMPv3来实现的,无需维护RP、无需构建RPT、无需注册组播源,可以直接在源于组成员之间建立SPT。
SSM的特点是网络用户能够预先知道组播源的具体位置。因此用户在加入组播组时,可以明确指定从哪些源接收信息。
SSM模型针对特定源和组的绑定数据流提供服务,接收者主机在加入组播组时,可以指定只接收哪些源的数据。加入组播组以后,主机只会收到指定源发送到该组的数据。
SSM模型对组地址不再要求全网唯一,只需要每个组播源保持唯一。这里的“唯一”指的是同一个源上不同的组播应用必须使用不同的SSM地址来区分。不同的源之间可以使用相同的组地址,因为SSM模型中针对每一个(源,组)信息都会生成表项。这样一方面节省了组播组地址,另一方面也不会造成网络拥塞。
三. IGMP:
Internet Group Management Protocol,使用IP承载,协议号为2,因特网组管理协议,是TCP/IP协议簇中负责组播成员管理的协议,其作用是在用户主机和与其直连的组播路由器之间建立和维护组播组成员关系。通过在用户主机和与其直连的组播路由器上配置和运行IGMP,可以实现主机动态地加入和离开组播组,以及组播路由器对本地网络中组成员信息的动态管理。
IGMP工作机制:
① 主机会向它所在的共享网络报告组成员关系,即报告它是属于哪个组的
② 查询器会周期地向该网段发送组成员查询消息
③ 主机收到查询消息以后进行相应,并且报告组成员关系
④ 该网段中的组播路由器根据相应来刷新组成员的存在信息
IGMP主要分为三个版本:
① IGMPv1
② IGMPv2
③ IGMPv3
区别:
|
IGMPv1 |
IGMPv2 |
IGMPv3 |
查询器选举: |
依靠PIM选举 |
自己选举(IP地址小的) |
自己选举(IP小的) |
成员离开方式: |
静默离开 |
主动发送Level离开报文 |
主动发送Report拒绝 报文,替代了Level报文的功能 |
指定组查询: |
不支持 |
支持 |
支持 |
指定源、组加入: |
不支持 |
不支持 |
支持 |
抑制机制 |
支持 |
支持 |
不支持 |
最大响应时间: |
不可控(10S) |
可控(默认10S) |
可控(默认10S) |
加组报文: |
一个IGMP只包含一个 组信息 |
一个IGMP只包含一个 组信息 |
一个IGMP能包含多个 组信息 |
1. IGMPv1:
(1)IGMPv1报文:
IGMPv1主要包含如下报文类型:
① Report 请求报文0x13
② Query 询问报文 0x12 15306188233
① Report:
Report请求报文,标识为0x12,Report目标地址为设备所想加入的组播组IP。
作用:
a) 主机发送此报文给路由器,请求路由器加入某个组播组中。
b) 当主机存在某个组播组中,路由器发送Query报文探测组播组中是否存在设备,主机使用Report报文进行回复。
② Query:
Query询问报文,在IGMPv1中,只有通用组查询,标识为0x11,路由器用来检测当前组播中是否还存在客户端设备。默认60S发送一次,死亡时间为180S,180s没有主机回复,表示当前组播组中没有设备。在IGMPv1中,路由器会周期60S发送Query报文(即使无组播流)。
Query查询目标地址为224.0.0.1,查询组中所有的设备,并且组地址为0.0.0.0,表示查询所有,当收到Query报文时,终端设备如果在某个组中,会回复Report报文,如果不存在忽略该报文。
(2)IGMPv1工作机制:
① 工作机制:
IGMPv1的过程为:
a) 主机通过发送Report消息加入到某组播组中。
b) 当同一个网络中存在多个组播路由器时,每个组播路由器都能从别的组播路由器和主机那里收到成员关系报告信息。所以,这就需要一个路由器选举机制来确定一台路由器作为查询器。在IGMPv1中,查询器的选择由组播路由协议决定。
c) 查询器周期60S发送Query报文探测组播组中是否还存在设备,当组播组中存在设备,收到Query的主机都会回复Report报文进行相应,首先回应的设备作为Last-report,当其他路由器收到Last-report路由器发送的Report报文后,如果自己加入的组存在Report报文中,不会再次发送Report报文
d) 终端在离开后在收到路由器发送的查询消息时不会反馈Report消息,而路由器会每隔60S进行普通组查询,当Query Died时间超时后130S(2*60+10),运行IGMPv1的路由器认为此组播组中无设备组。
② 响应抑制机制查询:
路由器发送Query报文查询组播组中是否存在设备,所有收到Query的设备都会回复Report报文进行响应,路由器的主要目的是询问组播组中是否有设备,并不在乎有多少设备,所以只要组播组中的一台设备回应信息即可。
a) 选举Last-report:
- 组播组中的每台终端都会开启一个随机回复计时器(以0.1S为单位,最大为10S,IGMPv1中最大响应时间不可修改)
- 当收到路由器的Query报文后,倒数计时器,计时器为0,发送Report报文进行回复
- 由于计时器随机,所以最先发送Report回应信息的设备发送的Report会被组内的PC和路由器收到,当其余的PC收到最先发送设备的Report报文后,将不会再发送Report报文,此时这台最先发送report的设备会被认为为last-report。
注:查询器每隔60S发送一次Query查询,每台终端接收源的随机计时器每次都不一致,所以每次查询时Last-report有可能都不相同
b) Last-report抑制机制:
- 每次路由器发送Query查询报文时,组播组中的Report回复信息只由last-report发送用来响应路由器
- 其余路由器也会收到last-report的回应信息,所以不会再发送report回复路由器的query,以节省带宽
2. IGMPv2:
(1)IGMPv2报文:
IGMPv2主要包含如下报文类型:
① Report 请求报文
② Query 询问报文
③ leave message 离开报文
① Report 请求报文:
Report请求报文,Report目标地址为设备所想加入的组播组IP。
作用:
① 主机发送此报文给路由器,请求路由器加入某个组播组中。
② 当主机存在某个组播组中,路由器发送Query报文探测组播组中是否存在设备,主机使用Report报文进行回复。
② Query 查询报文 :
Query查询报文,路由器用来检测当前组播中是否还存在客户端设备。默认60S发送一次,死亡时间为180S,180s没有主机回复,表示当前组播组中没有设备。
Query查询报文分为两种:
a) 通用组查询
b) 指定组查询
a) 通用组查询:
和IGMPv1基本一致,IGMPv2最大响应时间可以修改,所以并在IGMPv1报文的基础上增加了Max Response Time最大响应时间(默认为10S)。
b) 指定组查询:
在IGMPv1 Query报文的基础上,IGMPv2还增加了指定组查询报文,在Last-report离开时,会触发查询器发送指定组查询报文
注:特定组查询最大响应时间为1S
③ leave message:
离开报文,当主机想要来开某个组播组中,发送此报文通告路由器。Leave message的目标地址为客户端所要离开的组播组的IP地址。当路由器收到Leave message报文后,会立刻发送Query报文查询当前组内是否还存在组成员。
(2)IGMPv2工作机制:
① 主机通过发送一个或多个Report消息加入到某组播组中。
② 当同一个网络中存在多个组播路由器时,每个组播路由器都能从别的组播路由器和主机那里收到成员关系报告信息。所以,这就需要一个路由器选举机制来确定一台路由器作为查询器。在IGMPv2中,IP地址最小的成为查询器(非查询器如果在125S(2*普遍组查询60+最大响应时间10/2)内没有收到查询器发送的Query报文,会主动发起Query报文,MRT响应时间为10S,Multicast Address为0.0.0.0
注:使用命令[Huawei-GigabitEthernet0/0/0]igmp timer other-querier-present 60修改非查询器查询时间
③ 查询器周期发送Query报文探测组播组中是否还存在设备,当组播组中存在设备,收到Query的主机都会回复Report报文进行相应,首先回应的设备作为Last-report
④ 在一个组中,当普通组成员离开时,不会发送Leave message给路由器,因为此时last-reporter设备还在组内,所以路由器依旧要维护此组信息
⑤ 当Last-report离开时,会发送leave message信息通知路由器,此时路由器会会进行指定组查询功能,立刻发送Query报文查询当前组播组内是否还存在设备,组地址每隔一秒发送一次query(pc离开的组地址),MRT响应时间为1S,Multicast Address为特定组地址,默认发送两次,如果无响应认为当前组播中无设备。
⑥ 如果组播组中还存在接收源,接收源在收到特定组查询后,启动随机计时器(0~1S),计时器超时,立刻发送Report报文进行响应,最先响应的为新的Last-report。
注:查询器每隔60S发送一次Query查询,每台终端接收源的随机计时器每次都不一致,所以每次查询时Last-report有可能都不相同。
3. IGMPv3:
服务于SSM模式,IGMPv1和IGMPv2报文中只能携带组播组的信息,不能携带组播源的信息,所以主机只能选择加入某个组,而不能选择组播源,这一问题在IGMPv3中得到了解决。运行IGMPv3时,主机不仅能够选择组,还能根据需要选择组播源,主机发送的IGMPv3报文中可以包含多个组记录,每个组记录可以包含多个组播源。
在IGMPv2的基础上,不仅可以携带组播源的信息,并且IGMPv3取消了抑制机制,因为携带了组播源,所以接收设备可能接收同一组播IP不同源设备的流量,所以相同的组播可能会有不同的组播源,如果采用抑制机制,可能会抑制掉对另外不同组播源的Report信息,会造成另外的组播源组播流量的修剪,所以IGMPv3在此基础上取消了抑制行为。
注:IGMPv3使用的目的报文为224.0.0.22
(1)IGMPv3报文:
IGMPv3在v2基础上对报文进行了修改,并取消了Level报文,使用Report报文代替Level报文的功能
① Query查询报文:
分为三种报文,其中特定组和特定组源查询为被动发送,当PC发送Report离开报文,报文包含特定组,则路由器则发送Query特定组查询;如果报文包含特定组和特定源,则路由器发Query特定组源查询
a) 通用组查询:
和IGMPv2基本一致,默认60S发送一次。
b) 特定源组查询:
当目标DR接收到Report拒绝报文,会发送特定源组查询,默认发送两次,两次无响应表示当前源组无接收设备
② Report请求报文:
取代了v2报文中Level报文的离开功能,并且报文中可以包含多个组记录,当要加入多个组时,不需要像v2一样发送多个IGMP Report报文,只需要发送一次Report报文,报文中包含多个组即可
a) Include:
表示想要接收某特定源的某流量,与IGMPv2的区别为目标组地址不再是想要加入组的组IP,而是特定组地址224.0.0.22
b) Exclude:
表示不想接收特定源的某组流量,代替Level报文
(2)IGMPv3工作机制:
① CLient发送成员IGMP Report Type类型为Include报文,目标ip地址固定为224.0.0.22,请求加入组播组,并携带所加入组播组的组播源IP
② 查询器每60S发送一次IGMP普遍组查询,目标地址为224.0.0.1,Multicast Address地址为0.0.0.0
③ 收到普遍组查询报文后,Client回复IGMP Report报文进行相应,由于Client接收相同组播流但组播源不同,所以取消了抑制机制
⑤ 任何组员离开都必须都发送IGMP Report Type类型为Export报文。
⑥ 查询器收到IGMP Report Type类型为Export报文后,会发送2次特定组源的查询,没有响应则删除关于该组播组的表项
IGMP配置:
[Huawei]multicast routing-enable
[Huawei]inter g0/0/0
[Huawei-GigabitEthernet0/0/0]igmp enable
[Huawei-GigabitEthernet0/0/0]igmp version 3
查看IGMP端口信息:
查看组信息:
4. 组播VLAN:
组播VLAN用于解决路由器为不同VLAN用户复制多份流量的问题。
(1)组播VLAN原理:
在配置单臂路由的情况下,如果交换机下的不同vlan用户请求了相同的组播流量,此时位于路由器和交换机间的链路会传递两份相同的组播流量,此时造成了链路的浪费。
当配置了组播VLAN时,配置组播VLAN,组播VLAN下定义用户VLAN,当组播VLAN接收到了组播流量,会分发给用户VLAN
(2)组播VLAN配置:
[Huawei]vlan 2
[Huawei-vlan2]igmp-snooping enable
[Huawei-vlan2]multicast-vlan enable
[Huawei-vlan2]multicast-vlan user-vlan 10 20 30
5. IGMP Snooping:
IGMP窃听协议,用于解决组播报文二层广播的问题。IGMP Snooping运行在连路层,是二层以太网交换机上的组播约束机制,用于管理和控制组播组。IGMP Snooping通过监听主机发出的IGMP报文,建立MAC组播地址表。
(1)端口角色:
端口角色 |
作用 |
如何生成 |
Router Port路由器端口
|
二层组播设备上朝向三层组播设备(DR或IGMP查询器)一侧的接口,二层组播设备从此接口接收组播数据报文。 |
注:路由器端口会出现在所有的组播映射端口表项中 |
Member Port成员端口
|
又称组播组成员端口,表示二层组播设备上朝向组播组成员一侧的端口,二层组播设备往此接口发送组播数据报文 |
|
(2)IGMP Snooping原理:
① 侦听IGMP报文:
a) 当收到一个报文,交换机接口引擎首先查看报文的二层MAC地址,如果目标地址前缀为0100-5E-0的报文,表示为组播报文
b) 交换机继续查看三层IP头部的Protocol字段,如果协议号为2,则为IGMP报文
c) 如果位IGMP报文,交换机接口引擎会将报文送入0号口CPU进行处理,查看具体的报文内容CPU对报文进行分析,控制平面生成二层组播接口映射表项
d) 接口引擎根据控制平面二层组播接口映射表象在数据平面对组播报文进行转发
② 普遍组查询侦听:
a) IGMP查询器定期向本地网段内的所有主机与路由器发送IGMP普遍组查询报文或Hello报文
b) 交换机收到查询的Query报文或Hello报文后,将Query下发给所有的端口,并查询表项
- 如果Router-Port列表中尚未包含该接口,则将其添加进去,并启动老化定时器180S
- 如果Router-Port列表中已包含该动态路由器端口,则重置老化定时器为180S
注:如果交换机是依靠PIM的Hello报文将其接口放入到Router-Port中,老化定时器为Hello老化时间30X3.5=105S
c) 设备收到Query报文后,回复Report报文,交换机收到Report报文后
- 如果不存在该组对应的转发表项,则创建转发表项,将该接口作为动态成员端口添加到出接口列表中,并启动老化定时器==健壮系数2 x 普遍组查询间隔60S + 最大响应时间10S=130S
- 如果已存在该组对应的转发表项,但出接口列表中未包含该接口,则将该接口作为动态成员端口添加到出接口列表,并启动老化定时器130S
d) 隔离Report报文:
在IGMPv1和v2中存在Last-Report机制,当设备收到其他设备的Report响应报文,就不会回复本地产生的Report报文给路由器,导致成员存在某个组中但是由于抑制机制不发送Report报文,交换机接收不到报文而导致表项计时器超时,所以在开启了IGMP Snooping功能的交换机上收到一份Report响应报文后,交换机只会把报文转发给路由接口,不会泛洪给其他的成员接口,其他组成员因为收不到任何的Report报文,当自身的计时器超时后,会认为自己为Last-Report,发送Report报文,交换机根据Report报文刷新当前网络中所有成员的计时器
③ Report组加入:
a) 当设备想要加入到某个组中,发送Report报文
b) 交换机收到Report报文后
- 如果不存在该组对应的转发表项,则创建转发表项,将该接口作为动态成员端口添加到出接口列表中,并启动老化定时器==健壮系数2 x 普遍组查询间隔60S + 最大响应时间10S=130S
- 如果已存在该组对应的转发表项,但出接口列表中未包含该接口,则将该接口作为动态成员端口添加到出接口列表,并启动老化定时器130S
c) 交换机将该表项发送给Router-Port端口,送给上游路由器
④ Level报文侦听处理:
a) 当设备中发送Level报文请求离开某个组播组
b) 交换机收到Level报文后,将报文泛洪给所有接口外,会将关于该接口的老化时间置为2S
c) 路由器收到Level报文后,也会将该组的时间置为2S,并连续发送特定组查询报文
d) 交换机收到特定组查询报文后转发给该组播组对应的所有成员接口,并在2S内等待Report报文
- 其余正常端口收到特定组查询报文,回复Report报文,交换机收到Report报文后,将该端口老化时间复位180S,并将Report报文转发给路由器,路由器也将该组播的老化时间复位
- 离开设备收到Report特定组查询,忽略该报文后,2S后交换机和没有收到Report响应报文,则将该端口从该组中删除
(4)IGMP Snooping配置:
[Huawei]igmp-snooping enable
[Huawei]vlan 1
[Huawei-vlan1]igmp-snooping enable
6. IGMP Snooping Proxy:
在交换机上配置IGMP Snooping Proxy功能,此时对于PC来说,交换机承当路由器对其进行查询,对于路由器来说,交换机承当PC进行响应
(1)工作机制:
① 普遍组查询:
a) 交换机向本VLAN内除接收接口以外的所有接口发送IGMP普遍组查询报文;同时根据本地维护的组成员关系生成报告报文,向所有路由器端口发送
② 特定组查询/特定源组查询:
a) 若该组对应的转发表项中还有成员端口,则向所有路由器端口回复该组的报告报文
b) 若改组没有响应的成员端口,则不会响应路由器的查询报文
③ 报告:
a) 若不存在该组对应的转发表项,则创建转发表项,将接收接口作为动态成员端口添加到出接口列表中,并启动其老化定时器,然后向所有路由器端口发送该组的第一份报告报文
b) 若已存在该组对应的转发表项,且其出接口列表中已包含该动态成员端口,则重置其老化定时器;
c) 若已存在该组对应的转发表项,但其出接口列表中不包含该接收接口,则将该接口作为动态成员端口添加到出接口列表中,并启动其老化定时器。
④ 离开:
a) 向接收接口发送针对该组的特定组查询报文。只有当删除某组播组对应转发表项中的最后一个成员端口时,才会向所有路由器端口发送该组的离开报文。
(2)IGMP Snooping/IGMP Proxy区别:
IGMP Snooping和IGMP Snooping Proxy实现功能相同但原理不同。IGMP Snooping仅仅是通过侦听IGMP报文来获取相关用户信息,而IGMP Snooping Proxy则拦截和抑制了终端用户的IGMP请求并进行自身相关处理后,才将它转发给上层路由器。
相对于仅实现IGMP Snooping的设备来说,实现了IGMP Snooping Proxy的二层网络设备对于用户侧承担了Server的角色,定期查询用户信息;对于网络侧又承担了Client的角色,在收到查询时将当前用户信息进行上报。因此相比IGMP Snooping来说,不仅能达到抑制二层网络组播泛滥的目的,而且能有效减少网络中的协议消息,降低网络负荷。但由于其需要维护和计算表项的状态变化同时需要代理路由器的功能,因而也相应增加了设备的实现复杂度和处理开销。
四. PIM协议:
PIM是 Protocol Independent Multicast(协议无关组播)的简称,域内组播协议,PIM用于构建出一颗无环的、最优的组播树,使用RPF检测依据路由表构建,所以不基于某种协议,称为协议无关组播。
PIM的IP协议号为103,PIM路由器组播地址为224.0.0.13。PIM目前版本为v2,V1纯在缺陷,工作在IGMP之上,没有224.0.0.0.13,并且无法实现BSR功能。
1. SPT:
源路径树,以组播源作为树根,将组播源到每一个接收等着的最短路径结合起来构成的转发树。
路径最优,延迟最小,占用内存较多
2. PIM表:
在PIM协议建立之后,发送组播数据会形成两张组播表,分别为:
① S,G表
② *,G表
(1)(S,G)表:
(Source,Group)表项,在DM模式中,根据此表项进行组播转发。S,G表分为上行接口和下行接口列表, 组播转发表项的刷新都是通过收到组播数据报文来进行刷新,当收到组播数据报文时,MFIB会每间隔15s通知PIM协议,由PIM自上而下对组播表项进行刷新。当210s没有收到组播数据报文MFIB就会通知PIM(这个值可以通过配置PIM视图下的source lifetime进行改变),进而由PIM协议来触发组播表项的老化删除。
注:入接口(上行接口)只有一个,出接口(下行接口)可能为多个
(2)(*,G)表:
任意、Group表项,分为上行接口和下行接口列表
在PIM-DM模式中,由于知道组播源的位置,所以*,G表无作用,仅为S,G的父路由表,华为设备
注:在PIM-DM模式中,华为设备不存在(*,G)表项,如果设备发送请求的组地址路由器组播PIM表中不存在,此时只有在最后一跳路由器可以查看到*,G表项,其余的路由器无法看到*,G表。
3. PIM报文:
PIM报文使用IP层承载,协议号位103,组播目标地址为224.0.0.13
PIM报文主要包括:
① Hello报文
② Register注册报文
③ Register-stop注册停止报文
④ Join/prune增加/剪枝报文
⑤ BootStrap引导报文
⑥ Assert声明报文
⑦ Graft嫁接报文
⑧ Graft-ACK嫁接确认报文
⑨ candidate-RP-Advertisement指定RP激活刷新报文
⑩ State Refresh Message状态刷新报文
报文头部:
① Version:4bit,版本字段标识版本信息,当前为2
② Type:4bit,类型
Type值 |
类型 |
0 |
Hello |
1 |
Register |
2 |
Register-stop |
3 |
Join/prune |
4 |
BootStrap |
5 |
Assert |
6 |
Graft |
7 |
Graft-ACK |
8 |
Candidate-RP-Advertisement |
9 |
State Refresh Message |
③ Reserved:8bit,保留位
④ Checksum:16bit,校验和
(1)Hello:
类型标志位0,用来建立邻居并维持邻居关系,并选举DR,目标地址为224.0.0.13,默认每30S发送一次,Hold时间为30X3.5=105S。
Hello报文使用TLV表示:
① 1: Holdtime,表示保持邻居为可达状态的超时时间,若超时仍没有收到Hello消息则认为邻居不可达
② 2: 该字段由三部分组成:
- LAN Prune Delay:在共享网段上传递Prune消息的延迟时间
- Override Interval:在共享网段上执行剪枝前的否决时间
- T:Join消息抑制能力位
③ 19: DR Priority,表示各路由器接口竞选DR的优先级,优先级越高越容易获胜,默认为1
④ 20: Generation ID,Hello消息中携带的随机数,表示当前邻居状态。如果状态发生更新则随机数也会更新。当路由器发现接收到的来自上游的Hello消息中包含不同Generation ID值,则认为上游邻居已经丢失或上游邻居状态已经改变。
⑤ 21: State Refresh Capable,表示邻居状态刷新时间间隔。
⑥ 24: Address List,PIM接口的从地址列表。
(2)Register(单播):
类型标志位1,注册报文,使用单播发送,Register报文只在PIM-SM模式中使用,用于源DR将组播数据包以单播的形式发送给RP,用于组播报文的注册,目的为让RP生成组播表S,G,每1min泛洪一次。
① B:1bit,边界位。
② N:1bit,空注册位。
③ Reserved:8bit,保留位。发送时此字段被清零,接收时不处理此字段。
④ Multicast data packet:可变长字段,组播数据报文。源端DR将接收到的组播数据报文封装在Register消息中发往RP。RP解封装后,学习到该组播数据报文的(S,G)信息。
(3)Register-Stop(单播):
类型标识为2,注册停止报文,单播报文,只在PIM-SM模式中使用,当RP收到源DR发送的Register报文生成组播表S,G后,会发送Register-Stop报文给源DR,停止继续发送Register报文。
① Group Address:32bit,组播组地址G。
② Source Address:32bit,组播源地址S。
(4)Prune/Join:
类型标识为3,目标地址为组播PIM地址224.0.0.13,分为两种具体类型:
Prune为剪枝报文,当路由器不需要组播数据时,使用Prune信息通知上游路由器进行组播
的修剪
Join报文出现场景:
① Prune Delay:
a) DM模式下,在MA网络中,当一台路由器发送Prune报文,上游路由器收到Prune报文后,会检查邻居,如果一个端口存在多个邻居,则等待3S
b) 同为下游的路由器此时需要接收组播信息,会立刻发送Join报文通知上游路由器不要进行剪枝行为
② 在SM模式中,最后一跳路由器发送Join报文向上游路由器请求组播
③ DM模式下,在MA网络中,当两台上游路由器进行Assert选举Winner,此时选举失败的路由器会发生剪枝,向下游接口发送Prune报文,如果下游路由器存在客户,此时会发送Join报文停止剪枝
④ SM模式下,RPT链路上,下游路由器发送Join报文给上游路由器请求组播组
⑤ SM模式下,当目标RP接收到IGMP加组消息,即使没能请求到组播,目标RP也会每隔60S发送一次Join报文,Address IP为RP地址
① Upstream-neighbor:上游邻居IP地址
② Number Groups:组播数
③ Holdtime:老化时间
④ Group:组IP(可存在多个)
⑤ Num joins:置位符,为join报文置1,包含IP地址
⑥ Num Prune:置位符,为Prune报文置1,包含IP地址
注1:多路访问型网络,目标地址为组播,所以存在多个上游邻居时,发送Prune/Join报文,所有的上游邻居都会收到,此时使用Upstream-neighbor表示发送给哪个上游邻居
注2:在PIM-DM模式中,IP address中不包含Flage,而在PIM-SM模式中,会有三个置位符
- S:表示在PIM-SM模式中
- W:Wildcard通配符,表示建立(*,G)条目
- R:RP含义,表示此地址为RP地址(DM为组播源地址)
报文置位含义:
- SWR:SM模式中,下游路由器向上游路由器发送报文,目的地为RP,上游路由
器对应的表项为(*,G)
- S:SM模式中,下游路由器向上游路由器发送报文,目的地为源,上游路由器对
应的表项为(S,G)
- SR:SM模式中,下游路由器向上游路由器发送报文,目的地为RR,上游路由器
对应的表项为(S,G)
Prune报文:
Join报文:
(5)BootStrap:
类型标识为4,引导报文,当PIM-SM网络中使用动态RP时,配置了C-BSR的路由器从所有PIM接口周期性的发送Bootstrap消息,参与BSR竞选。竞选获胜者,继续发送Bootstrap消息,向域内所有PIM路由器发布RP-Set信息。
使用组播(224.0.0.13)通告,并且每60S发送一次用于通告BSR的存在,并且BootStrap的TTL值为1。
① Fragment Tag:16bit,随机数,用来区分Bootstrap消息
② Hash Mask length:8bit,C-BSR的Hash掩码长度
③ BSR-priority:8bit,C-BSR优先级
④ BSR-Address:32bit,C-BSR地址
⑤ Group Address:32bit,组播组地址
⑥ RP-Count:8bit,希望为该组服务的C-RP的总数
⑦ Frag RP-Cnt:8bit,在本段内包含的C-RP地址的个数。对于一个给定的组来说,如果Bootstrap消息分片,Frag RP-Cnt字段便于将RP-Set分片
⑧ RP-address:32bit,C-RP的地址
⑨ RP-hold time:16bit,C-RP发出的advertisement消息的老化时间,表示C-RP的有效时间。
⑩ RP-Priority:8bit,C-RP的优先级
(6)Assert:
类型标识为5,声明消息,180S发送一次
- 在DM模式中,为(S,G)服务,在MA网络中,下游路由器存在多个上游链路组播路由器并且组播数据流的地址相同,此时下游路由器会使用Assert报文进行选举DR进行组播数据发送。根据协议优先级/开销值/IP地址(大的优先),选出下行端口路由器所要接收组播数据的Winner路由器
① Group:组地址
② Source:组播源IP
③ RP Tree:RPT
④ Metric Preference:单播路由协议优先级
⑤ Metric:开销值(到达源的开销值)
(7) Graft(单播):
类型标识为6,嫁接报文,只在DM模式中使用,目标地址为单播地址,当被修剪的组播树枝中的组播内有了新的pc请求组播数据,路由器会从上行端口发送嫁接报文给对端路由器请求组播数据流。
Graft报文由接收者触发,由最后一跳路由器发送。
(8)Graft-Ack(单播):
类型标识为7,嫁接确认报文,只在DM模式中使用,当对端路由器收到下行接口发来的Graft报文请求时,会发送一个嫁接确认报文进行回复。
(9) Candidate-RP-Advertisement(单播):
类型标识为8,候选RP刷新报文,当PIM-SM网络中使用动态RP时,配置了C-RP的路由器周期性的向BSR发送Advertisement消息,通告希望服务的组范围。
C-RP Advertisement消息只在PIM-SM中使用。封装Advertisement消息的IP报文源地址为源端C-RP,目的地址为BSR。使用单播方式发送。
使用单播方式发送,并且每60S通告一次,目标地址为BSR
① Prefix-Cnt:8bit 组播地址前缀值
② Priority:8bit C-RP优先级
③ Holdtime:16bit Advertisement消息的老化时间
④ RP-Address:32bit C-RP地址
⑤ Group Address:32bit 组播组地址
(10)State Refresh Message:
每60S发送一次,TTL值为1,收到State Refresh Message报文后,路由器会刷新(S,G)路由条目180S、非接收接口210S和Assert老化计时器180S
① Group:组播组IP
② Source:组播源IP
③ Originator:源DR
④ RP Tree:RPT
⑤ Metric Preference:IGP路由协议优先级
⑥ Metric:开销值
⑦ Masklen:子网掩码长度
⑧ TTL:生存时间值
4. RPF:
Reverse Path Forwarding,反向路径转发,PIM并不关心路径的次优问题,只在乎组播树的创建,所以在构建组播树的时候会存在次优路径,RPF在PIM-DM网络中通过查找去往组播源的最优单播路由来判断所收到的组播数据是否在源于“正确的”上行接口。
某一路由器去往某一组播源的最优单播路由所对应的出接口称为该路由器上关于该组播
源的RPF接口。
(1)RPF检测原理:
Reverse Path Forwarding,反向路径转发机制,与单播报文根据目标地址查路由表相反,路由器收到组播报文,会根据路由表查询组播报文的源地址选出邻居和接口
RPF会每隔5S进行检测,当路由器收到一个组播报文后,只有确认组播数据报文是从自身连接到组播源的接口上收到的,才能进行转发,以此来判断收到的组播数据的路径是否为最优路径或冗余流量:
① 当发现RPF出接口和收到组播数据入接口一致,证明为最优路径;
② 一台路由器从某一接口收到一个组播数据后,如果发现接口不是相应组播源的RPF接口,就意味着RPF校验失败,所收到的组播数据将被丢弃;如果发现该接口正式组播源的RPF接口,就表明RPF校验通过,所收到的组播数据将被进行后续处理。
RPF匹配规则:
① 根据协议优先级进行选举:
② 查看单播路由表,与组播源IP一致的最优(Cost)下一跳地址。
③ 如果开销值一样,选择下一跳接口地址最大的接口,并且接口启用了PIM功能(不在乎有没有PIM邻居)作为RPF接口。
④ 可以使用静态组播路由修改RPF接口。
注:如果RPF检测的入接口没有存在PIM接口列表中(没有启用PIM),则此时RPF检测不通过,RPF会选择另外的接口重新进行检测,如果只有这一条端口,则PIM组播表中的上游接口为NULL,所以为(*,G)表项
① 根据协议优先级进行选举:
当路由从多个路由源学到时,组播RPF将使用协议优先级值最小的路由协议进行计算
② 根据IGP开销值选择:
路由协议相同时,Cost值开销最小的最为RPF接口
② 选择下一跳最大IP地址接口:
当开销值一直时,使用下一跳接口地址大的作为RPF接口
③ 使用组播静态路由修改:
使用静态路由命令进行RPF接口修改,组播静态路由优先级为1,所以优先匹配
[Huawei]ip rpf-route-static 192.168.1.2 32 192.168.3.1
匹配规则:
- 根据路由优先级进行匹配
- 优先级相同,优选组播路由表
注:RPF检查根据树的种类进行:
① 使用共享树进行数据接收转发时,使用RP地址进行检测地址
② 使用源树进行数据接收转发时,使用组播源地址作为检测地址
(2)RPF优势:
① 解决组播树最优路径问题和环路问题。
② 由于RPF之间根据路由表进行选择,由于路由协议本身有防环机制,所以RPF检测也防止了组播数据在转发过程中出现了重复报文及流量环路的问题。
(3)RPF检测行为:
① SM模式组播流检测:
在PIM-SM模式中,当一台路由器收到一份组播数据流,首先会进行RPF检测
② RPT中对RP地址进行检测:
在RPT中建立(*,G)树后,使用RPF检测去往RP地址最优接口,从此接口发送Join报文
③ RPT切换到STP:
在SM模式中,数据流被拉到接收者后,最后一跳路由器会根据组播源进行RPF检测,如果检测结果发现RPT不是最优的组播流路径,会进行RPT到SPT的切换
④ 对BootStrap报文的RPF检测:
在动态选举BSR之后,BSR每隔60S发送一份BootStrap报文,收到BootStrap报文的设备会根据BootStrap报文的源地址进行检测,如果发现此报文的源地址不是去往BSR的最优下一跳,拒绝接收此报文。
⑤ MSDP中针对(S,A)报文进行检测:
当收到MSDP邻居发送的(S,A)报文时,会进行RPF检测,用于防环。
五. PIM-DM:
全称为Protocol Independent Dense Mode,稠密模式,基于Source-Based Tree结构,组播数据为推送的行为,主要采用扩散—剪枝的方式来转发组播数据流。对于组播成员稀少的网络,PIM-DM会产生大量的剪枝报文,而如果网络规模较大,则扩散—剪枝的周期就会比较长,因此PIM-DM一般适合于规模较小,组播组成员比较密集的网络。
1. PIM-DM收敛:
PIM-DM模式首先假设网络中的每个子网都存在至少一个组成员,并将组播数据包从组播源扩散到网络中的所有路由器,然后,对于实际上没有组成员的分支进行剪枝操作。并周期性的进行扩散剪枝的行为。
(1)建立邻居关系:
双方互相发送Hello报文,组播Hello报文地址为224.0.0.13,每30S发送一次,105S超时,连接关系down掉
(2)选举DR:
在双方接收到对端的Hello报文后,会根据Hello包中的信息用来选举DR。优先级高的(默认为1)或者IP地址大的成为DR
使用以下命令[Huawei-GigabitEthernet0/0/0]pim hello-option dr-priority 20修改优先级
注:选举DR在DM模式下没有任何意义,只有在IGMPv1中选择检测机的时候谁是DR谁就
是查询器
(3)第一次Flooding:
① 组播源存在组播数据流,发送组播数据给第一跳路由器,第一跳路由器收到组播报文,出现上行接口,生成(S,G)表项,并将组播报文从合法的下行接口扩散组播,如果存在多个第一跳路由器,所有的路由器都会向下游转发组播报文
合法下游路由器的条件:
a) 存在PIM邻居的接口
b) 没有PIM邻居但是接口上使用igmp start-group命令
c) 最后一跳路由器没有启用PIM但是启用IGMP并且存在组成员的接口
② 当下游路由器从多条上游链路收到相同的组播报文时,由于(S,G)表项只能存在一个上游接口,会使用RPF检测,选出“最优”的上游接口接收组播报文,其余的端口会转发这份组播报文,并生成(S,G)表项,如果存在多条组播报文路径,按照以下过程选举:
a) 路由协议优先级越小越优先
b) 优先Cost值最小的路由条目
c) 优先下一跳IP地址最大的路由条目,并检查此接口是否启用了PIM协议(不在乎是否存在PIM邻居)
注:如果负载分担,最优的路由接口没有启用PIM协议,会选择另外一条负载分担的链
路(前提为此链路启用PIM)
③ 如果路由器从下游接口收到了与(S,G)条目中相同的组播组数据,此时会触发路由器发送Assert报文进行Winner的选举行为,Assert老化计时器为180S,当180S超时后,Loser设备会重新发送组播报文,重新出现Assert报文并进行Winner的选举
a) 路由协议优先级越小越优先
b) 优先Cost值最小的路由条目
c) 优先下一跳IP地址最大的路由条目,并检查此接口是否启用了PIM协议(不在乎是否存在PIM邻居)
④ 选举失败的路由器会将下行接口进行剪枝行为,并从下行接口发送Prune报文进行剪枝,Winner收到Prune报文后,如果下行接口存在多个邻居,会等待3S(2.5S的修建延迟+0.5S的链路延迟)的Prune Delay
a) 下游路由器收到Prune报文后,如果存在自身的下游接口存在接收者,会立刻向上游路由器发送Join报文,Winner收到Join报文后,不会进行剪枝行为
b) 下游路由器收到Prune报文后,如果自身的下游接口不存在接收者,忽略此报文,Winner3S后,进行剪枝行为
注:如果上游接口Winner地址和RPF检测地址不一致,会使用Winner地址
⑤ 最后一跳如果为共享网段,接收设备存在多个上游邻居,此时组播流量第一次进入两台最后一条路由器
a) 如果共享网段的两台路由器接口配置了PIM DM协议,则共享链路上会出现两份相同的组播流量,两台路由器会使用Assert报文进行Winner的选举
b) 如果共享网段的两台路由器没有启用PIM DM协议,则共享链路上不会泛洪组播流量(前提为最后一跳路由器没有收到IGMP加组信息)
(4)Prune剪枝:
① 当最后一跳路由器通过query发现组中没有pc,于是将端口修改为prune状态,向上行端口发送此状态进行剪枝
② 当一个接口被剪枝后,接口会被放入No-Multicast列表中,倒计时210S,当变为0S时,会重新回到(S,G)表项后,下游接口不为Null,路由器重新发送Join报文
③ 没有组成员,又会进行剪枝,接口重新回到No-Multicast列表中,这个过程称为Flooding and Prune过程,维护了组播数据传递不中断过程,在此基础上使用Graft嫁接和60S State Refresh Message优化了此行为
(5)重新Flooding:
① 当剪枝后,如果组播源一直存在组播,第一跳路由器会每隔60S重新泛洪一次State Refresh Message报文,用于刷新每台路由器的各项老化时间
a) 当路由器收到状态刷新报文,存在no-multicast列表中的接口计时器重新回到210S
b) 当路由器收到状态刷新报文,(S,G)表项会重回到210S
c) 当路由器收到状态刷新报文,Winner和Lorse的计时器重新回到180S
(6)Graft嫁接:
优化行为:
① 被剪掉的组播树中有了新的接收者,为了快速得到组播报文而不需要等地210S,根据(S,G)表项,路由器会立刻从上行端口发送单播嫁接报文,请求ACK确认,如果没有得到Graft-Ack报文,下游路由器会每3S发送一次Graft报文
② 收到此报文的上游路由器会回复一个嫁接响应(Graft-Ack),然后从上行端口继续发送此报文,此报文会一直发送给源路由器,重新形成组播树,端口变为following状
态
③ 如果终端设备请求的组播组在PIM 路由表中不存在,此时路由器会创建关于该组播组的(*,G)表项
④ 如果接收者存在多个上游邻居,无论什么情况,这两台设备只会有其中一台发送Graft报文
a) 下游接口启用PIM,第一次Flooding时由于两端共享网络存在邻居,所以两端已经比较出Winner,此时Winner收到Graft报文会向上游端口发送Graft报文,Lorse收到Graft报文后忽略
b) 下游接口没有启动PIM,所以第一次Flooding不会进行Winner的选举,如果此时两台上游路由器收到IGMP Report报文,此时由IGMP查询器发送Graft报文给上游路由器
注:如果首先有接收者,并发送IGMP Report报文,此时只有查询器生成(*,G)表项,非查询者忽略报文,不会生成(*,G)表项
六. PIM-SM:
Sparse-mode:稀疏模式,属于稀疏模式的组播协议路由,组播数据为拉入的行为,适用于组成员分部相对分散、范围较广、大规模的网络。
1. SM模式术语:
(1)RP:
Rendezvous Point,汇聚点,网络中的中心节点,用于对组播数据的泛洪,RP是为每个单独的组播流服务的,所以一个RP可以服务于多个组播,所以网络中可以有多个RP
(2)RPT:
Rendezvous Point Tree,汇聚树,RP和最后一跳路由器之间的链路。
(3)SPT:
Shortest Path Tree,最短路径树,RP和源DR之间的链路。
(5)Register:
注册,源DR向RP进行单播组播流量发送,让RP生成组播表,称之为单播注册。
(6)PIM-Silent接口:
通常情况下,路由器直连用户主机的接口上需要配置PIM的,但是这样配置同样存在风险,当恶意主机发送大量PIM-Hello报文时,有可能导致主机瘫痪,此时,可以将连接主机的接口配置为Silent接口,禁止该接口接收和发送Hello报文,同时,此接口上的组播转发功能及IGMP功能都不受影响。
在连接主机的接口上使用以下命令:
[Huawei]inter g0/0/1
[Huawei-GigabitEthernet0/0/1]pim silent
2. PIM-SM收敛过程:
(1)建立邻居关系:
双方互相发送Hello报文,组播Hello报文地址为224.0.0.13,每30S发送一次,105S超时,连接关系down掉
(2)选举DR:
在双方接收到对端的Hello报文后,会根据Hello包中的信息用来选举DR。优先级高的(默认为1)或者IP地址大的成为DR
在SM模式中,DR会在每段链路上选举,但是只在第一跳路由器和最后一跳路由器有作用
① 第一跳:只有源DR发送纯组播报文给下游路由器
② 最后一跳:只有目标DR向目标RP发送Join报文
③ 在IGMPv1中,谁是DR谁就是查询器
使用以下命令[Huawei-GigabitEthernet0/0/0]pim hello-option dr-priority 20修改优先级
(3)RPT建立:
由于SM模式采用“拉”的方式,由下游路由器从上游路由器将组播流量拉到接收者,当MA网络中存在多台路由器,只需要其中一台路由器将组播流量拉到客户端即可,此时会选择目标DR或者查询器通告上游路由器进行组播流量的拉取。
① 普通Router生成*,G条目:
a) 存在接收者,发送IGMP Report报文请求加入组播组
b) 如果Client存在多个上游路由器,此时只会有一台路由器发送Join报文给上游路由器
- 共享网络中两台上游设备配置PIM协议,则DR发送Join报文给上游路由器
- 共享网络中两台上游设备没有配置PIM协议,无DR设备,则IGMP查询器发送Join报文给上游路由器
c) 目标DR/查询器使用Join报文请求组播数据,使用RPF检测去往RP的上游接口,并将join报文送往上游路由器
注:如果一直存在组播接收者,目标RP会每隔60S发送一次Join报文给RP(即使发送路径切换)
- 目标地址224.0.0.13
- 如果存在多个同LAN的上游邻居,使用Join报文中的Upstream Neighbor表示发给哪个上由邻居
- 在RPT链路上,IP address为RP的IP地址
- 由于是SM模式,S置位
- 不知道组播源,所以为(*,G)表,W置位
- IP address为RP地址,R置位
d) 无论是否存将组播源流量拉下来,目标DR会每隔60S发送Join报文给上游邻居,并且老化时间为210S
e) 上游邻居收到Join报文后,下游接口由Null变为存在接口地址,查看Join报文内容,生成*,G表项,根据IP address使用RPF机制继续向上游发送Join报文
② RP生成*,G条目:
a) 当Join报文送达到RP时,RP下游接口由Null变为存在下游接口,并生成(*,G)表项
- 由于Join报文中的IP address为自己,所以Upstream interface为Null(huawei为Register)
- Downstream Interface为收到Join报文的接口
(4)Register:
当DM模式MA网络中存在多个源路由器,所有的源路由器都会发送组播数据流,下游路由器通过RPF检测进行剪枝行为。在SM模式中,当MA网络中存在多个源路由器,如果所有的源路由器都向RP发送组播注册,会形成带宽的浪费,所以此时只需要选择一台设备进行组播注册,此设备为源DR。
合法组播流检测机制:
- SPT链路中使用RPF检测路由表判断数据流是否从最优的接口流入本路由器
- RP设备检测(S,G)的上游接口检测组播数据是否是从注册报文的入接口流入
- RPT链路上根据(*,G)表项进行RPF检测,根据(S,G)表项进行转发
① 源DR生成S,G表项:
a) 源DR接收到组播源发来的组播流量,生成(S,G),并将组播流量数据包的IP头部再次封装一个新的IP头部,目标地址为RP地址,生成Register单播注册报文,将Register发送给RP
b) 当RP接收到源DR发送过来的Register报文,将Register单播头部拆除,呈现里面的组播,记录目标源组播地址和源DR地址,并生成S,G组播表项
- 如果此时RP存在(*,G)表项提示有PC接收组播数据,RP会从(*,G)表项复制下游接口到(S,G)表项,并会向上游路由器发送Join报文请求组播源发送纯组播流量,在此期间,将单播注册过来的组播流量下发到下游接口
- 如果没有接收设备,所以不存在(*,G)表项,所以RP将组播数据丢弃,只保留(S,G),有效时间为210S
② RP生成组播S,G表:
上行端口:标记为Register
下行端口:无地址
(5)Register-Stop:
如果组播源一直存在组播流量,源DR会一直发送单播注册报文给RP,RP会在以下两种情况发送Register注册停止报文
① 存在接收者:
a) 优化网络结构,当RP下有接收者想要接收此组播流量,为了减少单播报头封装与解封装对源DR和RP带来的内存过重,此时RP便会发送Join报文给上游路由器,最终Join报文送往源DR
b) 源DR收到Join信息后,发送纯组播报文给下游路由器,送往RP
c) RP收到纯组播报文后,检测纯组播报文是否和Register报文入接口一致,一致将接收该报文,并激活(S,G)表项,将组播数据送往下游路由器,并发送Register Stop报文给源DR
注:此种类型下RP不会发送Join报文进行第一次SPT的切换
a) 当RP收到注册报文,生成(S,G)表项,上行接口为Register,下行接口为G0/0/1,并将其单播IP头剔除传递给接收者
b) 如果RP发生第一次SPT路径切换,生成SG表项,因为下行接口已经是G0/0/1,下行接口也是G0/0/1,导致上下行接口重复,破坏防环机制,所以此时RP不会发送Join报文进行第一次SPT的切换
② 无接收者:
a) 当RP下游不存在组播接收者,当接收到源DR的组播注册报文后,生成S,G组播表,
此时RP会发送Register注册停止报文给源DR,通知源DR停止发送Register停止报文。
(6)RPT切换到SPT:
当RPT下存在接收者,RP发送Join报文给上游路由器,源RP将组播数据流传递给下游路由器
- SPT链路上路由器根据RPF检测组播流是否为最优端口流入
- RP根据Register传入端口检测纯组播流是否为最优端口流入,如果位最优端口,则(S,G)为激活状态,并流入到RPT链路上
- RPT链路上的路由器接收到数据流,根据(*,G)的上游接口(目标RP)检测组播流是否合法,合法则将数据流引入到(*,G)的下行表项,huawei实现中会生成(S,G)表项,并将(*,G)表中的下游接口Copy到(S,G)表项中,流量重下游接口Following,如果此时直接进行(S,G)的RPF检测,如果RPT不是去往组播源的最优路径,则会导致(S,G)的RPF检测失败,所以这份(S,G)表项的Flag位中的SPT位是不会置位的,此时设备不会进行RPF检测
注:(S,G)表项的作用只是为了当发生RPT切换的时候直接修剪(S,G)的下行接口,而无需先创建(S,G)表项再修剪,由于(S,G)表项优于(*,G),所以在发生RPT切换到SPT的情况下,不会将数据流重新引回到RPT
① 路径切换:
当组播流传递给目标RP,网络拓扑中,有可能RP并非存在最优的路径中,所以组播在SM模式中并非为最优路径,此时在最后一跳路由器收到源DR发送来的组播数据包时,会查看数据包的组播源地址,根据RPF检测发现去往源DR的最优路径,如果并不是走RPT,那么最后一跳路由器就会发起由RPT到SPT的切换路径的切换。建立新的SPT最优路径去往组播源
最后一跳设备如果开启了RPT到SPT的切换,那么目标DR会以源路径的上行接口发送S置位的Join报文,上游设备收到后,如果上游设备在RPT树中,将原先的(S,G)报文中的SPT位置位,此时会进行以源为目标的PRF检测,如果上游设备不在RPT树中,则生成(S,G)表项,但Flag位中的ACT不会被置位,继续向上游发送Join报文,数据流引入下来之后,ACT置位。
a) 场景1:
- 数据流被引入下来之后,AR5生成(S,G)表项,但是Flag位中的STP没有置位
- AR5作为最后一跳设备,此时AR5会将(S,G)的STP位置位,进行以源IP的RPF检测,RPF检测下一跳为AR1,则直接向R1发送S置位的Join报文,但是(S,G)表项中的ACT不会被置位
- 当AR1将数据流送给AR5时,AR5将(S,G)表项的ACT位置位,并向AR4发S置位的Prune报文进行(S,G)报文的剪枝行为
b) 场景2:
- 数据流被引入下来之后,AR5生成(S,G)表项,但是Flag位中的STP没有置位
- AR5作为最后一跳设备,此时AR5会将(S,G)的STP位置位,进行以源IP的RPF检测,RPF检测下一跳为AR4,则直接向AR4发送S置位的Join报文,由于数据流就是从RPF检测的接口流入,所以ACT置位
- AR4收到Join报文后,会将(S,G)表项的STP置位,并进行以源为目标的RPF检测,检测结果为AR1,发送S置位的Join报文给AR1
- AR1将数据流引下来之后,AR4的(S,G)表项的ACT置位,此时会朝AR3发送S置位的Prune报文进行RPT树组播流的剪枝
c) 场景3:
- 数据流被引入下来之后,AR5生成(S,G)表项,但是Flag位中的STP没有置位
- AR5作为最后一跳设备,此时AR5会将(S,G)的STP位置位,进行以源IP的RPF检测,RPF检测下一跳为AR4,则直接向AR4发送S置位的Join报文,由于组播流是重RPF检测的接口流入,所以Flag中的ACT会被置位
- AR4收到Join报文后,会将(S,G)表项的STP置位,并进行以源为目标的RPF检测,检测结果为A3,发送S置位的Join报文给AR3
- 此时便发现当前RPT是最优路径
② RPT修剪:
a) 目标RP在收到组播流后,(S,G)条目为激活状态,此时目标RP收到两份同目的地的组播流
- 一份为RPT链路的组播流
- 一份为SPT链路的组播流
b) 目标RP根据RPF检测认为SPT链路的组播流为最优数据流,会在RPT链路的上游接口发送S、G置位的Prune报文给上游路由器进行剪枝
c) RPT树中的路由器收到Prun报文后,会将(S,G)表项中对应的下行接口修剪掉,当如果存在(*,G)表项,会保留(S,G)表项,只要存在接收者,原因在于目标DR依旧会每隔1min发送一次S、W、G置位的Join报文给上游设备。由于目标RP发送的是S、W、G置位的Prune报文,所以修剪的只是RPT链路上的数据流量(S,G表),保留并不断刷新RPT链路上的(*,G)表项,由于(S,G)的下行端口为Null,所以不会将组播流量重新引入回RPT
d) 修建的只是(S,G)表的下游接口(删除),不修剪链路,目的是当没有超出阀值时,流量会重新切回RPT。RP在收到下游发送的RP位剪枝报文后,会对上游路由器发送Prune信息进行SPT的剪枝。
命令:
- 如果不想让发生切换,在最后一跳路由器使用[Huawei-pim]spt-switch-threshold infinity禁止切换
- 可以使用一下命令配置流量阀值[Huawei-pim]spt-switch-threshold 1000(kbps),当超出阀值后,会进行切换
(7)重新Register:
a) 源DR如果一直能够接收到组播源的组播流量,源DR会持续发送Register单播报文给RP进行注册
b) 在收到RP发送的Register Stop报文或者Join加入报文推送纯组播后,源DR会启动Register抑制计时器,时长1分钟,1分钟之后,源DR会继续发送Register单播给RP重新注册
c) Huawei设备对此进行优化,源DR会每55S发送一次Register报文,但是Register报文中的组播流为空报文(Probe)
- RP下不存在接收者,在收到空组播数据流的Register报文后,RP发送Register Stop报文,源DR收到Register Stop报文后,注册抑制计时器复位,5S后不会发送包含组播数据流的Register报文
- 如果此时RP下存在接收者,在收到空组播数据流的Register报文后,不会发送任何报文,5S之后源DR会发送包含组播流的注册报文给RP
注:
Assert报文在RPT中的出现:
按照传统的RPT结构是没有Assert报文出现的,只有在特殊的网络结构中才会触发Assert报文的发送
a) PC1和PC2都请求相同的组播数据流
b) PC1发送IGMP加组消息给AR4,AR4通过RPF检测去往RP的上游路由器是AR2
c) PC2发送IGMP加组消息给AR5,AR5通过RPF检测去往RP的上游路由器是AR3
d) 最终AR1会从下游路由器AR2和AR3收到两份请求同一组播流的Join报文,AR1的下游接口为G0/0/0和G0/0/1,并将数据流从两个接口流出
e) AR2和AR3收到组播流后将组播流从下游接口流出,双方也会收到对方的组播流,触发Assert报文的发送
f) 最终两者传出最优的一端,另外一端发送Prune报文进行剪枝
g) 如果此时RPT中只存在(*,G)表项,没有(S,G)表项,所以并不知道去往源的协议优先级和开销值,此时Assert报文中的开销值和优先级为去往RP的信息
(8)组播流剪枝:
a) 接受者离开组播组,会向上游DR发送IGMP 离开报文
b) 上游路由器收到离开报文后,如果IGMP Group组对应的接口为Null,则使用PIM报文进行剪枝
c) 无RPT到SPT切换过程,修剪如下:
- 如果没有进行RPT到SPT的切换,则目标DR首先删除自己的(*,G)表项,(S,G)表项启用老化计时器210S,发送的Prune报文中一份为修剪以RP为目标地址的RPT树(SWR全部置位)、一份为修建组播源为目标地址的SPT树(S置位)
- 上游设备收到Prune报文后,删除(*,G)表项,将(S,G)表项老化时间为210S,并继续向上游发送同样的Prune报文
- RP收到Prune报文后,删除(*,G)表项,并将(S,G)表项老化时间为210S,并上SPT树中发送一份修建源为目标地址的SPT树(S置位)
d) 存在RPT到SPT的切换过程,假设当前目标RP有一条RPT树去往RP,另外一条SPT树去往组播源,并通过SPT树接收最优组播流,修建如下:
- 目标DR首先删除自己的(*,G)表项,(S,G)表项启用老化计时器210S
- 目标发送的Prune报文给RPT树上游邻居,(SWR全部置位),只修建(*,G)树,上游设备收到后,删除(*,G)表项,并将(S,G)表项变为210S老化倒计时
- 目标DR发送Prune报文给SPT树上游邻居(S置位),上游设备收到后,将(S,G)表项下游接口删除,如果下行接口为Null,启用老化计时器210S
2. PIM-DM配置:
1.配置IGP
2.所有路由器上启用组播路由协议[Huawei]multicast routing-enable
3.在路由器上启用PIM协议[Huawei]pim
4.在路由器的接口上开启PIM-DM模式[Huawei-GigabitEthernet0/0/0]pim dm
注1:最后一跳路由器连接接收端的接口开启PIM-DM,如果使用的为IGMPv1报文,如果不启用PIM,则IGMPv1无法选举查询器,也无法发送Graft报文
注2:第一跳路由器连接发送端的接口要开启PIM-DM,否则此接口不会出现在组播表中,不会处理发送端的组播数据
5.最后一跳路由器连接接收端的接口启用IGMP[Huawei-GigabitEthernet0/0/0]igmp enable
① 查看PIM邻居:
② 查看组播路由表:
③ 查看IGMP组播组信息:
④ 查看IGMP接口信息:
3. RP选举:
(1)RP选举:
在PIM-SM组播网络里,担当共享树的树根的节点被称为RP,RP为每个组播流服务,所以一个RP可以服务于一个组播组,也可以服务于多个组播组,所以网络中可以存在多个RP,共享树里所有组播流都通过RP转发到接收者
RP的选举可以分为两种方式:
① 手动指定
② BootStrap自举选举
① 手动指定:
可以在每台设备上使用命令静态指定RP,但无法提供冗余,当RP设备出现故障时,将导致整个组播网络瘫痪。
[Huawei]pim
[Huawei-pim]static-rp 3.3.3.3 2000 preferred
静态选举出来的RP必须相同,匹配列表为2000,默认动态优于静态,当增加参数Preferred
时静态优于动态,并且不看ACL范围
② RP自举选举:
Boot Strap Router,自举选举路由器,RP使用BSR自举选举,通过选举规则,可以实现自动选择网路中的RP,当RP出现故障后,会再次进行选举另一台RP,保证组播网络通畅,提高了冗余。
a) 自举选举原理:
在组播网络中会存在一个BSR路由器,所有的候选路由器(Candidate-RP)发送Candidate-RP-Advertisement报文单播给BSR路由器。BSR路由器汇集之后通过BootStrap组播(224.0.0.13)报文发送给所有的候选路由器,所有的路由器通过自己计算选出RP,称为自举选举。
b) RP选举规则:
- 如果PIM-SM域中只有一个候选RP (Candidate-RP,C-RP),那么这个节点就是域里的RP
- 如果域内存在过个C-RP,则匹配组播范围越精确越优先
- 如果域中存在多个C-RP并都拥有不同的优先级时,则优先级数值最小的将会被选举为域中的RP(默认为0)
- 如果域中存在多个C-RP并拥有相同的优先级时,则依靠HASH算法算出数值来决定RP,数值越大越优先 ,Hash算法参数为组地址、掩码长度、C-RP地址
- 如果域中存在多个C-RP并拥有相同的Hash数值时,则拥有最大的IP地址的C-RP为该域的RP
注:huawei设备哈希可以实现异组附载均衡,哈希公式可以将组合RP的IP、掩码长度计算出哈希值,选出哈希值最大的作为RP,掩码长度表示每几个组地址一轮询,huawei默认长度为/30,表示2个IP组一轮询,掩码长度越长,轮询次数越多,匹配的RP次数就越多,负载均衡越均匀
(2)BSR选举:
在选举出RP之前要先选举出BSR,BSR也可以自举选举,CSBR称为候选路由器,默认抢占。
BSR选举规则:
① 如果域中只有一台C-BSR,该路由器就是该域里的BSR
② 如果域中存在多台C-BSR,则优先级数值最大的为BSR(默认为0)
③ 如果域里存在多台拥有相同优先级的C-BSR,则拥有最大IP地址的路由器为BSR
(3)选举过程详解:
① BSR选举:
a) 网络中的C-BSR都会发送TTL值为1的BootStrap组播(224.0.0.13)报文给自己的PIM邻居
b) 当收到邻居的BootStrap报文与自己的BSR选举参数进行比较,选出一份最优的BootStrap报文
- 优先级数值越大越优先,默认为0
- 接口IP地址越大越优先
c) 将最优的BootStrap继续发送给邻居,最终最优的BootStrap报文传遍整个PIM区域
d) 当存在更高优先级或接口IP地址更大的路由器,默认会抢占BSR
e) BSR每60S泛洪一次BootStrap组播报文给自己的PIM邻居,报文中TTL值为1,目标地址为224.0.0.13
f) 邻居收到BootStrap报文后,会进行RPF检测,检测以BSR接口地址为检测目标,是否从最优下一跳地址收到“合法”的BSR报文,检测通过后,会将数据包中TTL值置位1,源地址变为出接口地址,继续发送给所有的PIM邻居,最终全网都收到BootStrap报文
g) C-BSR会设置一个计时器130S倒计时来检查当前active BSR的状态,如果在130S后没有收到BSR的BootStrap报文,C-BSR便会重新选举
② RP选举:
a) 所有的C-RP将自己的RP优先级和候选接口IP通过Candidate-RP-advertisement报文通过单播发送到BSR,源地址为RP选举接口IP
b) BSR收到所有的报文后,再传递给所有的PIM邻居
c) 邻居收到BSR的报文后,根据报文信息选举出每个组播组的RP路由器:
- 匹配组播范围越精确越优先
- C-RP优先级数值越小越优先(默认为0)
- 依靠组地址、掩码长度、C-RP地址C-RP地址生成哈希值,数值越大越优先
- 选举IP地址越大越好
d) 选举出RP后,所有的C-RP默认会每60S(可配置)发送Candidate-RP-Advertisement报文单播给BSR
e) BSR每隔60S发送一次组播报文BootStrap通告给PIM邻居,BootStrap报文中包含C-RP的信息,邻居收到后继续传递给别的邻居,刷新RP的状态
f) 当RP设备失效,没有向BSR通告Candidate-RP-Advertisement报文,BSR在向邻居通告BootStrap报文中不会存在RP的信息,此时设备会重新自举选择新的RP设备
注:
帧中继网络环境BootStrap报文传递问题
a) AR1为Hub点,AR2和AR3为Spoke
b) 由于PIM的Hello报文使用组播方式,所以在FR map时开启传递组播报文功能
c) AR2为BSR,发送BootStrap报文给AR1,AR1进行RPF检测,去往BSR地址2.2.2.2的下一跳地址为192.168.1.2,和报文源地址进行匹配,匹配通过接收该报文并将TTL置为1传递给AR3
d) AR3收到BootStrap报文,进行RPF检测,去往BSR地址2.2.2.2的下一跳地址为192.168.1.2,与源地址192.168.1.1不符,匹配失败,丢弃BootStrap报文
解决方法:
① 在AR3上使用RPF静态指定[Huawei]ip rpf-route-static 2.2.2.2 32 192.168.1.1指向AR1
② 将网络类型改为P2MP网络类型
4. RP选举配置:
(1)配置BSR选举:
[Huawei]inter loo 0
[Huawei-LoopBack0]pim sm
[Huawei]pim
[Huawei-pim]c-bsr LoopBack 0---将loo0作为选举端口(地址越大越优先)
[Huawei-pim]c-bsr priority 100-----将并将优先级设为100(优先值越大越优先)
(2)配置RP选举:
[Huawei-LoopBack0]pim
[Huawei-pim]c-rp priority 100—设置rp优先级为100(地址越小越优先)
[Huawei-pim]c-rp LoopBack 0----将Loopback0作为接口选举(优先值越大越优先)
选项参数:
a) [Huawei-pim]c-rp LoopBack 0 group-policy 2000----------指定CRP服务
的组播地址组
b) [Huawei-pim]c-rp holdtime 100-----指定BSR等待接收候选RP发送
Advertisement宣告消息的超时信息,缺省时间为150S
c) [Huawei-pim]c-rp advertisement-interval 50—指定候选RP发送
Advertisement宣告消息的时间间隔,默认为60S
(3)实现RP附载均衡:
① 配置OSPF
② 在所有路由器上开启组播路由和pim协议,在接口上开启pim sm(包括loo0)
③ 在所有路由器使用loo0作为选举接口地址
④ 配置附载均衡:
- R2:
[Huawei]acl 2000
[Huawei-acl-basic-2000]rule 5 permit source 239.1.1.1 0
[Huawei-pim]c-rp LoopBack 0 group-policy 2000
- R3:
[Huawei]acl 2000
[Huawei-acl-basic-2000]rule 5 permit source 239.1.1.2 0
[Huawei-pim]c-rp LoopBack 0 group-policy 2000
- R4:
[Huawei]acl 2000
[Huawei-acl-basic-2000]rule 5 permit source 239.1.1.2 0
[Huawei-pim]c-rp LoopBack 0 group-policy 2000
七. PIM-SSM:
Source-Specific Multicast,特定源组播,SSM模型借助PIM-SM的部分技术和IGMPv3来实现的,无需维护RP、无需构建RPT、无需注册组播源,可以直接在源于组成员之间建立SPT。
SSM的特点是网络用户能够预先知道组播源的具体位置。因此用户在加入组播组时,可以明确指定从哪些源接收信息。
1. 组播地址:
PIM-SSM模式中使用组播地址为232.0.0.0~232.255.255.255
2. PIM-SSM原理:
针对于ASM模式,主要原因在于组播源的不确定,在SSM模式中,接收端使用IGMPv3协议告诉目标DR所要接收到的源IP地址和组播组IP,运行PIM-SM模式的路由器之间采用拉的方式直接发送Join报文给上游路由器,上游路由器通过Join中的组播源IP和组播组地址,查看IGP路由表送往源DR,源DR收到Join报文后,将流量发送到接收端,直接形成最短路径树。
3. PIM-SSM收敛过程:
(1)建立邻居关系:
双方互相发送Hello报文,组播Hello报文地址为224.0.0.13,每30S发送一次,105S超时,连接关系down掉
(2)选举DR:
在双方接收到对端的Hello报文后,会根据Hello包中的信息用来选举DR。优先级高的(默认为1)或者IP地址大的成为DR
使用以下命令[Huawei-GigabitEthernet0/0/0]pim hello-option dr-priority 20修改优先级
(3)源DR接收组播数据:
当源DR接收到组播数据时,由于没有RP,所以无法注册,此时源DR不会对组播数据做任何配置
(4)IGMP Group建立:
当接收端通过IGMPv3发送给目标DR,目标DR接收到IGMPv3报文后形成组播组,并得知组播组IP和组播源IP,建立(S,G)表项,根据单播路由表发送Join报文给上游路由器(报文中只有S置位)
注:如果使用IGMPv2协议,此时PC不能发送带有组播源IP的Report报文,此时可以在最后一跳路由器上使用IGMP SSM Mapping功能,为IGMPv1主机和IGMPv2主机提供SSM服务,通过在路由器上配置SSM地址的映射规则,将IGMPv1和IGMPv2报文中的*,G信息转化为S,G信息。
SSM Mapping配置:
[Huawei-igmp]ssm-mapping 232.1.1.1 32 10.1.1.2
[Huawei-GigabitEthernet0/0/0]igmp ssm-mapping enable---在连接组播接收端的接口上开启SSM Mapping功能
(5)Join报文的传递:
每台上游路由器接收到Join报文后检查报文内容,确定组播组IP和组播源IP,生成(S,G)表项,继续送往上游路由器
(6)组播源发送组播数据:
当源DR收到Join报文后,生成(S,G)表项,检查源地址,得知目标DR的IP,直接将组播流量送往下游路由器,最终形成最短SPT。
(7)SPT修剪:
当接收者离开组播组,发送IGMPv3的leave message报文,通告目标DR,目标DR IGMP group组中如果没有接收者,将发送Prune报文给上游路由器进行剪枝。
八. Any-Cast RP/域间组播:
域间组播称为不同区域之间的组播流量传输。
1. MSDP:
Multicast Source discover Protocol,组播源发现协议,当网络中出现多个RP或不同AS中会存在不同的RP,RP之间会使用Source-Actrive报文动态的传递(S,G)表项内容,实现多个RP之间注册报文信息的同步
(1)MSDP收敛:
① MSDP使用TCP单播建立邻居关系,目标端口号639,源端口号随机
② MSDP协议中IP地址小的一端向IP地址大的一端建立邻居关系
③ MSPD使用KeepAlive报文维护邻居关系,20S发送一次
④ MSDP使用SA报文动态传递(S,G)表项内容
(2)SA报文:
使用TCP承载,目标端口号为639,源端口号随机,
① Header:
a) Type:类型,SA类型为1
b) Length:长度
c) RP Address:源RP地址
② SA内容:
a) (S,G):包含组播源IP与组播组的内容
2. Any-Cast RP:
在传统的PIM-SM域中,每个组播组都只能映射到一个RP。当网络负载较大或流量过于集中时,可能导致RP压力过大、RP失效后路由收敛较慢、组播转发路径非最优等问题。在单自治域中应用基于PIM协议的Anycast RP,可实现组播源就近注册和接收者就近加入。既可以缓解单个RP的负担,也实现了RP备份、优化组播数据的转发路径。
Any-Cast RP分为两种:
① 基于MSDP的Any-Cast RP
② 基于PIM的Any-Cast RP
(1)基于MSDP的Any-Cast RP
① 原理:
a) AR1和AR3都为RP,并且都使用loo0地址都为1.1.1.1作为RP的IP地址
b) 两者的RP优先级值最大,当选当前网络的RP
c) 其余的路由器根据RPF检测选出里自己最优的RP
- AR4、将AR1作为RP
- AR2、AR6、AR5将AR3作为RP
d) AR4下接有组播源,组播源将组播流量Flooding给AR4,AR4采用单播发送给AR1进行Register
e) AR4收到Register单播报文后,生成(S,G)表项
f) PC1请求组播流量,发送IGMP Report报文给AR5
g) AR5收到IGMP Report报文后生成(*,G)表项并向AR3发送Join报文给AR3,AR3生成(*,G)表项
h) AR1和AR3之间启用MSDP协议,由于AR1存在(S,G)表项,AR1向AR3发送SA报文将(S,G)表项信息通告给AR3
- RP address:1.1.1.1
- (S,G):192.168.7.2—>224.1.1.1
i) AR3收到SA报文后,发现RP address地址和自身的RP地址重复,为防止环路,丢弃SA报文,所以此时在AR1上使用命令[Huawei-msdp]originating-rp LoopBack 1修改RP address
j) AR3重新收到SA报文,生成(S,G)表项,存在对应的(*,G)表项,往上游接口发送Join报文将组播流引下来,传递给接收者
k) 目标RPAR5收到后,进行RPF检测,如果不是最优路径,进行SPT第二次优化行为
② 配置:
a) 配置IP
b) 配置IGP路由协议
c) 配置组播协议(RP的选举可以时静态也可以是动态,动态只在两台RP上进行BSR和RP的配置,并且优先级、接口地址都相同都相同)
d) 在AR1和AR3上启用MSDP协议,为了加强冗余,各自使用loo1进行邻居的建立
e) 使用命令[Huawei-msdp]originating-rp LoopBack 1在RP上修改SA报文的RP address地址
(2)基于PIM的Anycast RP:
针对传统的Anycast RP,huawei设备提出了基于PIM协议的Anycast RP,与传统的Any-Cast RP原理基本相同,但是基于PIM协议的Anycast RP不依赖与MSDP,而且解决了MSDP中SA报文的RP地址发送重复而不接收的问题
① 原理:
a) AR1和AR3都为RP,并且都使用loo0地址都为1.1.1.1作为RP的IP地址
b) 两者的RP优先级值最大,当选当前网络的RP
c) 其余的路由器根据RPF检测选出里自己最优的RP
- AR4、将AR1作为RP
- AR2、AR6、AR5将AR3作为RP
d) AR4下接有组播源,组播源将组播流量Flooding给AR4,AR4采用单播发送给AR1进行Register
e) AR4收到Register单播报文后,生成(S,G)表项
f) PC1请求组播流量,发送IGMP Report报文给AR5
g) AR5收到IGMP Report报文后生成(*,G)表项并向AR3发送Join报文给AR3,AR3生成(*,G)表项
h) AR1和AR3之间启用基于PIM协议的Anycast RP功能,当AR1接收到组播源的单播Register报文,AR1会将这份报文原封不动的发送给AR3
i) AR3收到AR1转发过来的Register报文,生成(S,G)表项,存在对应的(*,G)表项,往上游接口发送Join报文将组播流引下来,传递给接收者
j) 目标RPAR5收到后,进行RPF检测,如果不是最优路径,进行SPT第二次优化行为
② 配置:
① 配置IP
② 配置IGP路由协议
③ 配置组播协议(RP的选举可以时静态也可以是动态,动态只在两台RP上进行BSR和RP的配置,并且优先级、接口地址都相同都相同)
④ 在AR1和AR3上配置基于PIM协议的Any-Cast RP
AR1:
[RouterC] pim
[RouterC-pim] anycast-rp 1.1.1.1-----------------配置RP地址为1.1.1.1
[RouterC-pim-anycast-rp-10.10.1.1] local-address 11.11.11.11----------------配置本端建立邻居的地址为11.11.11.11
[RouterD-pim-anycast-rp-10.10.1.1] peer 33.33.33.33------------对端地址为33.33.33.33
AR3:
[RouterC] pim
[RouterC-pim] anycast-rp 1.1.1.1-----------------配置RP地址为1.1.1.1
[RouterC-pim-anycast-rp-10.10.1.1] local-address 33.33.33.33----------------配置本端建立邻居的地址为33.33.33.33
[RouterD-pim-anycast-rp-10.10.1.1] peer 11.11.11.11------------对端地址为11.11.11.11
3. 域间组播:
不同AS之间使用SM模式传递组播流量时,称为域间组播
(1)域间组播问题:
组播在域间传递的时候会存在以下问题:
问题 |
原因 |
解决方法 |
组播数据发送时RPF检测问题 |
本区域路由器在接收组播时会进行RPF检测,如果不知道组播源地址,则导致RPF检测失败 |
将源地址引入到BGP路由中,并将此地址引入到IGP协议中,网络中的所有路由器都可以通过RPF检测 |
组播传送问题 |
AS之间需要传递组播流量 |
在AS之间启用PIM协议传递组播数据 |
RP生成(S,G)表项问题 |
需要让不同域了解发送域中发送源的存在 |
使用MSDP协议 |
MSDP的RPF检测 |
RP在收到SA报文时,也会进行RPF检测,如果不能从BGP组播表和单播表中检测到对端RP地址,则RPF检测不通过,不会接收地MSDP报文 |
将RP地址引入到BGP路由表中,由于必须是BGP路由,所以接收SA报文的RP上要配置BGP协议或组播BGP协议 注:huawei设备检查规则只要单播表项中存在就可以 |
BootStrap报文跨域传播问题 |
不同区域中存在不同的RP,两个区域的BootStrap互不传递的,但是由于在两个BGP路由器上启用PIM协议用于组播的传递,此时本区域BootStrap报文也会传递到不同的区域,造成两个区域只会有一个RP |
[Huawei-GigabitEthernet0/0/0]pim bsr-boundary阻止BootStrap报文跨域传递
|
(2)SA报文检测:
SA在RP之间传递时一个矢量的行为,所以如果存在两个或两个以上的MSDP邻居,此时RP会对收到的(S,A)报文进行RPF检测,根据(S,A)报文中的RP address(起始RP)进行RPF检测,MSDP设备收到SA消息后,根据MBGP、组播静态路由、单播路由(包括BGP、IGP)最佳路径的下一跳是哪个对等体,这个对等体也称为“RPF对等体”。如果发现SA消息是从RPF对等体发出的,则接收该SA消息并向其他对等体转发。
此外,还有如下的一些RPF检查规则,SA消息在转发时遵守:
① 规则1:
发出SA消息的对等体就是源RP,则接收该SA消息并向其他对等体转发。表示(S,A)报文中的源地址和报文中的RP address字段IP地址相同,则接收此(S,A)报文
② 规则2:
接收从静态RPF对等体到来的SA消息。一台路由器可以同时与多个路由器建立MSDP对等体关系。用户可以从这些远端对等体中选取一个或多个,使用命令配置为静态RPF对等体
③ 规则3:
如果一台路由器只拥有一个远端MSDP对等体,则该远端对等体自动成为RPF对等体,路由器接收从该远端对等体发来的SA消息,只存在一个MSDP邻居是不会出现环路状况的,所以不会进行RPF检测
④ 规则4:
发出SA消息的对等体与本地路由器属于同一Mesh Group,则接收该SA消息。来自Mesh Group的SA消息不再向属于该Mesh Group的成员转发,但向该Mesh Group之外的所有对等体转发,使用命令将RP邻居放入组中,当收到一份(S,A)报文不会在将这份(S,A)报文传递给组中的MSDP邻居
⑤ 规则5:
到达源RP的路由需要跨越多个AS时,接收从下一跳AS(以AS为单位)中的对等体发出的SA消息,如果该AS中存在多个远端MSDP对等体,则接收从IP地址最高的对等体发来的SA消息
(4)域间组播配置:
① 配置IP、路由协议
② 启用PIM SM协议
③ AR3和AR4建立EBGP邻居关系
③ 在AR3和AR4上配置阻断BootStrop报文传递到对端AS中
AR3:
[Huawei-GigabitEthernet0/0/1]pim bsr-boundary
AR4:
[Huawei-GigabitEthernet0/0/0]pim bsr-boundary
④ 将AR2和AR5分别作为对应AS内的RP
⑤ AR3和AR4将2.2.2.2/32和5.5.5.5/32宣告进BGP,并将这两条路由引入到BGP,实际工作中不可能将所有的BGP路由引入到IGP,所以在引入时加入策略
AR3:
[Huawei]ospf
[Huawei-ospf-1]import-route bgp route-policy b2o
[Huawei]route-policy b2o permit node 10
[Huawei-route-policy]if-match ip-prefix b2o
[Huawei]ip ip-prefix b2o permit 5.5.5.5 32
AR4:
[Huawei]ospf
[Huawei-ospf-1]import-route bgp route-policy b2o
[Huawei]route-policy b2o permit node 10
[Huawei-route-policy]if-match ip-prefix b2o
[Huawei]ip ip-prefix b2o permit 2.2.2 32
⑥ AR2和AR5建立MSDP邻居关系:
AR2:
[Huawei-msdp]peer 5.5.5.5 connect-interface LoopBack 0
AR5:
[Huawei-msdp]peer 2.2.2.2 connect-interface LoopBack 0