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 物理层 比特流传输、电气特性 网线、光纤、集线器
我的经验:OSI模型在实际网络中很少被完整实现,但它是一个绝佳的排障框架。我曾经遇到一个应用层卡顿的问题,从应用层一路查到物理层,最后发现是网线水晶头接触不良——这就是分层排查的价值。

3.1.2 TCP/IP四层模型

TCP/IP模型是实际互联网使用的模型,它把OSI七层压缩成了四层:应用层、传输层、网络层、网络接口层。你想想看,OSI的会话层和表示层在TCP/IP里被合并到了应用层,物理层和数据链路层合并成了网络接口层。

为什么这么设计?因为实用。OSI太理想化了,TCP/IP从一开始就是奔着“能跑起来”去的。我记得刚学网络时,老师说过一句话:“OSI是教科书,TCP/IP是实战手册。”这句话我一直记着。

3.2 数据封装与解封装:数据包的“套娃”过程

数据封装,说白了就是给数据一层层“穿衣服”。发送数据时,每一层都会加上自己的头部信息;接收数据时,再一层层“脱衣服”。

我经常跟团队里的新人说:你抓包看到的每一个数据包,都是经过层层封装的结果。看不懂封装过程,就看不懂抓包数据。

3.2.1 封装过程(发送端)

  1. 应用层:生成原始数据(比如HTTP请求报文)
  2. 传输层:加上TCP/UDP头部(包含源端口、目的端口)→ 形成数据段
  3. 网络层:加上IP头部(包含源IP、目的IP)→ 形成数据包
  4. 数据链路层:加上MAC头部(包含源MAC、目的MAC)和尾部FCS → 形成数据帧
  5. 物理层:将帧转换为比特流,通过介质发送

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分配
层级 数据链路层 网络层
避坑指南:我曾经遇到一个案例,某台服务器间歇性断网,抓包发现目标MAC地址一直在变。查了半天,原来是ARP表被污染了——有人伪造了ARP响应。这就是MAC地址欺骗攻击。所以,别以为MAC地址是“物理地址”就绝对安全。

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端口)。

我的习惯:抓包分析时,我通常会先看端口号来判断流量类型。比如看到大量目的端口为443的流量,先怀疑是不是HTTPS加密流量;看到目的端口为53,那多半是DNS查询。端口号是快速定位问题的第一把钥匙。

3.5 本章知识体系总览

下面这张图把本章的核心概念串在了一起,方便你理解数据从发送到接收的完整路径。

数据封装与解封装完整流程 发送端 应用层:原始数据 传输层:+TCP/UDP头 网络层:+IP头 数据链路层:+MAC头 物理层:比特流 网络传输介质 接收端 物理层:比特流 数据链路层:去MAC头 网络层:去IP头 传输层:去TCP/UDP头 应用层:原始数据 关键概念对应关系: • MAC地址(数据链路层):用于局域网内设备识别,48位硬件地址 • IP地址(网络层):用于互联网范围寻址,IPv4 32位 / IPv6 128位 • 端口号(传输层):用于区分主机上的不同应用进程,16位(0-65535)

3.6 抓包实战中的地址与端口

最后说点实际的。你在Wireshark里抓包,最常看到的就是这三样东西:MAC地址、IP地址、端口号。我建议你养成一个习惯——每次抓包先看这三列。

  • MAC地址:确认数据是否在正确的局域网段内传输。如果MAC地址不对,说明二层通信有问题。
  • IP地址:确认源和目标是否正确。我曾经遇到一个案例,抓包发现大量流量发往一个陌生的IP,查了半天是DNS劫持。
  • 端口号:快速判断流量类型。看到80是HTTP,443是HTTPS,53是DNS,22是SSH——这些要形成条件反射。

一句话总结:MAC地址解决“我是谁”的问题,IP地址解决“你在哪”的问题,端口号解决“找谁办事”的问题。三者缺一不可,共同构成了网络通信的完整寻址体系。