CISCO 网络架构白皮书 · 制造业 AGV 专题

让 AGV 永不掉线

当 200 辆 AGV 在总装车间奔跑,一次 800 毫秒的 ISE 延迟,就足以让整条产线停摆
这不是 ISE 的错,也不是 AGV 的错——而是我们一直让"快车"去走了"慢路"。
本文用第一性原理拆解漫游链路,给出从 802.11r、AAA Cache 到 Cisco URWB 的完整优化路径。

受众:关注AGV漫游的人员 平台:Catalyst 9800 + Catalyst 9120 + Cisco ISE 阅读时长:约 35–40 分钟
Executive Summary 为决策者准备的 3 分钟速读

用三句话说清这件事

问题:当前 AGV 每次漫游都触发完整 802.1X 认证,强依赖 ISE,一旦 ISE 抖动就引发大面积停摆。
根因:OKC 名义上启用但实际未生效(最常见原因是终端未在 Reassoc 中携带 PMKID,也可能是 PMKID mismatch 或 WLC cache miss——需抓包区分),加之 ISE 上 PSN 与 MNT 合并部署导致 CPU 被数据库 I/O 拖累。
方向:从协议(11r Mixed Mode)、控制器(AAA Cache)、平台(ISE 分角色)、终极方案(Cisco URWB)四个层面分档优化,把漫游从"秒级风险"压到"毫秒级确定性"。

1挑战

每次漫游都"惊动 ISE"

抓包显示,AGV 漫游时未声明 PMKID,OKC 失效;WLC 每次都向 ISE 发起完整 EAP-TLS(示例抓包约 21 条 RADIUS 报文)。ISE 一次延迟 800 ms 就足以让 MQTT 中断,触发整车队安全停车。

真实漫游耗时:300 ms ~ 3 s+
2根因

两个"看不见的耦合"

① 终端与 OKC 的耦合不稳:依赖客户端实现,非 IEEE 标准
② ISE 内部 PSN(认证)与 MNT(记账+SQL)耦合在同一节点,数据库 I/O Wait 拖累 RADIUS 响应。

单点 ISE = 单点风险
3方案

四档路径,按需选择

A-1 即时止血:AGV 侧打开 OKC(视终端类型 1–12 周),漫游 50–100 ms。
A-2 标准化收敛:WLC 启用 802.11r Mixed Mode,漫游 < 10 ms。
B 中度加固:升级 IOS-XE 到 17.18.1+(建议 17.18.3) 启用 AAA Cache,ISE 拆分 PSN/MNT。
C 工业级:核心区域引入 Cisco URWB,实现零中断、零丢包。

投入梯度:极低 → 低 → 中 → 高
4收益

可验证的 SLA

P95 漫游时间 < 50 ms;RADIUS 失败率 < 1%;MQTT P99 端到端时延 < 100 ms;单日 ISE 引发的 AGV 停摆事件 降为 0

90 天内落地路径 A + B
底线建议:第 1 周先做 OKC 可行性抓包判定(属于场景 ① / ② / ③ 哪一种,见 Ch3 §3.7);场景 ① 可在 1–2 周内启用 OKC(A-1)赚到时间,场景 ② / ③ 不要等,直接并行启动 802.11r Mixed Mode(A-2),把漫游收敛到 < 10 ms 的标准化终点;半年内完成 AAA Cache + ISE 分角色(B),让 ISE 抖动不再传染产线;对核心 AGV 区域评估 Cisco URWB(C)试点。
查看决策矩阵 →
Chapter 01 · 从需求出发

AGV 到底对网络要什么?

讨论任何"漫游优化"之前,我们必须先回答一个最基础的问题:AGV 的车载控制系统,对无线网络究竟有什么硬性要求?如果答不上来,所有优化都只是"凭感觉"。

1.1 第一性原理:先看 AGV 在网络上"说什么话"

一辆典型的 AGV,其无线流量主要来自三类应用:

① 调度信令

承载协议:MQTT(少数厂商用 OPC UA)
作用:AGV 接收调度系统下发的"去哪里、拐弯、停车、避障"指令,并向上汇报位置、电量、状态。

② 实时状态遥测

1–10 Hz 的位置/速度/电池/任务进度上报。带宽极小(几 kbps),但延迟敏感

③ 视频/日志/OTA

偶发性,对带宽相对友好,对"是否在线"不敏感——可以重传。

真正决定整车队"生死"的,是 。AGV 一旦失去调度信令,就像一辆失去方向盘的车——出于安全设计,它会立即停车。这一点制造现场的工程师有切肤之痛:一次 MQTT 中断 1 秒,可能造成全场 200 辆 AGV 集体停摆 5–10 秒;恢复后还要等任务重新分配,物料断流可达数分钟。

1.2 MQTT 到底是什么?为什么 AGV 都爱它?

MQTT(Message Queuing Telemetry Transport)

一个基于 TCP 的、轻量级的发布/订阅协议。AGV(Publisher)把消息发到一个叫 Topic 的"频道",调度系统(Subscriber)通过订阅这个频道收消息,中间由一个Broker(消息代理)转发。

类比:MQTT 就像车间的"无线对讲机频道"

每辆 AGV 都拿着一台对讲机,调度室是中央台。AGV 不需要知道"谁在听我",只管在自己的频道(Topic)里喊一句"我在 A 区,电量 80%";中央台订阅了这个频道,自然能听到。再由中央台广播"AGV-007,请前往 B12 工位"——AGV-007 收到后立刻执行。
Broker 就是中央台的电台机房——所有信令都从它过。

1.3 MQTT 对网络的"硬性指标"

很多人误以为 MQTT 是 UDP 的"轻量协议",其实它跑在 TCP 上——有连接、有重传、有顺序保证。这就带来了三个"硬约束":

指标 AGV 场景的典型要求 为什么
端到端时延 < 100 ms(理想 < 50 ms) 调度环路需要在一个控制周期内完成"指令-反馈"
抖动 / Jitter < 30 ms 大抖动会触发 TCP 拥塞控制,吞吐进一步劣化
业务控制容忍 典型 1–3 秒(由 AGV 调度心跳 / 安全 watchdog 决定) 这不是 MQTT KeepAlive 决定的——AGV 应用层心跳一旦超时,安全策略立即触发保护性停车
MQTT KeepAlive 典型 30–60 秒(决定 broker 何时判定会话死亡) KeepAlive 远长于业务 watchdog——它只用来检测 TCP/MQTT 会话级断连,不应被误用作 AGV 停摆计时器
丢包率 < 0.1%(QoS 1/2 场景) 过高丢包导致 ACK 等待 → 队头阻塞 → 雪崩式延迟
带宽 单车 < 100 kbps 带宽不是瓶颈,稳定性才是

请注意:这里最容易"杀死" AGV 的,不是带宽不足,而是连续几百毫秒的"完全静默"。带宽再大,只要中间断开 800 ms,MQTT 上层就会拉响警报。

1.4 把数字落到现场:一次漫游意味着什么?

300ms
一次完整 802.1X 漫游的最低耗时(理想信道、低延迟 ISE)
3s+
DFS 信道+ISE 高延迟时的真实漫游时长(实验抓包实测)
<50ms
AGV 业务对漫游的可容忍上限
200
一次 ISE 抖动牵动的典型车队规模
第一性原理结论: AGV 的网络问题,本质不是"信号好不好",而是"在我移动的那 100 ms 里,能不能不让我说错一句话"。一切优化的目的,都是把"漫游时间"从"秒级"压到"毫秒级",并且让认证不再卡在远端 ISE 的口袋里

1.5 互动 Lab:MQTT 为什么怕"认证空窗"?

道理讲清楚了,但只有动手拖滑块才能真正建立直觉。下面这个小实验把三个关键变量——ISE 响应延迟、漫游认证空窗、无线丢包率——开放给你调节,链路颜色与业务健康度会实时变化。

⚠ 实验性质说明:这是一个教学用直觉模型不是协议级仿真,不可用于容量规划或 SLA 承诺。目的只有一个——帮业务团队体感"为什么 MQTT 容易因认证空窗而崩"。
MQTT 控制链路健康度:延迟、丢包、认证空窗共同决定 AGV 是否停摆 AGV MQTT Client Keepalive 30s Wi-Fi 漫游层 C9800 + AP 认证空窗: 280 ms MQTT Broker Topic Router Loss: 0.5% 调度系统 任务 · 避让 P99 延迟敏感 业务健康:稳定 当前链路仍可维持 MQTT 心跳与控制消息连续性。

WLC 到 ISE 完成一次认证往返所需时间。ISE CPU 高、I/O Wait、AD 查询慢都会放大它。

AGV 从旧 AP 切到新 AP 后,端口重新放行前业务流量被阻断的时间。

漫游边缘、同频干扰、多径反射或弱信号导致的重传与丢包压力。

当前判断:AGV 控制链路稳定

认证空窗较短,MQTT Keepalive 和调度消息大概率不会触发超时。

SLA OK
AGV 不怕信号弱,怕的是"说话说一半,被换台了"。
Chapter 02 · 现状解剖

为什么 OKC 看起来"没生效"?

用户的配置看起来很合理:开启 OKC、802.11k、802.11v,没有开 802.11r。理由也很标准——"照顾不支持 11r 的老旧终端"。可现实却是:每次漫游 ISE 都看到一条完整认证记录。OKC 仿佛没生效。问题出在哪里?我们先把 OKC 是什么,讲清楚。

2.1 OKC 是什么?

OKC(Opportunistic Key Caching,机会式密钥缓存)

当一个终端在 AP1 上完成了一次完整的 802.1X 认证,得到 PMK(Pairwise Master Key)。在 Cisco 主流的集中式转发(Central Switching)架构下,PMK 集中驻留在 WLC 的内存中——WLC 才是真正的 Authenticator,AP 只是透传空口报文的天线。当终端漫游到 AP2 并在 Reassoc 中上报匹配的 PMKID 时,WLC 在自身缓存中查到匹配项,直接代劳完成 4-Way Handshake,从而跳过 EAP 认证阶段

⚠ 关键概念区分(OKC vs 802.11r 的密钥物理分布):
  • OKC = 集中式缓存。在 Central Switching 架构下,PMK 始终留在 WLC 内存中,不向 AP 派发。漫游命中靠 WLC 在中央查 PMKID 缓存来实现。
  • 802.11r FT = 分布式派发。WLC(作为 R0KH)主动把次级密钥 PMK-R1 推送给各邻居 AP(R1KH)。正因 AP 本地提前持有密钥,FT 才能把握手嵌入 Auth / Reassoc 四帧,由 AP 本地光速放行。
  • FlexConnect Local Auth / Local Switching 是特殊场景,密钥缓存语义会有差异——具体行为以 Flex Profile 与 IOS-XE 版本配置指南为准。

类比:OKC 就像"集团公司的员工卡"

你第一次进总部要刷身份证+人脸识别(完整 802.1X 认证)。HR 把你登记后,员工档案集中保存在总部(PMK 缓存在 WLC)。等你下次去任何一家分公司(漫游到新 AP),分公司前台只是一个接待窗口——它把你的工卡号回传给总部 HR 系统,HR 在总部档案里一查就放行(WLC 在中央查 PMKID 缓存,代你完成 4-Way Handshake),不必再做一次身份证+人脸。
请注意:HR 档案事先复印到每个分公司——这是 OKC 与 11r 的根本区别。11r 才像是"事先把工卡副本快递到所有分公司前台"。

