802.11 PROTOCOL INTELLIGENCE
Frame Sequences - 802.11 Exchanges
Every 802.11 connection is a sequence of management frame exchanges. Knowing the exact order, Frame Control values, and what each frame contains lets you diagnose failures at the precise step where they occur - not at the symptom layer.
IEEE 802.11-2020 CWAP Domain
If you know which frame in the association sequence did not arrive, you know exactly what to fix. The controller log tells you the outcome. The PCAP tells you the cause.
// quick wireshark filters - frame exchanges
wlan.fc.type_subtype == 0x0bAuthentication frames - check status code in frame 2. Non-zero = rejection.wlan.fc.type_subtype == 0x00 || wlan.fc.type_subtype == 0x01Association request + response. RSN IE in req shows what client actually supports.eapol4-Way Handshake. Exactly 4 frames = success. Missing M2 = PMKID rejected. Missing M3 = AP-side issue.wlan.fc.type_subtype == 0x02 || wlan.fc.type_subtype == 0x03Reassociation (roaming). Delta between req and resp = roam latency. >50ms = problem.wlan.fc.type_subtype == 0x0cDeauthentication. Check reason code. Burst from non-AP BSSID = deauth attack.wlan.fc.type_subtype == 0x0b && wlan.fixed.auth.alg == 3SAE commit/confirm (WPA3). Algorithm=3.Full filter reference → /wireshark-filters
802.11 THREE-STATE MACHINE - IEEE 802.11-2020 §11.3.3
State 1
Unauthenticated
Unassociated
Class 1 only: Probe, Auth, Deauth, Beacon
→ Auth →
State 2
Authenticated
Unassociated
Class 1+2: Assoc, Reassoc, Disassoc
→ Assoc →
State 3
Authenticated
Associated
Class 1+2+3: Data, QoS Data, Action
Wireshark Filters - Capture These Sequences
Full association sequence
wlan.fc.type_subtype == 4 || wlan.fc.type_subtype == 5 || wlan.fc.type_subtype == 11 || wlan.fc.type_subtype == 0 || wlan.fc.type_subtype == 1 Probe Request only
wlan.fc.type_subtype == 4 Authentication frames
wlan.fc.type_subtype == 11 Association Request/Response
wlan.fc.type_subtype == 0 || wlan.fc.type_subtype == 1 EAPOL 4-Way Handshake
eapol Deauth frames
wlan.fc.type_subtype == 12 Disassociation frames
wlan.fc.type_subtype == 10 Reason Code = 6 (class 2 from non-auth STA)
wlan.fixed.reason_code == 6 SAE commit/confirm (WPA3)
wlan.fc.type_subtype == 11 && wlan.fixed.auth.alg == 3 FT Auth (802.11r)
wlan.fc.type_subtype == 11 && wlan.fixed.auth.alg == 2 BTM Request (802.11v)
wlan.fixed.action_code == 7 && wlan.fixed.category_code == 10 Neighbor Report Request (802.11k)
wlan.fixed.action_code == 4 && wlan.fixed.category_code == 5 // related reference