• PIM—SM理论讲解


    目录

    PIM SM基本概念

    PIM工作步骤

    DR竞选

    RP基本概念(Bootstrap自举报文)

    RP的作用

    RP的两种类型

    RP的缺点

    PIM SM建树过程

    成员接收者到RP建树过程(Join加入报文)

    组播源到RP建树过程(Register注册报文、Join加入报文)

    SPT切换

    SSM模型


    PIM SM基本概念

    PIM SM采用“拉”(Pull)的方式来转发组播报文并生成组播表,建立SPT(最短路径树)、RPT(共享树)转发组播报文。它假定每条链路都没有需求。

    PIM工作步骤

    邻居建立

    全网开启组播、配置PIM

    通过Hello报文建立PIM邻居,并选举DR

    选举RP

    通过RP建立SPT以及RPT树

    RPT树建立

    在RP与组成员端建立RPT树(*,G)树

    SPT树建立

    在组播源与RP之间建立(S,G)树

    通过组播源流量在RP与组成员端之间也建立(S,G)表项

    SPT切换

    为了减少RP的负担和避免次优路径,进行SPT切换

    DR竞选

    当组播源或组成员所在的网段,同时连接着多个PIM路由器时,会通过选举一个DR来负责源段或组成员端组播报文的收发

    DR的选举规则(通过Hello报文来选举)

    DR优先级高的为DR(前提网段中的所有PIM路由器都支持DR优先级)

    优先级相同或有PIM路由器不支持DR优先级的情况,IP地址大的优先

    当DR故障时,会重新选举新的DR

    DR的主要作用

    DR分为两种类型,不同类型的DR作用不同

    源DR:连接组播源的,负责向RP发送Register注册报文

    组成员端DR:连接组成员的,负责向RP发送Join加入报文


    RP基本概念(Bootstrap自举报文

    如果采用组播源去拉流量的话,对于使用IGMPv1、v2的组成员来说是无法找到组播源的

    所以在PIM SM模式中,定义了RP(汇聚点,其实就是一台被设备为RP的网络设备),通过RP作为中介实现成员与组播源建树(即成员无法直接与组播源建SPT树)

    RP的作用

    RP是PIM SM中一台“核心”的路由器,它起到的是“汇聚”的作用,汇聚组播接收者的加入/剪枝请求和组播源的组播数据与注册请求。

    具体如何汇聚如下

    组播接收者所在网段的DR路由器向RP发(*,G)Join报文,建立RPT共享树

    RP在收到组播路由器发送的Register注册报文后,向组播源转发(S,G)Join报文,建立SPT树

    收到组播数据的最后一跳路由器(DR)向组播源建立SPT树(可选过程)

    RP的注意事项

    在PIM SM中,每一个PIM组播组都需要且只需要一个RP地址来建树,因此要求全网的路由器都要事先知道某个组的RP地址。(每个PIM域可以有多个RP)

    RP的两种类型

    按照RP部署维护的复杂性和方式,可以分为静态RP和动态RP部署

    静态RP部署

    手工添加RP和组的对应关系(全网PIM路由器都要配置)

    注意

    1. 如果配置的静态RP地址是本机状态为UP的某个接口地址,本机就作为静态RP,作为静态RP的接口不必使能PIM协议。
    2. 如果没有指定ACL,配置的静态RP为所有组播组224.0.0.0/4服务
    3. 重复执行静态RP的配置命令,会创建多个RP
    4. 当存在多个静态RP为某个组服务的情况,则选择IP地址最大的RP为该组服务
    5. 当配置静态RP时携带了Preferred命令,静态RP的优先级高于动态RP。当配置静态RP时没有携带Preferred命令,则动态RP优先级高于静态RP

    动态RP部署(Bootstrap自举报文)

    目前动态RP协议使用的是PIMv2的BSR(自举协议)

    BSR协议概念

    1. 在BSR协议中,定义了两种角色的设备:C-RP(Candidate-RP)、C-BSR(Candidate-BSR)两种
    2. 手动配置多台路由器为C-RP与C-BSR,从C-RP中竞选出RP,从C-BSR中竞选出BSR
    3. 这两种角色都可以定义多台,以提供冗余备份能力

    从C-BSR选举BSR——通过BSR报文选举

    C-BSR启动时会启动BSR超时计时器130s,并逐跳泛洪自身的Boostrap(BSR)报文

    • 1、在130s内未收到其它Boostrap报文,则自己选举为BSR
    • 2、在130s内收到其它Boostrap报文,则提取报文中的部分信息进行选举
    1. BSR报文中的优先级值越大,越优先
    2. BSR报文中的BSR的IP地址越大,越优先

    BSR全网通告自己的IP地址

    BSR会将自己是BSR的消息通过Boostrap报文全网泛洪

    C-RP发送自己的RP映射信息给BSR

    每个C-RP定义自己的一个接口IP地址和多个组播地址范围的对应关系

    每一对IP地址和组播地址范围的对应关系都叫做RP映射

    C-RP通过接收泛洪的BSR通告报文,获取BSR的地址。

    之后每个C-RP会以单播的方式周期性60s把RP映射发往BSR

    BSR全网通告C-RR的RP映射信息

    BSR将收集到的RP映射通过周期性每隔60s发送的BSR报文通告出去

    此时Boostrap报文会额外包含组范围、C-RP的优先级、C-RP的地址信息

    如果路由器130s未收到BSR报文,则会清除本地已有的BSR信息和RP映射关系

    全网路由器从C-RP中选举RP

    接收端收到BSR泛洪的关于RR映射消息,从收到的RP映射关系中选择最优的C-RP作为RP

    • 由于收到的RP映射关系中,组范围可能会重叠,会优选最最小的组范围所对应的RP

    例如:C-RP1的组播范围为224.0.0.0/4,C-RP2的组播范围为224.1.2.0/24,当为组224.1.2.3选择RP时,会选择C-RP2为RP

    • 优选C-RP优先级值小的(默认为0,值越小越优先)
    • 执行Hash算法,结果大的优选
    • C-RP地址大的获胜

    RP的缺点

    RP是PIM SM的核心,容易出现瓶颈,发生单点故障

    RP未必处于源和接收者路由器之间的最优路径上,经过的RPT树路径未必是最优路径


    PIM SM建树过程

    成员接收者到RP建树过程(Join加入报文)

    由接收端DR逐跳向RP建立RPT,发送(*,G)Join报文

    • 当连接组成员的DR路由器收到IGMP成员报告报文,创建(*,G)表项,并查找对应此组播组的RP地址(收到IGMP报告报文的接口为下游接口)
    • 根据RP地址进行RPF检查,找到去往RP的RPF接口,并发送(*,G)Join报文(此RPF接口为上游接口)
    • 上游路由器收到(*,G)Join报文后,创建(*,G)的表项(收到此报文的接口为下游接口),并查找对应此接口的RP地址,并向RPF接口发送(*,G)Join报文,逐跳构建RPT树直到找到RP为止

    只要接收者存在,连接组成员的设备会每60s向上游发送(*,G)Join刷新组播路由表(*,G)条目

    为什么组成员到RP生成的是(*,G)表项?

    对于组成员来说,当组成员使用IGMPv1和v2时,不知道组播源IP,只知道组播地址,因此刚开始成员端与RP建立(*,G)表项。

    组播源到RP建树过程(Register注册报文、Join加入报文)

    • 当连接组播源的DR路由器收到组播流量后,根据组地址查到RP的地址。然后将组播报文通过单播的注册报文(携带源信息和组信息)发送给RP

    • 如果RP存在(*,G)表项,并存在下游接口,则解封装注册报文,根据RPT树转发组播流量。并根据组播源地址检查RPF接口,发送(S,G)Join报文,逐渐构建SPT树。源端DR构建SPT树后,会沿着SPT树转发组播流量到RP,RP收到后发送注册停止报文
    • 如果RP不存在(*,G)表项或者没有下游接口,则直接注册停止报文给源端DR。源端DR停止将组播报文封装在注册报文中,RP也不会发送(S,G)Join报文

    注册报文和注册停止报文在组播源活跃期间会一直发送

    源端DR会在组播源活跃期间每个55s发送一次空的注册报文给RP

    • RP如果已经存在关于组播源的(S,G)表项,则会发送注册停止报文(表示自己已经有此组播源表项)
    • RP如果不存在关于组播的(*,G)表项,则会发送注册停止报文(表示此组播源下无成员,不需要)
    • RP如果存在关于组播的(*,G)表项,但是没有关于组播源的(S,G)表项,则不会发送注册停止报文(表示自己需要组播源注册建立SPT树)

    源端DR在发送空的注册报文后,如果5s内收不到注册停止报文,就会发送带组播流量的单播注册报文到RP

    • RP收到后建立关于组播源的(S,G)表项,重复上述建立SPT树的过程

    为什么也要与成员端DR建立SPT树

    因为转发流量一定需要(S,G)表项


    SPT切换

    对于一些接收者来说,通过RP的组播转发路径并不是最优的路径,此时就需要Switchover机制(即SPT切换),SPT切换由与组成员直连的路由器触发的

    接收者到组播源也会建立SPT树,之前RP与源建立的树就不用了,这个过程就称为SPT切换

    什么时候进行SPT切换

    当用户端DR收到组播报文的速率超过阈值时,会进行SPT切换,由组成员端DR发起

    华为设备上阈值默认为0,即只要有流量就会进行SPT切换

    SPT切换的工作过程

    组成员DR检查自己(S,G)表项的上游接口是否为组源接口

    如果是则继续向上游检查,如果不是则向真正的上游接口发送(S,G)表项发送Join报文

    当真正的上游接口收到组播源流量后,会向之前的上游接口发送剪枝报文


    SSM模型

    上述介绍的PIM为ASM模型的建树过程,SSM模型需要借助PIM-SM的部分技术和IGMPv3/MLDv2来实现

    SSM模型的特点

    SSM模型无需维护RP、无需构建RPT、无需注册组播源、可以直接在组播源与成员之建立SPT(需要选举DR,建立邻居,然后直接建立SPT树)

    当成员端使用IGMPv3/MLDv2加入组播组时,为SSM模型

    SPT建树

    接收端DR直接发送关于(S,G)表项的Join报文,逐跳向源发送

    PIM路由器通过Join报文创建(S,G)表项

    SPT建立后,源段就会将组播报文沿着SPT分发给组成员

    PIM实现方式比较

    华为PIM-SM 动态RP实验配置_静下心来敲木鱼的博客-CSDN博客icon-default.png?t=N7T8https://blog.csdn.net/m0_49864110/article/details/128685766?csdn_share_tail=%7B%22type%22%3A%22blog%22%2C%22rType%22%3A%22article%22%2C%22rId%22%3A%22128685766%22%2C%22source%22%3A%22m0_49864110%22%7D

  • 相关阅读:
    【golang】http.ListenAndServe源码解析
    通过实例讲清楚MongoDB九种聚合操作
    java毕业设计哈尔滨文旅信息网站(附源码、数据库)
    Ubuntu安装.Net SDK
    关于JavaScript的Object所有方法
    A-LEVEL Chemistry考点分析
    linux驱动-CCF-0基础
    [ Linux长征路第六篇 ] Linux使用git上传gitee三板斧
    使用自定义数据训练 YOLOv10
    Sentic GCN (2022 Knowledge-Based Systems)
  • 原文地址:https://blog.csdn.net/m0_49864110/article/details/127815180