在上次测试组播命令时(组播源和组播接收者的IP地址配置不配行不行?),我们发现单独使用iperf命令并不能有效加入组播组,原因是手工配置的服务端命令并没有加入组播组。
经过高手的提醒,查阅了相关文档,发现ip address命令中有一个autojoin参数,是用于加入组播组的。为此,我还特意了解了一下ip address命令(ip address命令操作指南),相关介绍如下:
“如果连接到执行IGMP snooping的以太网交换机,则通过ip maddr命令在以太网级别上加入组播组将不起作用,因为交换机不会在没有组播地址IGMP报告的端口上复制组播数据包。”
“在添加组播地址时使用autojoin标志可以为Openvswitch VXLAN接口以及需要接收组播流量的其他隧道机制提供类似的功能。”
命令格式如下:
ip address add IFADDR dev IFNAME autojoin
我们之前使用的命令如下:
ip add add 224.2.2.4/24 dev eth2
此时在接口下增加或删除组播地址20.1.1.2/24时,是不会触发加入或离开组播组的报文的。
现在,我们把命令做如下调整:
ip add add 224.2.2.4/24 dev eth2 autojoin
此时,接口下就会触发加入组播组的请求报文了。
同样的,参考ip address命令(ip address命令操作指南),删除IP地址离开组播组的命令如下:
ip add del 224.2.2.4/24 dev eth2 [ autojoin ]
其中,autojoin是IP地址的额外标志,不是必需的参数。
当移除IP地址时,会触发离开组播组的报文。
与ip address add相对应的,还有ip address change和ip address replace两个命令,从字面上看,都可以修改接口的IP地址,但是实际上却起不到加入组播组的作用。
可以看到,重复使用ip address add命令配置相同IP地址并不能覆盖之前的配置。而实际上,ip address change和ip address replace也都是添加接口IP地址的命令,与字面含义并不相同。
所以,我们理论上可以通过这几个命令加入到不同的组播组。
ip add add 225.2.2.5/24 dev eth2 autojoin
ip add change 226.2.2.6/24 dev eth2 autojoin
ip add replace 227.2.2.7/24 dev eth2 autojoin
好的,现在我们可以看到所有地址后面都有autojoin的标志了,并且链路上也捕获到了终端加入3个组播组的报文。
好的,如此一来,我们就可以使用iperf测试组播是否可用了。
我们直接在组播接收者一端开启3个iperf服务器进程。
iperf -s -u -B 225.2.2.5 -i 1 -o /tmp/iperf5 &
iperf -s -u -B 226.2.2.6 -i 1 -o /tmp/iperf6 &
iperf -s -u -B 227.2.2.7 -i 1 -o /tmp/iperf7 &
然后,我们从另外一台组播源分别向3个组播组推流,查看结果。
iperf -c 225.2.2.5 -u -i 1 -t 5 -B 30.1.1.3
iperf -c 226.2.2.6 -u -i 1 -t 5 -B 30.1.1.3
iperf -c 227.2.2.7 -u -i 1 -t 5 -B 30.1.1.3
从组播接收者一侧通过记录文件进行验证。
当然,我们也可以尝试使用一个记录文件。
iperf -s -u -B 225.2.2.5 -i 1 -o /tmp/iperf &
iperf -s -u -B 226.2.2.6 -i 1 -o /tmp/iperf &
iperf -s -u -B 227.2.2.7 -i 1 -o /tmp/iperf &
然后再次从组播源进行推流操作,最后检查记录文件。
竟然发现记录有覆盖的情况,而且比较随机,所以还是不建议使用一个文件了。
声明:文中观点不代表本站立场。本文传送门:https://eyangzhen.com/276780.html