在开始具体的记录前,需要我们对Wifi有一个基本的了解。
Wi-Fi的设置至少需要一个接入点(Access Point,AP)和一个或一个以上的客户端用户(client)。无线AP每100ms将SSID(Service Set Identifier)经由beacons(信号台)数据包广播一次,beacons数据包的传输速率是1 Mbit/s,并且长度相当的短,所以这个广播动作对网络性能的影响不大。因为Wi-Fi规定的最低传输速率是1 Mbit/s,所以确保所有的Wi-Fi client端都能收到这个SSID广播数据包,client可以借此决定是否要和这一个SSID的AP连线。用户可以设置要连线到哪一个SSID。Wi-Fi系统开放对客户端的连接并支持漫游,这就是Wi-Fi的好处。但亦意味着,一个无线适配器有可能在性能上优于其他的适配器。由于Wi-Fi通过空气传送信号,所以和非交换以太网路有相同的特点。
——维基百科-Wi-Fi
从上文我们可以了解到,在简单的Wifi网络中,成员主要包括接入点(Access Point,AP)
,和客户端用户(client)
两种类型。而以上两种类型则分别对应了AP
以及STA
模式(关于有关Wifi工作模式的讲解,详见:wifi的几种工作模式):
注:以上关于工作模式的讲解摘自:wifi的两种工作模式。
我们以生活中一个常见的场景为例:手机通过无线路由器提供的热点浏览互联网。此时手机中的Wifi模块工作在STA模式,而无线路由器中的Wifi模块则是工作在AP模式。实际的网速可能同时受限于两者。
根据木桶效应,倘若无线路由器的性能有限,即使我们为PC更换了性能强劲的无线网卡,实际的网络体验可能仍然达不到预期。
注:以上仅是个人的一些粗浅的理解,如果不当,还望各位指正
通过前文的介绍,我们可以了解到,Wifi主要工作在STA或AP模式。本节就主要介绍,如何在两种模式下对无线网卡的性能进行测试。
测试过程中,我们主要借助iperf3对网络性能进行测试,针对该工具的使用方法,详见:网络性能测试工具iperf详细使用图文教程【转载】。
同时,正如我们在前文中提到的,实际的网络性能会同时受到STA以及AP双方的影响,为确保测试结果的准确性,在测试STA时,我们会对AP性能进行限制(反之亦是如此),具体的做法是,为TCP连接设置统一的窗口大小。
First Header | Third Header |
---|---|
-w, --window #[KMG] | 设置套接字缓冲区为指定大小。对于TCP方式,此设置为TCP窗口大小。对于UDP方式,此设置为接受UDP数据包的缓冲区大小,限制可以接受数据包的最大值。 |
注:以上方式仅是本人的个人想法,倘若哪位有更好的方式,还望告知。
iperf3 -s
至此,AP端的工作已经就绪。
ifconfig -a
,保证系统已经识别到网卡,并使其处于up
状态。iw
指令:iw dev wlan0 scan
上述命令,会扫描wlan0
网卡,以获取可连接的AP信息,具体的扫描结果如下所示:
...
BSS 08:3e:8e:a7:d0:17(on wlan0)
TSF: 2508943706 usec (0d, 00:41:48)
freq: 2462
beacon interval: 100 TUs
capability: ESS Privacy SpectrumMgmt ShortSlotTime (0x0511)
signal: -32.00 dBm
last seen: 5 ms ago
SSID: AAA (热点名称)
...
我们可以根据能够检索到相应的热点名称,来判断设备是否在对应AP的覆盖范围之内。
关于iw指令的基本使用,详见:iw 命令。
wpa_supplicant
命令,尝试连接热点:wpa_supplicant -c wpa_supplicant.config -i wlan0 &
其中-i
指定待操作的网络设备,-c
选项则指定相应配置文件,配置文件的示例如下:
ctrl_interface=/var/run/wpa_supplicant
network={
ssid="AAA" #热点名称
psk="12345678" #密码
key_mgmt=WPA-PSK
proto=RSN
pairwise=CCMP
}
其中除热点名称、密码等常见信息外,我们需要格外注意AP的加密方式等信息,关于该文件的写法,详见:wpa_supplicant 的配置说明文件 wpa_supplicant.conf。
udhcpc -i wlan0 &
分配成功后,会有相关的打印。当然,我们也可以通过ifconfig查看相应相应的网口是否已经分配了ip。
iperf3 -c 192.168.24.1 -w 256K -t 30
其中-c
选项后,所跟的ip为AP的ip,命令执行成功后,会周期性的展示当前的通信状态,并在汇总后,给出一个平均结果:
$ ./iperf3 -c 127.0.0.1 -w 256K -t 3
Connecting to host 127.0.0.1, port 5201
[ 5] local 127.0.0.1 port 44060 connected to 127.0.0.1 port 5201
[ ID] Interval Transfer Bitrate Retr Cwnd
[ 5] 0.00-1.00 sec 3.70 GBytes 31.8 Gbits/sec 0 639 KBytes
[ 5] 1.00-2.00 sec 3.70 GBytes 31.8 Gbits/sec 0 639 KBytes
[ 5] 2.00-3.00 sec 3.48 GBytes 29.9 Gbits/sec 0 639 KBytes
- - - - - - - - - - - - - - - - - - - - - - - - -
[ ID] Interval Transfer Bitrate Retr
[ 5] 0.00-3.00 sec 10.9 GBytes 31.1 Gbits/sec 0 sender
[ 5] 0.00-3.02 sec 10.9 GBytes 30.9 Gbits/sec receiver
iperf Done.
以上,即为STA模式下的测试方法。
ifconfig -a
确认。此后,需要使其处于up
状态,并为网卡设置相应ip。hostapd -B host.conf
以上命令中的host.conf
为命令所需要的配置文件,以下为一个可用示例:
interface=wlan0 #操作的网卡
ctrl_interface=/mnt/tmpfs/hostapd
ssid=ST-101000000104 #热点名称
hw_mode=g
channel=1
country_code=CN
driver=nl80211
beacon_int=100
ieee80211n=1
max_num_sta=8
采用以上的配置文件,无须输入密码。关于配置文件中各选项的含义,详见:hostapd(AP)的配置文件。
注:以上命令在执行过程中,可能会提示以下错误:
Configuration file: hostapd.conf
nl80211: Could not configure driver mode
nl80211 driver initialization failed.
hostapd_free_hapd_data: Interface wlan0 wasn't started
解决办法是,需要在执行该命令前,需要我们首先从网络管理(network manager)处停止wlan,解锁接口,并未网卡设置Ip,对应的命令如下:
nmcli radio wifi off
rfkill unblock wlan
ifconfig wlan0 10.15.0.1/24 up
关于该问题的详细解释,详见:hostapd error “nl80211: Could not configure driver mode”。
dhcpd -f dhcp.conf &
通过以上命令,会开启相应的dhcp服务,以便为接入的STA分配IP地址。-f
选项,为其指定相应的配置文件,以下为一个简单的示例:
lease_file /var/tmp/landhcps0.leases
start 192.168.240.100
end 192.168.240.200
interface wlan0
opt dns 202.96.134.133 8.8.8.8
option subnet 255.255.255.0
opt router 192.168.240.1
option dns 192.168.240.1
option domain local
option lease 864000
AP端启动iperf3
此时,需要在AP端启动iperf3,具体的命令与上一节AP端的一致。
STA尝试连接热点,并开始测试
尝试使用PC等设备搜索相应热点,并尝试连接,待连接成功后,执行以下命令,进行测试:
iperf3 -c 192.168.24.1 -w 256K -t 30
具体的输出结果与上一节基本一致,就不在此处做过多展示。
以上,即为Wifi模块处于AP和STA模式下的性能测试方法。
发表日期:2020年01月05日
更多内容: