本文描述的设备为我们自研的RTK switch,有igmp-snooping功能和igmp query功能,没有igmp proxy功能
本文列出的测试点并不是组播所有的测试点,仅可以作为相关测试概念的参考。
测试点1:路由端口测试
组播路由器端口是连接路由器的端口且该路由器会发送igmp query报文或者pim hello消息。交换机上所有路由器端口都记录在交换机的路由器端口列表中。交换机路由器端口列表中有静态路由器端口和动态路由器端口以及forbidden路由器端口(禁止成为路由器端口)
测试点2:成员端口测试
组播组成员端口为开启igmp-snooping后形成的组播转发表中的端口,组播组成员端口表示该组播组可以转发到的端口。
测试点3:普遍组查询报文的转发
普遍组query报文为组播查询器定期发送的报文,该报文会转发到交换机vlan内的所有端口,该报文的目的地址为224.0.0.1。
测试点4:join报文
当收到查询报文后,客户端会发送join报文到交换机,如果开启了igmp-snooping功能会形成组播转发表,该报文会转发到交换机的所有路由器端口,而不会转发到其他端口,如果其他端口下面也有该组播组的成员,那么当他收到了一个客户端的报告报文后就不再发送join报文了,导致组播转发表不能再学习到该端口。
测试点5:leave报文
当一个客户端想要离开某组播组,会发送离开报文。IGMPv1不支持leave报文。如果不存在该组播组对应的转发表项,或者该组播组对应转发表项的出端口列表中不包含该端口,交换机不会向任何端口转发该报文,而将其直接丢弃;如果存在该组播组对应的转发表项,且该组播组对应转发表项的出端口列表中包含该端口,交换机会将该报文通过VLAN 内的所有路由器端口转发出去。同时,由于并不知道该接收端口下是否还有该组播组的其它成员,所以交换机不会立刻把该端口从该组播组所对应转发表项的出端口列表中删除,而是重置其老化定时器。
测试点6:报告报文抑制功能
为防止交换机下所有客户端向同一个组的报告报文都发送给路由器,造成网络负载过大,交换机可以开启报告报文抑制功能。抑制效果见下图
测试点7:快速离开功能测试
当交换机开启快速离开功能后,当一个端口收到了某组的离开报文,查询器不会向该端口发送特定组查询报文,所以该端口会立即从该组播组成员端口中快速删除,导致该端口下的其他的客户端也收不到该组播组的流量。反之如果没有开启快速离开功能的话,该端口收到了某组的离开报文,会在该组播组转发表中保留3s,等待特定组查询报文的到来,如果3s中内未收到特定组查询报文,再将该端口从组播组成员端口中删除。
测试点8:特定组查询报文测试
特定组查询报文配合测试点7的快速离开功能测试,注意特定组查询报文只会发给该组播组的成员端口。
下面结合两种拓扑图对上面报文的转发进行分析
拓扑1:rtk switch igmp snooping开启、query关闭,vlc只有一个组播组
路由器定期发送查询报文,交换机端口1收到query报文后动态加入到交换机的路由器端口列表中同时将query报文转发到除接收端口外的其他端口,此时pc a、pc b和pc c都收到了查询报文,他们都会发送join报文到交换机,但是pc a和pc b的报告报文互相都可以收到,所以端口2每次只会收到他们中的一个join报文,由于交换机开启了igmp snooping,交换机收到join报文后会形成端口2和端口3的组播转发表,同时将join报文转发到路由端口1,然后再转发到路由器,如果开启了报告报文抑制的话,那么只会从交换机路由器端口转发同一个组的一个join报文到路由器。如果关闭的话,pc a、pc b和pc c的join报文都会转发到路由器。
交换机开启快速离开功能,pc a发送leave报文到交换机,交换机端口2收到leave报文后,发现端口2在它的端口转发表中,立马将其删除,并转发leave报文到所有路由器端口,路由器收到leave报文后会发送特定组查询报文到收到leave报文的端口,交换机收到路由器发送的特定组查询报文后,转发到它的成员端口,此时端口2收不到特定组查询报文,端口3收到特定组查询报文,所以pc a快速离开后,pc a和pc b立马停止接收组播流,pc c继续接收组播流。
交换机不开启快速离开功能,pc a发送的leave报文到交换机,交换机端口2收到leave报文后,发现端口2在它的端口转发表中,将会重置其定时器,我们的交换机将其置为3s,并转发leave报文到所有路由器端口,然后再转发到路由器,路由器收到后会发送特定组查询报文到交换机的路由器端口,然后再转发到交换机组播组的所有成员端口,所有交换机会将特定组查询报文转发到端口2和端口3,pc b和pc c都将会回复这个特定组查询报文,所以pc a快速离开后,pc b和pc c都会继续接收组播流。
拓扑2:rtk switch igmp snooping开启、query开启
如上图,交换机定期发送查询报文到所有端口。此时交换机上不会存在路由端口,交换机web页面上的报告报文抑制功能在此拓扑图下不起作用。pc a、pc b和pc c同时收到了交换机发送的query报文,由于pc a和pc b处在同一链路上,他们的报告报文会自动抑制,端口2每次只会收到一个join报文。pc c会发送加入报文到交换机端口3。交换机开启了igmp snooping,会形成组播转发表。
交换机开启快速离开功能,pc a发送leave报文到交换机,交换机立马将端口2从组播转发表中删除,此时pc b也不会收到组播数据流了,只能等下一个igmp genery query的到来。端口3不会受到影响,依然存在于组播转发表中。
交换机关闭快速离开功能,pc a发送leave报文到交换机,交换机不会立马将端口2从组播转发表中删除,而是重置其老化定时器,等待特定组查询报文的到来。pc b和pc c都为特定组查询报文的接收端口,他们都会回应该报文。