PIM原理与配置
看完记得点赞+关注哦~
一、PIM协议简介
PIM,Protocol Independent Multicast,协议无关组播,是一个运用于路由器组播转发的协议。PIM的实现依赖于网络中单播路由的互通,即组播网络必须先完成单播路由表的构建。说PIM“协议无关”,意思就是运行PIM的网络单播协议可以是任何协议,包括IS-IS、OSPF甚至是静态路由也可以。
PIM协议本身比较复杂,但是其核心就是指导组播流量的转发。换句话说,就是如果一个路由器从一个端口收到了组播流量,下一步应该从哪个端口发送出去。从宏观层面上,PIM协议最终实现了一个“组播分发树”的构建,这棵树以组播源为根,组播接收者为叶子节点,组播流量就是沿着这棵树来进行传递。从微观层面上,PIM协议最终构建了一张表——组播路由表,该表有组播源(组播源IP地址)、组播组(组播IP地址)、组播上游接口、组播下游接口四项内容。有了这张表,路由器就知道,从组播源发来的某个组播流量,应该从哪个上游接口进入,并且从哪个下游接口发出。
PIM有两种模式——DM模式和SM模式。这两种模式的不同就是在构建组播分发树和组播路由表的方式差异上。
二、PIM-DM方式实现
DM,即Dense mode,密集模式。这种方式实现组播,当有组播源发出组播流量时, 每个路由器都会先判断接收组播流量的上游接口。组播流量数据包中有组播源的IP地址,这样,每个路由器都会从自己的单播路由器中查找去往该单播IP的路由,在单播路由中下一跳是的接口就是该组播流量的上游接口。同时将除该接口之外的所有端口暂时定义为自己的下游端口,并向这些下游接口转发组播流量。PIM协议规定,一个路由器只接受从上游接口发送来的组播流量。那么如果一个路由器从其他接口接收到组播流量会怎么办呢?会直接丢弃该流量,同时向该接口发一个Prune消息,告诉对方:别发了,我不接收!为什么要这么做呢?是为了防止在组播流量的传递过程中出现路由环路,这样,每个路由器只接受从它认为组播源到自己最优的路径发来的组播流量。同时当收到下游发来的Prune消息后,也会停止对该端口上组播流量的发送。通过重复上述过程,组播流量可以沿着组播源,慢慢的洪范到全网,形成了组播分发树,这样组播接收者也能够接收到组播流量了。
但是!这样做还有一个问题,那就是这个样子的树其实会把组播流量传递到整个网络中,而不管这个网络的终点处有没有组播接收者。为了消除这种现象,PIM-DM模式还定义了“剪枝”的过程。如果一个路由器发现自己直连的网络中没有组播接受者,同时也没有其他的路由器,即组播流量根本不需要传递到我这里来,因此该路由器就会向自己的上游路由器发送Prune信息,告诉对方:我这里不需要接收组播流量,别给我发了。同样的,一个路由器当发现下游接口收到这样的Prune信息,就会停止对该接口上组播流量的转发,而如果一个路由器发现自己压根就没有下游接口时,就会向他的组播上游接口发Prune信息,告诉对方:我这里不需要接收组播流量,别给我发了。这样一来,通过这样的“剪枝”过程,就修剪掉“组播分发树”中多余的组播流量了。
而如果一个原本不需要组播流量的路由器,突然又需要组播流量了,比如下游突然有一个设备加入了组播组,该怎么办呢?如果出现上述情况,该路由器就会向它的上游接口发送一个Graft信息,告诉对方:我这里需要接收某组播组流量了,请给我传递该流量。**同样的,它的上游路由器就又会把该信息传递给它的再上游的路由器,最终会有一个路由器实现把组播流量转发给他们。
总得来看,PIM-DM的实现有以下四点:
①开始时,所有的组播路由器假设自己下游有组播接收者,接受并发送组播流量。
②当①过程完成后,没有下游组播接受者的路由器发送Prune消息,逐步将多余的组播流量删除。
③当原本不需要组播流量的路由器发现又需要转发组播流量时,会发Graft消息告诉上游路由器,这样逐步组播流量又会发送给它。
④PIM-DM模式的实现需要组播源先发送组播流量,这样才能够完成组播分发树的构建,而如果一个路由器先收到下游发送的加入某个组播组的报文,则由于不知道该组播组的组播源,因此无法向上游转发该消息。
三、PIM-SM方式实现
总得来看,PIM-DM方式实现比较粗犷、野蛮,会造成组播流量的浪费,适合于小型的网络。而PIM-SM(Sparse Mode,稀疏模式)模式,相比于DM模式,就比较节省组播流量了。
PIM-SM模式定义了RP的概念,RP,即Rendevous Piont,是组播流量的汇聚点。RP是组播中一个特殊的路由器,该路由器会首先收集组播网络中组播接收者的信息,力图首先构建一棵以RP为根,以各组播接收者为叶子节点的树——RPT。当组播源开始发送组播流量后,连接组播源的路由器向RP单播发送组播流量包,RP在收到该组播流量后就会将组播流量沿着RPT的方向,发送到下游去。
可以看出,PIM-SM方式是先构建RPT,然后再接收发送组播流量,如果组播源已经发送组播流量,而RPT还没有建好,此时RP不会转发组播流量,因此这就避免了组播流量的洪范。
此外,这也面临着一个问题,那就是组播流量先从组播源到RP,再由RP到组播接收者,这样组播流量可能走的是次优路径。为了解决这个问题,PIM-SM模式还定义了由RPT向组播分发树SPT的转换。该转换总是由直接连接组播接收者的最后一跳路由器发起,该转换会逐级向上传递,由于中间路由器已经知道了组播源的IP地址,因此中间路由器会尝试在去往组播源的最优上游端口上请求组播流量,当SPT建立后,中间路由器同样的也会向RPT发送Prune消息,修剪掉RPT,从而完成RPT到SPT的切换。