2.2 OKC 的"生效前提"——三个常被忽略的条件

OKC 是 非 IEEE 标准的"事实标准",由 Cisco/Aruba 等厂商各自实现。要让它真正工作,必须同时满足:

① WLC 端启用

C9800 上 OKC 默认开启(在 Policy Profile → Advanced → WPA2/3 配置中可见)。这一条用户已满足。

② 终端网卡支持 OKC 并主动声明

终端必须在 Reassociation 帧的 RSN IE 中携带正确的 PMKID
严格的协议公式是:
PMKID = Truncate-128( HMAC-SHA1( PMK, "PMK Name" || AA || SPA ) )
其中 AA 是目标 AP 的 BSSID(Authenticator Address),SPA 是终端自身 MAC(Supplicant Address)。
关键在于——OKC 的 PMKID 不是从已认证 AP 的 PMKSA 缓存里"拿",而是终端 wpa_supplicant 必须用初始 PMK + 目标 AP 的 BSSID + 自身 MAC 现场算出来。这就是 "Opportunistic(机会式)" 的真正含义:为一个从未真正握手过的 AP,主动预判 PMKID
这是 AGV 场景最容易翻车的地方。许多工业级无线模组即便标称"支持 OKC",其底层驱动也根本未实现"为未知 BSSID 主动哈希计算 PMKID"的代码逻辑——它们只会为已经完整认证过的 AP 携带 PMKID(这是标准 802.11i PMKSA 的最小语义),到了新 AP 上自然命中失败。需要按 AGV 上装的具体模组型号与驱动版本,逐一验证其在 Reassoc 帧中的实际行为。
诊断方法:在 Wireshark 中过滤 wlan.fc.type_subtype == 0x02 && wlan.rsn.ie.pmkid_count > 0(subtype 0x02 = Reassociation Request;如 Wireshark 版本不识别 pmkid_count 字段名,可改为 wlan.rsn.ie.pmkid.count),确认 Reassoc 帧是否真的带了 PMKID(详见附录 B)。

③ WLC 端持有相应的 PMK 缓存

同一 WLC 管理的 AP 之间漫游时,PMK 由 WLC 集中缓存——终端到任何 AP 上送 PMKID,WLC 都能本地命中。
跨 WLC 漫游则需要 Mobility Group 在控制器之间通过 Mobility Tunnel 同步 PMK 缓存,否则在新 WLC 上仍是 cache miss。
FlexConnect Local Switching / Local Auth 是特殊场景,需按 Flex Profile 显式启用相应缓存能力。

用户场景中"ISE 上有完整认证记录"——这是一个非常清晰的信号:OKC 没有真正发挥作用。最常见、也最需要优先验证的原因是条件 ② 没满足(PMKID absent);但仍需通过空口抓包与 WLC trace 进一步区分以下三种 cache-miss 情形:

2.3 当前漫游过程的时序解剖

来看一次"OKC 失效"状态下,AGV 漫游到底发生了什么——从决策、扫描,到完整 802.1X 认证,再到业务恢复:

AGV (Client) 原 AP (AP1) 新 AP (AP2) WLC ISE ① 漫游决策 + 信道扫描(10 ms ~ 2 s+) 客户端发现 RSSI < −70 dBm,自己决定漫游;遍历 5 GHz 25 个信道,DFS 信道仅能被动扫描 ≥102 ms/信道。 ① Authentication Request ② Authentication Response · State 2(Authenticated, Unassociated) ③ Reassociation Request ④ Reassociation Response(Success)· Associated;802.1X 受控端口仍未授权 受控端口挂起 → 触发 EAP-Req/Identity 完整 802.1X EAP-TLS 示例抓包约 21 条 RADIUS 往返 Identity / TLS Hello / Cert Key Exchange / Finished Access-Accept (+ MSK) 耗时:200 ms ~ 1 s+ ⚠ ISE 高延迟时可能 > 3 s 证书分片:建议 Framed-MTU 1300–1344 M1: ANonce M2: SNonce + MIC M3: EAPOL-Key(Install=1 + Ack=1 + MIC,下发 GTK,命令安装 PTK/GTK) M4: EAPOL-Key(Install=0 + MIC,确认 M3 已收并完成密钥安装,4-Way HS 共 20–50 ms) ✅ 业务恢复(MQTT 重连 / TCP 重传) 真实总耗时:300 ms ~ 3 s+,远超 AGV 50 ms 的容忍上限。

2.4 为什么这条路径"必然出事"?

把上面那张图压缩成一句话:每一次漫游,AGV 都把自己的"生死"押在了 ISE 的响应时间上。而 ISE 在大型园区中常常需要查询会计数据库、CRL/OCSP、Active Directory……任何一环延迟,都会被忠实地传递到 AGV 的网卡上,最终表现为一次 MQTT 中断。

❌ 现状路径(OKC 失效)

  • 每次漫游必走完整 EAP-TLS(示例约 21 条 RADIUS 往返)
  • ISE 是单点强依赖
  • 真实耗时 300 ms ~ 3 s+
  • DFS 扫描进一步拉长时间
  • 200 辆 AGV 同时漫游 → ISE 雪崩

✅ 目标路径(11r FT + AAA Cache)

  • 跳过 EAP,4-Way HS 折叠进 Reassoc
  • 对 ISE 解耦,本地完成密钥协商
  • 真实耗时 < 50 ms(最佳 < 10 ms)
  • 邻居列表(11k)+ BSS Transition(11v)减少扫描
  • ISE 抖动时本地缓存可继续放行
OKC 不是"配上就有",它要看终端是否真的"亮出员工卡"。
抓包不会撒谎——ISE 上有完整认证记录时,先用 PMKID absent / mismatch / WLC cache miss 三把尺子一起量。
Chapter 03 · 协议解药

802.11k / v / r 与 Adaptive FT

"漫游慢"这件事,802.11 标准早就给出了药方。只是这三剂药——k、v、r——分工不同、作用不同,常常被混为一谈。我们用一个统一的类比把它们说清楚。

类比:把 AGV 漫游想成"一辆出租车换调度站"

  • 802.11k = 当前调度站递给司机一份"周边站点地图"——你下次去哪个站,开几度的方向,离多远?省去满世界找站点的力气。
  • 802.11v = 调度站主动给司机发短信:"前面那条路太堵,建议你去 B 站"。司机不用自己猜。
  • 802.11r = 司机的"通行证"在所有调度站之间共享——换站时不再重新办证,开过去直接放行

3.1 802.11k:邻居报告(Neighbor Report)

802.11k Neighbor Report

客户端可以向当前 AP 请求一份"同 SSID 的邻居 AP 列表",包含 BSSID、信道、PHY、信号强度等。客户端拿到这份列表后,只扫描列表中的 2–3 个信道,而不是傻乎乎遍历全部 25 个 5 GHz 信道。

效果:5 GHz 全频段扫描可达 2 秒+;启用 11k 后可压缩到 30 ms——10–60 倍的提速,而且彻底回避了 DFS 信道被动扫描的耗时陷阱。

3.2 802.11v:BSS 过渡管理(BTM)

802.11v BSS Transition Management

AP/WLC 可以向客户端主动发起一个"建议漫游"的请求(BTM Request),告诉客户端:"去 BSSID 为 xx:xx 的 AP 吧"。客户端在收到 BTM 后评估并响应是否漫游,而不必傻等到 RSSI 跌到 −80 dBm 才反应。
但请注意:BTM 本质是 advisory(建议性)协议——客户端完全有权回复 BTM Response (Status: Reject) 继续粘在原 AP 上。只有当 BTM Request 携带 Disassociation Imminent 标志位时(C9800 上可显式开启),它才具备"礼貌而坚定"的强制驱逐效力——告诉客户端:再不走,AP 就要主动断开你了。

11v 解决了一个老顽疾——"粘性客户端"。许多终端会一直死磕原 AP 不肯走,哪怕信号已经差到无法承载业务。BTM 是 WLC 的"礼貌建议"机制;要让它对 AGV 这种顽固终端真正起作用,务必启用 Disassociation Imminent,否则会出现"开了 11v、AGV 还是粘性不走"的常见困惑。

📌 BTM 触发边界——常见误区澄清:BTM Request 是否被 C9800 主动发出,取决于一组触发条件(如负载均衡判断、邻居 AP 状况、管理员动作等),不是开了 11v 就会自动发送。请按当前 IOS-XE 版本配置指南确认 BTM 触发策略,并配合 11k Neighbor Report 让客户端能"主动问邻居"——后者是 Cisco 推荐的稳健路径。
注意:Cisco C9800 Best Practices 明确建议不要启用 "Optimized Roaming"——它会基于 RSSI/数据率主动 deauth 客户端,对 AGV 等交互式实时业务有害。

3.3 802.11r:快速 BSS 切换(FT)—— 真正的"零等待"

802.11r Fast BSS Transition

11r 引入了 三层密钥层级:MSK → PMK-R0(存在 WLC,即 R0KH)→ PMK-R1(预派发到每个 AP,即 R1KH)→ PTK。
漫游时,4-Way Handshake 的密钥推导被折叠进 FT Authentication 与 Reassociation 两次往返(共 4 帧)中——也就是说,"换 AP"和"换钥匙"在 Auth Req/Resp + Reassoc Req/Resp 这 4 帧管理报文内全部完成。具体的密钥推导依托分布在这 4 帧中的 FT IE 字段与 Nonce(ANonce/SNonce)完成。

漫游方式跳过 EAP跳过独立 EAPOL 4-Way HS典型耗时标准AGV 可用?
完整 802.1X300 ms – 3 s+802.1X
PMKID Caching50–100 ms802.11i⚠️ 临界
OKC50–100 ms非 IEEE(事实标准)⚠️ 取决于终端
802.11r FT< 50 ms(最佳 < 10 ms)802.11r✅✅

3.4 用户的真正顾虑:“老终端不支持 11r 怎么办?”

这是当年 Cisco 决定不默认启用 11r 的根本原因——启用 11r 后,原本的 RSN AKM 会出现新的 AKM 套件(FT-802.1X)。某些老网卡识别到陌生 AKM 后会直接拒绝关联,整个 SSID "全军覆没"。

方案 A:标准 802.11r Mixed Mode(推荐)

在 C9800 上,FT 可以以 Mixed Mode 启用:WLAN 同时广播 AKM=802.1XAKM=FT-802.1X支持 11r 的终端走 FT,不支持的终端理论上回退到普通 802.1X但"理论可回退"不等于"全部兼容"——某些老旧 supplicant 看到未知 AKM 仍可能异常,必须逐型号验证

! C9800 配置片段 — 两种 AKM 配置变体,按目标 SSID 安全等级选其一

! ① WPA2-Enterprise + 11r Mixed Mode(当前主流过渡形态,AKM 1 + AKM 3)
wlan AGV-WLAN 10 AGV-SSID
 security wpa akm dot1x                ! WPA2-Enterprise(AKM 1)
 security wpa akm ft dot1x             ! FT over 802.1X(AKM 3)
 security ft
 security ft
 no shutdown

