Skip to content

IP 多播与 IGMP

考情分析

IP 多播在选择题中偶尔出现,常考 D 类地址范围、多播地址到 MAC 地址的映射规则(低 23 位映射、多对一问题)、IGMP 的作用。映射规则的计算题也出现过。整体考频不高,但一旦出题就集中在映射计算上。

考频:★★☆

单播、广播、多播的对比

先理清三种通信方式的区别:

通信方式发送份数适用场景目的地址类型
单播每个接收者单独发一份一对一通信普通 IP 地址
广播发一份,子网内所有主机都收到一对全部广播地址(如 255.255.255.255)
多播发一份,只有加入多播组的主机收到一对多(部分)D 类地址

多播的优势:假设要向 90 台主机发送同一份视频数据,单播需要发 90 份,多播只发 1 份,在传输路径上遇到分岔点时才复制。对服务器负担和网络带宽的节省非常明显。

IP 多播地址(D 类地址)

D 类地址的前 4 位固定为 1110,因此地址范围是 224.0.0.0 ~ 239.255.255.255

每个 D 类地址标识一个多播组,可支持 228 个多播组。主机可以随时加入或离开任何一个多播组。

关于多播地址的几个注意点:

  • 多播地址只能用作目的地址,不能用作源地址
  • 多播数据报的源地址仍然是发送方的普通单播 IP 地址
  • 对多播数据报不产生 ICMP 差错报文
  • 多播是"尽最大努力交付",不保证可靠性
  • 多播只能用于 UDP,不能用于 TCP(TCP 是一对一的端到端连接)

多播 MAC 地址映射

这是本节最容易出计算题的考点。

映射规则

IANA 保留的以太网多播 MAC 地址范围:01-00-5E-00-00-00 ~ 01-00-5E-7F-FF-FF

前 25 位固定不变,只有后 23 位可变。而 D 类 IP 地址去掉前 4 位(1110)后有 28 位可用于标识多播组。28 位映射到 23 位,高 5 位被丢弃,只取低 23 位直接映射。

D类IP地址:  1110 | XXXXX | 23位
                    ↑丢弃    ↑直接映射
多播MAC:    01-00-5E-0 | 23位

多对一问题

由于丢弃了高 5 位,25=32 个不同的 IP 多播地址会映射到同一个多播 MAC 地址。

例如:224.128.64.32 和 224.0.64.32 的低 23 位相同,映射后都是 01-00-5E-00-40-20

因此,主机收到多播帧后,还要在 IP 层根据目的 IP 地址做二次过滤,丢弃不属于自己所在多播组的数据报。

映射计算示例

将 224.215.145.230 映射为多播 MAC 地址:

  1. 取后三个字节:215.145.230
  2. 215 的二进制是 11010111,映射时最高位置 0,得到 01010111 = 57
  3. 145 = 91,230 = E6
  4. 最终 MAC 地址:01-00-5E-57-91-E6

更准确地说:215 的低 7 位是 1010111 = 57(第 8 位被丢弃,第 25 位固定为 0),后面两个字节完整保留。

IGMP 协议

IGMP(Internet Group Management Protocol,网际组管理协议)的作用是让多播路由器知道本局域网上有哪些主机加入了哪些多播组。

IGMP 的定位

  • IGMP 是 IP 的配套协议,属于网络层
  • IGMP 报文封装在 IP 数据报中(协议字段值为 2)
  • IGMP 只在本地子网内工作,不负责互联网范围的多播组管理

工作过程

IGMP 的工作分两个阶段:

第一阶段:加入多播组

主机加入一个新的多播组时,向该多播组地址发送 IGMP 报文,声明自己要加入。本地多播路由器收到后,通过多播路由选择协议通告给互联网上其他多播路由器。

第二阶段:周期性查询

本地多播路由器周期性地向本局域网发送查询报文,探测各多播组是否还有活跃成员。只要某个组至少有一台主机响应,路由器就认为该组仍然活跃。如果连续多次查询都没有主机响应,路由器判定该组在本网络已无成员,停止向其他多播路由器通告该组。

多播路由选择

多播路由选择的本质是为每个(源主机, 多播组)构造一棵多播转发树

  • 转发树保证每个分组在每条链路上只传送一次
  • 不同的多播组对应不同的转发树
  • 同一个多播组,源主机不同,转发树也不同
  • 树结构天然不存在环路

多播路由选择协议的具体细节 408 基本不考,知道转发树的概念即可。

易错点

1. 多播地址只能做目的地址,不能做源地址

多播数据报的源地址是发送方的普通单播地址,目的地址才是 D 类多播地址。

2. 多播 MAC 映射是多对一,不是一对一

28 位映射到 23 位,高 5 位丢失。32 个不同的 IP 多播地址可能对应同一个 MAC 地址,所以收到帧后还要在 IP 层做过滤。

3. IGMP 只在本地子网工作

IGMP 不知道多播组的总成员数,也不知道成员分布在哪些网络。它只负责让本地多播路由器知道本子网内的组成员情况。

4. 多播只用于 UDP,不用于 TCP

TCP 建立的是一对一连接,无法支持一对多的多播通信。

高频考点清单

  • D 类地址范围:224.0.0.0 ~ 239.255.255.255
  • 多播地址只能用作目的地址
  • IP 多播地址到 MAC 地址映射:取低 23 位,前缀固定 01-00-5E
  • 映射是多对一关系(25=32 个 IP 地址映射到同一 MAC 地址)
  • 收到多播帧后还要在 IP 层按目的地址过滤
  • IGMP 的作用:让本地多播路由器获知本子网的多播组成员情况
  • IGMP 只在本地子网工作,不负责全网组管理
  • 多播只用于 UDP
  • 多播转发树保证分组在每条链路上只传一次