一、数据的封包与拆包过程
1. 核心概念
网络传输中,原始应用数据 无法直接在物理介质中传输,必须遵循TCP/IP 五层 / 四层模型 进行层层封包 (添加协议头);接收方则层层拆包(剥离协议头),最终还原原始数据。
- 封包:自上而下,每一层为数据添加对应协议头(部分协议含尾部)
- 拆包:自下而上,每一层剥离对应协议头,提取有效数据

2. 完整流程(以 TCP 传输为例)
| 层级 | 封包操作(添加协议头) | 拆包操作(剥离协议头) | 核心数据载体 |
|---|---|---|---|
| 应用层 | 生成原始数据,添加应用层协议头 | 剥离应用层协议头,获取原始数据 | 应用层数据包 |
| 传输层(TCP) | 添加 TCP 首部,形成 TCP 报文段 | 剥离 TCP 首部,提取应用层数据 | TCP 报文段 |
| 网络层(IP) | 添加 IP 首部,形成 IP 数据报 | 剥离 IP 首部,提取 TCP 报文段 | IP 数据报 |
| 数据链路层 | 添加 MAC 帧首部 + 尾部,形成以太网帧 | 剥离 MAC 帧首尾,提取 IP 数据报 | 以太网 MAC 帧 |
| 物理层 | 转为比特流,通过介质传输 | 转为 MAC 帧,传递给数据链路层 | 比特流 |
3. 核心作用
- 协议头:标识数据来源、目的地、协议类型、数据长度、校验信息等,是跨设备 / 跨网络传输的核心依据;
- 拆包:必须严格遵循协议头格式,否则无法正确提取有效数据,是网络编程解析数据包的基础。
二、核心协议格式(必学:MAC 帧 / IP 数据报 / TCP 报文段)
(一)以太网 MAC 帧结构(数据链路层)
用于局域网内设备间数据传输,是 TCP/IP 协议的底层载体。
1. 整体结构(总长度:64~1518 字节)
| 组成部分 | 长度 | 核心字段说明 |
|---|---|---|
| 首部 | 14 字节 | 1. 目的 MAC 地址(6 字节):接收方物理地址(唯一标识局域网设备)2. 源 MAC 地址(6 字节):发送方物理地址3. 帧类型(2 字节):标识上层协议(0x0800=IP,0x0806=ARP) |
| 数据部分 | 46~1500 字节 | 上层传递的有效数据(如 IP 数据报);若数据不足 46 字节,自动填充至 46 字节 |
| 尾部 | 4 字节 | CRC 校验码:循环冗余校验,用于检测数据传输过程中是否出现丢失、错误 |
2. 结构示意图
+-----------------+-----------------+-----------------+-----------------+
| 目的MAC(6B) | 源MAC(6B) | 帧类型(2B) | 数据(46~1500B) | CRC(4B) |
+-----------------+-----------------+-----------------+-----------------+
(二)IP 数据报格式(网络层)
用于跨网络(互联网) 数据传输,是 TCP/UDP 数据的载体,首部长度可变(20~60 字节)。
1. 固定首部(20 字节,核心必记)
| 字段名 | 位数 | 核心说明 |
|---|---|---|
| 版本 | 4 位 | IP 协议版本:IPv4=4,IPv6=6 |
| 首部长度 | 4 位 | 单位:4 字节;最小值 5(20 字节),最大值 15(60 字节) |
| 服务类型 | 8 位 | 区分数据优先级、传输类型(如低延迟、高可靠性) |
| 总长度 | 16 位 | IP 数据报总长度(首部 + 数据),最大 65535 字节 |
| 标识 | 16 位 | 用于分片重组,标识同一 IP 数据报的分片 |
| 标志位 | 3 位 | 控制分片:DF=1 禁止分片,MF=1 表示后续还有分片 |
| 片偏移 | 13 位 | 标识分片在原数据报中的位置 |
| TTL(生存时间) | 8 位 | 最大传输跳数,每经过路由器减 1,为 0 则丢弃(防循环传输) |
| 协议 | 8 位 | 标识上层协议:6=TCP,17=UDP,1=ICMP |
| 校验和 | 16 位 | 校验 IP 首部完整性,校验失败则丢弃 |
| 源 IP 地址 | 32 位 | 发送方设备的 IP 地址(如 192.168.1.100) |
| 目的 IP 地址 | 32 位 | 接收方设备的 IP 地址(如 180.101.49.11) |
2. 可变部分(0~40 字节)
可选字段:用于网络测试、安全认证等,长度为 4 字节的整数倍。
3. 结构示意图
+----------------+----------------+----------------+----------------+
| 版本(4) | 首部长度(4) | 服务类型(8) | 总长度(16) |
+----------------+----------------+----------------+----------------+
| 标识(16) | 标志(3) | 片偏移(13) | TTL(8) | 协议(8) | 校验和(16) |
+----------------+----------------+----------------+----------------+
| 源IP地址(32位) |
+----------------+----------------+
| 目的IP地址(32位) |
+----------------+----------------+
| 可变部分(0~40B) | 数据部分(可变) |
+----------------+----------------+

