PIM是我们用的最多的建立组播树的协议。PIM有两种模式一个是dense mode密集模式,另一个是sparse mode稀疏模式
密集模式
顾名思义,就是假定组播的接收者密集的遍布网络里的各个地方,所有的路由器都会参与到组播的转发当中,然后再通过修剪的方式形成组播树。
首先所有的路由器都要配置dense mode。发送者发送组播流量,每个路由器都会进行泛洪,从入接口之外的其他接口转发流量。这样所有的用户都能接受到流量了。
但是如果路由器B连接了其他的路由器F,这些路由器下面的用户没有接受这个组播流量的需求怎么办,带宽岂不是白白浪费了?这时候F会给B发送修剪(prune)的消息。B收到这个消息后就会把连接F的接口从组播转发表里删去。以后流量就只会给CDE发送了。
但是B的这种修剪之后的状态具有一定的生命周期,超过一定时间之后,B又要给所有接口转发流量,直到下面的路由器再次发修剪消息。
所以密集模式下组播表项经常会变化,反复的增加出口和减少出口。整体网络里的带宽也会被不必要的组播流量占用。
稀疏模式
稀疏模式适用的场景是大型的网络环境里,组播成员很少,分布在网络的各个地方。这时候如果组播流量随便泛洪,网络带宽也不是很大,那么业务流量肯定会受到影响。所以稀疏模式的理念是谁想接收这个组播流量,路由器就转发给谁。
当接收者想要接受某个组播地址比如239.1.1.1的时候,G会给RP的方向发送pim join,表示想接受239.1.1.1组播流量。EF收到后也会给RP发,于是最后BCDEFG都有有这个组播组的表项,一旦有流量发给B,B就会顺着这个组播树转发给接收者。
这时候发送者发送了一个组播流,原地址是自己,目的地址是239.1.1.1。A受到后一脸懵逼,我也不知道给谁转发啊,就问问RP吧,谁让人家是组播树的树根呢。于是把第一个组播数据包封装成注册消息,单播发给RP。RP一看我这有这个这个组播树啊,于是顺着这个组播树发给了CD,CD发给EF最后到G。
这是第一个包,CDEFG受到第一个包后转发的同时,也会去看发送组播的源是谁,大家一看源是发送者,于是就根据路由表,向着发送者的方向发送pim join重新建立一个组播树,这个就叫源树。那么源树就变成了G-E-C-A-发送者。
后面组播流量转发就是顺着这个源树进行的。A受到流量后转发给C,C给E,E给G,G给接收者。
这就是稀疏模式的流量转发过程,简单来说先是按照共享树转发,然后切换成源树转发。可以看到源树比共享树转发更有效率,因为经过的路由器更少。
总结
密集模式的理念是push,推流的模式。即不管三七二十一把组播流都推出去,谁不需要再从组播树里剪裁。
稀疏模式的理念是pull,拉流的模式。不主动转发流量,谁有需求就把流量拉过去。
通过比较可以看出密集模式配置更简单,但是占用的带宽资源会更多,适用于接收者比较多的局域网。而稀疏模式配置稍微复杂,但是带宽利用率更高,适用于接收者分布较为分散的大型网络
带宽利用率更高,适用于接收者分布较为分散的大型网络
关键词:两种组播模式(组播流的模式)