! ② WPA3-Enterprise + 11r(面向 6 GHz / Wi-Fi 6E/7,AKM 5 + AKM 13)
wlan AGV-WLAN-WPA3 11 AGV-SSID-WPA3
 security wpa akm dot1x-sha256         ! WPA3-Enterprise(AKM 5)
 security wpa akm ft dot1x-sha256      ! FT over 802.1X SHA-256(AKM 13)
 security ft
 security pmf mandatory                ! WPA3 强制 PMF
 no shutdown
AKM 套件选择说明:
• 现网 WPA2 SSID 升级第一步只引入 FT-802.1X (AKM 3),保持向下兼容;
• 上 WPA3 / 6 GHz / Wi-Fi 7 必须改用 SHA-256 系列 AKM(5 + 13)并强制 PMF;
不要把 WPA2 AKM 与 WPA3 AKM 写在同一 SSID 上——架构清晰胜过省一个 SSID。

方案 B:Adaptive 802.11r(曾经的妥协方案,今天不建议

Cisco 早年和 Apple/Samsung 联合搞了 Adaptive FT:在 Beacon 的 RSN IE 中隐藏 FT AKM,仅通过 MDIE(Mobility Domain IE)做外部标记。iOS 10+ 和 Samsung S10+ 通过私有握手感知并启用 FT;老终端则完全察觉不到,依然走普通 802.1X。这看起来是完美解决方案。

⚠ 重要更新(请清空老旧资料): Adaptive 11r 不支持 WPA3。而 Wi-Fi 6E / Wi-Fi 7(6 GHz、MLO)强制要求 WPA3 + PMF(802.11w)

但请注意——WPA3-Enterprise 本身强制的是 PMF,并未强制要求 802.11r FT。准确的合规边界是:
  • WPA3-Enterprise 认证:强制 PMF;不强制 11r。
  • Wi-Fi Alliance MBO:强制 11k + 11v;不强制 11r。
  • Wi-Fi Alliance OCE(Optimized Connectivity Experience):将 802.11r FT 作为强制项之一。
所以严谨的表述是——802.11r 是 IEEE 标准化、WFA OCE 强制、WPA3/6 GHz 高安全架构下唯一被标准化推荐的快速漫游机制;OKC 作为非 IEEE 的事实协议,在强制 PMF 的 WPA3 网络中容易出加密兼容性断裂。

因此 Cisco 当前的明确建议是:放弃 Adaptive FT,转向标准 11r Mixed Mode;面向 WPA3 演进时使用 SHA-256 系列 AKM(见上方 ② 号配置)。

3.5 三剂药一起吃,效果如何?

0 ms 3000 ms 完整 802.1X 300 ms – 3 s+(含扫描 + 完整 EAP + 4WHS) OKC(生效) 50 – 100 ms(仍有 4WHS) 802.11r FT < 50 ms 11r + 11k + 11v < 10 ms(最佳) 不同漫游方式的真实耗时对比 数据来源:实验抓包与厂商公开实测数据

3.6 Cisco WLC 9800 的"自适应"机制

除了 Mixed Mode,C9800 还有几个常被忽略的"自适应"开关,配合 11r 一起使用效果最佳:

3.7 务实路径:能不能"先 OKC 止血,再 11r 收敛"?

有运维负责人问过一个非常合理的问题——11r Mixed Mode 涉及 WLC AKM 改造与全终端兼容性验证,周期长;如果 AGV 模组只是没在 Reassoc 中携带 PMKID,能不能先把它"配开",让 OKC 真正生效?这样能不能阶段性达标?

答案是:可以——但必须先做严肃的可行性判断,不能盲目承诺周期。原因来自上一节揭示的协议事实:OKC 的 PMKID 不是从缓存"读"出来的,而是 supplicant 必须用 HMAC-SHA1-128从未握手过的目标 AP 主动哈希计算。这意味着——不是所有终端都能靠"打开一个配置开关"启用 OKC,关键看 supplicant 代码本身是否实现了这套预测逻辑

A-1 三场景可行性判断

在排期前,请先对自己的 AGV 车队做下面的"分类登记"——三种场景下的 A-1 可行性差异极大:

场景 典型 AGV / 模组特征 OKC 可行性 实际落地周期 关键动作
① 理想 AGV 跑 Linux + 主线 wpa_supplicant(如基于 x86 工控机的 AMR、KUKA KMR、MiR 系列) ✅ HIGH 1–2 周 wpa_supplicant.conf(详见附录 A.4)→ 现场抓包验证 → 全量推广
② 常见 AGV 用厂商定制 supplicant 或嵌入式 Wi-Fi 协议栈(如部分国产 AGV OEM 自研模组、Silex / Laird 模组运行厂商 firmware) ⚠ MEDIUM 4–12 周 向厂商提工单,要求 firmware 增加"为未知 BSSID 主动计算 PMKID"能力;同步推进 A-2
③ 受限 老旧 Broadcom / Marvell 模组 + 厂商已不提供更新,或自研 RTOS 协议栈无 OKC 实现 ❌ LOW 不可行 放弃 A-1;优先评估模组更换或直接走 A-2(11r 兼容性同样需测)

OKC vs 11r:完整能力对比

对比维度 OKC 启用(A-1 即时止血) 802.11r Mixed Mode(A-2 标准化收敛)
典型漫游耗时典型 50–100 ms(临界但可用;非 SLA 保证)典型 < 10 ms(充裕)
跳过 EAP
跳过独立 EAPOL 4-Way HS❌(仍保留)✅(密钥确认嵌入 Auth+Reassoc 4 帧)
关键前提supplicant 必须实现 PMKID 主动哈希——很多 vendor 模组未实现WLC 配置 + 终端支持 FT AKM(需逐型号验证)
改动面仅 AGV 侧 supplicant 配置 + 可能需 vendor firmware 更新WLC WLAN AKM 改造 + 全终端验证
对其他终端影响无(其他终端零感知)需逐型号验证回退到普通 802.1X 正常
落地周期视场景:1–2 周(理想)至 4–12 周(依赖 vendor)1–2 个月
面向 WPA3 / Wi-Fi 6E/7⚠ 受限(与 PMF 边界存在加密兼容性风险)WFA OCE 强制、WPA3 高安全架构下唯一被标准化推荐的快速漫游路径
对 ISE 抖动的解耦✅ 命中时不打 ISE(仅过期 PMK 才打)✅ 彻底
定位路径 A-1(Day-1 止血,条件性路径 A-2(标准化终点,战略方向
务实建议(先验后承诺):
  1. 第 1 周:抽样 1–2 台 AGV 用附录 B 的方法抓包,确认当前 Reassoc 中是否携带 PMKID——同时判定您属于场景 ① / ② / ③ 中的哪一种
  2. 场景 ① 走 A-1 快速路径:改 supplicant 配置 → 再抓包验证 PMKID Count ≥ 1 → 1–2 周内全量推广。
  3. 场景 ② / ③ 直接启动 A-2:不要把宝压在 vendor 短期内能给你新固件上;A-2(11r Mixed Mode)的工作量是确定性的、可控的,比等待 vendor 更可靠。
  4. 无论哪种场景:A-2 都是战略终点,A-1 只是"赚到的时间"。Wi-Fi 6E/7 上路时,没有 A-2 您依然要补课。
11k 让你知道“往哪走”,11v 让 AP 告诉你“什么时候走”,11r 让你“走得不用重新办证”。
三剂药一起吃,漫游从 3 秒变成 10 毫秒。
Chapter 04 · 解耦 ISE 依赖

AAA Cache:给 ISE 一个"喘息"的机会

即便 11r 把"漫游本身"压到了 10 ms,仍有一类场景会强制把请求送到 ISE——比如终端重启、PMK 老化、Session-Timeout 到期、跨 Mobility Group 漫游。这时 ISE 一旦抖动,AGV 还是会断。能不能让 WLC "短暂代替 ISE 做决定"?这就是 AAA Cache 的价值。

4.1 第一性原理:ISE 真正不可替代的是什么?

ISE 在 802.1X 流程中干了两件事:

  1. 身份判定:你是不是合法证书?CN/SAN 是否匹配?吊销了吗?(一次性的“开门动作”)
  2. 授权决策:你应该进哪个 VLAN?拿什么 dACL?SGT 多少?(基于策略的“分配动作”)

这两件事,对于"5 分钟前刚刚通过的同一台 AGV",其实结果不会变。那为什么每次都要再问一次 ISE?因为传统设计把"判定权"完全外包了。AAA Cache 的思路是:WLC 本地缓存这个判定结果,在 ISE 不可达或慢响应时直接复用

类比:AAA Cache 就像门禁的"离线模式"

正常情况下,门禁刷卡都向云端验证。如果云端宕机,门禁不应该让全公司员工被关在门外——它会启用"离线模式",凭本地最近 24 小时的授权缓存放行已知员工。AAA Cache 之于 WLC,就是这套离线模式。

4.2 C9800 上的 AAA Cache 工作机制

📌 重要边界说明:该特性官方全称为 AAA Authentication Survivability Cache for Wireless——关键词是 Survivability(韧性)。它不是常态绕过 ISE 的捷径,而是当 AAA 服务器不可达、响应超时或被标记 dead 时,让 WLC 凭本地缓存的认证/授权结果,为已认证过的已知终端延续准入。
正常情况下,请求仍优先走 ISE;进入 Survivability 模式是兜底,不是默认路径。

① 缓存写入

当 ISE 成功响应一次 Access-Accept,WLC 把 用户名 / 证书标识、AuthZ 属性(VLAN/ACL/SGT)等结果写入本地 AAA 缓存,并打上 TTL。
注:具体缓存哪些字段(是否包含密钥材料)随 IOS-XE 版本演进,请以 17.18.x 配置指南为准。

② Survivability 命中条件

当 ISE 标记为 DEAD(RADIUS 探测连续失败)、响应超时或满足配置的 survivability 触发条件时,WLC 不再阻塞等待,对已缓存的已知终端基于本地结果放行
正常 ISE 可用时,请求仍优先走 ISE——这是 Survivability,不是 bypass。

③ 未缓存终端的兜底策略

对于未缓存的新终端(cache miss),WLC 按 Wireless Policy Profile 中预设的 AAA-failure 行为决定放行 / 丢弃 / 落到 Critical VLAN——避免新车队首次接入因 ISE 不可达而集体阻塞。具体策略名称与配置项随 IOS-XE 版本而异,请以 17.18.x Policy Profile 配置指南为准。
注意:C9800 上不要使用有线交换机的 dot1x critical eapol 指令——那是 Catalyst 交换机 IBNS 的语法,在 WLC 上无效。

④ ISE 恢复后同步

ISE 恢复后,WLC 在下一个 Re-Auth 周期把会话状态同步回去,保证审计连续性。

4.3 一张图看懂 AAA Cache 的"挡箭"效果

① 无 Survivability:ISE 高延迟时认证阻塞 AGV C9800 WLC ISE(高延迟) RADIUS(被 ISE 延迟拖累) ⏱ 认证空窗:800 ms – 3 s ② Survivability 模式:ISE 不可达时 WLC 本地放行已知终端 AGV C9800 WLC + Survivability Cache 📦 缓存:认证结果 + AuthZ 属性 ISE(不可达/超时) ISE 恢复后再同步 ⏱ ISE 异常期间:本地放行已知终端,避免认证空窗扩大 前提:终端曾成功认证过一次;缓存 TTL 未过期;触发 survivability 条件(ISE dead / timeout)。

4.4 配置要点(C9800,IOS-XE 17.18.1+)

下面给出与 IOS-XE 17.18.x 官方 Configuration Guide 一致的 Wireless AAA Authentication Survivability Cache 配置骨架。整套配置分 6 步,全部在 WLC 全局/server-group/wlan 层级,不要误用任何 Catalyst 交换机有线 IBNS 的 dot1x critical eapol / authentication critical recovery 指令——那些命令在 C9800 上会直接报 Invalid input detected

! ========================================================
! Wireless AAA Authentication Survivability Cache —— C9800
! 参考:Cisco Catalyst 9800 17.18.x Config Guide
!       "Wireless AAA Authentication Survivability Cache"
! ========================================================

! 1) 配置 RADIUS server(指向 ISE PSN)
radius server ISE-PSN-1
 address ipv4 10.x.x.x auth-port 1812 acct-port 1813
 key <your-shared-secret>

! 2) 配置 AAA cache profile("all" = 缓存全部 AVP)
aaa cache profile AGV-CACHE
 all

! 3) RADIUS server group:绑定 server + cache profile + 过期时间
aaa group server radius AGV-RADIUS
 server name ISE-PSN-1
 cache authentication profile AGV-CACHE
 cache authorization profile AGV-CACHE
 cache expiry 24                      ! 单位:小时;0 = 不过期
 !  ⚠ 注:一个 AAA group 只能绑一个 AAA cache profile

