IGMP snooping原理
为什么要运行snooping?
作用1:
不运行就在本Vlan泛洪(导致有一些不想接收组播流量客户端来说,也会泛洪给它,浪费客户端的带宽资源,也会导致SW开销加大,性能下降)。
运行了就会产生组播转发表项,通过snooping表项,将组播流量发送给接收者
作用2:
由于IP组播地址,会以32:1的方式映射成MAC,对于接收者来说,他要接受239.1.1.1的组播流量,很有可能也会受到239.129.1.1的流量,会收到两份组播流量,因为这两份组播流量的MAC地址一样。接受了之后,交给CPU,只有去掉MAC地址,露出IP地址,他才知道这个组播流量是否是自己要接收的,这样就会浪费PC机额外的开销。
如果运行了IGMP Snooping就不会出现这两种情况。
为什么snooping能够解决32:1的这个问题?
因为下面成员发送的report报文,会携带组地址,就知道他要加入那个组,就只要监听239.1.1.1这个组,不会去监听239.129.1.1的组地址,这个239.129.1.1会重新形成组播转发表项,这样就解决了32:1的问题,也解决了组播流量泛洪的问题。只会根据成员接口转发流量。
那么如何维护该表象?
①动态:通过监听IGMP报文
②静态:手工配置某个接口为 路由器接口 或者 成员接口 (没有老化时间)
那么它是如何进行监听的呢?
首先:1、针对查询报文,
①比如我们在V1里面会运行PIM来充当查询者,那么他就会监听PIM里面的hello报文(30s周期,105s老化)
②第二个会监听IGMP报文(60s周期,180s老化)
所以当交换机收到PIM的hello报文,或者IGMP报文的时候,该接口会加入到路由器接口,并且向本vlan内泛洪(泛洪的目的,是为了向其他查询者通告,进行选举)。
这个时候收到查询报文会有一下几个情况:
先判断是否有组播转发表项(snooping表项):
①如果没有:就会创建,并且将收到报文的接口加入到路由器端口,并启动定时器(105s或者180s老化)。
②如果有:再看接收接口是否加入路由器接口
2.1 如果没有加入:那么就加入,并启动定时器。
2.2 如果说已经加入:刷新老化定时器。
2、针对报告报文,
当交换机收到report报文,会向所有路由器接口进行转发。
先判断是否有组播转发表项(snooping表项):
①如果没有,就会创建,并且将收到报文的接口加入成员接口,并且启动定时器(130s老化)。
②如果有:再看接收接口是否加入成员接口
2.1 如果没有加入:那么就加入,并启动定时器。
2.2 如果说已经加入:刷新老化定时器。
3、针对离组报文,
先判断是否有组播转发表项(snooping表项):
①如果没有,直接丢弃。
②如果有:再看接收接口是否加入成员接口
2.1 如果没有加入:直接丢弃。
2.2 如果说已经加入:那么就会进行转发,转发给所有路由器接口。
路由器收到离组报文,会发送特定组查询报文(1s,2次),并且查看刚才的接口,是否有回应。
如果没有回应,等待130s,超时老化。
如果有回应,就刷新定时器,130s。
这就是维护snooping表项的一个过程。
也就是说V3和Snooping都取消了抑制机制,V1V2有抑制机制,Snooping为什么会取消抑制机制?
1、成员接口是相互隔离的,成员接口直接无法进行组播流量的通信,PC1发送的report报文,PC2无法接收。
什么情况下需要手工配置?
如下图,假如右边有一台服务器S,下面有一台组成员PC1想要接收组播流量,那么对于服务器来说,会将流量回复给他,然而服务器接口既不属于路由器接口,也不属于成员接口,因为他不会发送IGMP报文,导致服务器回复的组播流量在本vlan内泛洪,那么这样我就可以通过手工配置的方式,将服务器接口加入到路由器接口当中,那么这样组播流量只会发送欸成员接口,不会发送给其他接口。
假如交换机运行的IGMP Snooping,但是路由器接口并没有运行IGMP,会有什么问题?
SW会将所有的组播流量上交CPU处理,因为SW运行了IGMP Snooping,会形成snooping表项,然而要形成Snooping表项,必须依靠IGMP报文,接口没有启用就无法监听IGMP报文。
这个时候只能将组播流量交给CPU进行处理,CPU收到组播流量后,通过Type字段来识别是否是IGMP报文,识别IGMP报文之后,会形成Snooping表项,这样就会导致CPU负担加大。
————————————————
原文链接:https://blog.csdn.net/W_TF2017/article/details/115799133