第13章 IGMP:Internet组管理协议

所属:TCP/IP详解 卷1:协议 来源:TCP/IP详解 卷1:协议

本章介绍IGMP协议,包括IGMP的作用、报文格式、组成员状态和版本等。


13.1 引言

IGMP的作用

IGMP(Internet Group Management Protocol):

  • 互联网组管理协议
  • 管理多播组成员
  • 主机和路由器之间用
  • 主机告诉路由器自己加入了哪个组
  • 路由器知道哪些组有成员

IGMP管理多播组成员。


为什么需要IGMP

为什么需要IGMP:

  • 多播需要知道哪些组有成员
  • 路由器要知道往哪转发多播包
  • 主机要告诉路由器自己的成员关系
  • 需要一个协议来做这个

没有IGMP会怎样:

  • 路由器不知道哪些组有成员
  • 要么都转发,浪费带宽
  • 要么都不转发,多播用不了

IGMP是多播的基础。


IGMP的位置

IGMP的位置:

  • 网络层协议
  • 封装在IP数据报里
  • IP协议号是2
  • 在主机和本地路由器之间
+--------+----------+
| IP首部  | IGMP报文 |
+--------+----------+

IGMP是网络层协议,协议号2。


本章讨论的内容

本章讨论的内容:

  • IGMP的作用
  • IGMP报文格式
  • IGMP的工作过程
  • IGMPv1, v2, v3
  • 组成员状态

本章介绍IGMP协议。


13.2 IGMP报文格式

IGMPv1报文格式

IGMPv1报文格式:

 0                   1                   2                   3
 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|  版本  |  类型  |           未使用            |    校验和      |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                         组地址                              |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

字段说明:

  • 版本:4位,版本1
  • 类型:4位,1=查询,2=报告
  • 未使用:8位,没用
  • 校验和:16位
  • 组地址:32位,多播组地址

IGMPv1格式比较简单。


IGMPv2报文格式

IGMPv2报文格式:

 0                   1                   2                   3
 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|   类型    |  最大响应时间  |           校验和                 |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                         组地址                              |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

字段说明:

  • 类型:8位
    • 0x11:成员关系查询
    • 0x16:版本2成员关系报告
    • 0x17:离开组
    • 0x12:版本1成员关系报告(兼容v1)
  • 最大响应时间:8位,查询的响应时间
  • 校验和:16位
  • 组地址:32位

IGMPv2增加了离开消息和最大响应时间。


IGMPv3报文格式

IGMPv3更复杂:

  • 支持特定源多播(SSM)
  • 可以指定源地址
  • 报文格式更复杂
  • 有更多类型

主要增加的:

  • 可以指定源地址
  • 可以过滤源
  • 更灵活

IGMPv3更强大,支持源过滤。


13.3 IGMP的工作过程

基本过程

IGMP的基本过程:

  1. 主机加入组

    • 主机发送成员关系报告
    • 告诉路由器我加入了这个组
  2. 路由器定期查询

    • 路由器定期发查询
    • 问还有哪些组有成员
  3. 主机响应查询

    • 主机收到查询
    • 如果还在组里,发报告
    • 有延迟,避免同时发
  4. 主机离开组

    • 主机发送离开消息(v2/v3)
    • 路由器发特定查询
    • 确认还有没有其他成员

加入、查询、响应、离开。


加入组

加入组的过程:

  1. 主机想加入一个组

    • 发送成员关系报告
    • 目的地址是那个多播组地址
    • 内容是那个组地址
  2. 路由器收到报告

    • 知道这个接口有这个组的成员
    • 开始转发这个组的多播包到这个接口
  3. 为什么发给组地址

    • 其他主机也能收到
    • 如果其他主机也在这个组
    • 就不用再发了
    • 减少报告数量

加入时发报告。


查询和响应

查询和响应的过程:

  1. 路由器定期发查询

    • 目的地址:224.0.0.1(所有主机)
    • 组地址:0(所有组)
    • 问:还有谁在组里?
  2. 主机收到查询

    • 每个组设置一个定时器
    • 随机延迟
    • 时间到了就发报告
  3. 主机发报告

    • 目的地址是组地址
    • 其他主机收到
    • 如果自己也在这个组
    • 看到别人发了,自己就不发了
    • 取消定时器
  4. 路由器收到报告

    • 知道这个组还有成员
    • 继续转发

查询响应机制,避免重复报告。


