前段时间接触了wifi,主要是在linux系统下做预研、开发。本文根据个人收集资料及研究经验做了一些基本入门级别的引子,旨在对wifi有一个很基础的入门的认知,比如知道wifi模块硬件接口有哪些,了解wifi驱动,等等。如有需要,可以根据文中给出的术语、链接进行扩展的研究学习。

一、硬件接口

就笔者接触的资料,wifi接口有很多种,不同接口适应于不同场合。更多资料,可以直接到某宝上搜索了解。

USB

适用于PC机,插到USB口安装驱动即可使用。这类接口还是比较常见、常用的。

PCI

直接将无线网卡插入PCI插槽,系统一般会识别到PCI设备,但要安装驱动才能正常使用无线网络。后文基于该类接口展开描述。现在在一些嵌入式专用设备上,比较流行使用PCIE接口,对于linux上应用而言并无多大差异。

串口

使用AT指令进行操作。一般模块会带有单片机。许多年前,笔者的同学也曾研究过GSM模块,也是使用AT命令的——那时,“迟思堂工作室”正式成立。不过此类模块,对速率要求高的可以不用考虑了。

二、基本概念

wifi的基本概念比较多,网上资料一大把。这里只简单描述一下,有的直接拿人家写好的来用了。

wifi模式

AP模式:即Access Point,接入点。是一个无线网络的创建者,是网络的中心节点。一般家庭或办公室使用的无线路由器就是一个AP。

STA模式:即Station, 类似于无线终端,STA本身并不接受无线的接入,它可以连接到AP,一般无线网卡即工作在该模式。

Monitor模式:这种模式下,所有的数据包无过滤地传输到主机,此模式下主要查看网络中出了那些故障。在支持MAC80211的一般设备中,工作于Monitor模式下,可以有效地对整个网络进行监控,在此模式下,可以实现数据包的注入。

其它概念

SSID:SSID就是一个WiFi网络的网络名称。

频率:

1)IEEE 802.11b/g标准工作在2.4G频段,频率范围为2.400—2.4835GHz,共83.5M带宽

2)划分为14个子信道

3)每个子信道宽度为22MHz

4)相邻信道的中心频点间隔5MHz

5)相邻的多个信道存在频率重叠(如1信道与2、3、4、5信道有频率重叠)

6)整个频段内只有3个(1、6、11)互不干扰信道

国家码:不同国家使用的信道有不同,要根据实际需要设置,中国的国家码为CN,美国为US,等等。

对于5GHz而言,还有DFS。

三、linux相关驱动

linux下的无线网卡驱动,一般会结合ko和固件使用。固件一般不开源,但官方会提供二进制文件下载。固件放到linux系统的/lib/firmware目录下,在系统启动时会到对应目录查找。可以到https://wireless.wiki.kernel.org/en/users/Drivers上查看linux无线网卡驱动,上面有许多不同厂商的芯片驱动。对于一些特性,如是否支持AP模式、Monitor模式,等,都可以在上面找到信息。在研究无线网卡前,最好去查一下网卡是否被内核支持。

另外,内核层和用户层操作无线网卡的还涉及到mac80211、cfg80211、nl80211这些模块,还需要对内核进行配置(如iptables、bridge等),这些目前没有研究过,暂时不写。

四、linux相关系统应用

linux系统涉及wifi的模块、软件或服务程序十分之多,本节简单介绍笔者接触过的一些软件。注意,无线网卡也是网卡,一般名称为wlan0、wlan1,ifconfig、ethtool命令依然对其生效。另外网络设备命名规则同样生效,当同一主板变换无线网卡时,其名称会发生变化。关于此问题可以参考笔者个人主页上的文章,有详细描述。

如果单纯在linux系统中使用无线网卡作为上网之用,无需做太多的配置,像在Ubuntu系统中,直接点击桌面任务栏的WIFI图标,找到对应无线路由器名称,输入密码即可。但如果在linux中使用无线网卡搭建热点环境,则需要额外的工具,一般是使用hostapd,外加一个dhcp服务器。

