PIM-DM路由协议

PIM路由协议基础:

PIM-DM的工作机制:

  • 邻居发现:

    • pim路由器会像目的地址为224.0.0.13发送hello来建立邻居关系,TTL值为1

    • ==目的地址224.0.0.13标识区域内的所有pim路由器,为什么采用组播地址,因为不一定是只跟一台路由器建立邻居关系==

    • pim邻居建立过程中,会通过hello报文协商option参数,pim协议支持各种选项参数。

      | 选项id | 选项内容 | 选项作用 |
      | :—-: | :—————: | :———————————————-: |
      | 1 | hello hold time | 邻居关系的维持时间,默认为3.5倍的hello时间,105s |
      | 2 | Lan prune delay | 发送prune的最大延时时间,默认为0.5s |
      | | override-interval | 发送否决剪枝jion报文的时间间隔,默认为2.5s |
      | 19 | DR priority | DR优先级,先比较优先级再比较接口ip地址,都比大 |
      | | generation ID | 跟踪邻居路由器的变化 |

    • ==hello报文每30s发送一次,死亡时间是hello时间的3.5倍、105s==

  • 扩散:

    • 路由器收到组播报文,先进行RPF检查,然后向所有的pim邻居和IGMP接受者进行复制转发。
    • 接受到组播报文的pim路由器会在本地创建相应的S G表项。
    • 当扩散到叶子路由器,叶子路由器会判断是否有组播接受者,有的话,会创建相应的sg表项,没有的话,则向上游进行剪枝
  • 剪枝:

    • 在SG表项中,当下游接口列表为空,并有扩散的组播数据时,那么就会像上游的pim邻居组播发送剪枝报文(prune),目的地址为224.0.0.13,让他不要再发送组播报文过来,
    • pim邻居收到报文后,会将下游端口删除,并启动剪枝计时器(210s),那么自己的下游接口又为空,那么就又会向上游邻居发送剪枝报文,
    • join/prune报文中,P置位为1是剪枝报文,J置位为1是加入报文。
  • 剪枝延缓计时器:

    • 当收到下游发送的剪枝报文后,会根据邻居数量是否大于1来进行相应的处理,
    • 只有一个邻居,收到剪枝报文后,立即将该接口变为剪枝状态
    • 有多个邻居,收到剪枝报文后,会启动一个剪枝延时计时器==(3s=0.5+2.5)==,在这个时间内从其中一个邻居收到了一个join报文(2.5s),就会启动剪枝否决机制。
    • 在下游接口有直连接受者,就不管了pim邻居的数量。
    • ==pim prune的最大传输时间为0.5。==
    • ==join报文发送的默认时间间隔为2.5s。==
  • 嫁接:

    • 当有一条新的主机想加入某个组播组,那么就会像上游的pim邻居单播发送graft嫁接报文,
    • 发送graft报文,并启动嫁接定时器(3s),要求上游路由器主动将被剪除的接口添加到下游接口列表中,并向其转发组播数据
    • 收到graft报文后,会回复一个graft ack报文来做确认,没收到就每3s重传一次。
  • 状态刷新:

    • 离组播源最近的第一条路由器会以每60s周期性发送刷新报文,并进行全网扩散。

    • 可以用来刷新剪枝计时器,刷新报文置位为1时进行刷新,每三次报文置位为1,每180s刷新一次。

  • 断言:

    • 当从其下游接口发送一份组播数据,又从其下游接口收到该数据时,启动断言机制:
    • 刚开始设备都认为自己的winner,并发送assert报文,里面携带了到达组播源的协议优先级和开销,通过对比来选出winner,先比较协议优先级,比小优先,相等就比开销,越小越优。再次相等就比较数据的源地址和自己接口的ip地址,比大优先,
    • ==优胜者为winner,失败者为loser,winner之能有一个,loser可以有多个。==
    • 成为loser的设备后,会自动剪除自己的下游接口,当下游接口列表为空时,发起剪枝,winner也会收到这个剪枝报文,同时开启断言计时器180s。在超时之前,接口一直处于剪枝状态。
    • ==winner会周期性的向下游接口发送状态刷新报文,用来给loser刷新断言计时器。==

    • winner从下游接口收到剪枝报文,启动剪枝延时计时器,等待join报文的到来。否决剪枝行为。

    • 关于断言场景下网络拓扑变化时,组播路径的切换:

      • winner的上游接口中断:会从下游接口发送最差的assert报文来通知其他的loser。
      • 最差的assert报文:协议优先级无限大,开销无限大。
      • winner的下游接口中断:此时无法从下游接口发送assert cancel报文,那么loser路由器只有等待与winner邻居失效后(默认105s),才会知道winner挂掉。

PIM DM 报文:


报文类型 类型ID 报文作用
hello 0 发现,协商参数。维护邻居关系
jion/prune 3 加入/剪枝,J置位为1,表明为jion报文,p置位为1,表明为prune报文
assert 5 断言
graft 6 剪枝
graft ack 7 剪枝确认
state-refresh 9 状态刷新