USB 无线网卡使用小记
鉴于笔记本网卡老化严重,信号太差,于是最近在京东上买了一个睿因(Wavlink)的 USB 无线网卡,WL-WN688A2 1200M 双频5g千兆 USB3.0 无线网卡,看官网上对这款产品的介绍,感觉还蛮高级的玩意,所以顺便学习了点无线网卡的知识,然后在自己的 Ubuntu 下成功安装其驱动并开始使用起来了。在此记录下。
一、无线网卡基础知识
1.1 什么是 5G WiFi?
WiFi 技术从诞生到现在已经经历了五代的升级:从 a -> b -> g -> n 到 ac,第五代 WiFi 技术 IEEE 802.11ac 由于工作频率是 5GHz,所以叫做 5G WiFi 。如下图所示:
相应的,目前最流行的是第四代,工作频率在 2.4GHz,所以叫做 2.4G WiFi。不过要注意的是,并不是工作频率在 5GHz 就是这里说的 5G WiFi,从上图中可以看到,第一代和第四代 WiFi 技术也有用到 5GHz 的频率,严格来说,这两种都不算 5G WiFi,只有第五代 802.11ac 才算是 5G WiFi。有些厂商经常吹嘘自己的网卡是 5G 网卡,实际上只是第四代的 802.11n,和第五代的区别还是很大的。百度上可以搜到 2.4G 和 5G WiFi 的区别。
1.2 什么是双频?
这款无线网卡号称 AC1200 双频无线网卡
,AC 好理解,上面解释了第五代 WiFi 技术就是 IEEE 802.11ac,1200 自然是指 1200Mbps 的传输速度。那双频是什么意思呢?
从上面的内容中我们可以看出 2.4G 和 5G 的很多区别,其实,对于用户感知来说,最重要区别只有两个:传输速率和距离。2.4G 传输速度比 5G 慢,但是传输距离远,穿墙能力强。而 5G 的最大优势则是近距离传输速度很快,适合看电影玩游戏。如下图(图片来自 Wavlin 广告)。
所谓双频,就是集 2.4G 和 5G 于一身,一张网卡,两个频段,既可以满足长距离传输的要求(2.4G),也可以满足传输速度的要求(5G)。其实这里厂商耍了一个滑头,它所宣称的 1200Mbps 传输速度,是双频合在一起的速度,2.4G 的速度是 300Mbps,5G 的速度是 867Mbps,加起来 1167Mbps,比 1200 还少了 33 呢。
另外,广告里宣称网卡还使用了 MIMO 架构
和 CCA 空闲信道检测技术
来充分提升网卡的无线性能和稳定性,听起来还挺牛逼的,这些东西有时间再研究研究。
1.3 什么是 USB3.0 ?
和 WiFi 技术一样,USB 技术也经过二十年的发展,经历了三代,从 1996 年提出 USB1.0 规范开始,当时的传输速度只有 1.5Mbps,然后升级到 USB1.1,速度 12Mbps,到后来演变到 USB2.0,速度也升至 480Mbps,再到最新的 USB3.0 理论速度直接达到了 5Gbps,最新一代的 USB3.1 甚至达到了 10Gbps。
二、安装网卡驱动
做完功课之后,就开始无线网卡之旅了。无论是有线网卡还是无线网卡,大多数情况下,在使用之前都必须得安装好网卡驱动,随着 Wavlink 包装的有一个光盘,附带有网卡驱动,但是却是 Windows 系统的。所以在使用这个无线网卡之前,还得学习下如何在 Linux 系统下安装网卡驱动。
其实,无线网卡驱动的安装相当简单,可以分成下面两个步骤:
2.1 确定无线网卡的芯片类型
在安装驱动之前,我们首先需要确定无线网卡的芯片类型,这里有两个概念很容易混淆,品牌名和芯片名。有些人可能会说,我的无线网卡是 TP-LINK 的,要在哪里下载 TP-LINK 的网卡驱动呢?这个问题其实很难回答,在确定你的芯片类型之前,具体要安装什么样的驱动也是不能确定的。一般来说,买无线网卡的时候,产品说明书上会告诉你网卡的芯片信息,是 Atheros,还是 Realtek,还是 Broadcom 或者其他的什么芯片。
譬如,我买的这款无线网卡,产品文档上明确的写了:瑞昱 RTL8812AU
芯片,兼容主流操作系统。很显然芯片类型是 Realtek 的。
如果没有其他手段来得到网卡的芯片类型信息,可以使用 lsusb
命令来查看:
$ lsusb
Bus 002 Device 004: ID 04f2:b044 Chicony Electronics Co., Ltd Acer CrystalEye Webcam
Bus 002 Device 003: ID 0bda:8812 Realtek Semiconductor Corp. RTL8812AU 802.11a/b/g/n/ac WLAN Adapter
Bus 002 Device 002: ID 8087:0020 Intel Corp. Integrated Rate Matching Hub
Bus 002 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
Bus 001 Device 002: ID 8087:0020 Intel Corp. Integrated Rate Matching Hub
Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
从第二行网卡的名称:RTL8812AU 802.11a/b/g/n/ac WLAN Adapter 中也能看出网卡是 RTL8812AU 芯片。
有时候很郁闷的是 lsusb
也看不到自己的网卡,这个时候也不知道是 usb 接口有问题,还是自己的网卡有问题,反正系统没有一点反应。如果出现这种情况,有一个小技巧可以使用,就是查看 /var/log/syslog
这个日志文件。先将 usb 无线网卡拔下,然后在终端中输入下面的命令:
$ sudo tail -f /var/log/syslog
然后再将网卡插入 usb 接口,这时如果不出意外,会出现大量的日志,像下面这样:
Jun 19 22:05:52 l-s kernel: [ 2836.763872] usb 2-1.2: new high-speed USB device number 5 using ehci-pci
Jun 19 22:05:53 l-s kernel: [ 2836.856752] usb 2-1.2: New USB device found, idVendor=0bda, idProduct=8812
Jun 19 22:05:53 l-s kernel: [ 2836.856758] usb 2-1.2: New USB device strings: Mfr=1, Product=2, SerialNumber=3
Jun 19 22:05:53 l-s kernel: [ 2836.856762] usb 2-1.2: Product: 802.11n NIC
Jun 19 22:05:53 l-s kernel: [ 2836.856765] usb 2-1.2: Manufacturer: Realtek
Jun 19 22:05:53 l-s kernel: [ 2836.856768] usb 2-1.2: SerialNumber: 123456
如果出现日志,则说明网卡和 usb 接口都没有问题;如果没有出现任何日志,则说明网卡或 usb 接口坏了,可以换一个 usb 接口试试;如果出现一些报错信息,则 Google 之,在安装驱动之前,先将这些错误解决掉。
2.2 下载并安装驱动程序
无线网卡的官网,基本上都会提供驱动程序的下载,学会使用 Google 搜索。譬如我买的这款网卡产品名称是:睿因 WL-WN688A2,通过官网可以搜到该产品的很多文档:Download Drives And Manual ,其中就包括了 RTL8812AU 的驱动程序。
另外,我们已经知道了网卡的芯片类型是 Realtek ,也可以去 Realtek 的官网搜搜看。
但是不幸的是,官网提供的驱动程序,只支持到 Linux 内核版本 3.10,而我的 Ubuntu 16.04 内核版本是 4.4 ,自然编译都通不过。好在开源的世界里,从不缺少勇士,早就已经有人对官网的驱动程序进行改写了,使其支持最新的 Linux 系统。最后我选中了 github 上 gnab 的代码:Realtek 802.11n WLAN Adapter Linux driver 。
$ git clone https://github.com/gnab/rtl8812au.git
$ ./install.sh
代码中自带了安装脚本,使用 ./install.sh
即可安装。
2.3 附安装脚本
驱动程序的安装脚本挺简单的,贴上来学习一下。
#!/bin/bash
if [ "$(id -u)" != "0" ]; then
echo "This script must be run as root" 1>&2
exit 1
fi
make &&
cp 8812au.ko /lib/modules/$(uname -r)/kernel/drivers/net/wireless &&
depmod &&
echo "
***Success***
***Module will be activated automatically at next reboot***
" &&
while true; do
read -p "Do you wish to activate the module now? (y/n)" yn
case $yn in
[Yy]* ) insmod 8812au.ko && echo "***Module activated***" && break;;
[Nn]* ) exit;;
* ) echo "Please answer yes or no.";;
esac
done
首先使用 make 命令编译源码,生成驱动文件 8812au.ko 。
然后将其复制到 /lib/modules/$(uname -r)/kernel/drivers/net/wireless
目录下,并运行 depmod
命令,这一步可以使驱动在开机时自动加载。depmod
命令的用处是创建模块依赖关系的列表,生成一个 modules.dep 文件,系统启动时,modprobe
会根据该文件自动加载驱动以及驱动的依赖关系。
最后脚本提示用户是否立即启用,如果输入 yes 则执行 insmod 8812au.ko
命令,insmod
和 modprobe
命令一样,用来立即安装驱动。如果不出意外,无线网卡的指示灯就开始闪烁起来了。
可以通过 lsmod
命令确定驱动是否已经成功安装:
$ lsmod | grep 88
8812au 991232 0
要卸载驱动,使用 rmmod
命令。
好玩~出个嗅探的教程吧~
请问这个网卡支持aircrack-ng吗,支不支持monitor和AP模式
楼主,真的牛.
学长好,菜鸟小学弟想请教一下Linux,我们怎么查看当前使用的协议是哪一种呢? 802.11 a b g n ac
哈哈,来自 NUS 的学弟,幸会幸会!
非常有意思的问题,我发现在 Windows 和 Mac 下面查看当前正在使用的协议都非常简单,直接在无线 WiFi 的属性里就可以看到。但是我在 Ubuntu 下面并没有找到这样的界面(其他发行版没尝试,不太清楚),也没有找到相应的命令。
能想到的一个方法就是使用 iwconfig 得到类似下面的结果,根据其中的 Frequency 和 Bit Rate 可以推测出当前使用的协议是 802.11n(因为 g 最大 54Mbps),当然可能并不准确。
$ iwconfig
wlan0 IEEE 802.11bgn ESSID:"defenceOTA"
Mode:Managed Frequency:2.412 GHz Access Point: 6C:72:20:5D:7F:57
Bit Rate=130 Mb/s Tx-Power=16 dBm