IGMP:Internet组管理协议

IGMP用于支持主机和路由进行多播,它让一个物理网络上的所有系统知道主机当前所在的多播组.多播路由器需要这些信息以便知道多播数据报应该向哪些接口转发。

IGMP被当做IP层的一部分(和ICMP一样)。IGMP报文通过IP数据报进行传输。但是IGMP有固定的报文长度,没有可选数据。

多播的基础就是一个进程的概念,该进程在一个主机给定的接口上加入一个多播组。在一个给定的接口上的多播组中的成员是动态的--它随时因进程加入和离开多播组而变化。这里所指的进程必须以某种方式在给定的接口上加入某个多播组。进程也能离开先前加入的多播组。使用限定词“接口”是因为多播组中的成员是与接口相关联的。一个进程可以在多个接口上加入同一个多播组。

多播路由器使用IGMP报文来记录与该路由器相连网络中组成成员的变化情况。使用的规则如下:

1) 当第一个进程加入一个组时,主机就发送一个IGMP报告。如果一个主机的多个进程加入同一组,只发送一个IGMP报告。这个报告被发送到进程加入组所在的同一个接口上。

2) 进程离开一个组时,主机不发送IGMP报告,即便是最后一个进程离开。主机在知道在确定的组中没有成员后,在随后收到的IGMP查询中就不再发送报告报文。

3) 多播路由器定时发送IGMP查询来了解是否还有任何主机包含有属于多播组的进程。多播路由器必须向每一个接口发送一个IGMP查询。因为路由器希望主机对它加入的每个多播组均发送回一个报告,因此IGMP查询报文中的组地址被设置为0。

4) 主机通过发送IGMP报告来响应一个IGMP查询,对每个至少还包含一个进程的组均要发回IGMP报告。

实现细节:

为了改善协议的效率,主机收到多播路由器的IGMP查询报文后,如果需要发送响应,它也不会立即发送,而是会等待一个1到10s的随机时间后再发送,在这个等待时间里,如果它监听到其他主机已经向多播路由器发送了响应,那么它将取消发送,因为路由器其实并不关心有多少主机属于该组,而只关心是否有主机属于该组,所以只要有一个主机回应就可以了。一个多播路由器甚至不关心哪个主机属于一个多播组。它仅仅想知道在给定的接口上的多播组中是否还至少有一个主机。

所有主机组:

224.0.0.1被称为所有主机组地址。它涉及在一个物理网络中的所有具备多播功能的主机和路由器。当接口初始化后,所有具备多播能力接口上的主机均自动加入到这个多播组。这个组的成员无需发送IGMP报告。

猜你喜欢

转载自codepeak.iteye.com/blog/780239