HCIP-PIM-1

本贴最后更新于 1358 天前,其中的信息可能已经时移世异

PIM 协议简介

定义

PIM(Protocol Independent Multicast)称为协议无关组播。这里的协议无关指的是与单播路由协议无关,即 PIM 不需要维护专门的单播路由信息。作为组播路由解决方案,它直接利用单播路由表的路由信息,对组播报文执行 RPF(Reverse Path Forwarding,逆向路径转发)检查,检查通过后创建组播路由表项,从而转发组播报文。

目前设备实际支持的 PIM 协议包括:PIM-DM(PIM-Dense Mode)、PIM-SM(PIM-Sparse Mode)。

目的

1992 年,为了承载网络视频会议、音频会议,以 MOSPF 和 DVMRP 为组播路由协议的虚拟 IP 组播骨干网——Mbone 建立成功。这为组播技术应用和推广起到了积极作用,在随后的十几年,组播路由协议得到了很大发展。

但是随着多个组播路由协议的开发与应用,人们渐渐感觉到,如果像单播路由一样通过多种路由协议算法来动态生成组播路由,会带来不同路由协议间在互相引入路由时操作繁琐的问题。而且网络设备对于单播和组播路由信息都需要维护。这也就催生了一种与单播路由协议无关的组播路由协议——PIM。PIM 协议只专注于组成员和组播源状态相关的信息,而选取路径的信息直接从单播路由表获取。因此它不需要维护庞大的路由信息,从而降低了 PIM 协议的复杂性。这使得 PIM 协议成为应用最广泛的域内组播协议。

说明:
由 PIM 路由器所组成的网络称为 PIM 网络。通常一个大的 PIM 网络可以划分为多个 PIM 域来管理和控制组播报文的转发,这里的域内组播协议即是指 PIM 域内组播协议。

image.png

组播分发树

PIM 网络以组播组为单位在路由器上建立一点到多点的组播转发路径。由于组播转发路径呈现树型结构,也称为组播分发树 MDT(Multicast
Distribution Tree)。

组播分发树主要包括以下两种:

  • 以组播源为根,组播组成员为叶子的组播分发树称为 SPT(Shortest Path
    Tree)。SPT 同时适用于 PIM-DM 网络和 PIM-SM 网络。
    如[图 1]中的 RouterE→RouterD→RouterA(RouterB),就是一棵以 Source 为根,以 HostA、HostB 为叶子的 SPT。
  • 以 RP(Rendezvous Point)为根,组播组成员为叶子的组播分发树称为 RPT(RP Tree)。RPT 适用于 PIM-SM 网络。。

PIM 路由器

在接口上使能了 PIM 协议的路由器即为 PIM 路由器。在建立组播分发树的过程中,PIM 路由器又分为以下几种:

  • 叶子路由器:与用户主机相连的 PIM 路由器,但连接的用户主机不一定为组成员,如[图 1]中的 RouterA、RouterB、RouterC。
  • 第一跳路由器:组播转发路径上,与组播源相连且负责转发该组播源发出的组播数据的 PIM 路由器。如[图 1]中的 RouterE。
  • 最后一跳路由器:组播转发路径上,与组播组成员相连且负责向该组成员转发组播数据的 PIM 路由器。如[图 1])中的 RouterA、RouterB。
  • 中间路由器:组播转发路径上,第一跳路由器与最后一跳路由器之间的 PIM 路由器。如[图 1]中的 RouterD。

PIM 路由表项

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

PIM 路由表项中主要用于指导转发的信息如下:

  • 组播源地址。
  • 组播组地址。
  • 上游接口:本地路由器上接收到组播数据的接口,如[图 1]中的 Int3。
  • 下游接口:将组播数据转发出去的接口,如[图 1]中的 Int1、Int2。

image.png

PIM-DM 使用“推(Push)模式”转发组播报文,一般应用于组播组成员规模相对较小、相对密集的网络。在实现过程中,它会假设网络中的组成员分布非常稠密,每个网段都可能存在组成员。当有活跃的组播源出现时,PIM-DM 会将组播源发来的组播报文扩散到整个网络的 PIM 路由器上,再裁剪掉不存在组成员的分支。PIM-DM 通过周期性的进行“扩散(Flooding)—剪枝(Prune)”,来构建并维护一棵连接组播源和组成员的单向无环 SPT(Source Specific Shortest Path Tree)。如果在下一次“扩散-剪枝”进行前,被裁剪掉的分支由于其叶子路由器上有新的组成员加入而希望提前恢复转发状态,也可通过嫁接(Graft)机制主动恢复其对组播报文的转发。

PIM-DM 的关键工作机制包括邻居发现、扩散、剪枝、嫁接、断言和状态刷新。其中,扩散、剪枝、嫁接是构建 SPT 的主要方法。

邻居发现(Neighbor Discovery)

