【TCP/IP详解】IGMP Internet组管理协议
IGMP用途
用于主机和路由器进行多播的协议。它让一个物理网络上的所有系统知道主机当前所在的多播组。多播路由器需要这些信息以便知道多播数据报应该向哪些接口转发。
IGMP报文
IGMP报文格式中没有可选项。
- 版本:IGMP协议版本号。
- 类型:1代表多播路由器的查询报文;2代表主机的报告报文。
- 未用:未使用。
- 检验和:检验和的计算和ICMP相同(覆盖所有范围)。
- D类IP组地址:在查询报文中组地址设置为0,在报告报文中组地址为要参加的组地址。
IGMP协议细节
加入一个多播组
一个主机通过组地址和接口来识别一个多播组。主机必须保留一个表,此表中包含所有至少含有一个进程的多播组以及多播组中的进程数量。进程在一个主机的给定接口上加入了一个多播组,在一个给定接口上的多播组成员是动态的。一个进程可以在多个接口上加入同一多播组。
IGMP报告和查询
多播路由器对每个接口保持一个表,表中记录接口上至少还包含一个主机的多播组。当路由器收到要转发的多播数据报时,它只将该数据报转发到(使用相应的多播链路层地址)还拥有属于那个组主机的接口上。
具体规则如下:
- 当第一个进程加入一个组时,主机就发送一个IGMP报告。如果一个主机的多个进程加入同一组,只发送一个IGMP报告。这个报告被发送到进程加入组所在的同一接口上。
- 进程离开一个组时,主机不发送IGMP报告,即便是组中的最后一个进程离开。主机知道在确定的组中已不再有组成员后,在随后收到的IGMP查询中就不再发送报告报文。
- 多播路由器定时发送IGMP查询来了解是否还有任何主机包含有属于多播组的进程。多播路由器必须向每个接口发送一个IGMP查询。因为路由器希望主机对它加入的每个多播组均发回一个报告,因此IGMP查询报文中的组地址被设置为0。
- 主机通过发送IGMP报告来响应一个IGMP查询,对每个至少还包含一个进程的组均要发回IGMP报告。
D类IP组播地址为从224.0.0.0到239.255.255.255。从224.0.0.0到224.0.0.255的特殊地址空间是打算用于多播范围不超过1跳的应用。不管TTL值是多少,多播路由器均不转发目的地址为这些地址中的任何一个地址的数据报。
菜鸟手记。