PIM SM

PIM SM路由协议基础:

PIM SM基本原理:

  • PIM-SM使用拉的模式转发组播报文,类似于按需使用的方法,一般应用于组播组成员多,相对稀疏,规模较大的网络,

PIM SM的工作机制:

RP的发现:

  • RP-汇聚点

  • 在网络中维护一台RP,所有的pim路由器都知道RP的位置,RP负责接受组播数据,并向组播接受者进行转发,RP跟组播源构建一颗SPT树,RP跟组播接受者构建一颗RPT树。

RPT的构建:

  • 当网络中出现组成员,用户通过IGMP加入某组播组,然后由最后一跳路由器(成员端DR)向RP发送(* G)表项的join报文,并逐跳在pim路由器上建立(* G)表项。
  • 成员端DR发送的(* G)表项的join报文中,其中join字段中IP地址会置位,其中,分为SWR置位
    • S置位:所有的join/prune报文均为置该位
    • W置位:(* G)表项中的join/prune报文置该位
    • R置为:向RP发送的所有join/prune报文均会置位
    • 发往RP的(* G)join/prune报文会置SWR位
    • 发往组播源的(S G)join/prune报文会S位
    • 发往组播源的(S G)join/prune报文会置SR位
  • 成员端DR会每隔60S向上游pim路由器发送join报文,收到join报文后,重置接口计时器(210s)接口计时器是根据join/prune报文中的heldtime时间来设定的,超时后就会将此接口从下游接口中移除
  • 只要接受者存在,成员端DR会每隔60S向上游pim路由器发送join报文,用来刷新(* G)条目。维护RPT树。

组播源注册:

  • 当网络中出现活跃的组播源,源端DR会将此组播数据封装在register报文中,以单播的形式发送给RP,

SPT的构建:

  • RP收到此register报文后,就得知了组播源的地址,然后向组播源发送(S G)表项的join报文,然后在沿途的pim路由器上创建相应的(S G)表项,构建一颗SPT树,之后的组播数据就根据(S G)进行转发,
  • RP这时可以通过两个方向收到组播数据,一个是从SPT,另一个是根据单播注册隧道,这时就会由RP向源端DR发送register stop 报文,注册停止报文,DR收到之后,就会启动一个注册抑制计时器,60s,超时后,继续发送注册报文。
  • 为了降低RP的系统开销,在注册抑制计时器超时前5s,会像RP发送probe(空注册报文)报文中仅含组播源和组播组的信息,不含组播数据。
  • 空注册报文的作用:向RP通告组播源处于活跃,通知RP发送注册停止报文刷新注册抑制计时器时间
  • SPT树构建好之后,RP就可以收到组播的数据了,这时,会沿着RPT树向下发送组播数据,这时,会触发RPT树上的每一台路由器都创建一个跟(* G)一样的(S G)表项,该表项不置SPT位,只置ACT位,代表只有数据通过该表项,数据因(S G)表项无效,所以使用(* G)表项来进行RPF校验。
  • 当SPT树和RPT树在当前路由器上同时存在,若SPT树的(S G)表项置SPT位,则组播数据使用该表项进行转发。若无SPT置位,则使用(* G)表项转发。只要没有从(S G)表项中接收到组播数据,SPT永不置位。

BSR-自举协议:

RP的发现:

  • 静态RP:

    • 在每一台路由器上进行静态部署
  • 动态RP/C-RP

    • 将多个pim路由器部署为C-RP,来动态选出RP,同时还需要配置C-BSR,选举出BSR,来收集所有C-RP的通告信息。
  • C-BSR的竞选:

    • 开始,所有的C-BSR都认为自己的BSR,以组播地址224.0.0.13向全网发送bootstarp报文,TTL值为1,周期性的60s发送一次,用来刷新PIM路由器缓存的BSR的信息,重置130计时器。
    • bootstarp携带C-BSR优先级(默认是0),地址,每一台Pim路由器收到后,通过比较选出BSR
    • 先比较优先级再比较地址。都比大。
  • C-RP的竞选:

    • 所有的C-RP都会以单播的形式向BSR发送Advertisement报文,60s一次。超时时间为150s
    • Advertisement报文携带C-RP的服务的组地址范围,C-RP的地址,优先级。
    • BSR收到之后,会将所有C-RP发送过来的报文进行一个汇总,汇总成AS-set,并封装在boostarp报文中,进行全网发送。
    • pim路由器收到之后,使用相同的规则进行计算和比较,选出一个RP.
      1. C-RP服务的组地址范围,越精确越优,(掩码长者优先)
      2. 比较C-RP的优先级,比小,(默认为0)
      3. 将组地址、C-RP的地址、BSR的hash掩码长度(默认为30),进行hash运算,进行比较,比较值最大的。
      4. 比较C-RP的地址。比大
    • 比较出RP后,将组播组和RP的对应关系保存下来,指导后续的建树过程。
  • RFP校验:

    • BSR发送bootstarp报文,要进行RPF检验。
      1. 接受组播数据的入接口是到达组播源的出接口
      2. 接受的组播数据源地址是到达组播源的下一跳。
    • 满足两个要求后,才可发送bootstarp报文。
    • 因为bootstarp报文的ttl值为1,所以路由器转发时,源地址逐跳封装。

RPT/SPT树的切换:

  • 第一次SPT的切换:从单播注册隧道到SPT树的切换

  • 第二次SPT的切换:从RPT到SPT的切换。

  • STP切换机制:成员端DR周期性的检测组播报文的转发速率,一旦发现(S G)报文的转发速率超过阈值(阈值默认为0),则触发SPT切换。

    1. 组成员端DR逐跳向源端DR逐跳发送(S G)join报文,并沿途创建(S G)表项,建立源端DR到成员端DR的SPT树
    2. 成员端DR与缘端DR的SPT树建立后,成员端DR会从两个地方同时收到组播数据,这时进行RPF校验,如果(S G)表项的RPF接口和RPF邻居与(* G)表项的RPF接口和PRF邻居不一致,则成员端DR会沿着RPT树逐跳向RP发送(S , G)剪枝报文,其中RPT置位,代表这是发送给RP的,收到(S , G)剪枝报文的PIM路由器会删除(S G)表项中相应的下游接口,之后再不必向下转发数据。
    3. 如果SPT不经过RP,那么RP会继续逐跳向源端DR发送(S , G)剪枝报文,删除(S G)表项中相应的下游接口,之后再不必向下转发数据。

缺省情况下,设备一般没有配置阈值,所以当成员端DR知道了组播源的地址时,就会触发SPT的切换。

注册消息:

  • 组播数据从上游接口流入,然后转发进注册隧道,隧道使用PIM协议封装组播报文,其中隧道的源IP是源端DR的IP地址,目的IP是RP的IP地址。
  • PIM register作为隧道协议直接封装组播数据并发送给RP,注册报文中,有两个flag位,B位和N位。其中B位置位的话,代表组播源和源端DR不直连,N位置位的话,代表是空的注册报文。

断言机制:

  • 当从其下游接口发送一份组播数据,又从其下游接口收到该数据时,启动断言机制:
  • 刚开始设备都认为自己的winner,并发送assert报文,里面携带了到达组播源的协议优先级和开销,通过对比来选出winner,先比较到达RP的协议优先级和开销,比小优先,如若相等就比较数据的源地址和自己接口的ip地址,比大优先,
  • 优胜者为winner,失败者为loser,winner只能有一个,loser可以有多个。
  • 成为loser的设备后,会自动剪除自己的下游接口,当下游接口列表为空时,发起剪枝,winner也会收到这个剪枝报文,同时开启断言计时器180s。在超时之前,接口一直处于剪枝状态。
  • winner会周期性的向下游接口发送状态刷新报文,用来给loser刷新断言计时器。
  • winner从下游接口收到剪枝报文,启动剪枝延时计时器,等待join报文的到来。否决剪枝行为。
  • 关于断言场景下网络拓扑变化时,组播路径的切换:
    • winner的上游接口中断:会从下游接口发送最差的assert报文来通知其他的loser。
    • 最差的assert报文:协议优先级无限大,开销无限大。
    • winner的下游接口中断:此时无法从下游接口发送assert cancel报文,那么loser路由器只有等待与winner邻居失效后(默认105s),才会知道winner挂掉。
posted @ 2020-07-05 22:53  皓先生  阅读(1890)  评论(1编辑  收藏  举报