! 4) 配置 Local EAP Profile(用于 EAP-TLS 本地兜底)
eap profile AGV-EAP
 method tls
 pki-trustpoint AGV-WLC-TP            ! 必须同时含 WLC 服务器证书 + CA 链

! 5) WLAN:启用 local-auth,关联认证/授权列表
wlan AGV-WLAN 10 AGV-SSID
 local-auth AGV-EAP
 security dot1x authentication-list default
 security dot1x authorization-list default
 no shutdown

! 6) AAA Dead-Server Detection(让 WLC 快速判定 ISE 不可达,触发 survivability 命中)
radius-server dead-criteria time 5 tries 3
radius-server deadtime 5              ! 单位:分钟(对应 Cisco C9800 Best Practices 推荐值)
⚠ 版本前提(请重点确认): Wireless AAA Authentication Survivability Cache 是从 IOS-XE 17.18.1 才开始支持的特性——17.15.x 及更早版本不具备该能力。如果您当前还在 17.15.5(C9800 通用 TAC 推荐版本),必须先升级到 17.18.1 或更高才能启用本章描述的"挡箭"效果。

推荐目标版本:17.18.3——这是 17.18 训练线的当前 TAC 推荐版本,包含 AAA Cache 特性 + Wi-Fi 7 支持 + 最新稳定性修复。
参考:Cisco TAC Recommended IOS-XE Builds for Wireless(Doc-ID 214749)。
📌 关于 "Critical VLAN"(ISE 不可达且 cache 未命中时的新终端兜底):C9800 上对 ISE 不可达时未缓存终端的处理(例如丢入 Critical VLAN),是配置在 Wireless Policy Profile 内的,能使用有线交换机的 dot1x critical eapol 命令。具体语法因 IOS-XE 版本而异,请按 17.18.x Configuration Guide 中 Policy Profile 章节中的 critical / AAA failure 相关配置项实施——本文不展开示例,避免误导。

4.5 EAP-TLS 场景的隐藏前提:Local EAP Profile + Trustpoint

📌 边界定位:Cisco C9800 Best Practices 明确建议 "Using local EAP in an enterprise production environment is not recommended for scalability reasons"——Local EAP 不应作为 AGV 的主认证路径。本节描述的用法是 Survivability 兜底:日常仍由 ISE 完成认证;只有当 ISE 不可达时,AAA Cache + Local EAP 才接管。请勿用 Local EAP 替代 ISE 的常态认证。

这是一个极易被忽略但非常关键的技术细节:对于 EAP-TLS 这种"安全 EAP 类型",AAA Cache 不能像 PAP/CHAP 那样简单地"把 Access-Accept 复制一遍"。原因是——EAP-TLS 是双向证书认证(Mutual Authentication)的有状态握手,必须有一方真正具备处理 TLS 双向认证的能力。

因此,当 ISE 不可达、WLC 要用本地缓存放行 AGV 时,C9800 自己必须具备:

  1. Local EAP Profile:声明本地能跑 EAP-TLS 方法
  2. PKI Trustpoint(CA 证书链):持有签发 AGV 客户端证书的 CA 链,能验证 AGV 上送的客户端证书
  3. WLC 自身的 Identity Certificate(服务器证书)这一条最容易被遗漏——EAP-TLS 是双向认证,AGV 在 TLS ClientHello 之后会收到 WLC 的 ServerHello + Certificate,必须能用本机信任的 CA 链验证。如果 WLC 上只配了验证 client 用的 CA、没有自己的服务器证书,AGV 的 wpa_supplicant 会在 ServerHello 阶段直接抛 Unknown CABad Certificate,单方面撕毁 TLS 隧道

类比:缓存"门禁记录"不够,门禁机自己也得"亮工牌"

云端门禁宕机时,本地门禁机要能放行常客——但它必须自己也装着身份证识别芯片(验客户证书的 CA 链),并且自己也戴着可信工牌(自身的服务器证书),不然访客(AGV)连"你是谁"都不信,根本不会把证件递给你。Local EAP + 双向证书 + Trustpoint 三者缺一不可。

! 此处只展示 §4.4 中第 4 步绑定的 Trustpoint 与 EAP Profile 细节,
! 完整 WLAN 配置请回到 §4.4。

! 1) Trustpoint:装载 WLC 自身的服务器证书 + 信任的 CA 链
crypto pki trustpoint AGV-WLC-TP
 enrollment terminal
 revocation-check none
 ! 该 Trustpoint 必须同时包含:
 !   (a) WLC 自身的 Identity Certificate(私钥 + 服务器证书)
 !   (b) 能验证 AGV 客户端证书的 Root/Sub CA 链
 ! AGV 端的 supplicant 必须信任 (a) 所在 CA

! 2) Local EAP Profile(与 §4.4 步骤 4 一致,方法为 TLS)
eap profile AGV-EAP
 method tls
 pki-trustpoint AGV-WLC-TP
验证要点:启用后可通过 C9800 的 AAA Cache 诊断命令(如 show aaa cache group <group-name>,具体命令以您部署的 IOS-XE 版本配置指南为准)查看缓存条目。
常见排障盲点:如果 ISE 不可达时 AGV 仍然认证失败,多数原因是 Trustpoint 中缺少 WLC 自身的服务器证书——可在 AGV 端抓包,若看到 TLS Alert Unknown CA (48)Bad Certificate (42),即为此问题。

4.6 AAA Cache 与 11r 的协同

这两个特性互补,不冲突:

802.11r:解决"快速漫游"

  • 独立 EAPOL 4-Way HS 不再需要——密钥确认嵌入 Auth+Reassoc 共 4 帧
  • 压缩漫游时间到 < 10 ms
  • 前提:PMK-R1 已在目标 AP 上

AAA Cache:解决"ISE 抖动 / 不可达"

  • 当 ISE 慢响应、超时或被标记 dead 时触发
  • WLC 凭本地 survivability 缓存放行已知终端
  • 前提:终端曾通过 ISE 一次;正常情况下仍优先走 ISE
11r 让漫游"几乎不发生认证";AAA Cache 让 ISE 异常时"已知终端不被一刀切"。
这是“韧性双保险”,不是“常态绕过 ISE”。
Chapter 05 · 终极方案

Cisco URWB:当 Wi-Fi 漫游不够好时

Wi-Fi 标准的漫游优化做到极致,仍然是"断开旧 AP → 协商新 AP → 重新建立加密链路"的逻辑——这是 802.11 协议骨子里的"Break-Before-Make",无论 11r/11k/11v 怎么优化,本质上无法做到"完全零中断"。对于高速 AGV、AMR、自动驾驶矿车、列车 CBTC 这类应用,毫秒级中断也不可接受。这是 Cisco URWB 的用武之地。

5.1 URWB 是什么?

Cisco URWB(Ultra-Reliable Wireless Backhaul)

Cisco 在 2020 年收购 Fluidmesh 之后,将其专有无线技术整合进 Catalyst IW 系列工业 AP(如 IW9165 / IW9167)中。URWB 是一种基于 Wi-Fi 物理层、但替换了标准 802.11 MAC 与漫游协议的工业级无线方案。它的目标是:在高速移动场景下提供接近确定性的低时延无线承载、极低丢包率、毫秒级切换体验

类比:Wi-Fi 是出租车,URWB 是地铁

Wi-Fi 漫游就像出租车换乘:你下车、走过去、上另一辆车,中间总有几秒空档。URWB 则像地铁换乘——新车厢已经在前面接住你了,你只需要走两步。乘客感受不到任何中断,因为列车的轨道(隧道)从未断过。

5.2 URWB 与 Wi-Fi 的"同"与"异"

维度标准 Wi-Fi(802.11)Cisco URWB
物理层(PHY)802.11n/ac/ax/be,OFDM同样基于 802.11 PHY(复用现成硬件)
MAC 层CSMA/CA + DCF/EDCA(随机退避)专有 MAC + TDMA-like 时隙(确定性)
漫游模型Break-Before-Make(先断后建)Make-Before-Break(先建后断)
密钥协商每次漫游做独立 4-Way HS 或 FT不走标准 802.11 漫游 4-Way HS,移动切换过程中无需重新协商密钥
转发面Ethernet/CAPWAP,L2/L3 各自处理MPLS Overlay(L2 透传)
典型切换时间11r 最佳 < 10 ms典型 < 5 ms,且业务无感
典型抖动10–50 ms毫秒级
移动速度上限~40 km/h支持高速移动(CBTC / 高铁场景实测可达数百 km/h)
认证依赖ISE/AAA(每次或缓存)本地 PSK 或证书,移动切换不依赖外部 AAA

5.3 URWB 的四大核心技术

① Underlay:MPLS over Wireless

URWB 网络底层是一张 MPLS(多协议标签交换)网络,运行在 AP 间的无线/有线链路上。每个 AP 既是无线基础设施,也是 MPLS LSR(标签交换路由器)。客户端的报文进入 URWB 网络的瞬间,被打上 MPLS 标签,在 AP 之间按标签转发,到达出口 AP 再剥离。

这意味着什么?对客户端而言,整个 URWB 网络呈现为一个巨大的 L2 交换机——它走过 100 个 AP,IP 地址、ARP 表、TCP/MQTT 会话全部不变

② Overlay:L2 透传隧道

在 MPLS Underlay 之上,URWB 建立 VPLS/L2 隧道(Overlay),把每一个客户端的数据帧端到端透传。无论 AGV 漫游到哪一个 AP,它的 L2 帧总是被"装进同一根管道"送回汇聚点——VLAN、ARP、广播域完全保留

