欢迎大家一起学习探讨通信之WLAN。在工作和平时与朋友交流中,时不时有人问到,“想学WiFi,不知道如何入手?”,“搞了一两年WiFi,但感觉还是一头雾水,啥都没掌握,怎么办?”。本文个人将从自己工作和职业发展的角度尝试回答这个问题,希望对想从事WiFi开发的朋友们有所帮助。
本节相关课节内容:
1.公众号"通信之WLAN"内容《通信系列》
2.公众号"通信之WLAN"内容《WiFi专栏》
从一个小故事开始。故事内容是这样的!
小王:计算机专业,研究生毕业。今天正式入职一家从事WiFi产品相关开发的公司。
师傅:你之前了解过WiFi流程和协议吗?
小王:没有。
师傅:好。我先发你点资料,你先学习看看。《802.11无线网络权威指南》和《80211-2020.pdf协议标准》。
小王:好的。
时间两周过去了。。。
师傅:学的咋样了?
小王:大概知道了啥是WiFi,WiFi有哪些帧类型。基本的名词掌握了。
师傅:好的。学习WiFi要基于实际流程分析。你结合抓包学习学习。
时间两周过去了。。。
师傅:学的咋样了?
小王:大概知道了WiFi的连接流程和相关帧类型。
师傅:好的。学习WiFi要从代码层去分析和研读协议标准。你要开始分析简单的一些WiFi连接过程中的问题。
时间两个月过去了。。。
小王可以从代码层面上分析WiFi连接和断开等流程,可以开始工作了。
时间一年过去了。。。
小王对WiFi协议交互和代码比较熟悉,处理问题比较顺手。
时间又一年过去了。。。
小王将可能面临两种情况:
情况1:“WiFi相关专业知识这么多,感觉啥都不会,很迷茫”。
情况2:“WiFi就这一点东西,每天就是分析包,分析流程,没意思”。
此时的小王,很容易放弃从事的WiFi行业,转行了。
相信大家身边也遇到类似小王的情况。WiFi网络作为一种无线通信系统,说它简单,一定是骗人的。WiFi领域可分为两个大方向“学术研究”和“工程开发”。
“学术研究”:协议标准研究制定,通过引进新的技术和优化通信机制,提高WiFi网络通信系统的性能。
“工程开发”:基于WiFi协议标准,开发实现组成WiFi网络通信系统的产品。
重点来看“工程开发”。以Android系统为例,先来看下WiFi岗位的划分,WiFi技术的“工程开发”涉及细分的WiFi岗位为:
WiFi应用工程师:WiFi设置开发,基于WiFi技术应用开发,DHCP/DNS等应用层协议。
WiFi框架工程师:Android系统Framework WiFi模块和wpa_supplicant。
WiFi驱动工程师:Host WiFi驱动开发。
WiFi协议工程师:WiFi MAC层协议的开发,如Firmware固件实现。
WiFi数字工程师:WiFi技术涉及数字部分RTL实现。
WiFi射频工程师:WiFi RF相关实现。
大多数公司WiFi岗位划分都不是很清晰,统称为WiFi工程师。从WiFi涉及岗位的划分,除“WiFi数字工程师”和“WiFi射频工程师”岗位外,强烈建议从上向下学,方便入手。
好。接下来尝试解答“学习WiFi,怎么入手更合适?”。
第一阶段:通信基础
WiFi是组成无线通信系统网络的技术,学习WiFi之前,需掌握“通信原理“的基本知识,了解基本的通信系统模型,设备间数据无线传输需经过哪些主要过程。
学习内容:
1、查看《通信原理》教材
2、公众号-通信系列【第1,2,4节】
WiFi网络也完全符合基本的通信系统模型,通过对通信系统理论的了解,在进一步入手学习WiFi,就有了“心中有网,学着不慌”感觉。
第二阶段:理论基础
经过第一阶段的学习,掌握了通信系统主要模块组成。WiFi技术即按照WiFi协议实现,使设备间可以组成WiFi网络通信系统。掌握WiFi相关的名称概念和理论基础,必不可少。推荐两本WiFi中文版书籍。
学习内容:
1、阅读学习《802.11 无线网络权威指南》
2、阅读学习《CWNA 官方学习指南(第3版)-认证无线网络管理员》
通过以上两本WiFi技术相关的书籍学习,将会对WiFi网络通信系统有更深一步的了解。同时,可掌握WiFi的相关基础理论知识点。
第三阶段:实例分析
经过前两个阶段的学习,对WiFi技术有了一定的了解。掌握WiFi相关的抓包工具使用,分析设备间帧交互流程,可更好的了解WiFi技术。利用身边手机WiFi设备连接路由器,抓取完整手机WiFi连接路由器的整个过程。结合第二阶段学习内容,学习相关帧格式和主要字段含义。
学习内容:
1、阅读学习《第二十九节:通信之WLAN(Omnipeek-Ⅰ)》
第四阶段:代码分析
根据手头资源情况选择对应的设备。如Android 手机,找到对应的Android源码。根据岗位情况,从WiFi 设置应用开始,代码层面仔细跟踪WiFi扫描的整个代码实现流程。
WiFi设置->Android WiFi Framework->wpa_supplicant->linux cfg80211->host driver->Firmeware。
其他FreeRTOS或linux系统等,建议从代码层面详细分析WiFi的扫描流程逻辑。
第五阶段:协议学习
通过前四个阶段的学习,学习WiFi已算成功入门。为了解决小王两年后可能面临的问题。从事WiFi技术开发,学习研读WiFi协议标准非常重要。
工作中好多协议上的问题和困惑,在标准协议中基本都可以找到答案。同时,可以更系统的掌握WiFi技术。
举个例子,笔者在分析RTS和CTS流程有点疑问,RTS请求Duration值怎么计算?
阅读相关协议有以下规定:
1、控制帧需要使用Basic Rate发
2、CTS 回复的速率不能高于RTS 使用速率。
3、CTS frame PLCP Preamble 回复使用RTS相同的Long或Short。
CTS Frame占14个字节, 使用以RTS的速率来计算还是相同制式最小速率计算?
如RTS 11Mb/s, CTS Frame 14个字节,以RTS速率计算发送占用时长:14*8/11=11us。
但CTS Frame回复的速率有可能1Mb/s 回复, CTS Frame 14B 占用时长:112us。
这里将有个问题:
问题1:
如果RTS Duration值以RTS速率11Mb/s计算,发送RTS的设备,收到CTS是1Mb/s,即认为媒介可以使用,直接发送。
做为CTS接收方,不检测CTS Duration。将导致空口时长少申请了101us。
存在潜在造成空口冲突,导致数据发送失败的风险。
问题2:
如果RTS Duration值以相同制式最低速率计算,如1Mb/s,CTS使用11Mb/s回复。将多申请101us。
潜在存在造成空口资源占用浪费。
通过阅读802.11标准协议,协议已写的很明确,CTS帧发送占时就以RTS速率计算。
注:协议规范【原】
1. The Duration/ID field in the CTS frame shall be the duration field from the received RTS frame, adjusted by subtraction of aSIFSTime and the number of microseconds required to transmit a CTS frame at the data rate used for the RTS frame to which this CTS frame is a response.
2. When an RTS/CTS exchange is used, the asynchronous data frame shall be transmitted after the end of the CTS frame and a SIFS period. No regard shall be given to the busy or idle status of the medium when transmitting this data frame.
可见,研读802.11协议在从事WiFi开发工作中是非常必要的。但刚开始入手WiFi相关协议,将会发现WiFi的协议特别多,802.11b/g/n/ac/ad/ax/be,802.11-1999/802.11-2007和802.11-2020等等。每个文档少则几百页,多则几千页。建议从最初的WiFi协议研读,后续的WiFi相关协议发展都在最初的协议标准上进行。
网络上WiFi相关技术的帖子也非常多。可以根据需要针对的阅读学习。
如下引用徐博整理的网络中WiFi相关资源。
https://zhuanlan.zhihu.com/p/375649906
学习内容:
1、《802.11-1999》
2、《802.11i》
3、《802.11e》
4、《802.11n》
上面协议建议按照顺序研读。开始就入手研读《802.11-2020》内容太多,难度大。对于刚入手学习WiFi协议的人阅读《802.11-1999》会更合适,更友好。文档总共才536页,相比《802.11-2020》的4379页少太多。其页数少,内容更为重要。
针对刚入手学习WiFi的朋友来说,WiFi相关知识点确实很多,但通过以上五个阶段的学习,从WiFi网络通信系统的角度学习研究,可很好的将零碎的知识点串联起来。有理论又有实践,将会发现从事WiFi行业,也是一种快乐的事。
笔者整理了文章内容提及到的所有资料,如有需要,可在CSDN上下载,链接如下。如无积分,可公众号私信获取。谢谢~!
https://download.csdn.net/download/chase_dtao/87824651
注:
以上文章内容仅代表个人观点,仅供参考。如感兴趣更多通信知识,可关注“通信之WLAN”微信公众号。谢谢大家支持~!