网络协议基础:OSI七层模型与TCP/IP四层模型、数据包封装与解封装过程、MAC地址与IP地址
说实话,很多人学抓包一上来就开软件,抓了一堆数据包却看不懂。为什么?因为不知道这些包是怎么来的,又往哪儿去。我个人习惯,在讲抓包技巧之前,先把网络协议这张地图画清楚。你手里有地图,抓包才不是瞎抓。
OSI七层模型:理论上的完美蓝图
OSI七层模型,全称是开放系统互连参考模型。它是国际标准化组织在1984年提出的。说白了,就是把网络通信这件事拆成了七个步骤。每一层只管自己的事,上下层之间通过接口沟通。
我刚开始学的时候,觉得七层太多了,记不住。后来在项目里排查一个跨网段丢包的问题,一层一层剥开看,才发现这七层设计得真巧妙。每一层都有明确的分工,出了问题也好定位。
| 层级 | 名称 | 核心功能 | 常见协议/设备 |
|---|---|---|---|
| 7 | 应用层 | 为用户提供网络服务接口 | HTTP、FTP、SMTP、DNS |
| 6 | 表示层 | 数据格式转换、加密、压缩 | SSL/TLS、JPEG、ASCII |
| 5 | 会话层 | 建立、管理、终止会话 | NetBIOS、RPC |
| 4 | 传输层 | 端到端可靠传输、流量控制 | TCP、UDP |
| 3 | 网络层 | 路由寻址、逻辑地址 | IP、ICMP、路由器 |
| 2 | 数据链路层 | 帧封装、物理地址、差错检测 | 以太网、交换机、MAC |
| 1 | 物理层 | 比特流传输、电气信号 | 网线、光纤、集线器 |
TCP/IP四层模型:实战中的精简版
OSI七层模型太理想化了,实际互联网用的是TCP/IP四层模型。它把七层合并成了四层:应用层、传输层、网络层、网络接口层。你想想看,OSI的会话层和表示层,在TCP/IP里都被揉进了应用层。为什么?因为实际开发中发现,那两层没那么必要,合并了反而更高效。
我记得有一次给团队新人培训,有人问:既然TCP/IP只有四层,为什么还要学七层?我的回答是:七层是理论框架,帮你理解每一层的职责;四层是实战工具,你抓包时看到的每一层都对应着四层模型里的具体位置。两者不矛盾,是互补的。
核心对比:
- OSI七层:理论完整,适合教学和协议设计
- TCP/IP四层:实际应用,互联网标准模型
- 抓包分析:以TCP/IP四层为主,参考OSI理解细节
数据包封装与解封装过程
这是抓包分析里最核心的概念。什么叫封装?就是数据从上层往下层走的时候,每一层都往数据前面加一个头部。就像寄快递,你写一封信(应用层数据),先装进信封(传输层加TCP头),再写上地址(网络层加IP头),最后贴上快递单(数据链路层加MAC头)。
解封装就是反过来。数据到达目的地后,从下层往上层走,每一层剥掉自己的头部,直到还原出原始数据。
我曾经在排查一个HTTP请求超时的问题时,抓包发现数据包在网络层就丢了。为什么?因为IP头里的TTL字段变成了0,路由器直接丢弃了。如果不理解封装过程,你根本不知道TTL是在哪一层、干什么用的。
封装过程(发送方):
应用层数据 → [HTTP头 + 数据]
传输层 → [TCP头 + HTTP头 + 数据]
网络层 → [IP头 + TCP头 + HTTP头 + 数据]
数据链路层 → [MAC头 + IP头 + TCP头 + HTTP头 + 数据 + FCS]
解封装过程(接收方):
数据链路层 → 去掉MAC头,检查FCS
网络层 → 去掉IP头,检查目标IP
传输层 → 去掉TCP头,检查端口
应用层 → 拿到原始HTTP数据
MAC地址与IP地址
这两个地址是网络通信的基石。MAC地址是物理地址,出厂就烧死在网卡里,48位,用十六进制表示。IP地址是逻辑地址,可以手动配置或自动获取,IPv4是32位,IPv6是128位。
打个比方:MAC地址就像你的身份证号,一辈子不变;IP地址就像你的家庭住址,搬家了就变了。数据包在局域网里靠MAC地址找到具体设备,跨网络通信靠IP地址找到目标网络。
| 对比项 | MAC地址 | IP地址 |
|---|---|---|
| 长度 | 48位(6字节) | IPv4: 32位 / IPv6: 128位 |
| 表示方式 | 十六进制,如 AA:BB:CC:DD:EE:FF | 点分十进制,如 192.168.1.1 |
| 作用范围 | 局域网内唯一 | 全球唯一(公网)或局域网唯一 |
| 是否可变 | 通常固定(可软件修改) | 可动态分配 |
| 所在层级 | 数据链路层 | 网络层 |
知识体系结构图
下面这张图把本章的核心知识点串起来了。你可以看到数据从应用层一路封装到物理层,再解封装回去。MAC地址和IP地址分别在数据链路层和网络层发挥作用。
嗯,这张图你看懂了,网络协议的基础就算打牢了。后面我们讲抓包实战的时候,你会反复用到这些知识。每一层的数据长什么样,头部字段怎么解析,都离不开今天的内容。