③ Make-Before-Break(MBB):先建后断

这是 URWB 最核心的差异化能力。客户端在切换时:

1. 信号下降前主动扫描

客户端持续监测周边 AP 的 RSSI,未达到阈值前就开始评估候选 AP。

2. 与新 AP 预先建立链路

在不影响当前业务的前提下,与目标 AP 完成 PHY 同步、密钥就绪——但暂不切换数据流

3. Overlay 暂时维持两条路径

过渡期内来自调度系统的下行报文可通过两条路径同时送达,最大限度规避切换瞬间的丢包。

4. 确认新链路稳定后断开旧链路

整个过程对上层 MQTT/TCP 业务近乎无感——以极低丢包、极少重传、毫秒级中断为目标。

④ MPO(Multipath Operation):多径冗余

对于关键任务场景(如有轨车辆、自动化采矿),URWB 还可以让客户端同时连接多个 AP 并行收发同一份数据——这就是 MPO。即便某一条无线链路瞬时遭遇干扰或 RF 阴影,另一条仍能保证报文送达。MPO 把"可靠性"从概率上升为结构性保证

⚠ 资料更新提示:许多旧版 Fluidmesh 资料还在使用 "Prodigy"、"MPLS-TP" 等术语。Cisco 整合后统一品牌为 URWB,并归入 Cisco Catalyst IW 工业无线产品线。具体管理方式(独立 URWB 控制器、IW Service / IoT Operations Dashboard、或与 Wireless 体系的统一管理路线)会随 AP 型号、IOS-XE 版本与产品 roadmap 演进——请以当前 Cisco 官方产品文档与版本说明为准。本文以整合后的术语为主。

5.4 URWB 在 AGV 场景下的定位

URWB 不是 Wi-Fi 的替代品,而是对"标准 Wi-Fi 力所不及的场景"的补充。更成熟的架构思维是分层承载——根据业务的 SLA 等级,让不同业务跑在最适合它的无线技术上。

不是一种无线覆盖所有业务,而是按 SLA 分层承载 办公与访客终端 手机 · 笔记本 · 平板 Enterprise Wi-Fi 关注:容量、漫游体验、安全接入 建议:Wi-Fi 6/7 + WPA3 + 11k/v/r SLA 等级:一般 普通 OT 移动终端 扫码枪 · 工业平板 · HMI Optimized Wi-Fi 关注:稳定漫游、ISE 认证韧性 建议:11k/v/r + AAA Cache + ISE 优化 SLA 等级:较高 关键移动资产 AGV · AMR · 机器人 · 车辆 Cisco URWB 关注:低时延、低抖动、无感移动 建议:Overlay + MBB + MPO SLA 等级:确定性 原则:用 Wi-Fi 承载通用接入,用 URWB 承载关键移动控制;让无线架构服务业务 SLA。

它的部署成本(专用 AP、专用控制器)显著高于普通 Wi-Fi,但带来的"零中断"价值,在以下场景无可替代:

🚊 有轨车辆 / CBTC

地铁、轻轨、隧道——速度高、可靠性要求 SIL-4 级,URWB 是事实标准。

🚜 自动化采矿 / 港口

无人卡车、无人吊车——金属遮蔽严重,MPO 多径成为生命线。

🏭 关键 AGV / AMR

高速、密集车队,对 ISE/Wi-Fi 解耦有刚需的产线核心区域。

Wi-Fi 在不断逼近“不掉线”的极限;URWB 直接重写了“掉线”的定义——它根本不允许这件事发生
Chapter 06 · 亲手体验

互动演示:Make-Before-Break 的真实体感

道理讲得再多,不如自己动手拖一下。下面是一个 URWB MBB 漫游的交互示意图——你可以用鼠标或手指拖动那辆 AGV 从 A 端走到 B 端,观察它如何在 Mobility Base A 与 Base B 之间无缝切换。重点关注过渡区域:在那一刻,两条链路同时存在,这就是 Make-Before-Break。

Cisco URWB — Make-Before-Break 漫游示意(左右拖动 AGV) WLC / Coordinator 📡 Mobility Base A 📡 Mobility Base B A RSSI: −38 dBm B RSSI: −78 dBm A 端 B 端 A Zone Scan Handoff Scan B Zone 🚗 AGV STATE: A_STABLE AGV 稳定连接 Base A — 拖动 AGV 观察 MBB 切换过程 底层 MPLS Overlay — L2 隧道保持无缝切换
当前主链路(active) 后台扫描(scanning) 新建立链路(handoff) 旧链路拆除(teardown)

6.1 你刚刚看到了什么?

当 AGV 进入 Handoff 区域(约 400 像素附近),两条链路同时存在——这就是 MBB 的精髓。底部的"MPLS Overlay"标签提示你:尽管无线链路在切换,上层 L2 隧道始终保持,客户端的 IP、ARP、TCP 会话完全不变

6.2 同样的动作,传统 Wi-Fi 会怎么演?

❌ 传统 Wi-Fi 漫游

  • 到达 RSSI 阈值 → 断开 Base A
  • 客户端开始扫描 5 GHz 信道(10 ms – 2 s)
  • 找到 Base B → 发起 802.1X 完整认证
  • ISE 响应 → 4-Way HS → 业务恢复
  • 整个过程中没有任何链路可用,MQTT 重连/丢包

✅ URWB Make-Before-Break

  • 提前探测 Base B(不影响 Base A)
  • 预先与 Base B 建链(暂不切流)
  • 两条路径短暂并存,下行可双发
  • 确认稳定后才断开 Base A
  • MQTT 业务近乎无感、极低丢包
看图胜过看公式。当你拖动 AGV 经过 Handoff 区域,你就理解了“为什么 URWB 能做到 Wi-Fi 做不到的事”。
Chapter 07 · 回归根因

ISE 分角色部署:把 MNT 从 PSN 中"独立出去"

Ch5 / Ch6 我们展示了 URWB 这条"换维打击"——但它是另辟蹊径,不是釜底抽薪。无论你是否上 URWB,ISE 自身仍是 AGV 准入路径上的关键单点。前面我们一直在说"让 AGV 不要太依赖 ISE"——本章我们直面 ISE 本身:它为什么会高延迟?根因找到了,整个系统才稳。这是回归本源的一章,也是与 Ch4 AAA Cache 形成"标本兼治"闭环的最后一块拼图。

7.1 ISE 的三种"人格":PAN、PSN、MNT

很多人把 ISE 当成一个黑盒——"一个认证服务器"。其实 ISE 内部由三种"角色(Persona)"组成,可以合一也可以分开:

PAN — Policy Administration Node

策略大脑。负责管理员配置、策略下发、证书签发。在整个部署中通常主备各一,不直接处理认证请求。

PSN — Policy Service Node

认证一线工人。真正处理 RADIUS/TACACS+ 请求,跑 EAP-TLS、查 AD/LDAP、执行策略——AGV 的认证就打在它身上。

MNT — Monitoring & Troubleshooting Node

记账与日志。接收所有 Accounting 报文、Live Logs、Session 历史,写入大型 SQL 数据库供查询、报表和取证。

7.2 根因剖析:MNT 是怎么把 PSN "拖下水"的?

当 PSN 和 MNT 合并部署(典型小型部署)时,一台 ISE 节点同时承担:

  1. 实时认证:每条认证必须 100 ms 内响应(PSN 工作)
  2. 海量记账写入:每分钟数千条 Accounting Start/Update/Stop(MNT 工作)
  3. SQL 查询:管理员/审计员的 Live Logs、报表查询(MNT 工作)

问题出在 ②③——MNT 的数据库写入和复杂 SQL 查询,会推高磁盘 I/O Wait 与 CPU 占用。当车间里 200 辆 AGV 同时漫游 + 班次报表查询同时发起,MNT 的数据库锁与 I/O Wait 拖累整台 ISE 的 CPU——PSN 排队,RADIUS 响应延迟,AGV 被"卡"在认证里。

类比:MNT 拖累 PSN,就像"急诊医生兼职写病历"

医院里如果让急诊医生(PSN)同时负责整理半年内所有病人的病历归档(MNT)——病历查询一忙起来,急诊队伍就开始排队。解决之道很简单:把病历归档外包给档案室专员,急诊医生只管救人。

7.3 解决方案:MNT 与 PSN 物理分离

① 合并部署(当前问题源) WLC ISE 节点(PSN+MNT 合并) PSN:RADIUS / EAP-TLS MNT:Accounting + SQL ❶ 大量 Accounting 写入 ❷ Live Logs 复杂 SQL Query ❸ DB Lock / High I/O Wait ❹ CPU 占满 → RADIUS 队列阻塞 → AGV 认证超时 → 大量停摆 RADIUS(被拖慢) ② 角色分离部署(推荐) WLC PSN(专职) 高优先级 · 单职 MNT(专职) DB / Logs 独立硬件 RADIUS(快速通道) Syslog 异步推送 Accounting ✓ PSN 不再被 DB 拖累 ✓ Live Logs 查询独立资源 ✓ MNT 可独立扩展,按需升级硬件 → 高并发漫游下 RADIUS 响应稳定

7.4 分离部署的工程参考

Cisco 官方建议中型以上部署使用 "分布式部署(Distributed Deployment)"

规模建议拓扑典型节点
小型(< 5k 端点) PAN+MNT+PSN 合一,主备 2 节点 2 × ISE
中型(5k – 50k 端点,AGV 场景) PAN+MNT 合一,PSN 独立 × 2~N 2 × PAN/MNT + 2~N × PSN
大型(> 50k 端点) PAN、MNT、PSN 全部独立 2 × PAN + 2 × MNT + N × PSN

7.5 配套优化措施

7.6 从 WLC / NAD 侧减少"日志洪水"(Turn Down the Firehose)

Cisco 在 ISE 最佳实践中反复强调一句话——"Turn Down the Firehose":认证系统不该被错误的定时器、过度的重试、过量的 Interim Accounting 与无意义的探针淹没。对 AGV 场景而言,必须从无线控制器与 NAD(Network Access Device)侧一起治理。

优化项 推荐做法 为什么有用 AGV 场景收益
RADIUS Server 数量 WLC 上配置 ≤ 3 个 RADIUS Server;更多通过 LB 过多 Server + 多次重试会造成级联延迟 避免 AGV 认证在多个不可达 PSN 间长时间等待
Deadtime 设为 5 分钟(Cisco C9800 Best Practices 推荐值) 坏 PSN 被标记后不要马上反复重试 快速绕开异常 PSN,降低认证空窗
Accounting Interim Start/Stop 必须有;Interim 降到最低(C9800 可用 aaa accounting update newinfo periodic <min> 限定为"仅有新信息时上报";具体策略以 17.18.x 配置指南为准) 显著减少 MnT 数据库写入与查询压力 减少 AGV 漫游带来的日志洪水
日志抑制 生产环境务必保留 RADIUS Logging Suppression 防止重复失败事件大量写入 AGV 批量异常时保护 ISE 不被压垮
LB Health Probe 探针使用本地用户,过滤探针日志 避免探针依赖外部 DB 或污染 MnT PSN 健康检查更轻量
Load Balancer 粘滞 RADIUS 粘滞基于 Calling-Station-ID,Sticky Timer ≥ 1 小时 避免 EAP 会话报文被打散到不同 PSN 减少 12953 / invalid state 等中断风险

