HCIP-20.5 PIM DM

数通

PIM:Protocol Independent Multicast,协议无关的组播路由协议

注意:组播PIM底层是单播路由协议

PIM两种模式

DM:密集模式,不常用

SM:稀疏模式,常用

PIM-DM : Protocol Independent Multicast – Dense Mode

PIM-SM:Protocol Independent Multicast – Spouse Mode

组播报文发给一组特定的接收者,这些接收者可能分布在网络中的任意位置,为了实现组播报文正确、高效地转发,组播路由器需要建立和维护组播路由表项。

随着多个组播路由协议的开发与应用,人们渐渐感觉到,如果像单播路由一样,通过多种路由算法动态生成组播路由,会带来不同路由协议间在互相引入时操作繁琐的问题。

PIM(Protocol Independent Multicast)直接利用单播路由表的路由信息进行组播报文RPF(Reverse Path Forwarding,逆向路径转发)检查,创建组播路由表项,转发组播报文。

  • 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 )路由表项指导报文转发。

DM模式只有 ( S , G )表项。

PIM-DM假设网络中的组成员分布非常稠密,每个网段都可能存在组成员,其设计思想是:

  • 首先将组播数据报文扩散到各个网段
  • 然后再剪裁叼不存在组成员的网段
  • 通过周期性的“扩散——剪枝”,构建并维护一棵连接组播源和组成员的单向无环SPT。PIM-DM的关键工作机制包括邻居发现、扩散剪枝、状态刷新、嫁接和断言。

一、PIM-DM基本概述

(1)采用“推(Push)模式”转发组播报文

(2)PIM-DM的关键任务

  • 建立SPT(Short Path Tree,最短路径树)

(3)PIM-DM工作机制

  • 邻居发现、扩散与剪枝、状态刷新、嫁接、断言

二、PIM-DM邻居发现

image-20241028111254635

三、PIM-DM构建SPT

image-20241028111320309

剪枝过程:当下游没有组播成员,扩散组播报文会导致带库资源的浪费。为了避免带宽的浪费PIM-DM使用剪枝机制。

(1)当下游节点没有组播组成员,则路由器向上游节点发送Prune消息,通知上游节点不用再转发数据到该分支。上游节点收到Prune消息后,就相应的接口从其组播转发表项 ( S , G )对应的输出发送列表中删除。剪枝过程继续直到PIM-DM中仅剩下了必要的分支,这就建立了一个以组播源为根的SPT。

(2)各个被剪枝的节点同时提供超时机制,当剪枝超时时重新开始“扩散——剪枝”过程。剪枝状态超时计时器的默认值为210秒。

PIM-DM的“扩散——剪枝”机制周期性进行,每3分钟重复一次。

四、状态刷新

周期性的刷新剪枝状态

7.4-18

五、Graft机制(嫁接)

7.4-19

新的组成员加入组播组后,快速得到组播报文。

六、Assert机制(断言)

避免重复的组播报文

7.4-20

为避免重复的组播报文浪费带宽资源,PIM路由器在接收到邻居路由器发送的相同组播报文后,会以组播的方式向本网段的所有PIM路由器发送Assert消息,其中目的地址为224.0.0.13,其他PIM路由器在接收到Assert消息后,将自身参数与对方报文中携带的参数对比,进行Assert竞选。

竞选规则:

(1)到组播源的单播路由协议优先级小者获胜

(2)如果优先级相同,则到组播源的路由协议开销小者获胜

(3)如果以上都相同,则连接到接收者MA网络接口IP地址最大者获胜

PIM 协议组播地址是224.0.0.13,所有运行PIM协议的路由器都侦听

示例拓扑

7.4-101 (1)

R1:

multicast routing-enable
int g0/0/1
 pim dm
int g0/0/2
 pim dm
int g0/0/0
 pim dm

R3:

multicast routing-enable
int g0/0/0
 pim dm
int g0/0/1
 pim dm
int g0/0/2
 pim dm

其他路由器配置类似,略

R5:

multicast routing-en
int g0/0/1
 pim dm
int g0/0/2
 pim dm
int g0/0/0
 igmp enable  # 接用户接口启用igmp协议

R6:

multicast routing-en
int g0/0/0
 pim dm
int g0/0/1
 igmp en  # 接用户接口启用igmp协议

调试命令:

dis pim neighbor
dis pim routing-table