lspci

如果无线网卡使用PCI接口,则可以使用lspci命令查看设备ID。上面提供

# lspci

03:00.0 Class 0280: Device 168c:003c

iw

查看、配置无线网卡命令。查看当前无线网卡信息,直接用iw list即可。关于这个命令本文不展开讨论。

hostapd

linux实现AP的服务程序。很多脚本都会使用这个程序。一般结合dhcp服务器组成软件AP。可以自己写脚本实现,也可以使用如ap-hostapd、create_ap这些著名的脚本。

ap-hostapd

一个脚本,利用hostapd、dnsmaq实现完整的软件AP功能。

rfkill

linux下可以使用rfkill命令打开、禁止无线电子设备,如蓝牙、WIFI。如果在系统中无法使用WIFI,则需要查一下是否被禁止了。下面是查看命令:

$ rfkill list

0: phy0: Wireless LAN

Soft blocked: no

Hard blocked: no

可以看到我的WIFI是没有被阻止的,亦即可正常使用。要禁止(或阻止)WIFI,可以使用命令:rfkill block wifi。要激活,则使用命令:rfkill unblock wifi。具体信息rfkill –help查看。

五、个人研究计划

首先将WIFI网卡当成普通网卡使用,即station模式,能让linux连接无线路由器,正常上网。

然后研究AP模式,把linux系统做成热点,让手机、平板正常连接。

后续再看看minitor模式,主要想抓一下周围手机、平板的包(有些邪恶想法,不过还没实践)。

再后面有机会和时间,深入研究驱动。

当然,如有其它事务中断(比如中午你吃完饭正打算午休,领导叫你马上收拾电脑去机场到东北某省出差几天),以上的再议。

六、参考资源

CRDA:https://wireless.wiki.kernel.org/en/developers/Regulatory/CRDA

Linux下支持的wifi芯片列表:https://wireless.wiki.kernel.org/en/users/Devices

查看linux驱动是否支持AP模式:http://ubuntuhandbook.org/index.php/2014/09/wifi-hotspot-access-point-not-supported/

linux无线网卡驱动大本营:https://wireless.wiki.kernel.org/en/users/Drivers

hostapd官网:http://w1.fi/

WIFI基本知识点:http://blog.csdn.net/myarrow/article/details/7930131

WIFI从零开始学起:http://blog.csdn.net/perddy/article/details/9017977

转自:http://www.latelee.org/net-study/my-wifi-notes.html

[知识整理]Linux系统WIFI知识的一些整理的更多相关文章

  1. Linux系统基础知识整理

    一.说明 本篇文章,我将结合自己的实践以及简介,来对linux系统做一个直观清晰的介绍,使得哪些刚接触Linux的小伙伴可以快速入门,也方便自己以后进行复习查阅. 二.基本知识整理 1.Linux文件 ...

  2. Linux系统基础知识整理(一)

    本文来自于: https://www.cnblogs.com/hafiz/p/6686187.html#4196989 一.说明 本篇文章,我将结合自己的实践以及简介,来对linux系统做一个直观清晰 ...

  3. Linux系统文件属性知识

    ---------------------------------------------------------------------------------------------------- ...

  4. 嵌入式4412开发板学习知识-Linux系统基础知识

    1. 什么是Linux系统编程 Linux系统编程分为三个部分:系统调用.C库和C编译器. 系统调用系统编程的基础是系统调用,也结束于系统调用.在带有操作系统的嵌入式开发中,需要从操作系统申请一些服务 ...

  5. 八.linux系统文件属性知识

    1.文件属性权限是12位,现在只看9位,其中每3个一组,为:属主权限.属组权限.其他权限,其中r可读,w可写,x可执行,如图: 2.文件属性之软硬链接   linux系统中有两种链接,为硬链接(ln) ...

  6. Linux系统小知识

    换Linux系统快半年了,刚开始总是碰到各种各样的问题,虽然斗解决了,由于没有记录,过一段时间就忘了,故在这里记录一下. 选择国内镜像源: Manjaro有一个很好用的命令rankmirrors.ra ...

  7. find查找文件命令 - Linux系统中的常用技巧整理

    “find”在Linux系统中是比较常用的文件查找命令,使用方法有很多,可以拥有查找文件.文件目录.文件更新时间.文件大小.文件权限及对比文件时间.下面是整理的“find”常用方法,方便以后需要的时候 ...

  8. 相关不同Linux系统的性能监控命令整理

    Linux系统 查看系统版本情况: $uname -a 监控进程的CPU,MEM使用情况: $ps –aux 过滤方式命令:$ ps -aux|awk '{print $3,$4,$11}'|sort ...

  9. 05.Linux系统-WCP知识共享平台安装部署(旗舰版)

    WCP知识共享平台部署 一.环境准备 操作系统:CentOS Linux release 7.5.1804 (Core) Java:jdk-7u79-linux-x64.tar.gz 中间件:apac ...