7.7 ISE 治理三阶段路线:止血 → 重构 → 治理

从制造业运维视角看,AGV 停摆问题不能靠一个配置项修复。我们建议将 ISE 侧动作切成三层:

阶段 目标 关键动作 预期结果
① 止血
0–2 周
降低当前认证与日志风暴
  • 检查 Accounting Interim 频率,改为最小必要更新
  • 保持 Logging Suppression 开启
  • 过滤 LB Health Probe 通过/失败日志
  • 检查 RADIUS Timeout、dead-criteria、deadtime
短期降低 MnT 压力,减少认证抖动
② 重构
1–3 月
隔离实时认证路径
  • PSN 与 MnT 角色物理分离
  • 为 AGV 专用 PSN 做容量 sizing
  • 配置 PSN 冗余与 LB,使用 Calling-Station-ID 粘滞
  • 启用 DNS Cache、优化 AD Sites and Services
认证服务不再被日志查询直接拖慢
③ 治理
持续
持续提升 Network SLA
  • 建立 TPS / 失败率 / 平均与峰值响应时间仪表盘
  • 使用 Authentication Summary、Log Analytics 识别异常终端
  • 按 AGV 漫游峰值与班次节奏做容量测试
  • 每次变更前后对比 ISE、WLC、MQTT Broker 指标
从"救火式排障"进入"可预测运营"
关键反思:为什么不能"简单加大 ISE 节点资源"了事?因为如果 PSN 与 MnT 共节点、Accounting 过量、规则设计低效、AD/DNS 查询慢,资源会继续被错误的流量消耗。架构隔离与流量治理通常比单纯堆硬件更有效。
另外建议——AGV / OT 终端使用专用 PSN 或专用 Server Group,把关键生产设备与办公终端、访客终端的认证负载彻底隔离。
ISE 高延迟,从来不是 ISE “太弱”,而是它被强迫“一心多用”。
分角色部署,是把“救火队”和“档案室”分开。
Chapter 08 · 决策时刻

决策建议与最佳实践

到这里,我们已经把"为什么 AGV 会掉线"、"OKC 怎么先止血"、"802.11r 怎么收敛"、"AAA Cache 怎么解耦"、"URWB 何时上"、"ISE 怎么分"全部讲完了。现在把决策权交还给你——你需要在"投入成本"与"业务收益"之间做选择。下面是四档路径,按从轻到重排列:

8.1 四档决策路径

路径 核心动作 投入 预期收益 适用场景
路径 A-1
"即时止血"
  • AGV 厂商打开 supplicant 的 okc=1 / proactive_key_caching=1
  • 抓包验证 Reassoc 中确认携带 PMKID(附录 B)
  • 暂不动 WLC 与 ISE 配置

⚠ 前提:supplicant 必须实现 PMKID 主动哈希计算——理想场景(Linux + 主线 wpa_supplicant)可达成;vendor 闭源 firmware 需先提工单(详见 §3.7 三场景判断)

极低
(仅 AGV 端)
漫游 300 ms+ → 50–100 ms
ISE 抖动不再影响每次漫游
仅适用于场景 ①(Linux+主线 supplicant),希望 1–2 周内见效
路径 A-2
"标准化收敛"
  • A-1 全部 +
  • 启用标准 802.11r Mixed Mode(FT-802.1X AKM)
  • 启用 11k Neighbor + 11v BTM(含 Disassoc Imminent)
  • FT Over-the-DS 保持默认 disabled(Cisco BP 推荐);关闭 Band Select / Aggressive LB
  • 逐型号验证终端 11r 兼容性

(WLC 配置 + 全终端验证)
漫游 50–100 ms → < 10 ms
面向 WPA3 / Wi-Fi 6E/7 演进
大多数 AGV 部署的标准化终点
路径 B
"中度加固"
  • 路径 A-2 全部 +
  • 升级 IOS-XE 到 17.18.1+(建议 17.18.3)——AAA Cache 在 17.18.1 才引入
  • 启用 AAA Survivability Cache + Local EAP + Trustpoint(按 17.18.x Configuration Guide 配置;Policy Profile 内同步配 AAA-failure 行为 / Critical VLAN)
  • ISE 拆分 PSN 与 MNT

(升级 + 重构 ISE)
ISE 抖动期 AGV 仍可继续工作 多车间、大规模车队、对 ISE 解耦要求高
路径 C
"工业级跨越"
  • 路径 B 全部 +
  • 核心 AGV 区域引入 Cisco URWB(IW9165 / IW9167)
  • 启用 MBB + MPO

(专用 AP + 控制器)
零中断、零丢包,确定性时延 核心产线、CBTC、高速 AGV/AMR 关键路径

8.2 不论选哪条路径,Cisco 建议的"无悔动作"

以下几条是"做了不亏,不做必坑"的最佳实践,建议立刻执行:

