📄 一句话概括
包交到 IP 模块查两件事:目的 IP 是不是自己(不是就按转发处理)、协议号是几(6 交 TCP、17 交 UDP)——与客户端侧的分派规则一字不差。
📝 本节和前面几节的关系
包进协议栈第一层 IP;本篇看 IP 的两个判断。
一、两个判断
目的 IP 是不是我:是就收下自己处理; 不是(路由器场景)就按 3.3.4 查表转发; 协议号:6 交 TCP、17 交 UDP——决定下一站。
二、规矩不分主客
与 2.5.11 的客户端侧分派完全一致; IP 模块只有一个,收发共用。
三、动手 Demo:IP 层的分派
包交到 IP 模块,先查两件事:
for a, b in [('目的 IP 是不是我','不是就转发,是就收下'),
('协议号','6 -> TCP,17 -> UDP')]:
print('%-14s %s' % (a, b))
实跑输出:
--------------------------------------------------------------------
IP 层的分派
--------------------------------------------------------------------
包交到 IP 模块,先查两件事:
查什么 结论
------------------------------------------------------------
目的 IP 是不是我 不是就转发(服务器上不常见),是就收下
协议号 6 -> TCP,17 -> UDP
------------------------------------------------------------
与 2.5.11 客户端侧的分派规则完全一致——
规矩不分主客。
⭐ 2026 现状:协议号 41(IPv6 隧道)、47(GRE) 等也走同一张分派表——机制从未变过。
30 秒实验
- 背出 TCP 与 UDP 的协议号。
- 想想服务器什么时候也会走【转发】分支。
- 对照 2.5.3 复习 IP 头里的关键字段。
常见误区
- 以为 IP 收包要判断很多——核心就两个判断。
- 以为客户端与服务器的 IP 层不同——同一个模块。
自测三问(点开对答案)
1. IP 模块查什么? —— 目的 IP、协议号。 2. 协议号 6 是谁? —— TCP。 3. 目的 IP 不是自己怎么办? —— 按路由表转发。- ☐ 下一节(6.2.3 TCP 模块如何处理连接包)
相关笔记
- 将服务器的响应包从IP传递给TCP — 分派的另一侧
- TCP 模块如何处理连接包 — 交到 TCP 之后
- 🔌 网络是怎样连接的 · 索引