背景描述
越来越多的应用场景需要支持高效的多点通信,包括券商普通组播业务,以及IP语音组播业务。传统的单播和广播模式虽然可以完成点对点和一对全网的通信,但在多点传输中存在很多问题,尤其是在带宽、网络延迟和网络资源的使用上。因此,二层组播可用于满足特定应用对多点通信的需求。
本实践方案通过配置网络组播完成上述需求。
前提条件
- 参考“计算”帮助中“云主机”的相关内容,提前制作并上传镜像好云主机需要的“镜像”。
操作步骤
配置物理交换机(以盛科E580交换机为例)。
- 启用 Igmp Snooping。
# 可以全局开启,也可以指定vlan开启 ip igmp snooping ( vlan VLAN_ID | )
- 指定运行的 IGMP 版本。
# VER 取值 1-3,推荐配置为3 ip igmp snooping ( vlan VLAN_ID | ) version VER
- 在 VLAN 上使能组播查询器功能。
# 开启组播查询器 ip igmp snooping vlan VLAN_ID querier # 设置组播查询器的源地址 ip igmp snooping vlan VLAN_ID querier address IP_ADDR
- 关闭 IGMP snooping 成员快速离开功能
no ip igmp snooping ( vlan VLAN_ID | ) fast-leave
- 丢弃未知的组播流量(可选)。
ip igmp snooping ( vlan VLAN_ID | ) discard-unknown
- 使用 ipv6 组播
# ipv6 组播侦听者发现协议 MLD,需要使用ipv6相关命令 如:启用 MLD Snooping ipv6 mld snooping ( vlan VLAN_ID | )
- 恢复配置
# 可以在命令开头使用关键字 no 恢复 如:关闭 Igmp Snooping no ip igmp snooping ( vlan VLAN_ID | )
- 启用 Igmp Snooping。
创建开启组播的网络。
在云平台的顶部导航栏中,依次选择[产品与服务]-[网络]-[网络],进入“网络”页面。
单击
创建网络
,进入“创建网络”页面。网络模式选择“VLAN”后,配置开启“组播”,单击
创建网络
,完成操作。其中,各参数的具体说明,请参考 创建二层基础网络。
使用组播网络创建云主机。
在云平台的顶部导航栏中,依次选择[产品与服务]-[计算]-[云主机],进入“云主机”页面。
单击
创建云主机
,进入“创建云主机”的“基础配置”页面,云主机数量输入“3”。其余配置参考“计算”帮助中“云主机”的相关内容。单击
下一步:网络配置
,进入“网络配置”页面。“虚拟网卡”选择步骤1创建的组播网络,配置其他参数后,单击确认配置
。其余配置参考“计算”帮助中“云主机”的相关内容。
在云主机上启动IGMP。
使用开源软件SMCRoute来管理IGMP,实现IGMP组播组的加入离开。
三台云主机vm1、vm2、vm3,其中vm1作为点播者,使用SMCRoute加入组播组;vm2作为对照不加入组播组;vm3作为组播源,使用iperf发送组播UDP报文。
进入云主机vm1的VNC,执行如下步骤。
- 编译SMCRoute
$ wget https://github.com/troglobit/smcroute/releases/download/2.5.7/smcroute-2.5.7.tar.gz $ tar xvf smcroute-2.5.7.tar.gz $ cd ./smcroute-2.5.7 $ ./autogen.sh $ ./configure --prefix=/usr --localstatedir=/var --sysconfdir=/etc $ make && make install
- 启动SMCRoute
# 在网卡eth0上加入组播组225.1.2.3 $ cat ./smcroute.conf mgroup from eth0 group 225.1.2.3 $ systemctl restart smcroute
- 查看组播组关系表
$ smcroutectl show groups Group Memberships Table GROUP (S,G) IIF (*, 225.1.2.3) eth0
- 动态加入和离开组播组
$ smcroutectl join eth0 225.0.0.3 $ smcroutectl leave eth0 225.0.0.3
- 使用tcpdump抓包,验证加入组播组的成员可以收到组播流量
$ tcpdump -i eth0 -nne -vvv udp
- 编译SMCRoute
进入云主机vm2的VNC,使用tcpdump抓包,验证没有加入组播组的成员收不到组播流量。
$ tcpdump -i eth0 -nne -vvv udp
进入云主机vm3的VNC,使用iperf发送组播流量
$ iperf -c 225.1.2.3 -u -t 3000 -T32 -b 1M
结果验证
查看云主机vm1和vm2的抓包结果,vm1可以收到来自vm3的组播流量,vm2则收不到。