转载请注明出处:http://blog.csdn.net/Righthek 谢谢!

对于低头党来说,在使用WIFI功能时,常常性的操作是打开手机上的WIFI设备,搜索到心目中的热点,输入password,联网成功,各种低头上网。。。

这个看似简单的过程。背后却是隐藏着大量的无线通信技术。用几个专业术语来表示这个过程。各自是:扫描(Scanning)、认证(Authentication)、关联(Association)。以下用一张图来表示这个过程。

watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvUmlnaHRoZWs=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast" alt="">

图1  WIFI接入网络过程

如今让我们来分析一下这个过程的工作原理。

相对移动电子产品来说,WIFI的功耗会比較大。因此,上层应用程序都会有一个开关,用于打开和关闭WIFI功能。个人觉得,最好的电源管理设计是上层应用程序的开关可操作WIFI硬件模块的电源的通断。当用户在手机上点击打开WIFI时,WIFI模块通电执行起来,当然也会对应载入WIFI的驱动程序。

打开完毕后,我们能够看到手机上显示搜索到附近的WIFI热点。这个搜索过程的工作原理是如何的呢?用一个无线通信专业术语来表示:扫描(Scanning)。

扫描的目的是什么?就是要找到一个无线网络。然后增加到该网络中。

要增加一个无线网络,那么我们须要找到它的网络名称,即SSID。这个SSID事实上是接入点(Access Point)回应工作站扫描时所带的參数。还有其他的网络參数,包含BSSID(可理解为接入点的MAC地址)、信号强度、加密和认证方式等。

扫描类型分两种,一种是主动扫描(active scanning)。还有一种是被动扫描(passivescanning)。

        1、 主动扫描(activescanning)

我们先来说说主动扫描。即我们的手机(工作站STA)以主动的方式。在每一个信道上发出Probe Request帧,请求某个特定无线网络予以回应。主动扫描是主动寻找网络,而不是静候无线网络声明本身的存在。使用主动扫描的工作站将会以例如以下的程序扫描信道表所列的频道:

(1)跳至某个信道。然后等候来帧指示(indicationof an incoming frame)或者等到ProbeDelay定时器超时。假设在这个信道收到帧。就证明该信道实用户在使用。因此能够加以探測。

而ProbeDelay定时器可用来防止某个闲置信道让整个过程停止,由于工作站不会一直等待帧的到来。

(2)利用主要的DCF訪问过程取得媒介使用权,然后送出一个Probe Request帧。

(3)至少等候一段最短的信道时间(即MinChannelTime)。

a.假设媒介并不忙碌。表示没有网络存在,因此能够跳至下个信道。

b.假设在MinChannelTime这段期间媒介很忙碌。就继续等候一段时间,直到最长的信道时间(即MaxChannelTime)超时,然后处理不论什么的Probe Response帧。

大家可能会发现当手机进行WIFI热点搜索时,有时时间会比較长,原因是你处在的区域存在多个接入点(AP),当手机发出Probe Request帧时。多个接入点(AP)通过竞争窗体(congestionwindow)回应Probe Response帧,而这个竞争过程受限于最长的信道时间(即MaxChannelTime)。

当无线网络收到搜寻其所属的扩展服务集(ESS)的Probe Request时。就会发出Probe Response帧。

若要找到附近全部的无线网络,那么Probe Request帧可使用broadcastSSID,如此一来,该区全部的802.11无线网络都会以Probe Response加以回应。

        2、 被动扫描(passivescanning)

如今大部分移动电子产品都是採用被动扫描(passive scanning)的方式。原因是扫描过程中不须要传送不论什么信号。能够省电。在被动扫描中,工作站会在信道列表(channel list)所列的各个信道之间不断切换。并静候Beacon帧的到来。所收到的不论什么帧都会被暂存起来,以便取出传送这些帧的BSS 的相关数据。

在被动扫描的过程中。工作站会在信道间不断切换,而且会记录来自所收到的不论什么Beacon的信息。Beacon在设计上是为了让工作站知道增加某个基本服务集(Basic Service Set,简称 BSS)所须要的參数以便进行通信。

在下图中。通过监听来自前三个接入点的Beacon帧。移动式工作站以被动扫描找出该区全部BSS。假设该工作站并未收到来自第四个接入点的Beacon,就会汇报眼下仅仅发现的三个BSS。

watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvUmlnaHRoZWs=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast" align="middle" alt="">

图2  被动扫描

转载请注明出处:http://blog.csdn.net/Righthek 谢谢!