(三)TCP 报文段首部格式(传输层)
TCP 是面向连接、可靠传输 的协议,报文段由首部(20~60 字节)+ 数据组成,是 HTTP 等应用层协议的传输载体。
1. 固定首部(20 字节,核心必记)
| 字段名 | 长度 | 核心说明 |
|---|---|---|
| 源端口号 | 16 位 | 发送方应用程序端口(如 80=HTTP,443=HTTPS) |
| 目的端口号 | 16 位 | 接收方应用程序端口 |
| 序号(Sequence) | 32 位 | 标识报文段在发送数据流中的位置,用于可靠传输、有序重组 |
| 确认号(Ack) | 32 位 | 期望接收的下一个字节序号,用于确认对方已接收数据 |
| 首部长度 | 4 位 | 单位:4 字节;最小值 5(20 字节),最大值 15(60 字节) |
| 保留位 | 6 位 | 预留,暂未使用,置 0 |
| 标志位 | 6 位 | 核心标志:URG(紧急指针有效)、ACK(确认号有效)、PSH(推送数据)、RST(重置连接)、SYN(建立连接)、FIN(关闭连接) |
| 窗口大小 | 16 位 | 接收方允许接收的字节数(流量控制核心) |
| 校验和 | 16 位 | 校验 TCP 首部 + 数据的完整性 |
| 紧急指针 | 16 位 | 标识紧急数据的最后一个字节位置(URG=1 时有效) |
2. 可变部分(0~40 字节)
可选字段:用于扩展功能(如时间戳、窗口缩放),长度为 4 字节的整数倍。
3. 结构示意图
+----------------+----------------+----------------+----------------+
| 源端口(16) | 目的端口(16) |
+----------------+----------------+
| 序号(32) |
+----------------+----------------+
| 确认号(32) |
+----------------+----------------+
| 首部长度(4) | 保留(6) | 标志位(6) | 窗口大小(16) |
+----------------+----------------+----------------+----------------+
| 校验和(16) | 紧急指针(16) |
+----------------+----------------+
| 可变部分(0~40B) | 数据部分(可变) |
+----------------+----------------+

三、常用网络测试工具
1. ping
- 作用 :测试本机与目标设备的连通性,基于 ICMP 协议;
- 核心参数 :
-c(指定发送次数)、-t(持续发送,Windows)、-i(指定发送间隔); - 原理:发送 ICMP 回显请求,目标返回回显应答,通过丢包率、延迟判断网络质量。
2. ipconfig / ifconfig
- 作用:查看本机网络配置(IP 地址、子网掩码、网关、MAC 地址);
- 区别:
ipconfig(Windows)、ifconfig(Linux/macOS)。
3. telnet
- 作用 :测试TCP 端口连通性(如 HTTP 80、SSH 22),也可用于简单的文本协议交互;
- 用法 :
telnet 目标IP 端口,连接成功则端口开放,失败则关闭。
4. netstat
- 作用:查看本机网络连接、端口监听、路由表等;
- 核心参数 :
-a(所有连接)、-n(数字格式显示)、-t(TCP 连接)、-u(UDP 连接)。
5. curl
- 作用:命令行 HTTP/HTTPS 请求工具,用于测试接口、下载文件;
- 用法 :
curl 网址(发送 GET 请求)、curl -X POST -d "数据" 网址(发送 POST 请求)。
6. 抓包工具(重点:Wireshark)
- 作用:捕获、分析网络数据包,可视化查看 MAC 帧、IP 数据报、TCP 报文段、HTTP 报文;
- 核心功能 :过滤数据包(如
tcp.port==80过滤 HTTP)、协议解析、数据包详细信息查看; - 应用场景:排查网络故障、分析 HTTP 请求 / 响应、调试网络程序。
四、HTTP 协议(超文本传输协议)
HTTP 是应用层协议 ,基于 TCP(默认端口 80),用于万维网(WWW)数据传输,无状态(服务器不记录客户端状态)。
1. 万维网(WWW)核心
- 组成:Web 服务器(存储资源)、Web 浏览器(请求资源)、HTTP 协议(传输规则);
- 资源定位:互联网上资源的完整地址,唯一表示某个资源,通过 URL 统一标识网络资源(如网页、图片、接口)。

