1. 引言
IGMP用来让一个物理网络上的所有系统知道主机当前所在的多播组,以便知道多播数据应该向哪些接口转发。
IGMP报文通过IP首部中协议字段值为2来指明。
2. IGMP报文
类型为1:多播路由器发出的查询报文
类型为2:主机发出的报告报文
检验和的计算与ICMP协议相同
32位组地址:查询报文中设为0,报告报文中设为要参加的组地址
3. IGMP协议
3.1 加入一个多播组
一个进程可以在多个接口上加入同一个多播组,这意味着一个主机通过组地址和接口来识别一个多播组。
3.2 IGMP报告和查询
- 第一个进程加入组时,主机发送一个IGMP报告。多个进程加入同一组只发送一个IGMP报告
- 进程离开组时不发送IGMP报告
- 多播路由器定时发送IGMP查询了解是否还有任何主机包含属于多播组的进程
- 主机发送IGMP报告来响应一个IGMP查询
3.3 实现细节
- 主机首次发送IGMP报告时不保证该报告会被可靠接收,间隔一段时间(0~10s)后发送下一个报告
- 主机收到路由器发来的查询后不立即响应(同一多播组的多个主机发送间隔可以设为随机时延)
- 同一网络中的所有主机会收到同组其他主机发送的报告,因此如果主机在等待发送报告过程中收到了来自其他主机的相同报告,主机的响应就可以不发送了。
- 多播路由器只关心多播组内是否还至少有1台主机,并不关心有多少主机以及那个主机属于一个组
3.4 生存时间字段
IP首部中的TTL字段。
- IGMP报告和查询的TTL均设为1,使得多播数据报仅局限在同一个子网内传送。
- TTL为0的多播数据报会被限制在同一主机。
- TTL大于1可以被多播路由器转发。
- 扩展环搜索:通过增加TTL值找到以跳数为度量的最近的服务器
- 特殊地址空间224.0.0.0到224.0.0.255用于多播范围不超过1跳的应用,不管TTL值为多少,多播路由器都不会转发以这些地址为目的地址的数据报。
3.5 所有主机组
所有主机组地址:224.0.0.1,涉及在一个物理网络中的所有具备多播能力的主机和路由器,接口初始化后所有具备多播能力的主机会自动加入这个组,该组成员不用发送IGMP报告
4. 小结
- 多播相对于广播的优势
- 多播的基本模块:IGMP