离开组

离开组的过程(v2/v3):

  1. 主机想离开组

    • 发送离开组消息
    • 目的地址:224.0.0.2(所有路由器)
    • 告诉路由器我要离开这个组
  2. 路由器收到离开消息

    • 发特定组查询
    • 问这个组还有没有成员
  3. 如果还有其他主机在组里

    • 会发报告
    • 路由器继续转发
  4. 如果没有响应

    • 路由器认为没有成员了
    • 停止转发这个组的包

离开时发离开消息,路由器确认。


IGMPv1的离开

IGMPv1的离开:

  • 没有离开消息
  • 主机直接离开,不通知
  • 路由器靠超时判断
  • 几次查询都没有报告
  • 就认为没有成员了

缺点:

  • 离开延迟大
  • 要等超时才知道
  • 浪费带宽

v1没有离开消息,靠超时。


13.4 IGMP的版本

IGMPv1

IGMPv1:

  • 最早的版本
  • 功能简单
  • 只有查询和报告
  • 没有离开消息
  • 靠超时判断成员离开

特点:

  • 简单
  • 离开延迟大
  • 没有特定组查询

v1是最早的版本。


IGMPv2

IGMPv2:

  • 增加了离开消息
  • 增加了最大响应时间
  • 增加了特定组查询
  • 离开延迟小

改进:

  • 离开更快
  • 更高效
  • 兼容v1

v2增加了离开消息。


IGMPv3

IGMPv3:

  • 增加了源过滤
  • 支持特定源多播(SSM)
  • 可以指定只接收某些源的多播
  • 更灵活
  • 更安全

改进:

  • 源过滤
  • SSM支持
  • 更复杂

v3增加了源过滤。


版本比较

IGMP版本比较:

对比项IGMPv1IGMPv2IGMPv3
离开消息无有有
特定组查询无有有
最大响应时间无有有
源过滤无无有
SSM支持不支持不支持支持
复杂度简单中等复杂
离开延迟大小小

版本越高功能越强。


13.5 组成员状态

主机的状态

主机的组成员状态:

  • 每个接口,每个组
  • 有一个状态
  • 非成员 / 成员

状态转换:

  • 加入 → 成员状态
  • 离开 → 非成员状态
  • 收到查询 → 设置定时器
  • 定时器到 → 发报告

主机维护组成员状态。


路由器的状态

路由器的状态:

  • 每个接口,每个组
  • 有成员 / 没有成员

状态转换:

  • 收到报告 → 有成员
  • 几次查询没报告 → 没有成员
  • 收到离开 → 发特定查询
  • 特定查询没响应 → 没有成员

路由器也维护成员状态。


13.6 小结

IGMP概述

  1. 作用

    • 互联网组管理协议
    • 管理多播组成员
    • 主机和路由器之间
  2. 为什么需要

    • 路由器要知道哪些组有成员
    • 决定要不要转发多播
  3. 位置

    • 网络层
    • IP协议号2

报文格式

  1. IGMPv1

    • 版本+类型
    • 组地址
    • 查询和报告
  2. IGMPv2

    • 类型
    • 最大响应时间
    • 组地址
    • 增加离开消息
  3. IGMPv3

    • 更复杂
    • 源过滤
    • SSM支持

工作过程

  1. 加入组

    • 发成员关系报告
    • 路由器知道有成员
  2. 查询和响应

    • 路由器定期查询
    • 主机响应报告
    • 延迟避免重复
  3. 离开组

    • v2/v3发离开消息
    • 路由器特定查询确认
    • v1靠超时

版本比较

  1. IGMPv1

    • 简单
    • 没有离开消息
    • 离开延迟大
  2. IGMPv2

    • 有离开消息
    • 特定组查询
    • 离开延迟小
  3. IGMPv3

    • 源过滤
    • SSM支持
    • 最复杂

组成员状态

  1. 主机状态

    • 成员/非成员
    • 每个接口每个组
  2. 路由器状态

    • 有成员/没有成员
    • 每个接口每个组

关键概念

  1. IGMP

    • 组管理协议
    • 主机-路由器之间
  2. 加入/离开

    • 加入发报告
    • 离开发离开消息(v2+)
  3. 查询/响应

    • 路由器定期查询
    • 主机响应
    • 延迟避免重复
  4. 版本

    • v1, v2, v3
    • 功能越来越强

IGMP多播