在 PIM 路由器每个使能了 PIM 协议的接口上,都会对外发送 Hello 报文。封装 Hello 报文的组播报文的目的地址是 224.0.0.13(表示同一网段中所有 PIM 路由器)、源地址为接口的 IP 地址、TTL 数值为 1。

Hello 报文的作用:发现 PIM 邻居、协调各项 PIM 协议报文参数、维持邻居关系。

  • 发现 PIM 邻居
    同一网段中的 PIM 路由器都必须接收目的地址为 224.0.0.13 的组播报文。这样直接相连的 PIM 路由器之间通过交互 Hello 报文以后,就可以彼此知道自己的邻居信息,建立邻居关系。
    只有邻居关系建立成功后,PIM 路由器才能接收其他 PIM 协议报文,从而创建组播路由表项。

  • 协调各项 PIM 协议报文参数
    Hello 报文中携带多项 PIM 协议报文参数,主要用于 PIM 邻居之间 PIM 协议报文的控制。具体如下:

    • DR_Priority:表示各路由器接口竞选 DR 的优先级,优先级越高越容易获胜。
    • Holdtime:表示保持邻居为可达状态的超时时间。
    • LAN_Delay:表示共享网段内传输 Prune 报文的延迟时间。
    • Neighbor-Tracking:表示邻居跟踪功能。
    • Override-Interval:表示 Hello 报文中携带的否决剪枝的时间间隔。
  • 维持邻居关系

    PIM 路由器之间周期性地发送 Hello 报文。如果 Holdtime 超时还没有收到该 PIM 邻居发出的新的 Hello 报文,PIM 路由器就认为该邻居不可达,将其从邻居列表中清除。

    PIM 邻居的变化将导致网络中组播拓扑的变化。如果组播分发树上的某上游邻居或下游邻居不可达,将导致组播路由重新收敛,组播分发树迁移。

扩散(Flooding)

当 PIM-DM 网络中出现活跃的组播源之后,组播源发送的组播报文将在全网内扩散。当 PIM 路由器接收到组播报文,根据单播路由表进行 RPF 检查通过后,就会在该路由器上创建(S,G)表项,下游接口列表中包括除上游接口之外与所有 PIM 邻居相连的接口,后续到达的组播报文将从各个下游接口转发出去。

最后组播报文扩散到达叶子路由器,会出现以下两种情况:

  • 若与该叶子路由器相连用户网段上存在组成员,则将与该网段相连的接口加入(S,G)表项的下游接口列表中,后续的组播报文会向组成员转发。
  • 若与该叶子路由器相连用户网段上不存在组成员,且不需要向其下游 PIM 邻居转发组播报文,则执行[剪枝]机制。

image.png

扩散过程如下:

  1. 组播源 S 开始向组播组 G 发送组播报文。
  2. RouterC 接收到源发送的组播报文后,根据单播路由表进行 RPF 检查。RPF 检查通过,创建(S,G)表项,下游接口列表包括与 RouterA 和 RouterB 相连的接口,后续到达的报文向 RouterA 和 RouterB 转发。
  3. RouterA 接收到来自 RouterC 的组播报文,RPF 检查成功,在本地创建对应(S,G)表项,下游接口列表添加与组成员 HostA 相连的接口,后续到达的报文向 HostA 转发。
  4. RouterB 接收到来自 RouterC 的组播报文,由于与 RouterB 相连下游网段不存在组成员和 PIM 邻居,执行剪枝。

剪枝(Prune)

当 PIM 路由器接收到组播报文后,RPF 检查通过,但是下游网段没有组播报文需求。此时 PIM 路由器会向上游发送剪枝报文,通知上游路由器禁止相应下游接口的转发,将其从(S,G)表项的下游接口列表中删除。剪枝操作由叶子路由器发起,逐跳向上,最终组播转发路径上只存在与组成员相连的分支。

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

当下游接口被剪枝后:

  • 如果下游叶子路由器有组成员加入,并且希望在下次“扩散-剪枝”前就恢复组播报文转发,则执行[嫁接]机制。
  • 如果下游叶子路由器一直没有组成员加入,希望该接口保持抑制转发状态,则执行[状态刷新]机制。

如[图 2]所示,RouterB 上未连接组成员,这种情况下,RouterB 向上游发起剪枝。

image.png

嫁接过程如下:

  1. RouterB 希望在下一次“剪枝-扩散”来临前恢复对 HostB 组播报文的转发,向上游路由器 RouterC 发送 Graft 报文,请求恢复相应出接口转发组播报文。
  2. RouterC 收到 Graft 报文后,恢复该接口转发,将该接口添加到(S,G)表项中的下游接口列表中。由于 RouterC 上有组播报文到达,嫁接过程停止。后续到达的报文向 RouterB 转发。

状态刷新(State Refresh)

