Appearance
IP 多播与 IGMP
2026 大纲 四(六)1 组播的概念、四(六)2 IP 组播地址。大纲写"组播"、谢希仁教材写"多播",指的是同一件事(multicast),本篇沿用"多播"。
一、多播究竟省下了什么
前面所有篇讲的都是单播——一个源、一个目的。可实际场景里常有"一份内容要发给很多人"的需求(网络电视、视频会议、软件分发)。这时候有三种选择:
单播是给每个接收者各发一份;广播是发一份、子网内所有主机都收到(不管想不想要);多播是发一份,只有加入了该组的主机才收到,目的地址用 D 类地址。
多播省下的是两笔账,得分开算。
第一笔在源主机:要发给 90 个接收者,单播要发 90 份,多播只发 1 份。
第二笔在网络里,这一笔更关键:共享路径上不重复传输,只在分岔点复制。同一条骨干链路上,单播要把这 90 份全都搬一遍,多播只搬 1 份,直到路径分叉才复制。
共享路径越长、接收者越多,省得越多。 这条性质正是后面"多播转发树"要保证的东西——树上每条链路只传一次。
D 类地址前 4 位固定为 1110,因而范围是 224.0.0.0 ~ 239.255.255.255;剩下 28 位标识组,共
多播数据报有两处标志:目的地址是 D 类,首部协议字段值为 2(IGMP)——对照记:ICMP 是 1。
四条边界,每条都能推出来
多播地址只能作目的地址。 发送者永远是某一台确定的机器,源地址仍是它自己的普通单播地址。写成多播地址,接收方就无从知道"该回给谁"。
对多播数据报不产生 ICMP 差错报文。 一个多播数据报可能被成千上万台主机收到,逐台回差错会瞬间淹没源点。由此推出一个具体现象:ping 一个多播地址永远收不到响应。
多播只能架在 UDP 上,不能用 TCP。 TCP 靠握手确定唯一对端、靠确认与重传保证可靠;一对多的场景下,"向谁握手、谁的确认算数、谁没确认就重传"全都无法定义。
交付语义是尽最大努力交付,不保证交付到组内所有成员。
二、IP 多播地址到以太网多播 MAC 的映射
IP 多播分两种:只在本局域网上进行的硬件多播,和在互联网范围进行的多播。后者在最后一段仍要落到局域网上用硬件多播交付,所以硬件多播绕不开。
先看 MAC 这一侧有多少位可用。 IANA 拥有的以太网地址块高 24 位是 00-00-5E;而 MAC 第 1 字节的最低位为 1 即表示多播,所以多播地址写成 01-00-5E-…。IANA 只拿出了 7F),也就是说前 25 位固定(01-00-5E 那 24 位,再加第 4 字节最高位恒为 0),只有后 23 位可用。
D 类地址可供分配的有 28 位,MAC 只有 23 位可用,
D 类 IP 地址(32 bit)
byte1 byte2 byte3 byte4
+--------+ +--------+ +--------+ +--------+
|1110wxyz| |abbbbbbb| |cccccccc| |dddddddd|
+--------+ +--------+ +--------+ +--------+
^^^^ ^ \-------------------------/
| | 这 23 bit 保留
| +-- a = byte2 的最高位
+-------- wxyz = byte1 的低 4 位 这 4+1 = 5 bit 被丢弃
以太网多播 MAC(48 bit)
byte1 byte2 byte3 byte4 byte5 byte6
+--------+ +--------+ +--------+ +--------+ +--------+ +--------+
|00000001| |00000000| |01011110| |0bbbbbbb| |cccccccc| |dddddddd|
+--------+ +--------+ +--------+ +--------+ +--------+ +--------+
0x01 0x00 0x5E ^\------------------------/
\-------------------------------/ 照抄 IP 的低 23 bit
前 25 bit 固定(含 byte4 的最高位 0)所以被丢的 5 位是 IP 第 1 字节的低 4 位 + 第 2 字节的最高位;保留的 23 位 = 第 2 字节低 7 位 + 第 3 字节 + 第 4 字节。
这张图直接给出两条操作口径:第一字节 224~239 全都无所谓(16 个值的差别正好落在被丢的低 4 位上);第二字节要减 128(最高位被丢,只有低 7 位有效)。
多对一带来的后果:
正反两向映射的完整走查(第一次学、或想手算一遍映射时展开)
(一)正向:把 232.196.201.7 映射为多播 MAC。
- 确认是 D 类:
,前 4 位 1110✓。 - 前 3 字节写死为
01-00-5E(前 25 位固定的前 24 位)。 - 处理第 2 字节——这是唯一需要动二进制的一步。最高位属于被丢的 5 位,只有低 7 位参与映射;而 MAC 第 4 字节的最高位恒为 0,正好接得上:
- 第 3、4 字节整字节照抄:
、 。 - 结果
。验算:第 4 字节 0x44的最高位为 0 ✓,落在00~7F内。
(二)反向:有多少个 D 类地址映射到 01-00-5E-44-C9-07?
反向问题就是"哪些位在正向映射中被丢了"——被丢的位可以任取,即自由位。
- 自由位共 5 位 ⇒
个。 - 第 1 字节 =
1110+ 4 位自由位,取遍到 ,共 16 种。 - 第 2 字节:MAC 第 4 字节
0x44给出低 7 位的值 68,最高位自由 ⇒ 68 或,共 2 种。 - 第 3、4 字节由
C9、07完全确定 ⇒ 201 和 7,无自由度。 - 合计
✓ 与自由位数一致。最小 224.68.201.7,最大239.196.201.7,题中的232.196.201.7也在其中。
(三)这个结果说明了什么。 一台加入了组 232.196.201.7 的主机,网卡被配置成接收 MAC 01-00-5E-44-C9-07 的帧。此时若同一局域网上有人向 224.68.201.7 发多播数据报,这台主机的网卡照样会收下;只有到了 IP 层比对目的 IP,才会丢弃。"IP 层二次过滤"防的就是这 31 个冒名者。
三、IGMP 只回答一个本地问题
IGMP 的作用范围常被高估。它回答的只有一个问题:"我这个子网里还有没有人在这个组里?"
它不知道一个多播组的成员总数,也不知道这些成员分布在哪些网络上。互联网范围内的多播归属另一套机制——多播路由选择协议,在多播路由器之间传播组成员关系、构造转发树。两种协议缺一不可。
IGMP 的层次归属:它属网络层,与 ICMP、ARP 并列。它用 IP 数据报传送自己的报文(协议字段 2),同时又向 IP 提供服务,因此教材把它视为网际协议 IP 的一个组成部分,不算单独的协议。
两阶段工作过程
加入报文发往组地址而不是路由器地址,所以同一子网里已在组内的主机也能听到。
为什么用"探询 + 超时"而不是"退出时主动通知":主机可能直接断电、来不及通知。周期性探询是唯一对"非正常离开"也有效的机制——与 ARP 缓存必须设有效期 是同一个道理。
IGMP 靠三件事压住自己的开销:① 全程用硬件多播——没参加多播的主机根本收不到 IGMP 报文;② 探询时一个报文问所有组,默认每 125 s 一次;③ 同一网络上有多台多播路由器时会选出一台负责探询。
四、多播路由选择:为每个(源,组)建一棵树
互联网范围的多播,要为每一个 (源主机,多播组) 二元组构造一棵多播转发树,保证分组在每条链路上只传一次。组不同、源不同,树都不同;树的结构天然无环。
多播路由比单播路由复杂,具体复杂在三条:
① 拓扑没变、组成员变了也必须更新转发。 单播路由通常只在网络拓扑发生变化时才需要更新,多播则要动态适应组成员的进出。 ② 转发不能只看目的地址,还要看这个数据报从哪里来。 因为转发树是按"源"建的,同一个组、不同的源走的是不同的树。 ③ 发送者不必是组成员,途经的网络也不必有组成员。 多播数据报可以由没加入组的主机发出,也可以穿过一个没有任何组成员的网络。
本节小结
- 多播省的是"源主机的发送份数"与"共享路径上的重复份数"两笔,机制是只在分岔点复制。D 类地址(224.0.0.0 ~ 239.255.255.255)标识多播组,
个;它只能作目的地址、不产生 ICMP 差错报文、尽最大努力交付、只能架在 UDP 上,协议字段值为 2。 - 映射到硬件多播时丢掉 5 位,是 IP 第 1 字节的低 4 位加第 2 字节的最高位;MAC 前 25 位固定,可用 23 位。32 个 IP 撞同一个 MAC,必须由 IP 层按目的 IP 二次过滤——下层粗、上层细。
- IGMP 只回答本地问题,两阶段是"主机主动声明加入 + 路由器周期性探询(125 s)",靠超时而非通知来判定离开;互联网范围的多播由多播路由选择协议为每个(源,组)构造转发树。多播路由比单播复杂在:组成员变化会在拓扑不变时触发更新、转发要看"从哪来"、发送者不必是成员。
考点速记
本节内容在真题里不单独成题——把"多播""组播""IGMP""D 类"这几个关键词拿去逐字比对全部真题的题干与选项,命中数是 0。
这不是一句可以直接用来跳过的结论,值得说清它的成因和边界。
成因是命题重心不在这里。 多播在 2026 大纲里明确列了两条(四(六)1 组播的概念、四(六)2 IP 组播地址),在纲;但历年真题的网络层部分几乎全部集中在编址计算、分片计算、路由表与路由协议这四块——它们都能出成有唯一数值答案的计算题,而多播的内容更偏概念与映射规则。
边界在于"零命中"不等于"可以不看"。 有两处值得留意:
第一,映射规则是能出成计算题的。 "把 232.196.201.7 映射成多播 MAC""有多少个 D 类地址映射到同一个 MAC"这两问都有唯一数值答案,形式上完全具备成题条件。第二节的折叠块把正反两向都走了一遍,就是按"随时可能成题"准备的。真要考,考的一定是那 5 位丢在哪里——记成"高 5 位"就会做错第二字节。
第二,本篇的若干结论会以"配角"身份出现在别处的选项里。 最典型的是 ICMP 那篇的"四种不发差错报文的情况"——其中一条正是"对具有多播地址的数据报不发",而这条的理由(响应爆炸)和推论(ping 多播地址永远收不到响应)就在本篇。同样,IPv6 里"没有广播、广播被看作多播的特例"这条判断,也要先知道多播是什么才站得住。
易错:多播地址只能作目的地址。 源地址永远是发送者自己的单播地址。
易错:对多播数据报不产生 ICMP 差错报文,所以 ping 一个多播地址永远收不到响应。
易错:多播只能架在 UDP 上。 TCP 的握手、确认、重传在一对多下都无法定义。
易错:映射时丢掉的 5 位是"IP 第 1 字节的低 4 位 + 第 2 字节的最高位",不是笼统的"高 5 位"。
易错:32 个 IP 多播地址撞同一个 MAC(
),所以 IP 层必须二次过滤。
易错:IGMP 只管本地子网,它不知道组的成员总数,也不知道成员分布在哪些网络上。
易错:IGMP 靠周期性探询 + 超时判定离开,不是靠主机主动通知——主机可能直接断电。
易错:多播转发树是按(源,组)二元组建的,所以转发时还要看数据报从哪里来。
教材出处
- 谢希仁《计算机网络》(第 8 版):D 类地址与多播的基本性质,见印刷版 p180(4.7.1 IP 多播的一些基本概念)——"D 类 IP 地址的前四位是 1110,因此 D 类地址范围是 224.0.0.0 到 239.255.255.255。我们就用每一个 D 类地址标志一个多播组。这样,D 类地址共可标志
个多播组";"多播数据报也是'尽最大努力交付',不保证一定能够交付多播组内的所有成员。因此,多播数据报和一般的 IP 数据报的区别就是它使用 D 类 IP 地址作为目的地址,并且首部中的协议字段值是 2,表明使用网际组管理协议 IGMP";"多播地址只能用于目的地址,而不能用于源地址。此外,对多播数据报不产生 ICMP 差错报文。因此,若在 PING 命令后面键入多播地址,将永远不会收到响应"。同页还说明 IP 多播分为"只在本局域网上进行硬件多播"与"在互联网的范围进行多播"两种。 - 同书 p180(4.7.2 在局域网上进行硬件多播):映射规则的全部依据——"互联网号码指派管理局 IANA 拥有的以太网地址块的高 24 位为 00-00-5E,因此 TCP/IP 协议使用的以太网地址块的范围是从 00-00-5E-00-00-00 到 00-00-5E-FF-FF-FF。在第 3 章 3.3.5 节已讲过,以太网 MAC 地址字段中的第 1 字节的最低位为 1 时即为多播地址……但 IANA 只拿出
个地址,即 01-00-5E-00-00-00 到 01-00-5E-7F-FF-FF 的地址作为以太网多播地址。或者说,在 48 位的多播地址中,前 25 位都固定不变,只有后 23 位可用作多播。但 D 类 IP 地址可供分配的有 28 位。这 28 位中只有后 23 位才映射到以太网多播地址中的后 23 位,因此是多对一的映射关系……即 28 位中的前 5 位不能用来构成以太网多播地址"。教材给出的实例是"IP 多播地址 224.128.64.32(即 E0-80-40-20)和另一个 IP 多播地址 224.0.64.32(即 E0-00-40-20)转换成以太网的多播地址都是 01-00-5E-00-40-20。因此收到多播数据报的主机,还要在 IP 层利用 IP 数据报首部的 IP 地址进行过滤,把不是本主机要接收的数据报丢弃"。本篇折叠块中的数据为自造,"被丢的 5 位具体是哪几位"由该处的位图(图 4-59)逐位对照得出。 - 同书 p181(4.7.3 网际组管理协议 IGMP 和多播路由选择协议):IGMP 的作用范围——"图 4-60 强调了 IGMP 的本地使用范围。请注意,IGMP 并非在互联网范围内对所有多播组成员进行管理的协议。IGMP 不知道 IP 多播组包含的成员数,也不知道这些成员都分布在哪些网络上。IGMP 协议是让连接在本地局域网上的多播路由器知道本局域网上是否有主机(严格讲,是主机上的某个进程)参加或退出了某个多播组";以及"显然,仅有 IGMP 协议是不能完成多播任务的。连接在局域网上的多播路由器还必须和互联网上的其他多播路由器协同工作……这就需要使用多播路由选择协议"。
- 同书 p182:IGMP 的定位与两阶段工作过程——"和网际控制报文协议 ICMP 相似,IGMP 使用 IP 数据报传递其报文(即 IGMP 报文加上 IP 首部构成 IP 数据报),但它也向 IP 提供服务。因此,我们不把 IGMP 看成是一个单独的协议,而是属于整个网际协议 IP 的一个组成部分";第一阶段"当某台主机加入新的多播组时,该主机应向多播组的多播地址发送一个 IGMP 报文,声明自己要成为该组的成员。本地的多播路由器收到 IGMP 报文后,还要利用多播路由选择协议把这种组成员关系转发给互联网上的其他多播路由器";第二阶段"本地多播路由器要周期性地探询本地局域网上的主机,以便知道这些主机是否还继续是组的成员。只要有一台主机对某个组响应,那么多播路由器就认为这个组是活跃的。但一个组在经过几次的探询后仍然没有一台主机响应,多播路由器就认为本网络上的主机已经都离开了这个组"。同页给出 IGMP 控制开销的三条措施,其中"默认的询问速率是每 125 秒发送一次"。
- 同书 p181–p182:多播路由比单播复杂的三条理由——"多播转发必须动态地适应多播组成员的变化(这时网络拓扑并未发生变化)。请注意,单播路由选择通常在网络拓扑发生变化时才需要更新路由";"多播路由器在转发多播数据报时,不能仅仅根据多播数据报中的目的地址,而是还要考虑这个多播数据报从什么地方来和要到什么地方去";"多播数据报可以由没有加入多播组的主机发出,也可以通过没有组成员接入的网络"。
相关知识
IP 编址与子网划分|IPv4 数据报格式|ICMP 协议|以太网与 IEEE 802.3|IPv6 基础|UDP 协议