【智能家居篇】wifi网络接入原理(上)——扫描Scanning的更多相关文章

  1. 【智能家居篇】wifi网络结构(上)

    转载请注明出处:http://blog.csdn.net/Righthek 谢谢! WIFI是什么.相信大家都知道,这里就不作说明了. 我们须要做的是深入了解其工作原理,包含软硬件.网络结构等.先说明 ...

  2. 【智能家居篇】wifi在智能家居中的应用

    转载请注明出处:http://blog.csdn.net/Righthek 谢谢! 在设计智能家居系统方案时,一个很关键的point就是组网方式.组网方式关系到整个智能家居系统的稳定性.可扩展性.实时 ...

  3. 智能家居常用WiFi模块

    WiFi模块 WiFi模块就是整个系统的控制中心,控制很简单,就是输出一个开关信号控制继电器,而这个模块的核心是WiFi的连接,手机连接WiFi时需要扫描,输入密码,而这类本身没有屏幕和键盘的硬件设备 ...

  4. 【智能家居篇】wifi网络访问原理(下一个)——联想Association

    转载请注明出处:http://blog.csdn.net/Righthek 谢谢! 认证完毕后,下一步就是关联(Association). 工作站与基站进行关联.以便获得网络的全然訪问权. 关联属于一 ...

  5. 【智能家居篇】wifi网络结构(下)

    转载请注明出处:http://blog.csdn.net/Righthek 谢谢. 因为WIFI网络具有移动性,同一时候WIFI以无线电波作为传输媒介,这样的媒介本质上是开放的,且easy被拦截,不论 ...

  6. 基于Linux的智能家居的设计(5)

    4  软件设计 软件设计部分主要包含uboot移植.内核编译.系统移植.设备驱动编程.应用程序编程(QT编程.mysql数据库编程.控制系统编程).各个模块的功能函数(部分是在windows以下的IA ...

  7. Android开发—智能家居系列】(二):用手机对WIFI模块进行配置

    在实际开发中,我开发的这款APP是用来连接温控器,并对温控器进行控制的.有图为证,哈哈. 上一篇文章[Android开发—智能家居系列](一):智能家居原理的文末总结中写到: 手机APP控制智能温控器 ...

  8. Home Assistant + 树莓派:强大的智能家居系统 · 安装篇

    Home Assistant + 树莓派:强大的智能家居系统 · 安装篇 转载:Home Assistant + 树莓派:强大的智能家居系统 · 安装篇 目录 1. 初始安装 3. Homebridg ...

  9. 智能家居DIY-空气质量检测篇-获取温度和湿度篇

    目录 智能家居DIY-空气质量检测篇-获取空气污染指数 前言 话说楼主终于升级当爸了,宝宝现在5个月了,宝宝出生的时候是冬天,正是魔都空气污染严重的时候,当时就想搞个自动开启空气净化器,由于种种原因一 ...

随机推荐

  1. uboot代码1:uboot启动大体流程, stage1 + stage2

    start.S stage 1: reset: set the cpu to svc32 mode disable the watchdog mask all IRQs(INTMSK, INTSUBM ...

  2. C#对数字添加逗号,千分位

    /// <summary> /// 对数字添加”,“号,可以处理负数以及带有小数的情况 /// </summary> /// <param name="vers ...

  3. The parent project must have a packaging type of POM

    在Eclipse中使用Maven添加模块时报错:The parent project must have a packaging type of POM 解决办法: 是将pom.xml 中的  < ...

  4. Solr4.2迁移到新项目下异常:java.lang.NoSuchMethodError: org.apache.http.conn.scheme.Scheme.<init>

    由于业务调整,需要将solr搜索项目集成到另一个项目下成为一个模块,原项目运行异常,但是迁移到新项目后出现异常如下: 原因:引入的httpclient.jar冲突 解决方法:删除冲突的jar

  5. POJ - 1185 炮兵阵地 (状态压缩)

    题目大意:中文题目就不多说大意了 解题思路: 1.每行最多仅仅有十个位置,且不是山地就是平原,那么就能够用1表示山地,0表示平原,将每一行的状态进行压缩了 2.接着找出每行能放炮兵的状态.先不考虑其它 ...

  6. 使用开源的PullToRefreshScrollView scrollTo和scrollby遇到的问题

    在项目中使用了开源的com.handmark.pulltorefresh.library 下拉刷新组件,当中使用了PullToRefreshScrollView ,须要调用scrollTo或者scro ...

  7. Python Challenge 第四题

    这一题没有显示提示语,仅仅有一幅图片,图片也看不出什么名堂,于是直接查看源代码,源代码例如以下: <html> <head> <title>follow the c ...

  8. 菜鸟级springmvc+spring+mybatis整合开发用户登录功能(下)

    昨天介绍了mybatis与spring的整合,今天我们完成剩下的springmvc的整合工作. 要整合springmvc首先得在web.xml中配置springmvc的前端控制器DispatcherS ...

  9. Spring3表达式语言(SpEL)学习笔记

    最新地址请访问:http://leeyee.github.io/blog/2011/06/19/spring-expression-language Spring Excpression Langua ...

  10. cocos2d学习笔录1

    CCDirector的主要作用: 1.访问和改变场景: 2.访问cocos2d-x的配置细节 3.访问视图(OPENGL,UIVIEW,UIWINDOW): 4.暂停,恢复和结束游戏: 5.在UIKi ...