1. IGMP 用于支持多播的主机和路由器中;
2. IGMP消息封装在IP数据报中,消息是固定长度的8字节,封装格式如下:
version 字段为1;type 字段,1的话是query,2是response/report;
3. 主机
一个进程是在一个指定的接口上加入一个多播组的;主机是通过组ID和接口来确定一个多播组的,主机维护了一张表,表项 包含多播组和它拥有的进程数;
4. 路由器
路由器维护了一张表,每一项包含接口和对应的组ID;
5. IGMP 协议规则
- 主机上有进程加入多播组,发送IGMP report 消息,多个进程加入同一个多播组,只需发送一个 IGMP report;(由于IP不能保证传送成功,间隔一个0-10秒的随机时间后,需要再次发送一个report)
- 主机上的进程离开多播组,不需要发送 report,因为路由器会定时查询;
- 路由器定时发送 IGMP query 消息,有些系统为2分钟左右;
- 主机会对 query 发送 report,为 每个活跃着的多播组 发送一个 report;
6. TTL
多播数据报的TTL一般为1,高于1的多播数据报可能会跨越路由器;
当TTL=0时,多播路由器并不会对多播数据报产生 “time exceeded” ICMP 错误消息;
目的地为 224.0.0.0~224.0.0.255 的多播数据报不会跨越路由器,不管其TTL是什么值,都当做TTL=1来处理;其中,所有支持多播的主机和路由器自动加入 224.0.0.1,这个地址称为 all-hosts group address;