3. Wireshark 基础与蜂窝协议解析

好,咱们进入第三讲。这一讲是工具与理论的交汇点。你可能会觉得,Wireshark 嘛,抓个包看看,谁不会?但说实话,如果不懂蜂窝协议栈的层次结构,你看到的只是一堆十六进制乱码。我见过不少工程师,拿着抓包文件盯了半天,连 NAS 消息和 RRC 消息都分不清——嗯,这其实挺常见的。

这一章,我会带你快速过一遍 Wireshark 的界面和过滤器,然后重点讲清楚蜂窝协议栈的每一层是干什么的。最后,我会告诉你 Wireshark 里那些解析插件是怎么把二进制流变成人能读懂的字段的。

3.1 Wireshark 界面:别被密密麻麻的列表吓到

第一次打开 Wireshark,你可能会觉得眼花。但其实核心就三个区域,搞懂了就很简单。

区域 名称 作用
1 Packet List 面板 显示所有抓到的包,一行一个。关键看 No.、Time、Source、Destination、Protocol、Info。
2 Packet Details 面板 选中某个包后,这里会展开协议树。从物理层到应用层,一层层剥开。
3 Packet Bytes 面板 原始十六进制数据。你点 Details 里的某个字段,这里会高亮对应的字节。
我的习惯: 我会把 Packet List 拉宽一点,只看 Protocol 和 Info 两列。Info 列里经常直接告诉你这是 Attach Request 还是 RRC Setup,省得你一层层去翻。

3.2 抓包过滤器:别什么都抓,你会后悔的

蜂窝模组的空口数据量其实不小。如果你不设过滤器,几秒钟就能抓到几万个包。我建议你养成一个习惯:先过滤,再抓包。

Wireshark 有两种过滤器,别搞混了:

  • Capture Filter(抓包过滤器):在开始抓包前设置。只抓符合条件的包,不满足的直接丢弃。语法比较老,类似 tcpdump。
  • Display Filter(显示过滤器):抓完包之后用。只是隐藏不符合条件的包,数据还在。

蜂窝分析中,我常用的显示过滤器有这些:

// 只看 NAS 层消息(移动性管理、会话管理)
nas-eps

// 只看 RRC 层消息(信令连接建立、重配)
rrc

// 只看某个特定流程,比如 Attach
nas-eps.nas_msg_type == 0x41  // Attach Request

// 组合过滤:只看 RRC 且包含 Establishment Cause
rrc and rrc.establishmentCause
我曾经踩过的坑: 有一次我抓了一整天的日志,回家才发现 Capture Filter 写错了,把关键的 NAS 消息全过滤掉了。从那以后,我每次抓包前都会先试抓 10 秒,确认过滤器生效再正式开抓。

3.3 蜂窝协议栈概述:从 NAS 到 PHY,每一层都在干什么?

蜂窝协议栈,说白了就是一套分层的通信规则。每一层只关心自己的事,把复杂的问题拆解掉。你想想看,如果让应用层直接去管无线信号的调制解调,那代码得乱成什么样?

我习惯把协议栈分成两大块:控制面和用户面。控制面管信令(打电话、注册、切换),用户面管数据(上网、看视频)。这一讲我们重点看控制面,因为抓包分析主要就是在看信令。

下面这张图,是我自己画的一个简化版协议栈结构。你把它记在脑子里,以后看包的时候就能快速定位问题出在哪一层。

蜂窝协议栈控制面分层结构 UE 侧 网络侧 NAS 非接入层(MM / SM) NAS MME / AMF RRC 无线资源控制 RRC 基站侧 RRC PDCP PDCP RLC RLC MAC MAC NAS 消息封装在 RRC 消息中传输,RRC 又依次经过 PDCP → RLC → MAC → PHY 发送

每一层的职责,我简单总结一下:

协议层 全称 核心职责 抓包时你能看到什么
NAS Non-Access Stratum 移动性管理(注册、位置更新)、会话管理(PDN 连接建立) Attach Request、TAU Request、PDN Connectivity Request
RRC Radio Resource Control 建立/维护/释放 UE 与基站之间的信令连接 RRC Setup、RRC Reconfiguration、RRC Release
PDCP Packet Data Convergence Protocol 头压缩、加密、完整性保护 通常不直接暴露,Wireshark 会显示 PDCP 序号
RLC Radio Link Control 分段/重组、重传控制 RLC 分段信息、重传次数
MAC Medium Access Control 调度、复用、随机接入、HARQ MAC CE、随机接入响应、上行调度授权
PHY Physical Layer 调制、编码、射频收发 Wireshark 通常不直接解析 PHY,需要专用工具
重点记住: NAS 消息是 UE 和核心网之间的对话,RRC 消息是 UE 和基站之间的对话。你在 Wireshark 里看到 NAS 消息时,它其实是作为 RRC 消息的载荷(payload)传输的。所以,如果你找不到 NAS 消息,先看看 RRC 层有没有展开。

3.4 Wireshark 中的蜂窝协议解析插件

Wireshark 原生就支持很多蜂窝协议,但有些场景需要额外插件。我整理了一下常用的:

  • 内置解析器:Wireshark 3.x 以上版本已经内置了 nas-eps、rrc、s1ap、gtp 等协议解析器。你直接打开抓包文件,Wireshark 会自动识别。
  • LTE RRC 解析器:如果你抓的是空口日志(比如用 QXDM 或 QCAT 导出的),可能需要安装 lte_rrc 插件。Wireshark 官方 wiki 上有下载。
  • 5G NR 解析器:5G 的 RRC 和 NAS 消息格式变了,需要 Wireshark 4.0 以上版本,或者手动加载 nr_rrc 和 nas_5gs 插件。
我的建议: 如果你经常做蜂窝抓包,直接装 Wireshark 最新版。老版本对 5G 的支持很差,有时候解析出来的字段名都是错的。我曾经因为版本太旧,把一个 5G Registration Request 误判成了 LTE Attach Request,排查了半天才发现是工具的问题。

插件怎么装?其实很简单。以 Windows 为例:

1. 下载插件 .dll 或 .lua 文件
2. 放到 Wireshark 安装目录下的 plugins/ 文件夹
3. 重启 Wireshark
4. 在 "Analyze" → "Enabled Protocols" 里搜索插件名,确保已勾选

装好之后,你打开一个抓包文件,在 Packet Details 面板里就能看到类似这样的结构:

Frame 1: 142 bytes on wire (1136 bits)
  Linux cooked capture
  SLL
  LTE RRC UL-DCCH Message
    rrcConnectionSetupRequest
      ue-Identity: 0x12345678
      establishmentCause: mo-Signalling (0x03)
      spare: 0

看到没?Wireshark 已经把二进制流解析成了 rrcConnectionSetupRequest,连 establishmentCause 都帮你翻译成了 mo-Signalling。这就是插件的功劳。

注意: 有些抓包工具导出的文件格式不是标准的 pcapng,比如 QXDM 的 .isf 或 .hdf 文件。你需要先用工具转换成 pcapng,Wireshark 才能识别。我一般用 qxdm2pcap 这个开源工具,效果还不错。

好了,这一讲的内容就到这里。Wireshark 的界面和过滤器是基本功,蜂窝协议栈的分层结构是分析问题的地图。插件则是帮你把地图翻译成你能看懂的语言。这三样东西,你以后每次抓包都会用到。