「Multicast」- 形成组播分发树(PIM Dense Mode)

  CREATED BY JENKINSBOT

邻居关系建立(PIM Hello)

邻居发现是形成组播分发树的先决条件,组播转发路径只能在 PIM Neighbor 间建立,通过 PIM Hello 包完成;

邻居关系建立

当路由器的接口激活 PIM 后,接口便周期(30s)发送 PIM Hello 数据包,目的地址 224.0.0.13。当交互 Hello 报文后,组播路由器间就能知道邻居信息,建立 PIM Neighbor 关系;

邻居关系维护

维持邻居关系依靠 PIM Hello 报文,邻居超时时间默认为 105s(标准为 3 倍的间隔时间,即 90 秒;在华为设备中,PIMv1 为 3 倍,即 90 秒,而 PIMv2 为 105 秒);

如果超时时间内收不到邻居发来的 PIM Hello 报文,则删除邻居关系;

分发树的形成

PIM-DM 首次形成组播分发树主要依赖:扩散机制、剪枝机制、断言机制:
1)扩散机制:组播数据包向所有的 PIM Neighbor 泛洪,同时组播路由器产生组播路由表项;
2)断言机制:当组播转发过程中存在多路访问网络,则需要选举出一个组播转发路由器,避免重复组播报文;
3)剪枝机制:如果组播路由器下没有组成员,则将源到该组播路由器的组播转发路径剪枝;
4)DR 选举机制:通过 PIM Hello 进行 DR 选举,以负责流量的转发;

扩散机制

Multicast Source 发送的组播报文会在全网内扩散;
当 PIM Router 接收到组播报文,先进行 RPF 检查,通过后会在 PIM Router 上创建(S,G)表项,然后会向所有 PIM Neighbor 发送;

扩散过程如下:

PIM-DM 形成的(S,G)表项有老化时间(默认 210s),如果老化时间超时前没有收到新的组播报文,则删除(S,G)表项;

扩散机制会周期性(默认180s)全网扩散组播数据,周期性扩散的主要目的是探测是否有新成员加组,但是由于全网扩散组播数据会浪费大量带宽,所以现在的组播网络一般使用 状态刷新机制嫁接机制 来实现周期性全网扩散感知新成员加组的目的;

断言机制(Assert)

问题描述
在网段(MA Network)中,当有多个相连的 PIM Router 向该网段转发组播报文时,需要保证只有一个 PIM Router 向该网段转发组播报文;

解决方案
通过 Assert(断言)机制,其选举规则,将决定 Multicast Router 的转发行为:
1)获胜一方的下游接口称为 Assert Winner,将负责后续对该网段组播报文的转发;
2)落败一方的下游接口称为 Assert Loser,后续不会对该网段转发组播报文,PIM Router 也会将其从(S,G)表项下游接口列表中删除;

断言机制选举规则,断言机制由组播数据触发:
1)当 PIM Router 在接收到 Neighbor 发送的相同组播报文(收到的报文 与 自己发送的报文 相同)后,会向该网段发送 Assert 报文,来进行选举;
2)Assert 报文内会携带到组播源的 单播路由前缀、路由优先级、开销、网络地址大小(大的胜出,有的选择网络地址小的,取决于实现);
3)Assert 选举失败的设备会抑制自身的转发行为,并将这种抑制转发的状态保持一段时间,这段时间就被称为 Assert 保持时间,默认 180s;
4)Assert 保持时间超时后,竞选失败的设备会恢复转发,进而导致新一轮竞选被触发;

<AR2>display pim routing-table fsm 
...
 (192.168.2.1, 239.1.1.1)
     Protocol: pim-dm, Flag: LOC ACT 
     UpTime: 00:01:21
     Upstream interface: GigabitEthernet0/0/0
         Upstream neighbor: NULL
         RPF prime neighbor: NULL
         Join/Prune FSM: [F]
     Downstream interface(s) information: None

     FSM information for non-downstream interfaces:
         1: GigabitEthernet0/0/1
             Protocol: pim-dm
             DR state: [NDR]
             Join/Prune FSM: [NI]
             Assert FSM: [L, AT Expires: 00:02:41]
                 Winner: 10.0.45.3, Pref: 0, Metric: 0

剪枝机制(Prune)

问题描述:对于 Multicast Router,如果无 Multicast Receiver 与其连接,则无需再将组播流量继续放往该设备。

解决方案:通过 Prune 机制,组播网络可以将此类路径移除。

剪枝机制工作原理如下:

路由器为被裁剪的下游接口启动一个剪枝定时器(默认 210s),定时器超时后接口恢复转发:
1)组播报文重新在全网范围内扩散,新加入的组成员可以接收到组播报文;
2)随后,下游不存在组成员的叶子路由器将重新向上发起 Graft 操作;
3)通过这种周期性的扩散-剪枝,PIM-DM 周期性的刷新 SPT;

当下游接口被剪枝后:
1)如果下游叶子路由器有组成员加入,并且希望在下次“扩散-剪枝”前就恢复组播报文转发,则执行 Graft 动作;
2)如果下游叶子路由器一直没有组成员加入,希望该接口保持抑制转发状态,则执行 State-Refresh 动作;
3)Prune 影响组播流量发送,但是不会影响 State-Refresh 报文的发送;

剪枝否决:
1)在 MA Network 中,存在剪枝否决机制,即当发送 Prune 报文后,会等待(3s)网络中是否由其他接收者来否决;

分发树的维护

组播分发树形成后不会一直存在,也不会一直不变;

在 PIM Neighbor 关系稳定,组成员没有变化的情况下,维护组播分发树一般有两种方式:
1)持续发送组播报文,保证组播路由表项能一直存在。(思科,每三分钟将过期,以触发重新修剪)
2)发送状态刷新报文,保证组播路由表项的下行接口状态不发生变化。(华为设备使用该方式;当设备加入时,使用 Graft 机制)

状态刷新机制(State-Refresh)

在 PIM-DM 中,为了避免被裁剪的接口因为“剪枝定时器”超时而恢复转发:
1)离 Multicast Source 最近的 First-Hop Router 会周期性(60s)地触发 State-Refresh 报文在全网内扩散。
2)收到 State-Refresh 报文的 PIM Router 会刷新剪枝定时器的状态。被裁剪接口的下游叶子路由器如果持续无组成员加入,该接口将一直处于抑制转发状态。

逐跳泛洪 State-Refresh 报文:TTL=1,收到报文的 Router 将重新产生 State-Refresh 报文。

新成员的加组

当有新成员加入组播组后,组播网络需要更新组播分发树,才能将组播数据发往组成员。但是 PIM-DM 使用“扩散-剪枝”的方式建立分发树后,通过 State-Refresh 机制,使下行接口一旦被抑制就无法自动恢复。

所以,需要一些机制来更新组播分发树,一般 PIM-DM 更新分发树的方法有两种:
1)等待组播路由表超时后,全网重新泛洪。该方法不可控,在现网中无法实现
2)使用嫁接(Graft)机制,当新成员加组后,主动反向建立组播分发路径。现网中一般使用嫁接机制来实现新成员加组。

嫁接(Graft)机制

PIM-DM 通过嫁接机制,使有新组成员加入的网段快速得到组播报文。

1)叶子路由器通过 IGMP 了解到与其相连的用户网段上,组播组 G 有新的组成员加入。
2)随后叶子路由器会基于本地的组播路由表向上游发送 Graft 报文,请求上游路由器恢复相应出接口转发,将其添加在(S,G)表项下游接口列表中。
3)Graft 报文会一直向上转发;