IGMP:互联网组管理协议,主要用在最后一条路由器(LH)和接收者(host)之间同步信息。主要作用为:

1、告知LH,那些host加入了哪些组,哪些host离开了哪些组

2、LH用于查询host关于组播的信息

目前IGMP有version1,version2.主流为version2;本文仅讨论version2

IGMP V2一共有4种报文:

1、离组消息(last host离组须通报)

2、特定组查询(LH查询某个host是否加入某个组)

3、request(LH查询某个组是否还有剩余host)

4、report(host向LH回应加组消息)

两种机制:

1、查询者机制:当链路中存在多个LH,选举一个查询LH,ip 地址小的获胜

2、查询间隔:LH可要求host的响应时间。

组播拓扑:

LH------------host1

                |
                |----host2
                |
                |----host3

对于LH而言,只需要知道底下链路需要哪些组播流信息,即底下需要加入哪些组播组。假设host1,host2,host3都加入了224.1.1.1这个组播组,那么只需要其中某个host发出report信息请求224.1.1.1的流量即可,其余的host保持静默。

假设host1率先发出report发送到224.0.0.1(本地链路组播地址),所有的其他host包括LH都收到了report信息

1、于是其余的host知道已经有人告知LH我们需要加入224.1.1.1这个组播组了,我们只需要保持静默

2、LH知道了此链路需要224.1.1.1的组播流,且LH将host1标记为last host

Q1:host如何得知自己是last host,以便自己离组时发送离组消息?

last host发送report,在60秒内再无收到其他的report则表明自己为last host

补充:

LH收到了last host的离组消息后会向last host所在的组播组连续发送2次query,若无人回应则删除相应的组播表项。

易混淆点:

 last host并不一定是组播链路上最后一个host,仅仅是链路上多个host的时候,最后一个向LH发送report的host。比如链路上存在host1,host2.....host10;host1率先发送了report给LH,对于LH而言,host1就是last host;

host1离组时需要发送离组消息,此时LH会向last host所在组播组发送query消息,询问是否有其他host在此组播组。此时,假设host2率先进行回应,那么LH将last host修改为host 2,一段时间间隔之后,组播组中的host又开始周期向LH发送report报文,假设这次是host10率先发送report报文,则此时LH的last host标记为host10