📄 一句话概括
控制信息不进套接字就进头部——TCP 头管端口与对账、IP 头管端到端、MAC 头管下一跳;收方一层只剥一层。
📝 本节和前面几节的关系
2.2.1 说连接靠记录;本篇看【记录】除了存在内存里,还有一部分随包出门——那就是头部。
一、两层记录
套接字里的记录是静态账本(这条连接的整体状态); 包头里的记录是随包裹的便签(这个包的序号等)。 两者配合才能对账。
二、三个头三个信封
TCP 头(端口、序号、ACK、窗口)、IP 头(源/目的 IP、协议号)、 MAC 头(源/目的 MAC、类型)——2.5 节逐个展开。
三、动手 Demo:头部的分工
三个头各管一摊:
for h, w, d in [('TCP 头','TCP 层','端口、序号、ACK、窗口'),
('IP 头','IP 层','源/目的 IP、协议号'),
('MAC 头','网卡驱动','源/目的 MAC、类型')]:
print('%-8s %-8s %s' % (h, w, d))
实跑输出:
--------------------------------------------------------------------
头部的分工
--------------------------------------------------------------------
每一层都给数据加一个头,控制信息各归各:
头部 谁加 记着什么
----------------------------------------------
TCP 头 TCP 层 端口、序号、ACK、窗口
IP 头 IP 层 源/目的 IP、协议号
MAC 头 网卡驱动 源/目的 MAC、类型
----------------------------------------------
收包方反着剥:MAC 头给驱动看、IP 头给 IP 层看、
TCP 头给 TCP 层看——一层只读自己的信封。
【一层只读自己的信封】是分层世界的礼貌—— 越层读信既没必要也会乱。
30 秒实验
- 用 Wireshark 抓一个包,数出三个头依次的字节数。
- 找一条包的 TCP 头里的窗口字段值。
- 想想为什么 MAC 头在最外面。
常见误区
- 以为头部只加一次——每层各加各的。
- 以为控制信息只在包头——套接字里还有一本静态账。
自测三问(点开对答案)
1. 控制信息存在哪两处? —— 套接字(静态)和包头(随包)。 2. 三个头分别是谁加的? —— TCP 层、IP 层、网卡驱动。 3. 收包时怎么处理头部? —— 一层只剥自己那层。- ☐ 下一节(2.2.3 连接操作的实际过程)
相关笔记
- 生成包含接收方IP地址的IP头部 —— IP 头细讲
- 生成以太网用的MAC头部 —— MAC 头细讲
- 🔌 网络是怎样连接的 · 索引