主机为了参与组播需要动态地加入某个IP组播群组,并可以在不需要时退出该群组。这个信息必须通知本地组播路由器。本地组播路由器与其他组播路由器联系,传输成员信息并建立组播路由。
组播路由器在能够传播组播成员信息之前,必须确定本地网络上有一个或多个主机已经加入了某个组播群组。为此。组播路由器和实现组播的主机必须使用Internet组管理协议IGMP(Internet Group Management Protocol)来进行群组成员信息的通信。IGMP通过IP数据报来携带报文。
IGMP的工作分为两个阶段:
■ 当主机加入一个新的组播群组时,它把一个IGMP报文发送给群组的组播地址,宣布其成员。本地组播路由器收到这个报文之后,向互联网上其他组播路由器传播这个群组成员信息,以建立必要的路由。
■ 为适应动态的成员,本地组播路由器周期性地轮询本地网络上的主机,以便确定现在各个群组上有哪些主机。如果经过若干次轮询后,某个群组中始终没有成员,组播路由器就认为该群组中不再有本网络中的主机,于是停止向其他组播路由器通告该群组的成员信息。
下面学习IGMP实现的原理。
IGMP设计时考虑了网络开销问题。由于一个网络可以包含多个组播路由器,并且可以包含很多参与组播的主机,因此IGMP必须避免让所有参与组播的路由器和主机都发送组播控制信息,以降低对网络的影响。IGMP具体采用以下一些方式:
■ 主机与组播路由器之间的所有通信量都使用IP组播。这样就尽可能利用硬件的组播能力,降低网络通信量。
■ 当轮询确定群组成员时,组播路由器不会为每个群组发送单独的报文,而是发送单个查询请求得到关于所有群组的信息。这个轮询间隔通常为125秒,因此IGMP不会产生太多的通信量。
■ 如果多个组播路由器连接到同一个网络,它们会迅速而有效地选用一个路由器来轮询主机成员。因此,即使网络增加组播路由器,网络上IGMP的通信量总量不会增加。
■ 主机不会同时响应路由器的IGMP查询,每个查询包含一个N值,指定了最大响应时间,默认值为10秒。当查询到达时,主机在0至N之间选择一个随机时延,在这个时延之后发送响应报文。实际上,如果某个主机是多个群组的成员,就会为每个群组分别选取一个随机数,这样,主机对路由器的响应就会在N秒钟内随机分布。避免了集中响应造成局部通信量剧增。
■ 每台主机监听群组中其他主机的响应,如果同组的成员对路由器的IGMP查询做出了相应,那么,它们就会取消它们的响应。这样,每个群组总只有一台主机对请求报文做出响应。网络不会随群组成员增加而明显增加IGMP通信量。
以下动画能够生动地体现IGMP协议的工作机制: