📚 第五章 IP协议相关技术
📄 一句话概括

地址掩码请求、时间戳请求、重定向这几条今天基本没人用了。 原因两类:有更好的替代品,或者有安全问题。

📝 本节和前面几节的关系

5.4.2 列了常用的,这一节列「被淘汰的」。 5.5 的 DHCP 就是「掩码请求」的替代品。

一、被替代的三条

共同点是「用错了层」:它们想做的事,后来都被更专门的协议接管了。

消息 想做什么 谁来替代
地址掩码请求 问对方掩码 DHCP
时间戳请求 问对方时间 NTP
信息请求 问自己在哪个网 已废弃

第一行和第二行的差距在「精度」:ICMP 的时间戳只能到毫秒级,而 NTP 能做到微秒级; 掩码请求只能给一个掩码,而 DHCP 一次给全套配置。 所以「被替代」不是「协议不好」,是「专用协议做得更好」——这是协议演化的常态。

二、重定向:好用但危险

类型 5 的本意是好的:「你这个包该发给另一个网关,别绕远路」。 但它有一个致命弱点:没有认证。 谁都可以发一个伪造的重定向,把受害者的流量引到自己这儿。

项 正常用途 被滥用时
谁发 网关 任何一台机器
效果 改一条主机路由 流量被劫持
默认状态 多数系统默认不接受 已关闭

第三行「默认不接受」是权衡的结果:接受了能优化路径,但不接受更安全。 现代网络选了后者——因为「路径优化」的收益远小于「被劫持」的损失。 这条规律可以推广到很多老协议:「方便」和「安全」冲突时,默认配置总是往安全那边偏。 所以老特性不是「消失了」,是「默认关掉了」。

三、还留着的是什么

今天还在用的,基本只剩「错误报告」和「回显」两类:

类别 典型消息 为什么还在用
错误报告 不可达、超时、包太大 没有替代品
回显 请求与应答 简单有效

第一行「没有替代品」是关键:错误报告必须由「出问题的那一跳」发出, 而只有 IP 层知道「哪一跳出了问题」。 所以这类消息无法被上层协议替代。 第二行「简单有效」也是一种护城河: ping 只用了两个类型号,却成了所有设备的标配功能——因为「你在不在」这个问题永远有人要问。

四、动手 Demo:那些被废弃的 ICMP 消息

四条老消息和它们的替代品摆在一起,看「为什么被淘汰」。 注意第四行那条「常被关掉」:它不是不能用,是不敢用。

rows = [('地址掩码请求', 'DHCP 取代'),
        ('时间戳请求', 'NTP 取代'),
        ('信息请求', '已废弃'),
        ('重定向', '常被关掉(可被利用)')]
for a, b in rows:
    print(a, '->', b)

实跑输出:

--------------------------------------------------------------------
那些被废弃的 ICMP 消息
--------------------------------------------------------------------
**ICMP 里有几条消息今天几乎没人用了**,**原因都是「有更好的替代品」或者「有安全问题」。**

  消息                 干什么                   现状
  -----------------------------------------------------------------------
  **地址掩码请求**     **问对方掩码是多少**     **DHCP 取代**
  **时间戳请求**       **问对方现在几点**       **NTP 取代**
  **信息请求**         **问自己在哪个网**       **已废弃**
  **重定向**           **告诉你换网关**         **常被关掉(可被利用)**

**第一行和第二行的共同点是「用错了层」**:**时间同步需要毫秒级精度,ICMP 只能到毫秒粗粒度**,
**而 NTP 能做到微秒级。**
**地址掩码同理:DHCP 一次能把掩码、网关、DNS 全给你,ICMP 只能给一样。**

**第四行「重定向」最值得说**:**它的本意是好的**——**「你这个包该发给另一个网关,别绕远路」。**
**但它可以被伪造**:**攻击者发一个假的重定向,就能把受害者的流量引到自己这儿。**
**所以现在主机默认都关掉「接受重定向」。**

**这条规律可以推广**:**「方便」和「安全」经常冲突,而默认配置总是往后者的方向收紧。**
**所以老的协议特性不是「消失了」,是「默认不开了」。**

「用错了层」这个判断标准很有用: 一个协议如果「一次只能给一样东西」,而需求是「一次给全套」,那它迟早被替代。 DHCP 赢 RARP、赢掩码请求,都是这个原因。 「精度」也是替代的常见理由:时间戳请求的精度受限于 ICMP 的处理路径, 而 NTP 专门优化了时间戳的采集点(尽量靠近硬件)。所以「同一件事,专用协议总能做得更准」。 「默认关掉」这个结局值得记住:很多协议不是「死了」,是「默认不启用了」。 排查老网络时如果发现「某个功能不生效」,先想想「是不是被默认关了」。

30 秒实验

  1. 想一下:为什么「时间戳请求」精度不如 NTP?
  2. 想一下:重定向为什么「好用但危险」?
  3. 想一下:哪两类 ICMP 消息今天还在广泛使用?

常见误区

  1. 以为「老 ICMP 消息被删除了」。 还在规范里,只是没人实现或默认关闭。
  2. 以为「重定向是网关专用」。 谁都能发,所以才能被伪造。
  3. 以为「ICMP 只剩下 ping」。 错误报告仍是主力,PMTUD 就靠它。
自测三问(点开对答案) 1. 地址掩码请求被什么取代了? —— **DHCP**,因为 DHCP 一次能给掩码、网关、DNS 全套配置。 2. 重定向为什么默认被关掉? —— **它没有认证**,可被伪造用来劫持流量。 3. 今天还在用的 ICMP 主要是哪两类? —— **错误报告(不可达、超时、包太大)和回显(ping)。**

下一节看 IPv6 里的 ICMP:它承担了更多的活。

相关笔记