S2W-M02嵌入式WiFi串口WiFi联网过程协议详解

          目前,在嵌入式领域,智能家居、智能工业、智能公交等等控制中,WiFi已经成为了一种普遍被采用的技术。

          笔者常年在嵌入式WiFi行业做一线技术开发。本文主要从协议层面描述的是一个串口WiFi模块加电到联网过程中所经历的过程。

          本文以SimpleWiFiS2W-M02为例,通过Commviewforwifi抓包工具描述串口WiFi的联网过程:

第一步:设备上电,WiFi模块发起扫描过程:

           在此过程以前,通常已经将需要连接的无线路由器的名称(ssid)和密码已经通过其他方式设置到了模块里面。比方说S2W-M02是通过web网页的方式或者AT指令的方式已经将ssid和密码设置到了模块中。模块上电后将发起扫描动作(探测请求数据帧)。通常这一过程在WiFi联网过程中称之为主动扫描(相对应的被动扫描请查阅相关文档)。

          探测请求帧(PROBE REQ)数据协议如下:

        

 

 

           通过上图红圈1中,我们可以清楚的看到。S2W-M02发起了一个类型(Type-0  subtype-4)为探测请求的数据帧。该数据即为模块的扫描请求数据帧。该帧目的地址为广播地址(如上图2中所示,FFFFFFFFFFFF,也就是说环境中所有的WiFi热点都会接收到该数据帧。从抓包数据中我们看出SimpleWiFi发起的探测请求帧中的含有设置过的热点的名称。这样可以减少热点发送的探测响应帧的数量。

            无线路由器在收到探测请求帧后,将对比自己的SSID。如果SSID与自己SSID相同,那么将回应探测相应帧给终端(S2W-M02)。如下图所示,思科无线路由器回应探测相应帧给SimpleWiFi模块。

         

          从上图,我可以看出。无线路由器给S2WM02模块(红色部分为数据的地址信息)。

第二步:模块收到路由器信息后,发起鉴权请求过程

          SimpleWiFi模块在收到路由器的探测相应数据后,将解析路由器的信息。包括路由器的capability信息。比方说HT信息域,此信息域代表无线路由器所支持的一些功能的信息。模块收到该信息后,设置相关的寄存器(比方说,信道、加密方式、支持的速率、11N的相关信息),以便来适应该无线路由器。

           设置参数后,S2W-M02模块将发起鉴权请求帧(具体数据帧格式见802.11协议)。该数据帧如下图所示:

          我们从上图可以看出:SimpleWiFi模块发起了鉴权数据帧给无线路由器(Type-0  Subtype-11),该数据帧含有鉴权的类型(open方式还是共享秘钥方式)。该数据帧是模块发给无线路由器的一个单播数据。

          路由器在收到鉴权请求数据的时候,将根据鉴权类型回应鉴权相应帧给终端(S2W-M02)。改数据帧中包含鉴权结果。如下图所示:

           

 

 

        上图1红圈处我可以看出数据类型,上图2红圈处我们可以看到数据发送方向(发起方为无线路由器,接收端为S2W-M02模块)。上图3红圈处代表鉴权结果。

       如果无线路由器采用的是WEP64或者WEP128的共享秘钥的加密方式的话,鉴权过程分为4步。这2种方式的加密,现在很少有人使用。可以参考802.11协议栈了解相关的信息,该文档就不做描述了。

       

第三步:鉴权成功后,模块发起关联过程

       SimpleWiFi模块收到成功的鉴权结果后。模块将发起关联Association过程。该过程主要是告诉无线路由器,模块所支持的一些功能信息(比方说采用的加密方式)。同时,在关联相应数据帧中,无线路由器也将通知模块关联结果等信息。关联相应帧中有很多信息与第一步中的探测响应帧一样,都是代表无线路由器所支持的功能。

       模块发起的关联请求数据帧,如下图所示:

        上图1红圈处我可以看出数据类型,上图2红圈处我们可以看到数据发送方向(发起方为SimpleWiFi模块,接收端为无线路由器)。该数据中包括模块的capability,以及将要使用的加密方式等等,详细的数据域可以参照802.11协议。

       无线路由器在接收到关联请求帧后,将根据自身的情况(是否支持该加密方式、是否支持模块的特殊功能)将生成关联相应帧,关联相应帧体中含有关联的结果。如下图所示:

       

 

       上图1红圈处我可以看出数据类型,上图2红圈处我们可以看到数据发送方向(发起方为无线路由器,接收端为SimpleWiFi模块)。上图3红圈处有关联的结果显示。

       至此,模块与无线路由器的802.11的鉴权和关联步骤已经完成。通过关联的结果,我们可以查看模块使用过程中的一些问题。比方说,路由器的加密方式不支持、以及模块和无线路由器是否支持QOS功能等。

       接下来,模块与无线路由器将进行秘钥协商阶段。不同的加密方式秘钥协商的过程有些区别。如果采用WPA或者WPA2相关的加密方式的话。我们从抓包过程可以看见EAPOL过程即我们通常所说的4步握手过程。秘钥协议分为单播秘钥协商和广播秘钥通告2个步骤。秘钥协商的具体过程,在本文档中我们就不做详细描述。具体可以参考802.11协议相关文档。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:https://dhexx.cn/news/show-6488001.html

如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网进行投诉反馈,一经查实,立即删除!


相关文章:

  • Android蓝牙2.0SSP 4.0BLECC2541 示例apk源码下载及视频 能收发十六进制或字符2.0靠近自动连接 4.0无需配对手机与串口模块通信 OTG转串口wifi串口
  • android最全学习资料及路线整理分享 (安卓视频教程 从入门到大师 android开发环境搭建 windows和MAC 安卓源码大全4000套)
  • mac下搭建java开发环境:eclipse
  • C# C sharp保存读取文件 定时器 数组转16进制字符串 源码
  • 织梦5.7 后台添加文章,文章内容框不能显示
  • windows server 2003 php 环境搭建 MYSQL错误1067
  • 易语言和VBS发送http请求 自动预约MZD记念馆团体票 分析第2步自动登陆预约carles抓包
  • C#磁盘类型判断 所有磁盘遍历出所有文件夹及文件夹路径 所有文件及文件路径
  • windows server 2003更新后 启动网站提示另一个程序正在使用此文件,进程无法访问 关闭phpstudy全部停止再启动OK
  • php 操作数组array_merge使用时数组包含数字键名的问题解决方法
  • this Virtual Directory does not allow contents to be listed. 网站默认文档没有加入对应的比如index.html
  • C# Mysql 增删改查示例 双串口采集光照度与温度和湿度 数据保存在mysql 参数自动保存 解析格式十六进制收发
  • C#串口采集短信GSM chart图表使用示例 保存数据到access数据库和每日.txt文件并实时显示各参数曲线
  • 新华北网安装方法20160513
  • 物联网系统 : 网页控制远程wifi继电器开关,网页自适应屏幕。 分为登录,注册(短信验证),重置密码(短信验证),控制开关,配置开关(可动态新增或删除开关)
  • 火车头采集时抓的内容与浏览器显示的不一致 只需把user-agent设为用户本地IE浏览器就行。
  • C#源码QQ空间自动点赞神器,无需密码直接点头像登录,可加自动功能评论转发等。
  • DFS(深度优先搜索)详解(概念讲解,图片辅助,例题解释)
  • java取模数据格式转换源码 宽高16*16 高位在前 转为 低位在前
  • Eclipse中使用printf报错 提示参数类型不对 已解决The method printf(String, Object[]) in the type PrintStream is not ap
  • MyEclipse spring + struts2 + hibernate环境搭建 windows下
  • 加入百度移动联盟广告SSP美图android安卓源码 详情有演示apk
  • android开发环境搭建 安装说明 mac和windwos Eclipse adt
  • 360安全浏览器右击不显示审查元素 或按F12不弹出开发人员工具的原因和解决方法:设为极速模式
  • 2 C#串口或TCP远程采集数据 chart图表使用示例 保存数据到access数据库和每日.txt文件并实时显示各参数曲线
  • CocosCreator环境搭建生成android应用apk cocos2d android NDK win10系统
  • 一键在ECShop加上手机版android和ios应用 不影响原网站 所有数据取自网站,自动同步到手机端
  • 苹果mac系统下cocos2d android和ios含NDK开发环境搭建 安装说明20161129
  • android发送http post请求函数带参数带返回数据 静态类 源码
  • C#多线程扫描IP段和端口段.exe 小黄人软件定制
  • BluetoothChat手机与串口模块通信蓝牙2.0电子称android apk 蓝牙摇控车apk
  • 网页控制远程wifi继电器开关(远程内网开关)esp8266 物联网软件第39版
  • 解析android中隐藏与显示软键盘及不自动弹出键盘的实现方法
  • RtspViewer可设置播放地址 基于vlc播放采集rtsp地址视频演示2.0 测试成功
  • 百度网盘外链采集分析 爬取百度网盘用户分享 自建百度网盘文件链接搜索引擎
  • 百度网盘外链采集分析 爬取百度网盘用户分享 问题记录
  • 调用百度请求 边输入边提示 jQuery UI 自动完成(Autocomplete)支持中文 超简单
  • MySQL时间戳转换时间10位 13位
  • php 获得ip地址区域及运营商 抓取百度的数据
  • mysql的1093错误You can‘t specify target table ‘t‘ for update in FROM clause 简单解决
  • 为什么Sphinx查的数据比用SQL查还少?
  • lucene 6.4.2测试成功 源码
  • lucene 6.4.2模糊匹配 测试成功 免费源码 网盘文件搜索源码
  • eclipse设置提示This element neither has attached source nor attached Javadoc and hence no Javadoc
  • lucene6.4.2高亮测试源码 一定要导入这个包lucene-memory-6.4.2.jar
  • java最简单的方式实现http get请求 gbk转utf8 javaweb发布到服务器
  • lucene使用内存索引时一些问题OutOfMemoryError: Java heap space
  • LeetCode13罗马数字转整数
  • html5 video自动播放下一个源码
  • android保存读取对象 SharedPreferences方式