IP组播

IP组播基本概念

  • 组播组

    用IP组播地址进行标识的一个集合。任何用户主机(或其他接收设备)加入一个组播组,就成为了该组成员,可以识别并接收发往该组播组的组播数据。

  • 组播组成员

    所有加入某组播组的主机便成为该组播组的成员。组播组中的成员是动态的,主机可以在任何时刻加入或离开组播组。组播组成员可以广泛地分布在网络中的任何地方。

  • 组播源

    信息的发送者称为“组播源”,组播组地址为目的地址。一个组播源可以同时向多个组播组发送数据,多个组播源也可以同时向一个组播组发送报文。组播源通常不需要加入组播组。

  • 组播设备

    支持三层组播功能的路由器或交换机。组播设备不仅能够提供组播路由功能,也能够在与用户连接的末梢网段上提供组播组成员的管理功能。

  • RPF检查

主要用于过滤非法组播流量和防止环路。RPF检查是通过反向单拨路由来执行的,RPF会使用现在的单拨路由进行RPF检查,也可以配置静态RPF路由使用与单拨不同的路径。
配置RPF路由使用ip rpf-route-static命令

  • 组播报文转发

华为设备不支持静态配置组播路由,只能通过PIM协议实现组播报文转发。

PIM-DM工作机制介绍

SPT建立过程,即扩散(Flooding)/剪枝(Prune):
1. PIM协议通过Hello消息维护领居状态,每个开启PIM功能的接口都会维护一个PIM neighbor信息表。Hello消息是周期性发送的,类似单播的ARP协议。
2. 扩散:当收到组播数据时,会从第一跳设备开启向所有PIM neighbor逐级扩散(不管PIM设备下有没有组播接收成员)。
3. 剪枝:没有接收成员的PIM设备向上游发送Prune消息进行剪枝,即阻止上游继续向该PIM设备发送组播数据
4. 嫁接:当被剪枝(Graft)分支的节点上出现了组播组成员时,为了减少该节点恢复成转发状态所需的时间,PIM-DM发送Graft消息主动恢复其对组播数据的转发

在DM机制中SPT是通过从组播源向全网组播数据进行扩散再剪枝建立的。
在扩散剪枝机制中,接收端PIM设备通过发送Prune消息进行剪枝,但是hold-time时间过后剪枝就会失效,然后就会重新执行扩散前枝过程。如果不想重复执行扩散剪枝过程则需要定时执行PIM-DM状态刷新,离组播源最近的PIM设备会定时向全网以组播形式发送State-Refresh消息进行PIM-DM状态刷新。默认情况下State-Refresh消息发送的间隔是60秒,默认的hold-time是210秒,一般State-Refresh间隔小于hold-time即可。

PIM-SM工作机制介绍

名词解释:
DR(Designated Router) 翻译为指定设备,与组播源直连的DR称为源端DR,与组播成员直连的DR称为接收端DR
RP(Rendezvous Point) 汇聚点,在PIM-SM所有组播源发出的数据由源端DR通过单播方式发送到RP,再由RP以组播形式扩散出去。
RPT(Rendezvous Point Tree) 以RP为根建立的组播分发树
SPT(Shortest Path Tree) 以组播源为根建立的组播分发树
BSR(Bootstrap Router) 自举设备,用来收集网络中的C-RP(侯选RP),并发送给所有其它PIM设备,配置动态RP时才需要BSR

Join消息仅用于PIM-SM网络,Join消息是周期性发送的,Join消息过期就会就会阻止对应的数据转发。Join消息使用单播方式发送给所有PIM设备(华为的文档中说是组播,但我认为单播更合理,具体有待验证)。
Prune消息主要用于PIM-DM网络,Prune消息是收到PIM-DM扩散数据时发送的,在SM网络中用于SPT切换。

在SM机制中RPT和SPT都是由接收端通过单播形式逐跳上游PIM设备发送Join消息建立的。

  1. ASM模式下的PIM-SM
    • 选择产生BSR和RP
    • 组播源把组播数据发送给源端DR
    • 源端DR通过单播消息(PIM Register)把数据发送给RP
    • 建立RPT:当存在组播成员(IGMP协议发现组播成员)时接收端PIM设备向RP发送Join消息,在通向RP的路径上逐跳创建(*,G)表项,生成一棵以RP为根的RPT
    • 建立SPT:组播数据由RPT转发,组播数据沿组播源DR(DeviceA)->RP(DeviceB)->接收者DR(DeviceD)到达接收者(Receiver)。接收者DR直接向组播源端DR发送(S,G)Join消息,当接收者DR收到沿SPT发来的组播数据后,丢弃沿RPT发来的组播数据,同时向RP发送Prune消息,删除RPT中的此接收者,实现从RPT向SPT的切换。
    • 组播数据由SPT转发,不再经过RP。

    RP的作用是源端和接收端都向RP注册,由RP通过RPT发送首包组播数据,接收端收到首包数据后就知道了组播源,向组播源发送Join消息建立SPT,然手RP和SPT就不再需要了。默认情况下接收端DR收到首包数据后就会立即执行SPT切换,也可以通过spt-switch-threshold配置不执行SPT切换或者达到指定流量时再执行SPT切换。

  2. SSM模式下的PIM-SM

    SSM模式下的PIM-SM其实就是不配置BSR和RP的SM,需要接收端DR事先知道组播源,然后向组播源发送Join消息建立SPT,然后就可以通过SPT转发组播数据了。相当于PIM-SM ASM的简化模式。

由以上可知PIM-DM和PIM-SM SSM不需要配置BSR和RP,PIM-SM SSM需要事先知道组播源,别外两种方式则不需要。
在实际配置组播时与组播源相连的接口,中间转发组播数据的设备对应的接口,与接收端相连的PIM接口都要开启PIM功能,同时与接收端相连的设备还要开启IGMP功能。IGMP负责发现组播组成员,PIM负责转发组播数据。
如果组播转发路径与单播转发路径不同还要配置静态RPF路由,因为默认情况下只允许组播数据沿与单播数据相同的路径传播。

在VPN中配置组播时需要配置GRE隧道,因为大部分VPN都是不支持组播和广播流量通过的,需要把组播和广播流量用GRE封装然后再通过VPN传输。

组播测试工具

https://www.dqnetworks.ie/toolsinfo/mcasttest/

https://github.com/individuwill/mcast
我在windows上用mcast的时候只能发送,不能接收

https://github.com/barryCrunch/multicast-tool/tree/main
这个经测试也不能在windows上运行

Views: 0