随机推荐

  1. APUE学习笔记——10.9 信号发送函数kill、 raise、alarm、pause

    转载注明出处:Windeal学习笔记 kil和raise kill()用来向进程或进程组发送信号 raise()用来向自身进程发送信号. #include <signal.h> int k ...

  2. C#单元测试Nunit小结(20141018)

    1. 下载和安装Nunit工具: NUnit是一款堪与JUnit齐名的开源的回归测试框架,供.net开发人员做单元测试之用,可以从www.nunit.org网站上免费获得,然后在系统中安装: 2. 在 ...

  3. 新浪云使用smarty模板的方法

    在部署到sina app engine(sae)上时出现了问题,因为sae作为云计算平台式无法进行文件读写操作的,所以Smarty中输出的缓存文件就无法实现. 错误信息:“SAE_Fatal_erro ...

  4. ZooKeeper 学习资料积累

    跟着实例学习ZooKeeper的用法: 临时节点 跟着实例学习ZooKeeper的用法: 缓存 跟着实例学习ZooKeeper的用法: 队列 跟着实例学习ZooKeeper的用法: Barrier 跟 ...

  5. 安卓开发 报错 错误:This version of android studio is incompatible with the gradle version used. 的解决

    本文的解决方法主要参考以下文章: https://blog.csdn.net/sinat_15417921/article/details/51907728 Android 开发总是会遇到各种不知道怎 ...

  6. Mac设置SVN:Cornerstone3

    前因 在windows下用Tortoisesvn.可惜Tortoisesvn没有Mac版,只能上知乎寻找适合于 Mac的SVN软件. 经过 找到了一款名为Cornerstone的软件.在App Sto ...

  7. axios如何使用

    我们知道,vue2.0以后,vue就不再对vue-resource进行更新,而是推荐axios,而大型项目都会使用 Vuex 来管理数据,所以这篇博客将结合两者来发送请求 1.安装axios cnpm ...

  8. hihoCoder1599 bfs

    特殊的剪枝,整体上和辗转相除法有点像 #1599 : 逃离迷宫4 时间限制:10000ms 单点时限:1000ms 内存限制:256MB 描述 小Hi被坏女巫抓进一座由无限多个格子组成的矩阵迷宫. 小 ...

  9. HttpClient通信

    1.背景 大多数系统功能和代码都是自己写的,自己用,但是在有些情况下,我们可以利用已经存在的系统,完成对自己实现相对很麻烦的功能,这些一般代价相对较大,自己不可能专门写一个系统或者太过很复杂的代码来完 ...

  10. 使用OPtional的orElse()问题

    使用OPtional的orElse()问题 项目中有这样一段代码: return Optional.ofNullable(service.A()).orElse(service.B()) 1 功能显而 ...