跳转到正文

把 IP 数据包剥开看:这 20 个字节的首部到底写了什么? ​

阶段 3 · 网络层 · 第 16 课

在第 8 课中,我们看到以太网帧的载荷(Payload)里包裹着一个网络层的数据单元。当这个以太网帧到达路由器,路由器脱掉外层的以太网皮,露出来的核心主角就是——IPv4 地址 数据报(IP Packet)。

一个标准的 IPv4 首部固定长度是 20 个字节(在有可选选项时可扩展至最多 60 字节)。为了让全球路由器以每秒几亿包的高速在硅片硬件里处理它,这 20 个字节被精巧地按 32 位(4 字节)一行 排成 5 行。

这 20 个字节里,究竟藏着哪些关乎寻址、安全、防环和分片的绝密情报?

学完本课后,你将能够:

  1. 画出 IPv4 首部的 5 行经典网格图,说出每一行包含哪些关键字段。
  2. 解释为什么 生存时间(TTL) 每经过一台路由器必须减 1,以及归零后触发的 ICMP 超时机制。
  3. 识别协议号字段(Protocol)的常见数值:ICMP = 1、TCP = 6、UDP = 17、OSPF = 89。

IPv4 数据报格式:32位网格排列的5行标准首部,清晰展示版本、首长、ToS、总长、分片三要素、TTL、协议号、校验和以及源/目的IP地址。

1. 逐行透视:5 行首部的 14 个核心字段 ​

请跟着上图,从第 1 行到第 5 行逐行拆解:

第一行:基本规格与报文长度 ​

  • 版本(Version,4 bit):标识 IP 协议版本。对于 IPv4,这个字段的值固定是二进制 0100(十进制 4);如果是 IPv6,这里是 0110(十进制 6)。
  • 首部长度(IHL,Internet Header Length,4 bit):表示整个 IP 首部有多少个 32 位字(即 4 字节单位)。
    • 标准无可选选项时,首部是 20 字节,因此 IHL 的值是 20/4=5(二进制 0101)。
    • IHL 最大能表示 15,所以 IP 首部最大长度是 15×4=60 字节。
  • 服务类型(ToS / DSCP,8 bit):用于 服务质量(QoS) 调度。网络工程师可以通过在此处打上不同的标记,让路由器在网络拥塞时优先转发语音、视频流量,普通下载流量靠后排队。
  • 总长度(Total Length,16 bit):整个 IP 报文(首部 + 数据载荷)的总字节数。
    • 16 位最大能表示 216−1=65535 字节。

第二行:分片与重组三剑客(遭遇小 MTU 时的救生圈) ​

当 IP 报文太大、超过物理链路 MTU 时,需要将其拆成多个碎片(分片):

  • 标识符(Identification,16 bit):发送端每产生一个 IP 报文就分配一个唯一 ID。如果该报文被拆成了 3 个分片,这 3 个分片会打上完全相同的 ID,方便最终目的地把它们认领重组在一起。
  • 标志(Flags,3 bit):
    • 最低位 MF(More Fragments,更多分片):MF=1 表示“后面还有后续分片”;MF=0 表示“我是最后一个分片或唯一分片”。
    • 中间位 DF(Don't Fragment,禁止分片):DF=1 表示“严禁分片!如果路由器发现我超长,请直接把我扔掉并向我报错”;DF=0 表示“允许路由器对我分片”。
  • 片偏移(Fragment Offset,13 bit):当前分片的数据载荷在原始未拆分大报文中的相对起始位置。核心细节:必须以 8 个字节为计算单位!

第三行:生命控制、协议对接与防伪 ​

  • 生存时间(TTL)(Time to Live,生存时间,8 bit):全书最重要的防环字段!
    • 发送端赋予一个初始值(如 64、128 或 255)。
    • 报文每经过一台路由器转发,路由器硬件必须将 TTL 强制减 1!
    • 如果网络配置错误导致路由成环,报文在圈子里每绕一圈 TTL 就减 1;一旦减到 0,路由器立刻将该报文就地处决(扔掉),并回发 ICMP 超时通知,彻底杜绝了三层环路永远死循环的隐患!
  • 协议号(Protocol,8 bit):告诉操作系统的网络栈,解开 IP 头后,把里面的载荷交给哪个传输层或上层协议处理。
    • 1 ⟹ 互联网控制报文协议(ICMP)(网络层控制与 ping)
    • 6 ⟹ TCP(可靠传输,传输层)
    • 17 ⟹ UDP(轻量传输,传输层)
    • 89 ⟹ OSPF(动态路由协议,直接封装在 IP 里)
  • 首部校验和(Header Checksum,16 bit):仅用于校验 IP 首部本身在传输中是否发生比特翻转。每经过一台路由器因为 TTL 被减 1,校验和必须在每一跳由路由器重新计算更新!

第四行与第五行:端到端寻址的灯塔 ​

  • 源 IP 地址(Source IP Address,32 bit / 4 字节):最初发出这个报文的源电脑或服务器 IP。
  • 目的 IP 地址(Destination IP Address,32 bit / 4 字节):这个报文最终要送达的目的电脑或服务器 IP。
  • 在无 NAT 的经典网络中,无论经过多少台路由器,源 IP 和目的 IP 全程保持不变!

课后巩固 · 练习 · 单选

在 IPv4 报文首部中,哪个字段用于指示该报文所承载的上层协议类型(例如标识内含的是 TCP、UDP 还是 ICMP)?

课后巩固 · 练习 · 单选

路由器在转发一个 IPv4 数据包时,发现该数据包首部中的 TTL 数值当前正好等于 1。路由器会执行以下哪项动作?

2. 小结与下一步 ​

  • 首部尺寸:IPv4 固定首部占 20 字节,IHL 取值为 5。
  • 三大关键机制:
    1. 分片重组:靠标识符(ID)、标志位(DF/MF)和以 8 字节为单位的片偏移(Offset)完成。
    2. 三层防环:靠 生存时间(TTL) 逐跳减 1,归零丢弃,保障网络自愈。
    3. 上层指引:靠 Protocol 协议号 精准交付(ICMP=1, TCP=6, UDP=17, OSPF=89)。

路由器拿到这个 IP 数据包,看到上面写着 目的 IP: 192.168.1.100。路由器内部到底根据怎样一张表格来选择从哪根网线转发出去?当有多条路由都能通往目的地时,路由器听谁的?下一课我们走进路由器的核心灵魂——路由表与最长前缀匹配。