【wpa_supplicant】Day 1 概述及架构

写在前面

最近一段时间,工作任务并不是很多,所以有时间研读技术书籍和整理博客(上次写博客还是六个月前)。

在这个专栏里,我会以《深入理解Android:Wi-Fi、NFC和GPS卷》这本书为主要参考,配合自己在日常工作中遇到的问题及分析结果,系统地研读wpa_supplicant。这也决定了,专栏的大部分内容是摘抄书籍的内容、展示抓出的log,以及分模块对流程(具体到函数)的解析。

其实在刚入职一个月时(这时刚被分配到WCN组做wifi),就浅薄地接触过WPAS,当时还立下壮志,要看遍WPAS的每一行代码,受限于对802.11协议的理解,当时并没有坚持下去。所以这次,收拾心情(我司的任务真的繁杂),重新出发。(实际上每隔一段时间回来看WPAS都会有新的收获)

写这篇文章时,我还是一个入职一年半的本科生,所以对很多复杂微妙的设计的理解会有纰漏。读者要是发现了,不妨直接留言或私信我。

概述

wpa_supplicant 是一个开源软件项目,它实现了 Station 对无线网络进行管理和控制的功能
根据官方描述,wpa_supplicant所支持的功能非常多,此处列举其中几个重要的功能点

1)支持WPA和IEEE 802.11i所定义的大部分功能
这部分功能集中在安全方面,包括:

  • 支持WPA-PSK(即WPA-Personal)和WPA-Enterprise(即利用RAIDUS认证服务器来完成身份认证的情况)
  • 数据加密方面支持CCMP、TKIP、WEP104和WEP40
  • 完全支持WPA和WPA2,包括PMKSA缓存,预认证(pre-authentication)等功能
  • 支持IEEE 802.11r和802.11w,其中802.11r规范定义了快速基础服务转移(Fast Transition)功能,而802.11w则新增了对管理帧的安全保护机制
  • 支持WFA制定的Wi-Fi Proctected Setup功能、P2P、TDLS等

(安全方面的我基本不了解,后续应该会接触到)

2)支持多种EAP Method
主要和802.1X中Supplicant的功能有关,wpa_supplicant支持多达25种EAP Method

3)对各种无线网卡和驱动的支持

  • 支持nl80211/cfg80211驱动和Linux Wireless Extension驱动
  • 支持Windows平台中的NDIS驱动

这本书的分析目标是wpa_supplicant_8,它包含三个主要子目录,分别是:
hostapd:当手机进入SoftAP模式时,手机将扮演AP的角色,故需要hostapd来提供AP的功能。
wpa_supplicant:Station模式,也叫Managed模式。
src:hostapd和wpa_supplicant中都包含了一些通用的数据结构和处理方法,这些内容都放在此src目录中
注意,hostapd/src和wpa_supplicant/src子目录均链接到此src目录(所以你修改了src路径下的文件后会发现hostapd和wpa_supplicant下的跟着改了)

架构

wpa_supplicant是一个比较庞大的开源软件项目,包含500多个文件,20万行代码,其内部模块构成如图所示

在这里插入图片描述

  • WPAS所有工作都围绕事件(对应图4-1中的event loop模块)展开。即,它是基于事件驱动的。事件驱动和消息驱动类似,主线程等待事件的发生并处理它们。WPAS没有使用多线程编程,所有事件处理都在主线程中完成。从这一点看,WPAS的运行机制倒是很简单。
  • 位于event loop模块下方的driver i/f(i/f代表interface)接口模块用于隔离和底层驱动直接交互的那些driver控制模块(如wext、ndiswrapper等,WPAS中称之为driver wrapper)。这些driver wrapper和平台以及芯片所使用的驱动相关。不过,由于driver i/f的隔离作用,WPAS中其他模块将能最大程度保持平台以及驱动无关性。
  • driver wrapper经常要返回一些信息给上层。WPAS中,这些信息将通过driver events的方式反馈给WPAS其他模块进行处理。
  • 除了定义消息格式外,RFC4137文档定义了EAP状态机,而802.1X文档中还定义了EAPOL状态机。WPAS根据这两个协议分别实现了EAP和EAPOL状态机。除此之外,WPAS还定义了自己的状态机(即WPA/WPA2 State Machine)。
  • WPAS实现了多种EAP方法,如图中EAP method模块所示。另外它还包含了TLS模块和crypto模块用于支持对应的EAP方法。
  • EAPOL以及EAP消息都属于LLC层数据,所以WPAS的l2_packet模块用于收发EAPOL和EAP消息。
  • WPAS支持较多的配置参数,这些参数的处理由configuration模块完成。
  • WPAS是C/S结构中的Server端,它通过ctrl i/f模块向客户端提供通信接口。Linux/Unix平台中,Client端利用Unix域socket与其通信。目前常用的Client端wpa_cli(无界面的命令行程序)和wpa_gui(UI用Qt实现)。
  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值