3. TCP/IP协议族:OSI模型与TCP/IP模型、数据封装与解封装、MAC地址与IP地址、端口号的作用
各位好,我是老张。做了十几年网络抓包和排障,今天咱们聊聊TCP/IP协议族里最基础、也最绕不开的几个概念。说实话,很多刚入行的朋友觉得这些理论太枯燥,但我在项目里踩过的坑告诉我——这些基础不牢,后面抓包分析根本看不透。
3.1 OSI模型与TCP/IP模型:两套分层体系
先问个问题:为什么要有分层模型?
说白了,就是为了让网络通信这件事变得可拆解、可管理。就像盖楼,你不可能从地基直接跳到装修,得一层一层来。网络通信也一样,数据从一台机器到另一台机器,中间要经过很多环节,分层之后,每一层只管自己的事,出了问题也好定位。
3.1.1 OSI七层模型
OSI模型是国际标准化组织(ISO)在1984年提出的,一共七层。我个人习惯把它记成“物数网传会表应”——物理层、数据链路层、网络层、传输层、会话层、表示层、应用层。
| 层级 | 名称 | 核心功能 | 常见协议/设备 |
|---|---|---|---|
| 7 | 应用层 | 为用户应用提供网络服务 | HTTP、FTP、SMTP |
| 6 | 表示层 | 数据格式转换、加密、压缩 | SSL/TLS、JPEG、ASCII |
| 5 | 会话层 | 建立、管理、终止会话 | NetBIOS、RPC |
| 4 | 传输层 | 端到端可靠传输 | TCP、UDP |
| 3 | 网络层 | 路由寻址、逻辑编址 | IP、ICMP、路由器 |
| 2 | 数据链路层 | 帧封装、MAC寻址、差错检测 | 以太网、交换机、PPP |
| 1 | 物理层 | 比特流传输、电气特性 | 网线、光纤、集线器 |
3.1.2 TCP/IP四层模型
TCP/IP模型是实际互联网使用的模型,它把OSI七层压缩成了四层:应用层、传输层、网络层、网络接口层。你想想看,OSI的会话层和表示层在TCP/IP里被合并到了应用层,物理层和数据链路层合并成了网络接口层。
为什么这么设计?因为实用。OSI太理想化了,TCP/IP从一开始就是奔着“能跑起来”去的。我记得刚学网络时,老师说过一句话:“OSI是教科书,TCP/IP是实战手册。”这句话我一直记着。
3.2 数据封装与解封装:数据包的“套娃”过程
数据封装,说白了就是给数据一层层“穿衣服”。发送数据时,每一层都会加上自己的头部信息;接收数据时,再一层层“脱衣服”。
我经常跟团队里的新人说:你抓包看到的每一个数据包,都是经过层层封装的结果。看不懂封装过程,就看不懂抓包数据。
3.2.1 封装过程(发送端)
- 应用层:生成原始数据(比如HTTP请求报文)
- 传输层:加上TCP/UDP头部(包含源端口、目的端口)→ 形成数据段
- 网络层:加上IP头部(包含源IP、目的IP)→ 形成数据包
- 数据链路层:加上MAC头部(包含源MAC、目的MAC)和尾部FCS → 形成数据帧
- 物理层:将帧转换为比特流,通过介质发送
3.2.2 解封装过程(接收端)
接收端做的是逆向操作:物理层收到比特流,数据链路层检查MAC地址并去掉帧头和帧尾,网络层检查IP地址并去掉IP头,传输层检查端口号并去掉TCP/UDP头,最后应用层拿到原始数据。
核心要点:每一层只处理自己关心的头部信息。数据链路层不看IP地址,网络层不看端口号——各司其职,这就是分层设计的精髓。
3.3 MAC地址与IP地址:两个地址,各管一摊
很多初学者搞不清MAC地址和IP地址的区别。我打个比方:IP地址就像你的家庭住址,MAC地址就像你的身份证号。住址可以变(搬家),但身份证号不变。在网络里,IP地址可以变(比如DHCP分配),但MAC地址出厂就烧死在网卡里,理论上全球唯一。
| 对比项 | MAC地址 | IP地址 |
|---|---|---|
| 长度 | 48位(6字节) | IPv4: 32位(4字节) IPv6: 128位(16字节) |
| 表示方式 | 十六进制,如 00:1A:2B:3C:4D:5E | 点分十进制,如 192.168.1.1 |
| 作用范围 | 局域网内(二层通信) | 互联网范围(三层通信) |
| 分配方式 | 厂商烧录,全球唯一 | 网络管理员或DHCP分配 |
| 层级 | 数据链路层 | 网络层 |
3.4 端口号的作用:区分不同应用
端口号是传输层的概念。一台服务器上可能同时运行着Web服务、邮件服务、FTP服务,它们都使用同一个IP地址。那数据包到达服务器后,怎么知道该交给哪个应用?
答案就是端口号。端口号是一个16位的数字(0-65535),它唯一标识了主机上的一个应用进程。
3.4.1 端口号分类
| 范围 | 分类 | 说明 | 常见示例 |
|---|---|---|---|
| 0-1023 | 知名端口(Well-Known Ports) | 系统保留,分配给标准服务 | HTTP:80, HTTPS:443, FTP:21, SSH:22 |
| 1024-49151 | 注册端口(Registered Ports) | 可由用户进程或应用程序使用 | MySQL:3306, Tomcat:8080 |
| 49152-65535 | 动态/私有端口(Dynamic/Private Ports) | 临时分配给客户端使用 | 浏览器发起连接时随机分配 |
3.4.2 抓包时怎么看端口号
在Wireshark里,端口号直接显示在TCP或UDP头部。比如你看到源端口是49152,目的端口是80,基本可以判断:这是一个客户端(49152是临时端口)在访问Web服务器(80是HTTP端口)。
3.5 本章知识体系总览
下面这张图把本章的核心概念串在了一起,方便你理解数据从发送到接收的完整路径。
3.6 抓包实战中的地址与端口
最后说点实际的。你在Wireshark里抓包,最常看到的就是这三样东西:MAC地址、IP地址、端口号。我建议你养成一个习惯——每次抓包先看这三列。
- MAC地址:确认数据是否在正确的局域网段内传输。如果MAC地址不对,说明二层通信有问题。
- IP地址:确认源和目标是否正确。我曾经遇到一个案例,抓包发现大量流量发往一个陌生的IP,查了半天是DNS劫持。
- 端口号:快速判断流量类型。看到80是HTTP,443是HTTPS,53是DNS,22是SSH——这些要形成条件反射。
一句话总结:MAC地址解决“我是谁”的问题,IP地址解决“你在哪”的问题,端口号解决“找谁办事”的问题。三者缺一不可,共同构成了网络通信的完整寻址体系。