在 PIM-DM 网络中,为了避免被裁剪的接口因为“剪枝定时器”超时而恢复转发,离组播源最近的第一跳路由器会周期性地触发 State Refresh 报文在全网内扩散。收到 State Refresh 报文的 PIM 路由器会刷新剪枝定时器的状态。被裁剪接口的下游叶子路由器如果一直没有组成员加入,该接口将一直处于抑制转发状态。

如[图 4]所示,与 RouterC 上被裁剪接口相连的叶子路由器上一直没有组成员加入。图 4 状态刷新示意图

image.png

状态刷新过程如下:

  1. RouterC 触发状态刷新机制,将 State Refresh 报文向 RouterA 和 RouterB 扩散。
  2. RouterC 上存在被裁剪接口,刷新该接口的“剪枝定时器”的状态。下一次“扩散-剪枝”来临时,由于 RouterB 上仍然没有组成员加入,RouterC 上被裁剪的接口将被抑制转发组播报文。

断言(Assert)

当一个网段内有多个相连的 PIM 路由器 RPF 检查通过向该网段转发组播报文时,则需要通过断言机制来保证只有一个 PIM 路由器向该网段转发组播报文。PIM 路由器在接收到邻居路由器发送的相同组播报文后,会以组播的方式向本网段的所有 PIM 路由器发送 Assert 报文,其中目的地址为永久组地址 224.0.0.13。其它 PIM 路由器在接收到 Assert 报文后,将自身参数与对方报文中携带的参数做比较,进行 Assert 竞选。竞选规则如下:

  1. 单播路由协议优先级较高者获胜。
  2. 如果优先级相同,则到组播源的开销较小者获胜。
  3. 如果以上都相同,则下游接口 IP 地址最大者获胜。

根据 Assert 竞选结果,路由器将执行不同的操作:

  • 获胜一方的下游接口称为 Assert Winner,将负责后续对该网段组播报文的转发。
  • 落败一方的下游接口称为 Assert Loser,后续不会对该网段转发组播报文,PIM 路由器也会将其从(S,G)表项下游接口列表中删除。

Assert 竞选结束后,该网段上只存在一个下游接口,只传输一份组播报文。所有 Assert Loser 可以周期性地恢复组播报文转发,从而引发周期性的 Assert 竞选。

如[图 5]所示,RouterB 和 RouterC 均通过了 RPF 检查,创建了(S,G)表项。并且两者的下游接口连接在同一网段,RouterB 和 RouterC 都向该网段发送组播报文。
image.png
断言过程如下:

  1. RouterB 和 RouterC 从各自下游接口接收到对方发来的组播报文,RPF 检查都失败,报文被丢弃。同时,RouterB 和 RouterC 分别向该网段发送 Assert 报文。
  2. RouterB 将自身的路由信息与 RouterC 发来的 Assert 报文中携带的路由信息进行比较,由于自身到组播源的开销较小而获胜。于是后续组播报文仍然向该网段转发,RouterC 在接收到组播报文后仍然由于 RPF 检查失败而丢弃。
  3. RouterC 将自身的路由信息与 RouterB 发来的 Assert 报文中携带的路由信息进行比较,由于自身到组播源的开销较大而落败。于是禁止相应下游接口向该网段转发组播报文,将其从(S,G)表项的下游接口列表中删除。

在 ASM(Any-Source Multicast)模型中,PIM-SM 使用“拉(Pull)模式”转发组播报文,一般应用于组播组成员规模相对较大、相对稀疏的网络。基于这一种稀疏的网络模型,它的实现方法是:

  • 在网络中维护一台重要的 PIM 路由器:汇聚点 RP(Rendezvous
    Point),可以为随时出现的组成员或组播源服务。网络中所有 PIM 路由器都知道 RP 的位置。
  • 当网络中出现组成员(用户主机通过 IGMP 加入某组播组 G)时,最后一跳路由器向 RP 发送 Join 报文,逐跳创建(*,G)表项,生成一棵以 RP 为根的 RPT。
  • 当网络中出现活跃的组播源(组播源向某组播组 G 发送第一个组播数据)时,第一跳路由器将组播数据封装在 Register 报文中单播发往 RP,在 RP 上创建(S,G)表项,注册源信息。

在 ASM 模型中,PIM-SM 的关键机制包括邻居发现、DR 竞选、RP 发现、RPT 构建、组播源注册、SPT 切换、断言;同时也可通过配置 BSR(Bootstrap Router)管理域来实现单个 PIM-SM 域的精细化管理

相关帖子

回帖

欢迎来到这里!

我们正在构建一个小众社区,大家在这里相互信任,以平等 • 自由 • 奔放的价值观进行分享交流。最终,希望大家能够找到与自己志同道合的伙伴,共同成长。

注册 关于
请输入回帖内容 ...