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