TCP/IP 协议栈深扒

本文深入剖析TCP/IP协议栈的关键机制:IPv4/IPv6首部结构与差异、TCP封装与分层校验、三次握手状态机与选项协商、路径MTU发现(PMTUD)等跨层协作机制、IP分片重组规则及风险。重点涵盖RFC 791与RFC 9293规范下的字段语义、标志位作用、序号/确认号逻辑、伪首部校验和、DF/MF/Offset分片三件套,以及源主机分片约束、扩展头链、强制UDP校验和等IPv6关键演进。

一条主线:IPv4 首部是封装的「规格书」,TCP/IP 封装是规格的「执行过程」,跨层协作是规格之间的「咬合关系」;TCP 首部与三次握手是传输层的「连接账本」,分片是包裹超规时的「拆包」,IPv6 则是首部的「重构版」。

目录

  1. IPv4 首部结构(RFC 791)
  2. TCP/IP 封装与解封装
  3. 跨层协作
  4. TCP 首部结构(RFC 9293)
  5. TCP 三次握手细节
  6. IP 分片重组实例演算
  7. IPv6 首部对比
  8. 关键数字速查
  9. 延伸方向

一、IPv4 首部结构(RFC 791)

IPv4 首部 = 固定部分 20 字节 + 可选部分 0–40 字节,按网络字节序(大端)传输。以 32 位字(Word)为单位查看:

 0                   1                   2                   3
 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|Version|  IHL  |    TOS       |         Total Length          |  字节 0–3
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|         Identification        |Flags|   Fragment Offset      |  字节 4–7
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|  TTL  |   Protocol    |        Header Checksum              |  字节 8–11
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                       Source Address                          |  字节 12–15
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                    Destination Address                        |  字节 16–19
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                    Options                    |   Padding     |  字节 20–59(变长)
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

字段明细

字段 位宽 字节偏移 作用
Version · 版本 4 0 协议版本号。IPv4 固定为 4,IPv6 为 6
IHL · 首部长度 4 0 首部长度,以 4 字节为单位。无选项时 = 5(20 字节),最大 15(60 字节)
TOS · 服务类型 8 1 已重构为 DSCP(6 位,QoS/差分服务标记)+ ECN(2 位,显式拥塞通知)
Total Length · 总长度 16 2–3 首部 + 数据总字节数,最大 65535。收端据此划定数据边界;超过链路 MTU 时触发分片
Identification · 标识 16 4–5 同一报文拆出的所有分片携带相同值,收端按「标识 + 源/目的 IP + 协议号」重组
Flags · 标志 3 6 bit0 保留;DF=1 禁止分片(PMTUD 依赖它);MF=1 表示其后还有分片
Fragment Offset · 片偏移 13 6–7 分片数据相对原始报文的偏移,以 8 字节为单位——除最后一片,每片都是 8 的倍数
TTL · 生存时间 8 8 每经一台路由器减 1;减到 0 丢弃并回 ICMP 超时,防止环路打转
Protocol · 协议 8 9 上层协议号:1=ICMP,2=IGMP,6=TCP,17=UDP,41=IPv6,89=OSPF
Header Checksum · 首部校验和 16 10–11 只覆盖首部、不覆盖数据;每跳因 TTL 变化必须重算
Source Address · 源地址 32 12–15 源 IPv4 地址
Destination Address · 目的地址 32 16–19 目的 IPv4 地址。路由器逐跳只按它查转发表,不记录完整路径
Options + Padding · 选项与填充 0–40 20 起 记录路由、时间戳、源路由等,极少使用;Padding 补 0 保证首部 4 字节对齐

最容易记错的点

  1. IHL 的单位是 4 字节,不是字节、不是位。
  2. 分片靠三件套配合:Identification(相同值)+ Flags(DF/MF)+ Fragment Offset(8 字节为单位)。
  3. 首部校验和只保首部且每跳重算(TTL 递减改变首部);数据正确性由 TCP/UDP 校验和(含伪首部)端到端兜底。
  4. Protocol 是网络层向上投递的路标,决定剥掉 IP 首部后交给谁。

二、TCP/IP 封装与解封装

主机 B · 接收方(解封装)

主机 A · 发送方(封装)

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

reset2021

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值