Wireshark 与 TCP/IP 五层模型速读手册
目录
- 一、TCP/IP 五层模型总览
- 二、各层详解与抓包字段定位
- 2.1 物理层(Frame)
- 2.2 数据链路层(Ethernet II)
- 2.3 网络层(IPv4)
- 2.4 传输层(TCP/UDP)
- 2.5 应用层(HTTP 示例)
- 三、各层抓包字段对照表(速查)
- 四、完整 TCP 流抓包解析(三次握手 → HTTP 传输 → 四次挥手)
- 五、HTTP GET 请求报文逐字段解析
- 六、GET 方法特性与 GET vs POST 对比
- 七、实战建议(过滤、定位、排障)
一、TCP/IP 五层模型总览
从下到上依次为:物理层 → 数据链路层 → 网络层 → 传输层 → 应用层。数据在发送端逐层封装,上行展示为"data → http → tcp → ip → eth";接收端按相反顺序逐层解封装。
- 物理层:比特流的电/光信号传输(无头尾,仅记录元数据)
- 数据链路层:以太网帧封装,基于 MAC 寻址
- 网络层:基于 IP 寻址/路由的跨网段转发
- 传输层:端到端的可靠传输(TCP)或无连接传输(UDP)
- 应用层:面向业务协议(HTTP、DNS、TLS 等)
二、各层详解与抓包字段定位
2.1 物理层(Frame)
- 传输单位:比特(bit)
- 关键字段(Wireshark):
- Frame Number(捕获顺序)
- Frame Length(帧长度,如 54/327 字节)
- Encapsulation type(Ethernet)
- Protocols in frame(例如
eth:ethertype:ip:tcp:http:data用于快速识别封装路径)
- 实战价值:定位抓包时序、确认是否截断、识别协议栈路径是否符合预期。
2.2 数据链路层(Ethernet II)
- 传输单位:帧(Frame)
- 封装内容:网络层包 + 以太网头(源/目的 MAC、Type)+ FCS
- 关键字段:
- Source/Destination MAC(同时可见厂商 OUI,如
IntelCor_...、HuaweiTe_...) - Type:IPv4(0x0800)、IPv6(0x86DD)
- Source/Destination MAC(同时可见厂商 OUI,如
- 实战价值:按 MAC 定位设备,确认二层广播/单播行为、定位链路问题。
2.3 网络层(IPv4)
- 传输单位:包(Packet)
- 关键字段:
- Version(4)
- Header Length(20 bytes,最小头,表示无扩展)
- Flags:如 DF(Don't Fragment,禁止分片)
- Fragment Offset(分片偏移,配合 DF 识别是否允许分片)
- TTL(常见 Windows=128,Linux=64;跨路由器逐跳减 1)
- Protocol(6=TCP,17=UDP)
- Source/Destination Address(源/目的 IP)
- 实战价值:验证路径与 OS 类型(TTL)、MTU/分片策略、上层协议类型。
2.4 传输层(TCP/UDP)
- 传输单位:TCP 段(Segment) / UDP 数据报(Datagram)
- TCP 关键字段:
- Source/Destination Port(端口)
- Seq/Ack(序列号/确认号,可靠传输核心)
- Flags(SYN/ACK/FIN/RST/PSH 等)
- Len(本段数据长度)
- UDP 关键字段:
- Source/Destination Port、Length、Checksum
- 实战价值:定位可靠性问题(重传、乱序、丢包、RST)、端口/连接追踪。
2.5 应用层(HTTP 示例)
- 传输单位:消息(Message)
- 关键字段:
- 请求行:
GET /scan HTTP/1.1 - 请求头:Host / User-Agent / Accept / ...
- 响应行:
HTTP/1.1 200 OK - 响应体:数据负载(如文本、JSON)
- 请求行:
- 实战价值:直接面向业务排障,结合 Follow Stream 重组成对请求/响应。
三、各层抓包字段对照表(速查)
| 层级 | 传输单位 | 典型封装内容 | Wireshark 字段(示例) | 实战解读 |
|---|---|---|---|---|
| 物理层 | 比特 | 元数据 | Frame Length / Arrival Time / Protocols in frame | 验证是否截断、识别协议路径 |
| 数据链路层 | 帧 | 源/目的 MAC、Type | Ethernet II: Src/Dst, Type: IPv4 | MAC 定位设备、识别广播/单播 |
| 网络层(IPv4) | 包 | 源/目的 IP、TTL、DF | IPv4: Src/Dst、TTL、Flags(DF) | 路由可达性、MTU/分片策略 |
| 传输层(TCP) | 段 | 端口、Seq/Ack、Flags | TCP: Src/Dst Port、Seq、Ack、Flags | 可靠性与连接状态 |
| 应用层(HTTP) | 消息 | 请求/响应行与头、体 | HTTP: Request/Response | 业务级问题定位 |
四、完整 TCP 流抓包解析(三次握手 → HTTP 传输 → 四次挥手)
基于"标准全流程抓包(Stream 124)"信息整理如下(字段不变,结构化呈现):
- 三次握手(建立连接)
- 客户端 → 服务器:
SYN Seq=789532880(初始序列号随机;MSS=1460) - 服务器 → 客户端:
SYN+ACK Seq=1487226709 Ack=789532881 - 客户端 → 服务器:
ACK Ack=1487226710
→ 进入 ESTABLISHED
- 数据传输(HTTP 请求/响应)
- 客户端 → 服务器:
GET /LICENSE HTTP/1.1 - 服务器 → 客户端:
ACK(确认请求) - 服务器 → 客户端:分段发送响应体(如 1848、1849 两段重组),最终
HTTP/1.1 200 OK (text/plain),Flags 常见PSH, ACK - 客户端 → 服务器:
ACK(确认收到完整响应)
- 四次挥手(优雅断开)
- 客户端 → 服务器:
FIN+ACK - 服务器 → 客户端:
FIN+ACK - 客户端 → 服务器:
ACK
→ 连接关闭(客户端进入 TIME_WAIT 等待 2MSL)
要点:
- TCP 分段与重组:Wireshark 自动重组跨段的应用层数据
- PSH 标志:提示立即推送数据到应用层
- Seq/Ack 严格递增,验证可靠传输按序特性
五、HTTP GET 请求报文逐字段解析
以 curl 工具访问 nginx.org/LICENSE 为例,抓包中可见如下结构:
-
请求行(Request Line)
GET /LICENSE HTTP/1.1\r\n
- 方法:GET(获取资源)
- 路径:/LICENSE
- 版本:HTTP/1.1(持久连接、分块传输等特性)
-
请求头(Request Headers)
| 头字段 | 取值 | 作用 |
|--------|------|------|
| Host | nginx.org | 虚拟主机标识 |
| User-Agent | curl/8.15.0 | 客户端标识 |
| Accept | / | 可接受任意类型响应 |
| 空行 | \r\n | 分隔头与体(此处无请求体) |
-
抓包关联
- Wireshark 会在请求包右侧注记
[Response in frame: XXX],可跳转响应包 - 完整 URI:
http://nginx.org/LICENSE
实战价值:
- 若请求失败,通过 Host 排查域名解析;通过 UA 判断是否被拦截
六、GET 方法特性与 GET vs POST 对比
GET 的核心特性:
- 幂等性:多次相同 GET 不改变服务器状态(返回结果一致)
- 请求体可选:参数常在 URL 中(Query String);多数情况下无请求体
- 可缓存性:CDN/代理/浏览器可缓存 GET 响应(304 验证)
- 安全性(相对):参数暴露在 URL 中,不适合传递敏感信息
GET vs POST(关键对比):
- 核心作用:GET 获取资源;POST 提交数据(新增/修改)
- 参数位置:GET 在 URL;POST 常在请求体
- 幂等性:GET 是;POST 否
- 可缓存:GET 是;POST 否(默认)
- 敏感信息:GET 不适合;POST 更适合(仍需 TLS)
七、实战建议(过滤、定位、排障)
- 过滤器实践(显示过滤器):
- 只看某 IP HTTP 流:
ip.addr == <server_ip> && http && tcp.port == 80 - 只看某客户端临时端口:
tcp.port == <ephemeral_port> - 排除 ARP 广播:
!arp
- 只看某 IP HTTP 流:
- 捕获 vs 显示过滤器:
- 捕获过滤器(libpcap):
host <ip>、tcp port 80 - 显示过滤器(Wireshark):
ip.addr == <ip>、http && tcp.port == 80
- 捕获过滤器(libpcap):
- Follow Stream(追踪流):
- TCP:
Ctrl+Alt+Shift+T(按四元组重组一个连接) - HTTP:
Ctrl+Alt+Shift+H(按会话标识重组请求/响应)
- TCP:
- 典型异常定位:
- 大量
[TCP Retransmission]+ 最终RST:网络丢包/服务端异常导致异常关闭 - DF 标志 + MTU 不足:关注 "ICMP 不可达/需分片",排查路径 MTU
- TTL 异常波动:排查绕路/回环
- 大量