目录
一、整体层级结构(总览)
二、第一层:数据链路层 —— 以太网帧(Ethernet Frame)
标准以太网帧结构(头部 14 字节 + 载荷 + 尾部 CRC)
1. 头部(14 字节,固定)
2. 载荷
3. 尾部 CRC(4 字节)
实战示例(Wireshark 原始帧)
三、第二层:网络层 —— IPv4 数据包(IP Packet)
IPv4 头部(基础 20 字节,可选扩展字段,最大 60 字节)
核心字段 + 释义 + 抓包实例
IP 包整体示例(精简)
四、第三层:传输层 —— 分 TCP / UDP 两大主流
(一)TCP 段(面向连接、可靠传输,HTTP/HTTPS 底层)
TCP 头部核心字段
TCP 抓包实战片段
(二)UDP 段(无连接、不可靠、轻量,DNS / 直播 / 语音 / 短视频)
UDP 头部字段(固定 8 字节)
UDP 抓包示例(DNS 查询包)
五、第四层:应用层数据(业务真实数据)
案例 1:HTTP 明文数据(基于 TCP 80 端口)
完整 HTTP 请求包(应用层载荷)
HTTP 响应包
案例 2:HTTPS 加密数据(TCP 443 端口)
案例 3:DNS 数据(基于 UDP 53 端口)
六、完整串联:一个真实 HTTP 数据包全流程拆解
1. 整体封装
2. 分层完整内容(精简版)
七、补充关键知识点
快速记忆口诀
结合以太网帧、IP 数据包、TCP/UDP 段、应用层数据四层结构,从底层到应用层拆解数据包完整组成,搭配真实抓包示例、字段释义,同时区分TCP 包、UDP 包、HTTP 包三种最常见场景。
前提:日常抓包(Wireshark/Charles/Fiddler)看到的数据包,遵循TCP/IP 五层模型,物理层忽略,核心四层:以太网帧(数据链路层) → IP 包(网络层) → TCP/UDP 段(传输层) → 应用层数据(HTTP/HTTPS/DNS 等)
一、整体层级结构(总览)
一个完整网络数据包封装关系:
[以太网帧头部] + [IP 头部] + [TCP/UDP 头部] + [应用层数据]每层头部是协议控制信息,后面是载荷(数据);上层数据整体作为下层的载荷。
下面逐层拆解,附字段、作用、实例。
二、第一层:数据链路层 —— 以太网帧(Ethernet Frame)
网卡在局域网传输的最小单元,所有局域网抓包必带,Wireshark 最外层就是它。
标准以太网帧结构(头部 14 字节 + 载荷 + 尾部 CRC)
1. 头部(14 字节,固定)
| 字段 | 长度 | 作用 | 示例值说明 |
|---|---|---|---|
| 目的 MAC 地址 | 6 字节 | 接收方网卡物理地址 | ff:ff:ff:ff:ff:ff= 广播地址(全网设备接收) |
| 源 MAC 地址 | 6 字节 | 发送方网卡物理地址 | 00:1a:2b:3c:4d:5e本机网卡地址 |
| 类型 / 长度 | 2 字节 | 标识上层协议 | 0x0800= 上层是IPv4;0x0806= ARP |
2. 载荷
承载上层IP 数据包,长度可变。
3. 尾部 CRC(4 字节)
校验码,检测传输中数据是否损坏,抓包工具一般不展示。
实战示例(Wireshark 原始帧)
Destination: ff:ff:ff:ff:ff:ff (Broadcast) Source: 00:88:99:aa:bb:cc Type: IPv4 (0x0800)解读:广播帧,本机发出,上层为 IPv4 协议。
补充:跨公网传输时,沿途路由器会不断改写以太网头部(MAC 地址),但 IP 头部全程不变。
三、第二层:网络层 —— IPv4 数据包(IP Packet)
负责跨网段寻址,核心作用:根据 IP 地址把数据路由到目标主机。
IPv4 头部(基础 20 字节,可选扩展字段,最大 60 字节)
核心字段 + 释义 + 抓包实例
版本(4bit)协议版本:
4= IPv4,6= IPv6 示例:Version: 4首部长度(4bit)IP 头部占多少个 4 字节单元。 示例:
Header Length: 20 bytes(最常见,无扩展选项)服务类型 TOS(1 字节)优先级、延迟、吞吐量控制,日常抓包基本为 0。
总长度(2 字节)整个 IP 包(头部 + 载荷)总字节数。 示例:
Total Length: 84标识(2 字节)数据包唯一 ID,用于IP 分片(大包拆分传输)。
标志位 + 片偏移(3bit + 13bit)控制分片:是否允许分片、当前是第几个分片包。
生存时间 TTL(1 字节)数据包在网络中最大转发跳数,防环路。
- Windows 默认 TTL:128
- Linux 默认 TTL:64 每经过一台路由器,TTL -1,减到 0 则丢弃报文。 示例:
TTL: 128
协议(1 字节)标识上层传输层协议:
6= TCP17= UDP1= ICMP(ping 包) 示例:Protocol: TCP (6)
首部校验和(2 字节)校验 IP 头部完整性。
源 IP 地址(4 字节)发送方 IP。示例:
Source: 192.168.1.100(内网本机)目的 IP 地址(4 字节)接收方 IP。示例:
Destination: 110.242.xx.xx(公网服务器)
IP 包整体示例(精简)
Internet Protocol Version 4 Version: 4 Header Length: 20 bytes Total Length: 84 Identification: 0x1234 TTL: 128 Protocol: TCP (6) Source: 192.168.1.100 Destination: 110.242.0.8四、第三层:传输层 —— 分 TCP / UDP 两大主流
传输层负责端口寻址,把数据交给主机上对应的应用程序(端口区分程序)。
(一)TCP 段(面向连接、可靠传输,HTTP/HTTPS 底层)
TCP 有握手、确认、重传、流控机制,头部最小 20 字节,最大 60 字节。
TCP 头部核心字段
源端口(2 字节)客户端随机临时端口(1024~65535)。 示例:
Source Port: 52018目的端口(2 字节)服务器固定端口:
- 80 = HTTP
- 443 = HTTPS
- 22 = SSH 示例:
Destination Port: 443 (https)
序列号 Sequence Number(4 字节)标记当前数据字节的序号,用于有序重组、丢包重传。
确认号 ACK(4 字节)告知对方:我已收到前面所有数据,下一次请发这个序号开始的数据。
数据偏移(4bit)TCP 头部长度,单位 4 字节。
6 位标志位(重点,抓包高频看到)每一位代表一种控制信号,组合使用:
URG:紧急指针有效ACK:确认位(绝大多数数据包都带 ACK=1)PSH:推送,立即上交应用层,不缓存RST:重置连接,强制断开SYN:建立连接(三次握手专用)FIN:关闭连接(四次挥手专用) 示例:Flags: ACK, PSH
窗口大小(2 字节)流量控制:我方当前接收缓冲区剩余大小,告知对方最多能发多少数据。
校验和(2 字节)校验 TCP 头部 + 数据完整性。
紧急指针(2 字节)配合 URG 标志,标记紧急数据位置。
TCP 抓包实战片段
Transmission Control Protocol Source Port: 52018 Destination Port: 443 Sequence Number: 12589 Acknowledgment: 45621 Flags: ACK, PSH Window Size: 65535(二)UDP 段(无连接、不可靠、轻量,DNS / 直播 / 语音 / 短视频)
UDP无握手、无重传、无流控,头部固定8 字节,结构极简。
UDP 头部字段(固定 8 字节)
- 源端口(2 字节)
- 目的端口(2 字节)
- 总长度(2 字节):UDP 头部 + 数据总长度
- 校验和(2 字节)
UDP 抓包示例(DNS 查询包)
User Datagram Protocol Source Port: 54321 Destination Port: 53 (domain) # DNS 标准端口 Length: 45 Checksum: 0xabcd解读:本机向 DNS 服务器 53 端口发起域名查询。
五、第四层:应用层数据(业务真实数据)
TCP/UDP 的载荷部分就是应用层协议数据,也是开发 / 测试最关心的内容。 下面举HTTP、HTTPS、DNS三类最常用案例。
案例 1:HTTP 明文数据(基于 TCP 80 端口)
整个应用层就是标准 HTTP 请求 / 响应文本,明文可直接阅读。
完整 HTTP 请求包(应用层载荷)
GET /index.html HTTP/1.1 Host: www.example.com User-Agent: Mozilla/5.0 Accept: */* Connection: keep-alive拆解:
- 请求行:请求方法 + 路径 + 协议版本
- 请求头:各类客户端信息、连接策略
- 无请求体(GET 请求)
HTTP 响应包
HTTP/1.1 200 OK Server: nginx Content-Type: text/html Content-Length: 128 <html> <body>Hello World</body> </html>- 状态行:协议 + 状态码 + 描述
- 响应头:服务器、内容类型、长度
- 响应体:真实业务数据
Fiddler/Charles 看到的内容,本质就是解析后的 TCP 应用层 HTTP 数据。
案例 2:HTTPS 加密数据(TCP 443 端口)
默认状态下:应用层载荷是密文,肉眼全是乱码二进制。
# 原始加密载荷(示例) 16 03 01 00 48 02 00 00 44 03 03 a1 b2 c3 d4 ...只有在抓包工具安装根证书、开启 SSL 解密后,工具才会中间人解密,展示出内部的 HTTP 明文。
案例 3:DNS 数据(基于 UDP 53 端口)
域名解析专用,UDP 载荷是结构化二进制数据,Wireshark 会自动解析:
Domain Name System (query) Transaction ID: 0x8899 Flags: standard query Questions: 1 Queries www.baidu.com: type A (IPv4), class IN作用:查询www.baidu.com对应的 IPv4 地址。
六、完整串联:一个真实 HTTP 数据包全流程拆解
以「浏览器访问网页」为例,把四层拼在一起:
1. 整体封装
[以太网头部] + [IP 头部] + [TCP 头部] + [HTTP 请求明文]2. 分层完整内容(精简版)
- 数据链路层(以太网)
源MAC: 本机网卡 目的MAC: 网关路由器 上层类型: IPv4 - 网络层(IPv4)
源IP: 192.168.1.100 目的IP: 110.242.0.8 协议: TCP(6) TTL: 128 - 传输层(TCP)
源端口: 52018 目的端口: 80(HTTP) 标志位: ACK+PSH - 应用层(HTTP)
GET / HTTP/1.1 Host: www.baidu.com
七、补充关键知识点
- 抓包工具展示差异
- Wireshark:展示完整四层原始报文,偏底层协议分析。
- Fiddler/Charles:屏蔽链路层、网络层细节,只解析传输层 + 应用层,聚焦 HTTP/HTTPS 业务。
- 分片当 IP 包长度超过网卡 MTU(默认 1500 字节),IP 层会自动分片,接收端重组。
- 端口作用IP 定位主机,端口定位主机上的应用。
- 明文 / 密文分界
- HTTP、DNS、FTP:应用层明文
- HTTPS、FTPS:应用层默认密文,需证书解密
快速记忆口诀
MAC 找设备,IP 找主机,端口找程序,载荷是业务
- 二层 MAC:局域网寻址
- 三层 IP:跨网寻址
- 四层 端口:区分应用
- 应用层:真实交互数据