深色模式
TCP/IP 模型与数据包流转
摘要:本文不背概念,而是用「一次浏览器访问」把 TCP/IP 四层模型串起来,讲清数据怎么被一层层打包、又怎么被一层层拆开,帮你建立排查网络问题的空间感。
适用环境
任意可联网的 Linux / macOS 终端即可,无需特殊权限。
bash
# 查看本机 IP,后面讲解会用到
ip addr show
hostname -I1
2
3
2
3
操作步骤
1. 认识四层模型
TCP/IP 常按四层理解(与 OSI 七层映射关系):
| TCP/IP 层 | 典型协议 | 关心什么 | 数据单位 |
|---|---|---|---|
| 应用层 | HTTP、DNS、SSH | 业务内容 | 报文 message |
| 传输层 | TCP、UDP | 端到端、端口 | 段 segment |
| 网络层 | IP、ICMP | 寻址、路由 | 包 packet |
| 网络接口层 | Ethernet、ARP | 网卡、MAC | 帧 frame |
2. 一次请求的「封装」过程(发送方)
text
应用层: GET /index.html
↓ 加 TCP 头(源端口、目的端口 443)
传输层: [TCP头][HTTP数据]
↓ 加 IP 头(源 IP、目的 IP)
网络层: [IP头][TCP头][HTTP数据]
↓ 加 Ethernet 头(源 MAC、目的 MAC)
接口层: [ETH头][IP头][TCP头][HTTP数据] → 变成比特流发到网线1
2
3
4
5
6
7
2
3
4
5
6
7
3. 接收方的「解封装」过程
数据每经过一层设备(交换机看 MAC,路由器看 IP),接收方则反向逐层剥头:先去掉 Ethernet 头,再看 IP 头决定要不要收,再看 TCP 头交给哪个进程端口,最后应用层拿到正文。
4. 用一张图记住关键跳转
text
浏览器
→ 查 DNS 拿到服务器 IP(应用层/网络层)
→ 与服务器三次握手建立 TCP 连接(传输层)
→ 发送 HTTP 请求(应用层)
→ 包经本机网卡 → 网关 → 公网路由 → 服务器网卡
→ 服务器原路返回响应1
2
3
4
5
6
2
3
4
5
6
验证
bash
# 抓一次访问,直观看到「包」的来去(Ctrl+C 停止)
sudo tcpdump -nn -i any host 223.5.5.5 and port 53
# 另开终端执行:
dig +short www.example.com @223.5.5.51
2
3
4
2
3
4
能看到本机 IP → DNS 服务器 IP 的 UDP 53 请求与响应,即「网络层 + 应用层(DNS)」同时发生。
常见坑
WARNING
不要死背 OSI 七层名字。实际排错时你只会问三句话:IP 通不通(网络层)?端口通不通(传输层)?应用返回什么(应用层)?模型是用来定位「问题在第几层」的,不是考试。
DANGER
抓包需要 sudo/root 权限;在共享或生产机器上抓包前先确认合规,避免把明文敏感数据落盘到公共目录。