🔧 WLC 端

  • 启用 802.11r Mixed Mode,不支持 FT 的终端理论上可回退普通 802.1X——仍需逐型号验证
  • 启用 802.11k Neighbor Report
  • 启用 802.11v BSS Transition(针对粘性 AGV 建议带 Disassociation Imminent
  • FT Over-the-DS 保持 disabled(Cisco C9800 Best Practices 推荐,以保证客户端互操作性)
  • 关闭 Band Select / Aggressive Load Balance(AGV 场景)
  • 升级到 IOS-XE 17.15.5(C9800 通用 TAC 推荐版本);如需启用 AAA Cache 或上 Wi-Fi 7,必须升到 17.18.1+(建议 17.18.3)

📡 AP / RF 端

  • 覆盖目标:单车主信号 ≥ −60 dBm
  • 邻 AP 重叠区 ≥ 30%(约 6 m 走廊)
  • TX Power 对称:5 GHz Max 14–17 dBm / Min 5–8 dBm
  • 避免 5 GHz DFS 信道用于 AGV SSID
  • 启用 FlexConnect Local Switching(降低 CAPWAP 故障域)

🔐 ISE 端

  • 分布式部署:PSN ≥ 2 节点,与 MNT 物理分离
  • WLC 配置 RADIUS 负载均衡 least-outstanding
  • Accounting Interim Update 调长到 30 分钟
  • EAP-TLS 证书有效期:在运维便利与安全合规之间权衡——长有效期降低批量轮换压力,短有效期降低私钥泄露风险。建议配合自动化签发(SCEP/EST/ISE-CA)实现"短证书 + 自动续期"
  • 启用 Server-Side OCSP Cache,避免每次查 CA

🚗 终端 / AGV 侧

  • 统一无线模组,确认支持 802.11r FT
  • 固件升级到厂商最新版(特别是 Wi-Fi 驱动)
  • MQTT 客户端 KeepAlive 设 30–60 秒(仅用于 broker 检测会话死亡,不是 AGV 停摆计时器
  • 独立设置应用层心跳(1–5 秒级 topic heartbeat + sequence number),由调度 watchdog 决定是否停车
  • 启用 MQTT QoS 1(不建议 QoS 0/2 用于关键指令)
  • 实施 本地缓存 + LWT,提升断网容忍

8.3 可验证的成功指标(SLA)

< 50ms
P95 漫游时间
< 1%
RADIUS 失败率
0
单日 ISE 引发的 AGV 停摆事件
< 100ms
MQTT P99 端到端时延

8.4 实施路线图建议(90 天)

第 1 周|可行性判断(场景登记)

抽样 1–2 台 AGV 抓包确认是否携带 PMKID;按 §3.7 三场景判断当前车队属于 ① / ② / ③ 哪一类,决定 A-1 是否值得排期。

第 2–3 周|A-1 落地(仅场景 ①)

场景 ① 的车队修改 wpa_supplicant.conf 启用 OKC,再次抓包确认 PMKID Count ≥ 1,统计 MQTT 中断率下降情况;场景 ② / ③ 直接并行启动 A-2。

第 3–10 周|A-2 标准化收敛

选择 1 个车间启用 11r Mixed Mode + 11k/v,逐型号验证终端兼容性后推广全厂;漫游 P95 从 50–100 ms 收敛到 < 10 ms。

第 10–18 周|路径 B 推进

WLC 升级 17.18.1+(建议 17.18.3)——这是 AAA Cache 的最低支持版本;启用 AAA Cache + Local EAP;ISE 拆分 MNT 为独立节点。

第 18 周+|评估路径 C

对于核心产线,POC Cisco URWB;评估 MBB + MPO 在最关键 5–10% 区域的引入价值。

给业务团队的一句话:路径 A-1 让你立刻不流血,路径 A-2 让你站得稳,路径 B 让你不被绊倒,路径 C 让你根本不会摔
在制造业,停摆 1 小时的损失,往往远超过整个升级方案的成本。我们建议把 A-1 在 1–2 周内启动,A-2 在 1–2 月内完成,B 在半年内推进,C 在关键工位试点
最好的网络运维,是让 AGV 不知道“漫游”的存在。
从 11r 到 URWB,技术路径越来越激进,目标却始终如一——让车间静静运转
Closing · 回到原点

回到最开始的问题

我们出发时,问题是这样的:一次 ISE 高延迟,让大量 AGV 停摆

经过八章拆解,我们得到了一组结构性的答案:

  1. AGV 的命门不是带宽,是断网容忍——MQTT 的 KeepAlive 决定了你只有几百毫秒;
  2. OKC 看似配上了,但终端可能没声明 PMKID,或携带的 PMKID 与 WLC 缓存不匹配——这是当前根因;
  3. 真正的解药是 802.11r Mixed Mode,配合 11k/11v,把漫游压到 10 ms;
  4. 对 ISE 的耦合用 AAA Survivability Cache 解开——让 ISE 抖动不再传染 AGV;
  5. ISE 自身的高延迟,来自 MNT 拖累 PSN——分角色部署是治本之策;
  6. 当 Wi-Fi 协议本身的天花板限制了你,Cisco URWB 用 MBB + MPO + 工业级 Overlay 做到了"业务无感的毫秒级切换"
  7. 四档路径(A-1 即时止血 → A-2 标准化收敛 → B 中度加固 → C 工业级跨越),可以按业务关键度逐步落地。

制造业的网络运维,不是"没出事就是好",而是"出事时仍然不停摆"。从一次漫游优化开始,你正在建设的,是一张对业务真正可信的网络

AGV 不需要更快的网络,它需要的是一张从不让它停下来的网络。
这就是我们今天要交付给车间的答案。
Appendix A · 选型与验证

附录 A:工业无线模组 OKC / 11r 经验性支持矩阵

本附录回答一个常见的现场问题:"AGV 上装的是工业级模组,它到底支持不支持 OKC?"

A.1 先承认一个事实:没有"权威清单"

市面上不存在一份由 Cisco 或 IEEE 维护的、可直接查阅的"OKC 支持网卡清单"。原因有三:

  1. OKC 不是 IEEE 标准——它是 Cisco/Aruba 当年的事实标准,各家厂商各自实现;同一颗芯片在不同驱动 / 不同固件版本下行为可能完全不同
  2. 工业模组厂商的数据手册通常只写"Supports WPA2-Enterprise / 802.11r",对 OKC 是否启用、是否默认开启基本不提
  3. OKC 是否生效高度依赖 supplicant 配置——例如 Linux wpa_supplicant 必须显式设置 proactive_key_caching=1不是网卡硬件能力问题
结论:与其追"清单",不如建立"现场验证流程"——这正是附录 B 的价值所在。

A.2 经验性参考矩阵(按芯片家族与驱动栈分类)

下表汇总在 AGV / AMR 现场可见的常见模组类别。表中"通常表现"基于公开资料与典型部署经验,不能替代您在自己环境中的实际验证

类别 典型型号 / 平台 OKC 通常表现 11r 通常表现 现场建议
Linux + wpa_supplicant 的工业 PC Silex SX-PCEAC2 / SX-PCEAX、Laird Summit ST / IG60 系列、基于 Qualcomm/Atheros QCA9xxx 的 mPCIe/M.2 模组 ✅ 多数支持 ✅ 多数支持 需在 wpa_supplicant.conf 显式开启 proactive_key_caching=1okc=1ft_eap_pmksa_caching=1
Intel Wi-Fi 6 / 6E 系列 AX200 / AX210 / AX211(运行 Windows 或 Linux) ✅ 一般支持 ✅ 支持(含 FT-over-DS) 行为受 Intel PROSet 驱动版本影响;建议锁定到企业认证过的驱动版本
基于 QCA/Atheros 商用芯片的工业模组 Compex WLE 系列、Wallys DR 系列、众多 ODM 公版方案 ⚠ 看驱动 ⚠ 看驱动 公版固件常裁剪 supplicant 功能;逐一抓包验证
专用 AGV 模组(嵌入式 RTOS / 自研协议栈) Moxa AWK 客户端模式、部分 KUKA / 国产 AGV OEM 自研模组 ⚠ 多数不支持 OKC ⚠ 部分支持 11r 最常出问题的一类;选型时必须明确要求
较老旧的 Broadcom / Marvell 工业模组 多见于 2018 年前的 AGV 出厂方案 ❌ 多数无 ❌ 多数无 现场如遇该类,直接升级模组是最快的解

A.3 给采购与运维的两条务实建议

① 不要相信"支持 WPA2-Enterprise"

不等于支持 OKC。要向厂商问的关键词是:

  • "Does the supplicant include PMKID in the (Re)Association Request RSN IE for opportunistic key caching?"
  • "Is 802.11r FT-802.1X AKM advertised and negotiable by default?"

② 把硬指标写进采购规格书

选型阶段要求模组:

  • 同时支持 OKC 与标准 802.11r FT-802.1X
  • 提供 WPA3-Enterprise + PMF 支持(面向 6 GHz / Wi-Fi 7)
  • 提供 supplicant 配置示例文件,明确 PMK 缓存与 FT 开关

11r 是 IEEE 标准,跨厂商兼容性远好于 OKC——优先依赖它。

A.4 wpa_supplicant 的关键配置示例(Linux AGV 控制器)

下面给出两个分场景示例——分别对应"WPA2-Enterprise 当前过渡期"与"WPA3-Enterprise 终态"。请勿混用,PMF 策略必须与 WLAN 侧一致。

示例 ①:WPA2-Enterprise + 11r 过渡期(当前主流 AGV 现网)

# /etc/wpa_supplicant/wpa_supplicant.conf
ctrl_interface=/var/run/wpa_supplicant
update_config=1

# === PMK 缓存与机会式漫游 ===
okc=1                          # 启用 Opportunistic Key Caching
proactive_key_caching=1        # 等同于 okc=1(部分发行版用此名)
ft_eap_pmksa_caching=1         # 11r FT-EAP 场景下复用 PMKSA

network={
    ssid="AGV-SSID"
    key_mgmt=FT-EAP WPA-EAP        # 同时声明 FT 与普通 EAP,AKM 协商
    eap=TLS
    identity="AGV-001"
    ca_cert="/etc/agv/ca.pem"
    client_cert="/etc/agv/client.pem"
    private_key="/etc/agv/client.key"
    private_key_passwd="********"
    # PMF 策略必须与 WLAN 侧匹配
    # WPA2 SSID 通常为 PMF Optional:
    ieee80211w=1
    bgscan="simple:30:-65:300"
}

示例 ②:WPA3-Enterprise + 11r 终态(面向 6 GHz / Wi-Fi 6E/7)

# /etc/wpa_supplicant/wpa_supplicant.conf
ctrl_interface=/var/run/wpa_supplicant
update_config=1

okc=1
proactive_key_caching=1
ft_eap_pmksa_caching=1

network={
    ssid="AGV-SSID-WPA3"
    # WPA3-Enterprise + FT 的 SHA-256 AKM
    key_mgmt=FT-EAP-SHA256 WPA-EAP-SHA256
    eap=TLS
    identity="AGV-001"
    ca_cert="/etc/agv/ca.pem"
    client_cert="/etc/agv/client.pem"
    private_key="/etc/agv/client.key"
    private_key_passwd="********"
    # WPA3 / 6 GHz 强制 PMF Required
    ieee80211w=2
    bgscan="simple:30:-65:300"
}
配置注意事项:
  • 原生 wpa_supplicant.conf 文本配置中,控制 PMF 的合法字段是 ieee80211w(0 = disabled, 1 = optional, 2 = required)。某些高层网络管理器(如 NetworkManager)的抽象层会提供 pmf 关键字,但它不是 wpa_supplicant 原生字段,部分旧版解析器会抛 "Unknown network field" 语法错误——不要把 pmf=X 写到 wpa_supplicant.conf
  • ieee80211w 取值必须与 WLAN 侧 PMF policy 匹配:WPA2 Optional → 1;WPA3 Required → 2。终端 PMF 高于 WLAN 会导致关联失败。
  • 不要把示例 ① 和 ② 写在同一个 network={} 块中;用不同 SSID分别承载。
验证方式(抓包为主,CLI 为辅):修改配置后重启 supplicant——首选验证是空口抓包(详见附录 B):
  • 看 Beacon / Probe Response 中 AKM 是否含 FT-802.1X(或 FT-802.1X-SHA256);
  • 看漫游时 Authentication Algorithm = 2 (FT)
  • 看 Reassoc 中是否含 MDIE / FTIEPMKID
wpa_cli status 输出(如 key_mgmt=FT-EAP)可作辅助参考,但不同 supplicant 版本/驱动 CLI 输出可能不一致,不应作为唯一判定依据
工业模组的"支持"二字含金量极低——
真正可信的,是您自己抓包里那一行 PMKID Count: 1
Appendix B · 现场诊断

附录 B:抓包验证 PMKID 的完整方法

本附录回答另一个常见的现场问题:"我配了 OKC / 11r,怎么确认它真的生效了?"唯一可信的方法是抓 802.11 管理帧的原始字节流,查看 Reassociation Request 帧里的 RSN IE 是否含 PMKID。

B.1 整体思路:两条主流路径

路径优点缺点典型场景
A. C9800 端把 AP 切为 Sniffer Mode 不需要额外硬件;看到的就是真实 OTA 帧;可远程抓 需占用一个 AP;需配置 Wireshark 接收端 生产环境、远程诊断、大范围排查
B. MacBook 直接 OTA 抓包 灵活、移动方便;macOS 内置无需驱动 一次只能监听一个信道;需要靠近 AGV 现场快速验证、便携排障

B.2 方案 A:在 C9800 上配置 Sniffer Mode AP

步骤 1:选一个 AP 转为 Sniffer 模式

GUI 路径:Configuration → Wireless → Access Points → 选定 AP → Mode = Sniffer,或使用 CLI(下面命令为示意,具体语法以您所部署的 C9800 IOS-XE 版本配置指南为准):

configure terminal
ap name AP-Sniffer mode sniffer
ap name AP-Sniffer dot11 5ghz shutdown        ! 退出业务模式
ap name AP-Sniffer dot11 5ghz channel 36      ! 锁到目标信道
ap name AP-Sniffer no dot11 5ghz shutdown
ap name AP-Sniffer sniff 5ghz 36 <WIRESHARK_PC_IP>

AP 会把抓到的 802.11 帧用 PEEKREMOTE / AiroPeek 封装,发送到指定主机的 UDP 端口。常见接收端口为 UDP 5000(AireOS / 部分 IOS-XE 版本)或 5555(其他场景)——实际端口随 AP 型号 / 软件版本 / 平台而异,请以当前 C9800 release guide 和 AP Sniffer 文档为准
建议做法:先在 Wireshark 端用 udp and host <AP-IP> 过滤捕获,看实际命中的端口号,再 Decode As PEEKREMOTE。

步骤 2:在 PC 端(Wireshark)配置接收

启动 Wireshark → Capture Options

选定接收 AP 流量的网卡。

设置 Capture Filter

先用 udp and host <AP-IP> 捕获,确认实际命中的 UDP 端口(5000 / 5555 等因版本而异)。

开始抓包

让目标 AGV 在该信道内做一次漫游,然后停止。

解码为 PEEKREMOTE

在任意帧上右键 → Decode As… → UDP destination port = 实际命中的端口 → 协议选 PEEKREMOTE。此后所有帧自动解析为完整 802.11 报文。

步骤 3:在 Wireshark 中验证 PMKID

应用以下显示过滤器(请把 aa:bb:cc:dd:ee:ff 替换为 AGV 网卡 MAC):

# 只看目标终端发出的 Reassociation Request(subtype 0x02)
wlan.fc.type_subtype == 0x02 && wlan.sa == aa:bb:cc:dd:ee:ff

# 进一步只看声明了 PMKID 的帧
# 注:字段名因 Wireshark 版本而异;若下述不工作,可尝试 wlan.rsn.ie.pmkid.count(点号形式)
wlan.rsn.ie.pmkid_count >= 1

在帧详情中展开:

IEEE 802.11 Reassociation Request
└─ Tagged parameters
   └─ Tag: RSN Information
      └─ PMKID Count: 1            ← ★ 必须 ≥ 1
      └─ PMKID List
         └─ PMKID: 5a3e2f...       ← ★ 看到这一行 = OKC 真正发挥作用
判读关键:如果 PMKID Count = 0 或该字段根本不存在 —— 这就是您当前现场的根因证据:终端未声明 PMKID,OKC 没有发生。

备选:用 C9800 的 Radioactive Trace 做 WLC 视角诊断

如果暂时无法部署 Sniffer AP,可用 RA Trace 从 WLC 视角验证:

! 启用对该客户端的 Radioactive Trace
debug wireless mac aa.bb.cc.dd.ee.ff monitor-time 600

! 让 AGV 漫游……完成后导出

show logging profile wireless filter mac aa.bb.cc.dd.ee.ff to-file flash:agv-trace.log

! 关闭
no debug wireless mac aa.bb.cc.dd.ee.ff

在生成的 trace 中搜索关键字:PMKIDPMK Cache hitPMK Cache missFT,即可判断 WLC 侧是否命中缓存。

B.3 方案 B:MacBook 直接 OTA 抓包(最便携)

macOS 内置了原生的 802.11 监控模式,无需任何第三方驱动或硬件

方法 B-1:图形界面(推荐给一线工程师)

按住 Option (⌥) 键,点击菜单栏 Wi-Fi 图标

下拉菜单中会出现"打开无线诊断…(Open Wireless Diagnostics…)"。

输入管理员密码进入主窗口

暂时不要点向导里的"继续",直接看顶部菜单栏。

窗口(Window)→ 嗅探器(Sniffer)

选定信道(如 36)与带宽(如 80 MHz),点 开始(Start)

触发 AGV 漫游 → 停止

抓包文件自动保存为 .pcap,路径见 macOS 通知或 /var/tmp/

用 Wireshark 打开 .pcap

应用 B.2 步骤 3 的过滤器即可。

方法 B-2:命令行 airport(脚本化场景)

# 锁定 5 GHz 36 信道开始抓包
sudo /System/Library/PrivateFrameworks/Apple80211.framework/Versions/Current/Resources/airport en1 sniff 36

# Ctrl+C 停止后,文件输出到 /tmp/airportSniffXXX.cap

注意:en1 是 Wi-Fi 接口名,可用 networksetup -listallhardwareports 确认。

方法 B-3:Wireshark macOS 监控模式

Wireshark → 选 Wi-Fi 接口 → Capture Options → 勾选 "Monitor Mode" → 选信道 → 开始

B.4 Wireshark 验证过滤器速查表

想看什么显示过滤器
该终端发出的 Reassociation Request wlan.fc.type_subtype == 0x02 && wlan.sa == <MAC>
Reassoc 中是否带 PMKID wlan.rsn.ie.pmkid_count >= 1
(部分 Wireshark 版本字段名为 wlan.rsn.ie.pmkid.count
4-Way Handshake 全部消息 eapol && wlan.addr == <MAC>
完整 EAP-TLS 握手(= 走了完整认证) eap && wlan.addr == <MAC>
Beacon 中是否广播 FT AKM wlan.fc.type_subtype == 0x08 && wlan.rsn.akms.type == 3
是否带 Mobility Domain IE(11r 标志) wlan.tag.number == 54
FT Authentication 帧(仅 Authentication 帧上 Auth Algorithm = 2 才表示 FT) wlan.fc.type_subtype == 0x0b && wlan.fixed.auth.alg == 2

B.5 一张表完成"判读"

把上面的过滤器结果对照下表,即可一句话定性当前漫游状态:

抓包现象结论下一步动作
Reassoc Req 中 PMKID Count = 0,且能看到完整 EAP-TLS OKC 未生效——终端没声明 PMKID 核对模组驱动 / supplicant 配置(附录 A.4)
Reassoc Req 中 PMKID Count ≥ 1,但仍看到 EAP-TLS PMKID 错配——WLC 未命中缓存 检查跨 Mobility Group / Site Tag 部署
Reassoc Req 含 Mobility Domain IE + 4-Way 折叠帧(Auth Algo=2) 11r FT 已生效——终极目标状态 无需调整,建议作为基线固化
Reassoc Req 含 PMKID,且 4-Way HS 顺利完成,无 EAP OKC 完全生效 满足业务即可;进一步可向 11r FT 升级

B.6 推荐的现场诊断流程(30 分钟可完成)

① 准备

记录目标 AGV 的网卡 MAC;选定一个 AP 转为 Sniffer Mode,或带一台 MacBook 到现场。

② 抓包

启动抓包,触发 AGV 跨 AP 漫游 3–5 次。

③ 过滤

应用 wlan.fc.type_subtype == 0x02 && wlan.sa == <MAC>(subtype 0x02 = Reassociation Request)。

④ 判读

对照 B.5 判读表得出结论。

⑤ 闭环

结论回传到运维票据,触发对应整改动作(配置 / 升级 / 模组更换)。

抓包不会撒谎。一行 PMKID Count,胜过一千页厂商规格书。
Appendix · 完整术语表

术语表(Glossary)

AGV / AMR
自动导引车 / 自主移动机器人。制造业、物流业用于自动搬运的无人载具。
MQTT
轻量级发布/订阅消息协议,运行在 TCP 之上。AGV 主要的调度信令协议。
QoS(MQTT)
消息服务质量等级:QoS 0(至多一次)、QoS 1(至少一次)、QoS 2(恰好一次)。
LWT(Last Will & Testament)
MQTT 客户端预先注册的"遗嘱消息",在异常断连时由 Broker 代为发布。
KeepAlive
MQTT 客户端的心跳间隔(典型 30–60 秒);超过 1.5× 该间隔无消息或心跳,Broker 判定会话死亡。它检测的是 TCP/MQTT 会话级断连,不应被误用作 AGV 业务停摆计时器——后者由 AGV 应用层心跳与安全 watchdog 决定。
802.1X
IEEE 端口接入认证标准,配合 EAP 框架实现网络准入控制。
EAP-TLS
基于 TLS 证书的 EAP 方法,客户端与服务器双向证书认证,AGV 场景的事实标准。
RADIUS
认证、授权、计费协议;WLC 与 ISE 之间承载 EAP 的传输协议。
PMK / PMKID
成对主密钥 / 其标识符;用于客户端与 AP 间派生加密会话密钥。
4-Way Handshake
WPA2/WPA3 中客户端与 AP 协商 PTK 的 4 条消息交换,是漫游延迟的来源之一。
OKC
Opportunistic Key Caching,机会式密钥缓存。在 Cisco Central Switching 架构下,PMK 集中驻留在 WLC 内存中(不下发到 AP);终端漫游时由 supplicant 主动为目标 AP 计算 PMKID 并上送 Reassoc 帧,WLC 命中后代终端完成 4-Way HS。非 IEEE 标准。
802.11r / FT
Fast BSS Transition。IEEE 标准的快速漫游协议,把密钥确认嵌入 FT Auth + Reassoc 两次往返(共 4 帧管理报文),不再需要独立的 EAPOL 4-Way Handshake,达成 < 50 ms 漫游(最佳 < 10 ms)。
802.11k
IEEE Radio Resource Measurement 标准,提供 Neighbor Report,让客户端只扫描邻居信道。
802.11v / BTM
IEEE BSS Transition Management,AP 主动向客户端建议漫游目标。本质是 advisory 协议——客户端可回复 Reject 拒绝;只有带 Disassociation Imminent 标志的 BTM Request 才具实质强制力
Adaptive FT
Cisco + Apple/Samsung 的 11r 兼容机制;隐藏 FT AKM。不支持 WPA3,当前已不推荐。
MDIE / MDID
Mobility Domain Information Element / ID;用于标识同一 FT 移动域,仅同域 AP 间可 FT 漫游。
DFS
Dynamic Frequency Selection,雷达共享信道;规定客户端只能被动扫描,单信道 ≥102 ms。
AAA Cache
C9800 在本地缓存 ISE 授权结果的能力,其在无线场景的完整名称为 AAA Authentication Survivability Cache for Wireless。关键词是 Survivability(韧性)——它不是常态绕过 ISE 的捷径,而是在 AAA 服务器不可达 / 响应超时 / 被标记 dead 时,为已认证终端延续准入。从 IOS-XE 17.18.1 起支持,17.15.x 及更早版本不具备该能力。
WFA OCE(Optimized Connectivity Experience)
Wi-Fi Alliance 进阶认证项目,将 802.11r FT 作为强制项。注意 OCE 与 MBO 的边界:MBO 强制 802.11k + 802.11v,不强制 802.11r;OCE 才把 802.11r 列为强制项。
WFA MBO(Multi-Band Operation / Agile Multiband)
Wi-Fi Alliance 多频段协同认证,强制 802.11k(邻居报告)+ 802.11v(BTM);不强制 802.11r
Critical VLAN / AAA-Failure Policy(C9800)
C9800 在 RADIUS 服务器不可达且 AAA Cache 未命中时的兜底策略,配置在 Wireless Policy Profile 内(不是有线交换机的 dot1x critical eapol)。具体语法以 IOS-XE 17.18.x Policy Profile 配置指南为准。
ISE PAN / PSN / MNT
Cisco ISE 的三种角色:策略管理、策略服务、监控与日志。生产环境推荐物理分离。
URWB
Cisco Ultra-Reliable Wireless Backhaul。源自 Fluidmesh,集成于 IW 系列与 Catalyst IW AP,提供工业级零中断无线。
MBB(Make-Before-Break)
URWB 漫游模型:先建立新链路、再断开旧链路,实现零丢包切换。
MPO(Multipath Operation)
URWB 的多径冗余技术:客户端同时连接多个 AP 并行收发,提升可靠性。
MPLS Underlay / Overlay
URWB 底层使用 MPLS 在 AP 间转发数据,并在其上构建 L2 隧道(Overlay)以实现 L2 透传。
Mobility Tunnel
C9800 间用于跨 WLC 漫游的隧道,承载 PMK 同步与客户端上下文。
FlexConnect
C9800 的本地交换模式,AP 在 WLC 不可达时仍可本地转发数据,提升故障域韧性。
IOS-XE 17.15.5 / 17.18.3
Cisco TAC 当前推荐的 C9800 控制器软件版本(参考 Doc-ID 214749)。其中 17.18.1 起引入 AAA Authentication Survivability Cache for Wireless 特性;17.18.3 是 17.18 训练线的当前 TAC 推荐 GA。
Local EAP Profile
C9800 上声明的本地 EAP 处理能力(如 EAP-TLS / PEAP 方法),使 WLC 在 ISE 不可达时仍能独立完成 EAP 协议交互。
PKI Trustpoint
Cisco 设备上的证书信任锚配置实体,承载一对设备证书 + 信任的 CA 链。C9800 做 Local EAP 时需绑定与 ISE 同信任域的 Trustpoint。
Firehose(日志洪水)
Cisco ISE 最佳实践术语,特指被过量 Accounting、错误重试、健康探针淹没的认证系统流量;治理目标是"Turn Down the Firehose"。
Calling-Station-ID
RADIUS 标准属性(Attribute 31),承载终端 MAC 地址;常作为 RADIUS 负载均衡的粘滞键,确保同一会话的所有 EAP 报文落到同一 PSN。
Interim Accounting
RADIUS Accounting 在会话生命周期中周期性发出的中间更新报文;过短的 Interim 间隔会导致 MNT 写入压力骤增,是常见的"日志洪水"源头。
Deadtime
RADIUS Server 被标记为 "DEAD" 后,WLC/NAD 在该时间窗口内不再向其发送请求;Cisco C9800 Best Practices 推荐 5 分钟radius-server deadtime 5),避免对异常 PSN 反复重试造成级联延迟。
Logging Suppression
ISE 的重复事件抑制机制:对相同终端在短时间内重复出现的失败事件做聚合写入,避免 MNT 数据库被瞬时风暴淹没。

下一步:把建议变成执行

本指南覆盖了从"诊断现状"到"工业级跨越"的完整路径。建议你的团队从路径 A-1 的 OKC 可行性抓包立即开始(1 周内可完成场景判定),随后按 A-2 / B / C 分阶段推进。Cisco 与本地合作伙伴可提供 POC、抓包分析、ISE 拆分与 URWB 试点的端到端支持。

回到目录 ↑