组播拓扑:

    LH--------二层SW----host1
                            |
                            |----host2
                            |
                            |----host3


二层SW无法识别IP,收到组播包只能进行泛洪。在网络中可能造成不必要的流量传播,比如仅有host2,host3需要组播流,host1不需要组播流,SW进行泛洪则导致资源浪费。IGMP-Snooping是赋予二层SW识别组播报文的功能,让SW生成组播mac表,仅将host2,host3加入组播表,下次仅根据表项来进行报文发送。对于LH和host而言,SW是透明的


IGMP-SNOOPING工作机制:

1、SW发现LH

    SW发送pim hello报文或者IGMP query报文到224.0.0.1(所有路由器都监听此组播地址),检测到LH连接SW的接口,并记录下来。

2、SW代理

   SW接收到LH发送的query报文后向所有其他接口转发,host接收到query信息后进行report回复;

    SW接收到第一个host的report之后保存起来仅向连接LH的接口转发report,并将host记录到组播mac表中;此时LH收到SW转发的report从而得知链路所需的组播组;

    其余的host由于SW并未向他们转发host1发送的report,所以并不知晓已经有其他host预先发送了report,于是其余的host以为自己是last host并均向SW发送report;

    SW依次将所有host记录到组播表项中;并周期性(10s)向LH发送一个report

3、组播流量下发

    LH向链路转发组播流量时,SW根据组播表项下发流量,成功避免影响到其他非组播的host

4、离组消息

    所有的组播组host都以为自己是last host,于是,离开是都会发送一个离组消息。此离组消息也会被SW截取,同时SW从组播表项删除此host并确认表项是否为空,若表项为空则向LH发送一个离组消息,若不为空则保持静默。LH收到离组消息会发送2个query确保组播组已经不存在其他host。