前言
同一块 WiFi 网卡,有时像手机一样去连别人热点,有时又像路由器一样站在门口接人。很多人第一次接触这件事,都会有一个很自然的疑问:明明都是无线,为什么一边叫 STA,一边叫 AP,像是两个完全不同的世界?
答案其实并不复杂。它们不是两个名字,而是两套角色。STA 负责"加入别人",AP 负责"接纳别人"。一个像排队进场的人,一个像门口检票的人。角色一变,状态机、配置项、日志位置和测试方法都会跟着变。你要是把它们混在一起,后面的命令和排障思路就会开始打架。
这一篇不想停留在概念层,所以直接讲实战:怎么判断网卡支持什么,怎么用 iw 看状态,怎么把 STA 连上去,怎么把 AP 开起来,最后怎么验证它们到底稳不稳。

这张图最重要的地方在于,它把"连出去"和"接进来"分成了两条完全不同的链路。STA 关注的是"我能不能进去",AP 关注的是"我愿不愿意让你进来"。这就是后面所有命令、日志和测试项的分水岭。
查询Wi-Fi芯片的能力
真正上手之前,第一件事不是连网,而是看网卡能力。很多 AP / STA 问题,根本不是配置错,而是设备本来就不支持。
最先跑的命令通常是iw dev/iw list,iw dev用来看当前接口和工作状态,iw list用来看能力边界。下面是一组最简洁的查询命令:
bash
# 当前模式(STA 还是 AP)→ iw dev
iw dev wlan0 info | grep type
# 是否支持 STA / AP → iw list
iw list | grep -A 10 "Supported interface modes"
# 支持哪些频段(2.4G / 5G / 6G)→ iw list
iw list | grep "Band [0-9]"
# 支持哪些信道 → iw list
iw list | grep -E "^\s+\* [0-9]"
# 支持的加密 → iw list
iw list | grep -A 10 "Supported Ciphers"
# 支持的带宽(HT20/40, VHT80/160)→ iw list
iw list | grep -E "HT20|HT40|80 MHz|160 MHz"
在想使能Wi-Fi功能之前,需要知道当前Wi-Fi芯片支持什么能力
bash
iw list | grep -A 6 "Supported interface modes"
Supported interface modes:
* IBSS
* managed
* AP
* AP/VLAN
* monitor
* mesh point
对我手上这颗Wi-Fi芯片(88x2bu)所支持的模式简单说明:、
| 模式 | 含义 | 典型场景 |
|---|---|---|
| managed | 客户端模式(STA) | 连接路由器/热点,日常上网 |
| AP | 接入点模式 | 开热点,让其他设备连过来 |
| AP/VLAN | 带 VLAN 隔离的 AP | 每条 STA 绑定独立 VLAN,企业/多租户 |
| IBSS | Independent BSS,Ad-Hoc 模式 | 设备间直连,不经过 AP,点对点组网 |
| monitor | 监听模式 | 抓包、安全审计、信道分析 |
| mesh point | Mesh 节点模式 | 多跳自组网,覆盖扩展 |
简单说:
- 你要连别人热点 →
managed - 你要开热点给别人连 →
AP - 你要抓空口包做分析 →
monitor - 你要两台设备直连不经过 AP →
IBSS - 你要组多跳 Mesh 网络 →
mesh point
这块最容易被忽略的是:网卡驱动和固件必须同时支持 对应模式,光 iw list 列出来不够,实际切过去不报错才算数。
如果这一步都没过,后面连不上不是问题,后面能连上才是意外。
AP启动用例
在确认我们手上的Wi-Fi芯片支持AP后,通常我们可以在hostapd的hostapd的配置文件中配置Wi-Fi的AP模式。简单来说,通过hostapd启动AP的命令是
bash
hostapd /etc/hostapd/hostapd.conf
那么我们就在hostapd.conf中要配置我们想启动的AP,比如SSID、信道、加密、接入控制和 beacon 广播。在这里分享当前我的AP配置文件
ctrl_interface=/var/run/hostapd
interface=wlan0
driver=nl80211
ssid=test-ap
wpa_passphrase=123123123
hw_mode=a
ieee80211n=1
ieee80211ac=1
ieee80211ax=0
channel=149
wmm_enabled=1
macaddr_acl=0
auth_algs=1
ignore_broadcast_ssid=0
country_code=CN
ieee80211d=1
ieee80211h=1
max_num_sta=128
wpa=2
wpa_key_mgmt=WPA-PSK
rsn_pairwise=CCMP
最详细的配置文件说明保存在hostapd的源码hostap/hostapd/hostapd.conf文件中。我当前配置文件启动的AP信息为:
其中"test-ap"是我们启动的AP名字,手机扫描AP能够扫描到但是连接这个AP但是连接失败,这个问题我下一篇博客会告诉大家如何去调试。
STA启动用例
STA 的实操流程,建议按下面这个顺序走:先扫网,再连网,再看链路,最后看 IP。
请参考下面的步骤:
先创建一个~/wpa_supplicant.conf,内容如下:
$ cat wpa_supplicant.conf
ctrl_interface=/var/run/wpa_supplicant
update_config=1
在Ubuntu上启动wpa_supplicant程序
bash
sudo wpa_supplicant -B -D nl80211 -i wlan0 -c ~/wpa_supplicant.conf
运行wpa_cli程序执行扫描、连接热点的流程
Selected interface 'wlan0'
Interactive mode
> scan
OK
> scan_result
add_network
> 0
set_network 0 ssid "你要连接热点名称"
> OK
> set_network 0 psk "该热点的密码"
OK
> enable_network 0 #使能网络俩基恩
OK
在wpa_state显示"COMPLETED"后,就可以开始分配IP了上网了。
sudo wpa_cli status | grep state
wpa_state=COMPLETED
$ sudo udhcpc -i wlan0udhcpc: started, v1.30.1
udhcpc: sending discover
udhcpc: sending select for 192.168.0.105
udhcpc: lease of 192.168.0.105 obtained, lease time 7200
ip: RTNETLINK answers: File exists
$ ping -I wlan0 8.8.8.8
PING 8.8.8.8 (8.8.8.8) from 192.168.0.105 wlan0: 56(84) bytes of data.
From 192.168.0.105 icmp_seq=1 Destination Host Unreachable
ping: sendmsg: No route to host
From 192.168.0.105 icmp_seq=2 Destination Host Unreachable
From 192.168.0.105 icmp_seq=3 Destination Host Unreachable
^C
--- 8.8.8.8 ping statistics ---
9 packets transmitted, 0 received, +6 errors, 100% packet loss, time 8171ms
pipe 3
$ ping -I wlan0 www.baidu.com
PING www.a.shifen.com (183.240.99.224) from 192.168.0.105 wlan0: 56(84) bytes of data.
From 192.168.0.105 (192.168.0.105) icmp_seq=1 Destination Host Unreachable
From 192.168.0.105 (192.168.0.105) icmp_seq=2 Destination Host Unreachable
From 192.168.0.105 (192.168.0.105) icmp_seq=3 Destination Host Unreachable
From 192.168.0.105 (192.168.0.105) icmp_seq=4 Destination Host Unreachable
ping: sendmsg: No route to host
log显示已经成功分配IP给wlan0,但是ping 百度和谷歌的网站都pin不通。但是没有关系,下一期我会带大家如何分析STA/AP的这一期博客提到的问题。
结语
STA 和 AP 本质上是两套角色,也意味着两套测试方法。STA 重点看能不能扫到、连上、拿到 IP、稳定保持;AP 重点看能不能广播、能不能接入、能不能把流量正确转出去。`iw` 是这套流程里非常好用的底层工具,但它不是唯一工具。真正把 WiFi 跑顺的人,往往不是命令记得最多,而是知道每一步该看什么、该测什么、该怎么把问题切层。
如果你把这篇里的命令和流程跑熟了,后面不管是调 STA、调 AP,还是做兼容性测试、稳定性测试,都会顺很多。