Linux中测试Wifi带宽

Linux中测试Wifi带宽

一、简介

  本文主要介绍Linux中,在无线网卡成功加载的情况下,如何测试网卡性能。本文主要目的在于记录测试过程,以方便后期回顾。

二、关于Wifi的简单介绍

  在开始具体的记录前,需要我们对Wifi有一个基本的了解。

1. 运作原理

  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

2. 工作模式

  从上文我们可以了解到,在简单的Wifi网络中,成员主要包括接入点(Access Point,AP),和客户端用户(client)两种类型。而以上两种类型则分别对应了AP以及STA模式(关于有关Wifi工作模式的讲解,详见:wifi的几种工作模式):

  • 工作在STA的模式下
      STA即无线站点,是一个无线网络的终端。如笔记本电脑、PDA等。
      这是一种基木的组网方式,由一个AP和许多STA组成,如下图。其特点是AP处于中心地位,STA之间的相互通信都通过AP转发完成。该模式下,WIFI模块工作在STA(CLIENT)模式。通过适当的设置,COM的数据与WIFI的网路数据相互转换。
Linux中测试Wifi带宽_第1张图片
图1:STA模式
  • 工作在AP的模式下
      AP即无线接入点,是一个无线网络的中心节点。通常使用的无线路由器就是一个AP,其它无线终端 可以通过AP相互连接。
      工作在AP模式下,手机、PAD、电脑等设备可以直接连上模块,可以很方便对用户设备进行控制(如下图)。
Linux中测试Wifi带宽_第2张图片
图2:AP模式

:以上关于工作模式的讲解摘自: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数据包的缓冲区大小,限制可以接受数据包的最大值。

:以上方式仅是本人的个人想法,倘若哪位有更好的方式,还望告知。

1.STA测试

  • 提供AP
      首先需要提供一台设备充当AP,并确保无线热点成功建立(windows下开启热点的方式,详见:怎样在Win7系统建立并开启Wifi热点),之后,通过如下命令使其工作于服务器模式。
iperf3 -s 

  至此,AP端的工作已经就绪。

  • 确保STA端,Wifi驱动成功加载
      此步需要确保STA端已经识别到相应的网卡。具体的方法可以通过ifconfig -a,保证系统已经识别到网卡,并使其处于up状态。
  • 扫描热点,确保STA能够检测相应信号
      此处我们需要确保STA能够成功扫描到AP所建立的热点。此处,需要借助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 命令。

  • 编写连接脚本,并尝试连接AP
      在确保STA已经扫描到相关AP后,我们需要借助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。

  • 通过dhcp,获取ip地址
      通过打印,判断STA已经连接热点后,需要为STA分配ip地址,此一步,主要借助如下指令:
udhcpc -i wlan0 &

  分配成功后,会有相关的打印。当然,我们也可以通过ifconfig查看相应相应的网口是否已经分配了ip。

  • 测试网络性能
      通过ping等方式,确认已经成功连接。接下来,我们就可以借助iperf3进行性能测试了:
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模式下的测试方法。

AP测试

  • 确保AP端,Wifi驱动成功加载
      此步需要确保AP端已成功加载驱动,且已经识别到相应的网卡。具体的方法可以通过ifconfig -a确认。此后,需要使其处于up状态,并为网卡设置相应ip。
  • 开启热点
      此一步,需要借助hostapd指令,开启AP服务,同时负责控制管理STA的接入和认证:
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”。

  • 开启dhcp服务
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模式下的性能测试方法。

  1. wifi的几种工作模式:https://blog.csdn.net/xygl2009/article/details/68939205
  2. wifi的两种工作模式:[https://www.cnblogs.com/cposture/p/4317015.html]
  3. 木桶效应:https://baike.baidu.com/item/%E6%9C%A8%E6%A1%B6%E6%95%88%E5%BA%94/870962?fromtitle=%E6%9C%A8%E6%A1%B6%E5%AE%9A%E5%BE%8B&fromid=750400
  4. iperf3:https://iperf.fr/
  5. 网络性能测试工具iperf详细使用图文教程【转载】:https://www.cnblogs.com/yingsong/p/5682080.html
  6. 怎样在Win7系统建立并开启Wifi热点:https://jingyan.baidu.com/article/48a42057a03cf7a9242504d0.html
  7. iw 命令:https://blog.csdn.net/a_tu_/article/details/51982976
  8. wpa_supplicant 的配置说明文件 wpa_supplicant.conf:https://blog.csdn.net/qq_22716879/article/details/51416322
  9. hostapd(AP)的配置文件:https://blog.csdn.net/wzc18743083828/article/details/20938907
  10. hostapd error “nl80211: Could not configure driver mode”:https://askubuntu.com/questions/472794/hostapd-error-nl80211-could-not-configure-driver-mode

五、文档信息

作者: Litost_Cheng

发表日期:2020年01月05日
更多内容:

  1. Litost_Cheng的个人博客
  2. Litost_Cheng的Github
  3. Litost_Cheng的博客

你可能感兴趣的:(Linux驱动)