2. URL 格式(统一资源定位符)
标准格式 :协议://主机名[:端口]/路径?查询参数#片段
- 示例:
https://www.baidu.com/s?wd=HTTP#1 - 字段说明:
- 协议:
http/https(加密 HTTP); - 主机名:服务器域名 / IP(如www.baidu.com);
- 端口:可选,默认 80(HTTP)、443(HTTPS);
- 路径:服务器资源路径(如
/s); - 查询参数:
?key=value,用于传递参数; - 片段:
#,客户端本地跳转,不发送给服务器。
- 协议:
3.超文本传输协议http
作用:保证服务器准确无误的将资源传给客户端(传文本、图片、视频等)。
4.超文本标记语言HTML
作用:定义网页的结构和内容(绘制网页)。
3. HTTP 请求报文格式
客户端向服务器发送的请求数据,由请求行、请求头、空行、请求体四部分组成。

示例(GET 请求)
GET /s?wd=HTTP HTTP/1.1 // 请求行:方法 路径 协议版本
Host: www.baidu.com // 请求头:主机名
User-Agent: Chrome/120.0 // 请求头:浏览器信息
Accept: text/html // 请求头:接收的数据类型
// 空行(分隔头和体)
// 请求体(GET请求通常为空,POST请求有数据)
核心字段:
- 请求方法:GET(查询数据)、POST(提交数据)、PUT(修改)、DELETE(删除);
- 协议版本:HTTP/1.1(主流)、HTTP/2。
4. HTTP 响应报文格式
服务器向客户端返回的响应数据,由状态行、响应头、空行、响应体四部分组成。
示例(成功响应)
HTTP/1.1 200 OK // 状态行:协议版本 状态码 状态描述
Server: nginx // 响应头:服务器信息
Content-Type: text/html // 响应头:数据类型
Content-Length: 1024 // 响应头:数据长度
// 空行
<!DOCTYPE html>... // 响应体:返回的网页/数据
核心状态码(必记):
- 2xx(成功):200(请求成功)、201(创建成功);
- 3xx(重定向):301(永久重定向)、302(临时重定向);
- 4xx(客户端错误):404(资源不存在)、403(权限拒绝);
- 5xx(服务器错误):500(服务器内部错误)、502(网关错误)。
5. HTTP 抓包实操(Wireshark)
- 打开 Wireshark,选择网卡,开始捕获;
- 浏览器访问 HTTP 网址(如
http://www.baidu.com); - 过滤条件输入
http,仅显示 HTTP 数据包; - 查看数据包详情:
- 解析请求行 / 请求头 、状态行 / 响应头;
- 查看 TCP 三次握手(SYN→SYN+ACK→ACK)和四次挥手(FIN→ACK→FIN→ACK);
- 对比 MAC 帧、IP 数据报、TCP 报文段的封装结构。

五、学习总结
- 封包拆包是网络传输的基础,核心是协议头的封装与解析,需牢记 TCP/IP 分层模型的对应关系;
- 协议格式是网络编程的核心:MAC 帧(局域网)、IP 数据报(跨网)、TCP 报文段(可靠传输)、HTTP(应用层),重点掌握各字段的作用;
- 工具使用:ping/ifconfig/netstat 测连通性,curl 测 HTTP 接口,Wireshark 抓包分析是网络调试的必备技能;
- HTTP 协议:掌握 URL 格式、请求 / 响应报文结构、状态码,结合抓包工具理解 HTTP 与 TCP 的关联。