TCP/IP 四层模型与封装过程
High Contrast
Dark Mode
Light Mode
Sepia
Forest
2 min read339 words

TCP/IP 四层模型与封装过程

OSI 是 ISO 制定的参考模型,TCP/IP 才是互联网实际运行的协议栈。理解 TCP 三次握手、UDP 无连接特性、IP 包头字段——这些是读懂任何抓包结果的前提。


TCP/IP 四层与 OSI 对应关系

OSI 七层                   TCP/IP 四层          协议示例
────────────────────────────────────────────────────────
7 应用层  ┐
6 表示层  ├─────────────→  应用层              HTTP/S, DNS, SMTP, FTP,
5 会话层  ┘                                    SSH, SNMP, NTP
────────────────────────────────────────────────────────
4 传输层  ──────────────→  传输层              TCP, UDP
────────────────────────────────────────────────────────
3 网络层  ──────────────→  网络层/互联网层     IP (v4/v6), ICMP, IGMP
────────────────────────────────────────────────────────
2 数据链路层 ┐
1 物理层    ├───────────→  网络接口层          Ethernet, Wi-Fi(802.11),
┘                                  ARP, PPP

TCP:可靠传输协议

三次握手(Three-Way Handshake)

客户端                          服务器
│                               │
│──── SYN (seq=100) ───────────→│   第1步:我想连接你
│                               │
│←─── SYN-ACK (seq=200,ack=101)─│   第2步:好的,我也想连你
│                               │
│──── ACK (ack=201) ───────────→│   第3步:确认收到
│                               │
│═══════ 数据传输 ══════════════│
│                               │
│──── FIN ────────────────────→│   四次挥手断开连接
│←─── ACK ──────────────────── │
│←─── FIN ──────────────────── │
│──── ACK ────────────────────→│

为什么是三次? 两次握手无法确认双向通信都正常;四次握手多余。三次握手确保: - 客户端的发送和接收都正常 - 服务器的发送和接收都正常

TCP 包头关键字段

 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
├─────────────────────┬─────────────────────────────────────────────┤
│    源端口 (16bit)    │           目标端口 (16bit)                  │
├─────────────────────────────────────────────────────────────────┤
│                     序列号 Sequence Number (32bit)               │
├─────────────────────────────────────────────────────────────────┤
│                     确认号 Acknowledgment Number (32bit)         │
├─────────┬───────────┬─────────────────────────────────────────┤
│ 数据偏移 │  保留位   │ URG ACK PSH RST SYN FIN │  窗口大小      │
├─────────────────────────────────────────────────────────────────┤
│     校验和 Checksum  │           紧急指针                        │
└─────────────────────────────────────────────────────────────────┘
关键标志位:
SYN  = 同步,建立连接
ACK  = 确认
FIN  = 终止,结束连接
RST  = 复位,强制断开
PSH  = 推送,立即传递数据给应用层

TCP 可靠性机制

机制              作用
─────────────────────────────────────────────────────
序号/确认号       确保数据按序接收,检测丢失
滑动窗口          流量控制,避免接收方被淹没
重传机制          超时或收到3个重复ACK触发重传
拥塞控制          慢启动/拥塞避免/快重传/快恢复

UDP:无连接协议

特性              TCP              UDP
──────────────────────────────────────────────────────
连接方式          面向连接         无连接
可靠性            保证送达         不保证
顺序保证          有序             无序
速度              慢               快
头部大小          20-60 字节       8 字节
适用场景          HTTP, SSH, 文件  DNS, 视频流, 游戏, DHCP

UDP 头部(仅 8 字节)

源端口 (16bit) | 目标端口 (16bit) | 长度 (16bit) | 校验和 (16bit)

IP 包头解析

IPv4 包头(最小 20 字节):
版本(4) | 头长度(4) | 服务类型(8) |      总长度(16)
─────────────────────────────────────────────────────
标识(16)         | 标志(3) | 片偏移(13)
─────────────────────────────────────────────────────
TTL(8)   |   协议(8)    |      头部校验和(16)
─────────────────────────────────────────────────────
源IP地址 (32bit)
─────────────────────────────────────────────────────
目标IP地址 (32bit)
─────────────────────────────────────────────────────
重要字段:
TTL (Time To Live):每经过一个路由器减1,到0丢弃,防止包无限循环
协议字段:6=TCP, 17=UDP, 1=ICMP
标志位:DF(Don't Fragment)=1 不允许分片

ICMP:网络诊断协议

# ping 使用 ICMP Echo Request/Reply(类型 8/0)
ping -c 4 8.8.8.8
# traceroute/tracert 利用 TTL 递增 + ICMP Time Exceeded(类型 11)
traceroute 8.8.8.8
# 查看 ICMP 类型含义:
# Type 0  = Echo Reply(ping 回应)
# Type 3  = Destination Unreachable(目标不可达,含多种 Code)
# Type 8  = Echo Request(ping 请求)
# Type 11 = Time Exceeded(TTL 超时,traceroute 利用此原理)

用 ss / netstat 查看传输层状态

# 查看所有 TCP 监听端口
ss -tlnp
# 查看已建立的 TCP 连接
ss -tnp state established
# 查看特定端口的连接状态
ss -tnp | grep :443
# TCP 连接状态机:
# LISTEN      → 等待连接(服务器)
# SYN_SENT    → 已发 SYN,等待服务器 SYN-ACK
# SYN_RECV    → 收到 SYN,等待最终 ACK
# ESTABLISHED → 连接建立,正常通信
# TIME_WAIT   → 连接关闭中(等待 2*MSL 确保最后 ACK 送达)
# CLOSE_WAIT  → 对方已发 FIN,本端等待应用层关闭

CCNA 对应考点

考纲位置:Domain 1.5 — Compare TCP to UDP

高频考题: - TCP vs UDP 的差异(可靠性、速度、适用场景) - 三次握手各步骤的 Flag(SYN / SYN-ACK / ACK) - TTL 字段的作用 - 常见协议的端口号(HTTP:80, HTTPS:443, DNS:53, SSH:22, FTP:21/20)


下一节常见协议在哪一层——快速建立"协议→层级"的映射,让你看到任何协议名都能立即判断它工作在哪一层。