组播为什么要计算最短路径树?

凡是有树的地方,就有上游与下游的区分。

如果树根(源头)是最上游,那么树干就是次上游,叶子是下游。

水从树根(源头)开始流动,流动到树干,最后到达叶子,一路畅通无阻,叶子获得源源不断水流的滋润,茁壮生长。

这里隐患的逻辑是,下游只从自己的上游接收流量

如果颠覆这个逻辑,世界就会乱成一锅粥。

树干接到自己的上游(树根)的流量,突然脑子一抽,不小心又流回树根,树根自然很恼火:shit,怎么又发过来了?

于是继续将流量发给树干,树干脑子继续抽,又将流量流回了树根…

这种现象就是环路(Loop)!

造成的后果是,最下游的叶子永远也无法得到水源而枯萎。

组播的流量如同水一样,需要从树根(组播服务器),沿着树干(网络),源源不断输送给叶子(组播订阅用户电脑)。

如果想让组播流量不发生环路,必须遵从大自然规律—“流量从上游接收,向下游发送”!

如果不小心接到下游返回的流量,必须丢弃,以防环路的流量打垮网络!

路由器那么多接口,谁是上游接口,谁又是下游接口呢?

假设组播服务器IP=1.1.1.1,那么它就是树根,这个没有什么反对意见吧?

谁距离树根(1.1.1.1)近,谁是上游接口,这个也没有反对意见吧?

那“近”用什么指标来衡量呢?

通俗地说,路由器如何比较谁离1.1.1.1更近(上游),谁更远(下游)呢?

回忆一下,在单播路由里,是如何比较近的呢?

不同的路由协议,有不同的比较算法。

RIP协议,比跳数(hop),谁小谁近。

OSPF协议,比cost值,谁小谁近。

BGP协议,比AS_Path,谁的AS列表少,谁更近。

无论底层路由协议是什么,都有办法比较谁更近,对吗?

于是就有了PIM协议Protocol Independent Multicast,意思是和底层路由协议无关的组播协议,PIM依赖底层路由协议,选定了一个上游接口,那么其它的接口都为下游接口。

所以组播会使用单播路由表的度量值(metric),来比较谁近谁远。

同学们可能会问,那万一两个接口的metric相同呢?

那就选择接口IP小的胜出!

当路由器接口确定好自己的角色定位,谁是自己的上游(只能有一个),谁是自己的下游(可以没有,也可以有一个,可以有多个),那么一棵组播树就诞生了。

那么组播流量就从树根(1.1.1.1)出发,沿着组播树干开始流动,一直流动到叶子(订阅用户)。

由于严格遵从大自然规律,组播流量单向流动,不会发生环路。

  • 发表于:
  • 原文链接:https://kuaibao.qq.com/s/20180601G1NWVO00?refer=cp_1026
  • 腾讯「云+社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。

扫码关注云+社区

领取腾讯云代金券