IGMP工作在本地范围。连接到本地网络上的多播路由器有一个组多播地址表,里面至少有一个忠实成员(多播组)。多播组是基于进程而创建的,每一个进程在主机的给定接口上加入了一个多播组,也可以离开先前加入的多播组。一个进程可在多个接口上加入同一多播组。在一个给定接口上的多播组中,其成员关系是动态的,随时会因进程加入和离开该多播组而变化。
1.加入多播组
主机或路由器都可以加入一个多播组。每一个主机创建一个成员关系表,表中包含所有至少含有一个进程的多播组以及多播组中的进程数。当第一个进程加入一个多播组时,主机就发送一个成员关系报告报文。如果一个主机的多个进程加入同一个多播组,则只发送一个成员关系报告。
路由器也要创建一个多播组地址表,表中包含连接到每一个接口的网络的成员关系。
如对这些接口中任何一个接口的多播组有兴趣,路由器就发送成员关系报告。图5-27为主机或路由器发送的成员关系报告。为保证多播路由器可收到成员关系报告,IGMP协议要求成员关系报告必须连续发送两次,两次时间间隔在0~10s范围内随机选择。如第一报告丢失或受损,可用第二报告代替。
图5-27 成员关系报告
2.退出多播组
当主机发现在一个特定的多播组中无相关的进程时,就发送退出报告。同样当路由器发现在一个特定多播组中没有感兴趣的网络连接在它的接口上,即发送退出该组报告。如图5-28所示。
图5-28 主机或路由器发送的退出报告
3.删除多播组
当多播路由器收到退出报告时,并不立即从组多播地址表中删除该组。为了确定是否还有其他主机或路由器仍然对这个组感兴趣,多播路由器会发送一个特殊的查询报文,这个报文包括了这个组的多播地址,允许任何主机或路由器在指定的响应时间内进行应答。(www.xing528.com)
网络上的所有主机或路由器都可以收到这个查询报文。如有主机或路由器对这个组感兴趣,将响应一个成员关系报告。多播路由器收到成员关系报告后,将在地址表中继续保持这个多播组。如在规定的响应时间内没有主机或路由器给出感兴趣的应答,多播路由器就认为在这个网络上没有成员对该组感兴趣,因此就从组多播地址表中删除该组。如图5-29所示。
4.查询成员关系
如前所述,在一个给定接口上的多播组中的成员关系是动态的,随时因进程加入和离开该多播组而变化,所以IGMP提供一种机制,负责监视局域网上所有主机或路由器,以便确定它们是否愿意继续维持在一个多播组中的成员关系。
IGMP为每一个局域网指定一个路由器作为查询路由器。查询路由器周期性地发送通用查询报文。查询报文中组地址被设为0.0.0.0,表示查询成员关系是面向主机所属的所有多播组。查询报文最长响应时间10s。本地网络上所有主机或路由器都可收到该查询报文。如有主机或路由器对这个组感兴趣,将响应一个成员关系报告。图5-30为查询成员关系的过程。
图5-29 删除一个多播组
a)多播路由器发送特殊查询报文 b)感兴趣的主机或路由器响应一个成员关系报 c)没有收到响应,即没有成员关系报告
图5-30 查询成员关系
a)查询路由器发送一个通用查询报文 b)感兴趣的主机或路由器响应一个成员关系报告 c)没有主机或路由器对多播组感兴趣
为避免不必要的通信量,IGMP使用延迟响应策略。延迟响应主要用于有多个主机或路由器对同一个多播组感兴趣的情形。当主机或路由器收到查询报文时,不是立即响应,而是延迟一定时间后才给出响应。每一个主机或路由器使用一个随机数产生计时器,并对地址表中的每一个组都进行计时,必须等待计时器到截止时间时才能响应一个成员关系报告。在等待时间中,如同一个组中的其他主机或路由器的计时器先到了截止时间,那么这个主机或路由器就发送成员关系报告。因为成员关系报告是广播发送,所以正在等待中的主机或路由器可收到这个报告,于是就取消相应的计时器。
免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。