IP路由基础(三)PIM协议(1)PIM-DM基本原理与配置

前言

本文讲解IP组播的第三个问题:路由器与路由器之间如何进行组播数据的转发。

组播报文抓发数据需求

在单播的报文的转发机制中,路由器依据单播报文的目的IP地址,来查看路由表来进行转发。单播路由协议可以是静态路由协议也可以是动态路由协议。

但是在组播中,接受者可能出现在任意位置,若是用静态路由配置路由器的话,有以下问题:

实时性差
灵活性差
工作量大、易出错

于是为了正确、高效的转发组播数据包,路由器之间需要运行组播路由协议。

PIM基本概述

PIM

(Protocol Independent Multicast)协议无关组播,目前常用版本是PIMv2,PIM报文直接封装在IP报文中,协议号为103,PIMv2组播地址为224.0.0.13。
在PIM组播域中,以组播组为单位建立从组播源到组成员的点到多点的组播转发路径。由于组播转发路径呈现树型结构,也称为组播分发树(MDT,Multicast Distribution Tree)。

组播分发树的特点:

无论网络中的组成员有多少,每条链路上相同的组播数据最多只有一份。

被传递的组播数据在距离组播源尽可能远的分叉路口才开始复制和分发。

PIM有两种模式:

PIM-DM(Protocol Independent Multicast – Dense Mode)。

PIM-SM (Protocol Independent Multicast – Sparse Mode)。

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

首先将组播数据报文扩散到各个网段。(采用PUSH模式)

然后再裁剪掉不存在组成员的网段。

通过周期性的“扩散—剪枝”,构建并维护一棵连接组播源和组成员的单向无环SPT(最短路径树)。

PIM-DM的关键工作机制包括邻居发现、扩散与剪枝、状态刷新、嫁接和断言。

PIM-DM

PIM-DM邻居发现

与许多的路由协议相同,PIM-DM协议邻居的发现、建立、维护也是使用周期性发送Hello报文来实现的。在PIM-DM中Hello报文消息默认的周期是30s,我们可以通过在接口下配置pim timer hello interval来配置发送时间。

我们在上一篇文章:IP组播基础(二)IGMP协议各版本工作原理与基础配置、IGMP Snooping工作原理中学习了IGMP协议原理,IGMP协议中的IGMPv1版本中,我们介绍到它是不能自主选举查询器的,需要依靠路由协议来完成。
在PIM-DM中,路由器之间会进行DR(指定路由器)选举,而这个DR就充当IGMPv1的查询器。

DR选举规则:

1. 路由器通过比较Hello报文中携带的优先级或者IP地址(接入该网络的接口IP地址)来选举DR(优先级大的为DR、若优先级判断不出,则接口IP地址大的为DR)
2. DR充当IGMPv1的查询器
3. DR出现故障后,邻居路由器之间重新选举DR(如果105s时间接收不到DR的Hello报文,路由器则认为DR故障)

PIM-DM构建SPT

在这里插入图片描述
PIM-DM构建SPT树分为三个步骤:

1. 扩散过程
2. RPF检查
3. 剪枝过程

扩散过程
在组播数据的发送转发过程中,组播源不关注有多少接收源。PIM-DM假设网络中所有主机都准备接收组播数据。具体过程如下:

路由器接收到组播报文时会进行RPF检查。
如果RPF检查通过,则创建(S,G)表项,然后将数据向所有下游PIM-DM节点转发,这个过程称为扩散(Flooding)。
如果RPF检查没有通过,则将报文丢弃。

RPF检查
RPF检查是为了防止组播报文在转发过程中出现重复报文和环路的情况

我们在单播路由中,路由器通过查找单播路由表中的目的IP地址,来查找下一跳IP地址。RPF检查刚好相反。

RPF检查,就是指路由器通过查找去往组播源的路由来判断所收到的组播报文是否来自于“正确的”上游接口。某一路由器去往某一组播源的路由所对应的出接口称为该路由器上关于该组播源的RPF接口。一台路由器从某一接口收到一个组播报文后,如果发现该接口不是相应组播源的RPF接口,就意味着RPF检查失败,所收到的组播报文将被丢弃。
若RPF检查通过,路由器则会创建(S,G)表项,然后将数据继续向下游PIM-DM节点转发。

(S,G)表项:

S:组播源
G:组播组

剪枝过程

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

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

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

状态刷新

由上文可知,PIM-DM会周期性的刷新剪纸状态。如上图:Client B不接收G1组播数据,此时RTE下游节点没有组播成员,则向上进行Prune,通告RTC停止向我发送组播数据。但是由于“扩散-剪枝”过程是周期性的,RTE在一段时间(3min)之后又会重新开始向RTC发送组播数据。组播数据通常来说比较大,在全网扩散比较浪费资源和带宽。那么怎么去解决这个问题呢?

PIM DM协议采用状态刷新特性解决周期性“扩散-剪枝”带来的问题:离组播源最近的第一跳RTA周期性触发State Refresh消息。State Refresh消息在全网扩散,刷新所有设备上的剪枝定时器状态。状态刷新使得RTE不再周期性的收到组播数据。这时,在全网扩散的从组播数据变成了一个报文,数据量就小了很多。

但是此时我们又出现了新的问题当Client B加入G1组之后,如果一直是剪枝状态,Client B无法收到组播数据。

Graft机制(嫁接机制)

在这里插入图片描述如图所示,当Client B发送组播组G1的IGMP Report报文请求组播数据后。RTE收到Client B的IGMP Report报文,说明RTE具有转发组播数据需求,则立即向上游路由器RTC发送Graft消息,请求上游路由器恢复对应出接口的转发。RTC收到Graft消息后修改(S,G)表项,向RTE回复Graft Ack并将连接RTE的出接口恢复为转发状态。

Assert机制

在这里插入图片描述

断言获胜者

如图所示,RTA、RTB、RTC均从上游接口收到组播报文并通过了RPF检查,三台路由器的下游接口连接在同一网段。RTA、RTB、RTC都向该网段发送组播报文,三份重复的组播报文浪费带宽资源。

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

到组播源的单播路由协议优先级较小者获胜。(路由器可能使用不同的单播路由协议)
如果优先级相同,则到组播源的路由协议开销较小者获胜。
如果以上都相同,则连接到接受者MA网络接口IP地址最大者获胜。

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

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

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

PIM-DM配置

PIM-DM的配置非常简单,只要在需要运行PIM-DM协议的路由器上,首先使能IP组播功能:multicast routing-enable然后在路由器各个接口开启PIM-DM即可:pim dm

我们可以通过:display pim routing-table查看(S,G)表项。也可以通过display pim neighbor查看pim邻居关系。

发布了37 篇原创文章 · 获赞 31 · 访问量 4946

猜你喜欢

转载自blog.csdn.net/qq_46254436/article/details/105079043
PIM