精华内容
下载资源
问答
  • 基于近场通信的WiFi传输连接方案

    千次阅读 2016-02-17 13:15:03
    摘 要:利用近场通信(NFC)技术安全性高、便捷和功耗低的特点,提出采用NFC 为无线保真(WiFi)传输建立连接的2 种方案:NFC 触碰传递WiFi 局域网的密码和NFC 触碰传递上层加密传输的密钥,避免传统WiFi 传输通过搜索...

     摘 要:利用近场通信(NFC)技术安全性高、便捷和功耗低的特点,提出采用NFC 为无线保真(WiFi)传输建立连接的2 种方案:NFC 触碰传递WiFi 局域网的密码和NFC 触碰传递上层加密传输的密钥,避免传统WiFi 传输通过搜索热点后需经过认证加入局域网的繁琐操作,同时保证数据传输安全性。根据第2 种方案实现NFC+WiFi 数据传输系统,测试结果表明,该方案的建立设备连接速度和传输速度均快于传统WiFi 方式。

      1 概述

      随着智能手机和物联网的普及,近场通信(Near FieldCommunication, NFC)作为一种新兴的技术正被越来越多新款手机采用,并作为系统基本配置,该技术的发展使得将智能射频卡的功能集成到手机的设想成为可能。当前作为传统近距离通信的蓝牙技术已经发展到4.0 版本,传输速率已有大幅提高,对于传输数据安全性保护也有所加强,但还是有各种对蓝牙的攻击方法被提出。无线保真(WirelessFidelity, WiFi)作为无线局域网标准的别称,相比于蓝牙,其数据传输速度更快,通信距离更远,而且目前有比蓝牙更好的加密认证体系。随着越来越多的人对Ad Hoc 网络的研究以及WiFi 直连(WiFi Direct)技术被新的手机产品所配置,WiFi 传输有望代替蓝牙传输成为设备间数据传输的主要手段,但WiFi 本身也存在设备连接过程耗时、热点设备功耗大等一系列问题。如果把NFC 技术和WiFi 传输有效结合,利用NFC 交换数据便捷、安全性高、功耗低等特点传递参数,并用于WiFi 传输的建立连接过程,则能有效避免各种对传统WiFi 传输设备所在局域网密码的攻击,同时减少传输数据前连接过程的耗时,降低系统的整体功耗。

      目前针对NFC 与WiFi 结合的研究还停留在提出概念阶段,由于NFC 硬件模块还未作为智能手机的标准配置,因此智能手机上还没有相关系统的实现,国内外对相关领域的研究基本还是空白状态,还没有文献从理论方面分析提出使用 NFC 为WiFi 传输建立连接并保证传输安全性、低功耗的方案。

      本文通过阐述NFC 技术和WiFi 技术特点,和对传统WiFi 传输的配对过程、安全认证、加密机制以及上层使用Socket 建立连接过程的分析,提出2 种使用NFC 为WiFi传输建立连接的方案,并在Android 系统上实现其中一种较易实现的方案。

      2 无线局域网技术及其存在的问题

      2.1 无线局域网技术

      无线局域网(Wireless Local Area Network, WLAN)的提出是为了覆盖有线网络难以涉及的范围,同时满足移动通信漫游访问的需求,作为传统的有线局域网的重要补充。从1997 年发布的802.11 标准,到后来的802.11a/b/g/n/p 标准,已先后有6 个无线局域网通信标准。相比于蓝牙等无线个人网技术,无线局域网数据传输速率更高,信号覆盖范围更广,有更好的传输性能。Ad Hoc 网络作为传统WLAN 的重要补充,是一种特殊的自组织、对等式、多跳、无线移动网络,也可称作无线自组网。将WLAN 和Ad Hoc进行比较,如图1 所示[1]。可以看出,802.11 无线局域网由基本服务集(BSS)构成,而一个BSS 由一个或多个无线移动节点和无线接入点(AP,也称作基站)设备组成,移动节点通过基站连接到路由器。Ad Hoc 网络则是一种特殊的不需要基础设施的无线移动自组网。

    WLAN和Ad Hoc网络结构比较

    图1 传统WLAN和Ad Hoc网络结构比较

      相比于传统的有线局域网,无线局域网的安全性更加难以保证和维护,移动设备节点间的无线链路非常容易受到窃听、干扰、假冒、数据篡改和重放以及拒绝服务等方式的攻击,攻击者可以破坏网络系统的机密性、数据完整性与有效性[1]。其中,作为热点的无线路由器或某个移动设备一旦受攻击,则整个网络面临着因单点失效而崩溃的风险。为此,WiFi 联盟等组织制定了一些安全协议,用于尽可能维护无线网络的安全性,被广泛采用的包括有线等效加密 (Wired Equivalent Privacy, WEP)、WiFi 保护访问(WiFiProtected Access, WPA)和IEEE802.11i(即WPA2)。此外,还有我国自主提出的双向认证安全架构(Wide Authenticationand Privacy Infrastructure, WAPI)[2]。Ad Hoc 网络由于拓扑动态变化难以预测、节点自由漫游、链路带宽受限、无基础设施用于鉴权,其安全性更加难以保证,目前在这方面的研究只是有一些成果,如基于口令的认证协议和分级混合网络体系结构[1]等,但由于Ad Hoc 本身都没有形成标准,因此也没有相应的安全标准。

      2.2 WiFi 传输存在的问题

      Ad Hoc 网络由于并未正式作为一个行业标准,因此,未被大多数移动设备统一定制,当前移动设备间通信和传输一般还是采用各自先加入到同一个无线路由器(即AP)下的局域网中,获取相应的动态IP 地址,然后两者之间可像在有线局域网下一样通信和传输数据,许多移动终端上的局域网聊天软件和视频同步共享软件都采用这种方式。

      近年来有许多移动设备制造商试图在自身设备上定义Ad Hoc 网络的通信协议、安全机制,但目前并未有成功的实例作为统一标准而被推广。维护WLAN 的组织WiFi 联盟却并不热衷于统一Ad Hoc 网络标准,而是定义了WiFi直连(WiFi Direct)标准[3],该标准用于在2 台设备间建立WiFi 连接,然后快速传输各种数据,这和目前的蓝牙传输技术实际上有相同的用途,只不过由于WiFi 传输速率明显快于蓝牙,并且具有比蓝牙更远的传输范围,使得这项技术标准的定义对未来传输数据方式的改变有很大的影响。这种传输方式只适用于最新机型的手机,并未被广泛应用。

      目前较为成熟的在移动设备间使用WiFi 进行数据传输的方案是:将一台设备设为WiFi 热点,而另一台或多台设备如同关联一般AP 一样去建立关联(Association),并加入到热点设备的局域网中。这个过程需要关联设备对周围WiFi 信号进行搜索,选择热点设备发出连接请求,在WEP或WPA 安全模式下要输入密码,热点设备对其认证,使用DHCP 为其分配动态IP 地址,即完成“入网”操作。之后在每次通信或传输之前通过IP 地址完成网络层Socket 连接。该方案简单可行,被越来越多的移动终端所采用,包括手机、平板电脑、笔记本电脑等,将“开启WiFi 热点”列为标准配置。这种方式可以看作是Ad Hoc 网络的简易实现,但是一旦当一个移动设备设置成充当WiFi 热点,则它将切换到热点模式,在这种模式下它将不能搜索到其他设备的信号,最终的网络拓扑只可能是多对一的星型结构,而不可能做到Ad Hoc 网络期望的任意设备都同时具有收发功能,可以形成网状结构或任意拓扑结构,因此,它还不可以算作真正意义上的Ad Hoc 网络,更多的还是一种使用移动设备充当AP 的新型WLAN 网络。

      WiFi 的传输速率明显快于蓝牙,安全性也要好于蓝牙,但相比于蓝牙基于PIN 密码的配对认证,基于WEP、WPA等协议的认证方式更为复杂。同时相比于蓝牙直接使用设备的MAC 地址进行设备连接,WiFi 增加了网络层,使用动态分配的IP 地址建立连接,更增加了传输的安全性。这些因素使得加入WiFi 局域网的过程比蓝牙配对过程要占用更多的时间,而且需要用户手动开启WiFi 和搜索热点,并选择热点发送关联请求。在2 台设备间使用WiFi“点对点”传输文件,设备“入网”过程的时耗和手工干预无疑为用户带来更多额外的负担和很差的体验效果。

      另外由于热点设备需要先于关联设备开启WiFi,等待响应关联设备加入局域网,对“入网”设备认证,并且要维护当前局域网内设备状态和IP 地址变化,还需要“轮询”地去发现哪些设备退出局域网,这些操作严重加大了其功耗,相比于设备的功耗管理带来了巨大挑战。

      WiFi 传输最初采用WEP 安全协议认证机制过于简单,易于破解[4],它并不包含钥匙管理协定,都依赖在用户间共享一个秘密钥匙安全性[5],许多“蹭网器”利用其漏洞可轻易入侵 WEP 加密局域网。但随着WPA 特别是WPA2 被广泛采用,WiFi 安全性已有很大程度的改善,目前还没有有效的攻击方式,因此,多数专家建议将无线局域网的安全协议设置为WPA2,而不使用WEP。相比于蓝牙存在可被攻击的安全问题[6-7],WiFi 使用WPA2 协议加密传输在一定程度上可认为是安全的。

      综上,WiFi 传输主要存在加入局域网过程复杂耗时和作为热点设备功耗较大这2 个方面的问题,因此,本文采用NFC 技术提出相应的解决方案。

      3 基于NFC 的解决方案

      3.1 NFC 技术

      NFC 是由Philips、SONY、Nokia 等公司提出的用于近距离无线通信的一种新技术,它由无线射频识别技术(RadioFrequency Identification Devices, RFID)结合传统的近距离互联技术(如蓝牙、WiFi 等)发展而来,用于2 个设备在极近距离(10 cm 左右)通过触碰方式进行相互通信。它工作在13.56 MHz 频段,可以选择106 Kb/s、212 Kb/s 和424 Kb/s等多种传输速率。相比于RFID 和其他近距离互联技术,它具有传输距离近、带宽高和能耗低等特点。被确定为ISO/IEC 18092 标准的NFCIP-1 中详细阐述了NFC 设备控制原理[8]。而被确定为ISO/IEC 21481 标准的NFCIP-2 定义了一个灵活的网关系统来检测和选择NFC 技术3 种操作模式[9]:卡模拟模式,读写器模式和点对点通信模式,使NFC设备可以用作乘车票、电子钱包、电子票证,也可以读取智能海报,还可以将2 台支持NFC 的设备触碰进行点对点数据传输。

      NFC 应用在极短距离通信中(10 cm~20 cm),这样短的距离本身就限制了潜在黑客的窃听和访问,因此,具有很高的安全性。另外NFC 链路层也包括了一个加密鉴权的程序和防冲突机制,在初始化过程中会选择好唯一的目标方进行通信,可以排除第三方以“中间人”的角色对链路进行控制。当然对于用作卡模拟模式进行手机支付的敏感应用,还可以采用标准智能卡采用的技术,即把高级加密标准(Advantage Encryption Standard, AES)和三重DES 加密算法添加到上层应用中[10]。

      3.2 解决WiFi 传输问题的2 种方案

      本文提出2 种使用NFC 作为设备使用WiFi 进行数据传输前建立连接的方案:(1)NFC 触碰传递WiFi 局域网密码;(2)NFC 触碰传递上层加密传输的密钥。

      在2 台NFC 设备间使用WiFi 进行“点对点”方式通信或数据传输之前,可以利用NFC 技术的特点,使用NFC触碰“握手”使两者在同一个局域网中,这个过程可以代替上面提到的传统WiFi 通信中关联设备加入到热点设备的局域网中的过程。

      虽然WiFi 的安全认证协议比较完善,但是还是要依赖关联设备在加入局域网前已知热点设备设置的局域网密码,但该密码的产生和交换并不安全,导致第三方获取该密码也可加入到该局域网中,方便窃取传输的数据。此时可以通过NFC 触碰方式传递WiFi 局域网密码,加强对它的保护,防止被入侵者截获。具体来说,首先使热点设备设置建立WPA2 协议认证的局域网;然后在2 台设备触碰过程中使热点设备利用NFC 主动模式下交换数据方式来传递随机生成的密码到关联设备;最后根据这个密码验证该关联设备,使其加入到该局域网中。由于避免了用户使用关联设备搜索热点的过程,而使用NFC 传递密码等热点相关信息,时间较短,因此比传统的WiFi 加入局域网过程耗时大大减少。同时,这种不同搜索和选择某一网络热点而是直接通过触碰加入该局域网的方案,也极大简化了用户操作,改善了用户体验。

      但这种方案需要对系统底层框架中设置WiFi 局域网密码和加入局域网认证过程有深入了解,多数智能手机出于安全考虑隐藏了底层框架,无法通过SDK 接口调用,需要使用复杂的底层调用机制。

      当然,还可以不对热点设置任何安全协议的认证,使用在开放模式下在应用层上对所传输数据加密。由于对称加密算法比公钥加密算法更简易,性能更高,在使用 NFC传递密钥可以保证不被窃取的情况下,选择使用同一随机密钥进行加密和解密的对称加密算法更为理想,这里可以选择较为常用的AES 算法,正如事实上WPA2 安全协议也是基于AES 算法进行加密认证的[3]。具体的设备间连接以及传输的过程为,发送方作为热点设备设置建立开放模式的局域网,在传输数据前通过NFC 触碰方式向关联设备(接收方)传递密钥,然后对传输的数据进行加密;待接收方加入到它建立的局域网后,将加密的信息发送给对方。由于在开放(不加密)模式下加入局域网的过程中,热点设备不需要对关联它的设备进行严格的认证,可进一步减少2 台设备传输数据前连接过程的耗时。

      由于NFC 被设计为具有极短的工作距离(10 cm 左右),且与无线局域网通信不在同一频带,使用这种带外传输方式交换随机生成的无线局域网密码或者应用层加密密钥是极为安全的。第三方的设备无法以如此短的距离且在较低频率的频带上去窃听和截获传输的密钥,这样将极大地提高数据传输的安全性。当然NFC 本身传输数据也有用AES和三重DES 算法加密的,甚至有些设备还有专门的安全控件,具有硬件级的加密措施,可以进一步保证该过程的安全性。使用NFC 为WiFi 传输建立连接,尤其适合在2 个设备间“点对点”模式传输数据。

      为减少作为热点的设备的功耗,可以考虑在每次传输数据完成后即关闭热点,这样关联它的设备会自动退出该热点设备的局域网,下次要传输数据前再重新进行加入局域网的过程。由于每次设备连接利用的NFC 技术本身具有低功耗的特点,不会带来过多额外的功耗,因此可以使整体功耗降低。当然这样在功耗降低的同时,却带来了每次传输前的设备连接耗时。为平衡两方面因素,可以加入功耗管理模块,考虑设定时间阈值,在一定时间内没有使用该热点设备进行数据传输则关闭该热点,在避免频繁连接设备的同时一定程度上降低功耗。

      下面设计并实现NFC+WiFi 数据传输系统,对以上方案加以验证,并对该系统进行性能测试分析。

     4 NFC+WiFi 数据传输系统

      4.1 系统设计与实现

      本文选用Google 的2 款原生态手机Google Nexus S 和Samsung Galaxy Nexus,配置Android 4.0 操作系统,作为本文系统实现和测试的平台。这2 款手机配置了NFC 芯片,并且其上搭载的Android 系统具有开源性和易用性。

      本文主要实现一个文件传输系统来对比传统WiFi 方式和NFC+WiFi 方式的传输性能。

      对于传统的WiFi 传输,利用前面提到的将其中一个设备设置为WiFi 热点这种方式。服务器端用于接收文件,它作为热点,首先设置热点的名称、BSSID。如果是在WPA2等加密认证机制的模式下需要设置局域网密码,而在开放(不加密)模式下就不需要设置密码。设置完毕后开启WiFi热点,等待客户端设备的加入。客户端用于发送文件,它首先搜索WiFi 热点,获取服务器热点的BSSID,使用该BSSID 关联服务器热点加入局域网。如果是在WPA2 等加密认证模式下,还需要事先已知服务器热点的局域网密码。接下来热点对发送方设备进行认证,使用DHCP 为其分配动态IP 地址。发送方设备在获取到本机IP 地址后,根据所在局域网IP 地址前缀,在其后改为“.1”,即获知服务器热点的IP 地址。下面既可通过Socket 连接客户端和服务器,其中服务器所在端口号可以用硬编码写在程序中,双方事先都已知。服务器响应客户端连接,创建线程接收文件;客户端在建立Socket 连接后向服务器分包发送要传输的文件,服务器再统一将收到的各包写入相应文件。采用传统WiFi 方式传输文件的具体流程如图2 所示。其中,服务器端作为接收方,需要向系统底层注册服务器监听机制,并且需要先于发送方开启服务等待连接,维护这个监听等待线程也会消耗一定的系统资源。

    WiFi方式传输文件流程

    图2 采用传统WiFi方式传输文件的流程

      NFC 技术在Android 上的实现可以理解为一种“推送(Push)”机制:通过2 台NFC 手机设备触碰将一台手机上的数据发送给另一台手机,发送方程序在发送的数据中加入接收方程序向系统注册的标识,接收方在接收到数据后则启动向系统注册特定标识的程序用于处理这些数据。本文利用NFC 触碰传递用于建立WiFi 连接的参数。

      上文提出了2 种使用NFC 技术的改进方案, 但Android 系统并不支持在程序中使设备加入使用WPA2 等加密认证机制的网络,只提供了对于搜索到的热点使用手动输入的密码加入到该局域网的方式。由于其在SDK 接口中隐藏了相关函数,甚至系统底层相关类也设置了保护不可被程序调用,因此本文未能在Android 系统上实现这种方案。对于方案(2),即在应用层使用AES 算法对要传输的数据进行加密,可以在Android 系统中实现,这时可设置热点的安全性为开放模式。这种NFC+WiFi 传输方式在Android系统上的具体设计如下:

      数据发送方将自身设备的MAC 地址、随机生成的服务端口号以及随机生成的用于AES 加密的128 bit 密钥通过NFC 触碰过程传递给数据接收方。然后发送方设备作为服务器,设置热点名称,使用设备的MAC 地址作为热点的BSSID,在开放模式下开启WiFi 热点。此后,接收方作为客户端加入到该热点的局域网中,然后使用Socket 在客户端和服务器间建立连接。这个过程与上述的传统WiFi 传输加入局域网和建立Socket 连接过程相同,这里不再赘述。需要注意的是,数据发送方和接收方作为服务器(热点设备)和客户端(关联设备)的角色与传统WiFi 传输正好相反。对于传输文件的过程,这里需要在传统WiFi 分包传输的基础上,在发送方对每个数据包使用AES 密钥加密,在接收方则使用AES 密钥对收到的数据包解密。在后面的测试结果中可以看到, 加密和解密过程会增加一定耗时。采用NFC+WiFi 方式加密传输文件的具体流程如图3 所示。

    NFC+WiFi加密传输文件

    图3 采用NFC+WiFi方式加密传输文件的流程

      本文设计的NFC+WiFi 传输方式解决了传统WiFi 传输建立连接过程耗时和用户体验度降低问题,同时避免WiFi 热点长时间开启和接收方开启等待连接的监听线程,也可以降低系统功耗和资源(处理器、存储等)消耗。在这种方式下,发送方作为Socket 服务器可以由发送方NFC传递数据成功的反馈消息来启动其监听线程;而接收方则作为客户端,通过传递获取的发送方设备地址去建立连接。形象地说,由于服务器方的改变,传输数据的过程由原来向服务器“上传”变为从服务器“下载”,这样就通过NFC 的“推送”机制避免了传统WiFi 传输的“等待连接”模式。

      4.2 系统性能测试及结果分析

      本文在系统中实现了以NFC 触碰交换参数为WiFi 传输建立连接的NFC+WiFi 传输方式,并实现了传统WiFi 传输中采用设备作为WiFi 热点的传输方式,下面就对这2 种方式建立设备连接耗时、传输不同大小文件耗时两方面进行测试,并对结果加以分析。

      测试使用的2 台样机分别为Google Nexus S(CPU 主频1024 MHz,内存512 MB RAM)和三星Galaxy Nexus(CPU主频1 228 MHz,内存1 GB RAM),并分别配置Android 4.0系统。

      首先对使用NFC 为WiFi 传输建立连接方式和传统的WiFi 传输连接方式所用时间进行对比。为减小每次测试中设备间触碰、手指点击发送等动作造成时延不同而产生的误差,以及所处系统环境中其他未知事件的干扰,进行了30 组测试并取其平均值,如表1 所示。其中,连接过程包含加入到热点设备的局域网和建立网络层Socket 连接2 个过程。由于传统WiFi 方式需要在搜索热点后选择服务器热点加入到局域网中,而NFC 触碰方式是热点传递给关联设备其BSSID 等相关信息,避免了关联设备搜索WiFi 热点信号的过程。

    耗时对比

      可以看出,后者比前者节省约一半时间。因此通过对表1 的结果分析可以得出结论:使用NFC 触碰建立连接的方式耗时要明显少于传统WiFi 搜索热点连接方式的耗时,采用这种方式可以缩短整体传输用时,提高传输过程中的用户体验。

      对在应用层不加密和使用AES 算法加密2 种传输方式传输不同大小文件耗时情况进行对比,分别选取手机设备中典型文件类型的文件,包括2 KB 大小的文本、95.76 KB的图片和3.68 MB 的音频作为测试用例,进行10 组测试取其平均值,如表2 所示。

      由表2 可以看出,各种传输方式接收方比发送方耗时都要长很多。这是因为发送方是从文件中读,向Socket 文件流中写,并在设备底层逐渐封包向接收方发送,期间不存在阻塞问题。而接收方要循环等待,每次从设备底层接收到的包解析而成Socket 文件流中逐步读到内存缓冲区,再写入要存入的文件,直到读完所有文件流。其中循环等待、判断文件流结束等过程都增加了耗时,另外缓冲区大小的设置可能成为效率瓶颈。而对于使用AES 加密传输方式来说,接收方在每次从Socket 文件流中读取数据后同步进行AES 解密处理,而解密过程比读取数据更耗时。

      此外,通过对表2 的对比可以发现,在应用层使用AES加密要比不加密所用时间长,对于大文件的传输,加密所用时间带来的耗时更加明显。当然在WiFi WPA2 加密认证模式下即使在应用层不加密,也会由于底层会对传输数据的加密增加一定耗时,但不会比在应用层通过AES 加密的耗时多。在应用层对数据进行AES 加解密的处理,会在一定程度上加重接收方的负担,以至于对大文件难以处理解密与接收速度的匹配。从这一点来看,对于并非十分重要却很大的数据文件,可以只在加入局域网和建立Socket 连接阶段利用NFC 触碰传递参数引导建立连接,代替传统WiFi 搜索后发送请求建立连接;而在数据传输阶段仍采用不进行应用层加密的明文传输。但这样数据就易于被第三方截获,有时不得不在传输速度和数据安全性间作出一些权衡。

      当然较好的实现方案仍是本文前面提出的使用NFC 传递WiFi 局域网密码建立连接的方案。这种情况下局域网底层使用完善的WPA2 协议加密认证,则应用层就无需使用AES 等算法加密数据,而WPA2 采用的高效加密算法以及底层操作的高效性会使其比在应用层单独使用AES 加密有更快的传输速度,可以同时兼顾传输速度和安全性。

      5 结束语

      本文提出一种使用NFC 为WiFi 传输建立连接以保证传输的安全性,同时减少整个传输过程耗时的方案,并设计和实现了使用该方案的数据传输系统,对该方案传输性能加以测试,与传统WiFi 传输通过搜索热点连接设备方式进行对比。结果表明,对于一般文件的传输其总体性能较传统WiFi 传输方式有所提升,解决了传统WiFi 传输中连接过程时间长、操作复杂、功耗大等问题,基本可以满足用户安全传输的需要。但在应用层进行加解密的方式在传输大数据量文件时存在时延。本文提出的第1 种调用系统底层功能随机生成并安全传递无线局域网密码的方案实现较为复杂,因此,本文设计的系统并未采用该方案,但可以预见该方案能更有效地解决上述问题,提升传输过程总体效率和安全性,因此,下一步工作将研究并实现该方案。


    展开全文
  • 他有用户介入操作少,比蓝牙传输速度高等特点,对设备的要求仅仅为14,同时他又不占用wlan0网卡。 WLAN P2P 需要使用到 WifiP2pManager ,同时需要以下权限,这里面有一些是运行时权限,需要用户同意后才能使用。 &...

    点对点传输(P2P)又是WLAN直连,他可以在没有中间接入点的情况下,通过 WLAN 进行直接互联。他有用户介入操作少,比蓝牙传输速度高等特点,对设备的要求仅仅为14,同时他又不占用wlan0网卡。

    WLAN P2P 需要使用到 WifiP2pManager ,同时需要以下权限,这里面有一些是运行时权限,需要用户同意后才能使用。

    <uses-sdk android:minSdkVersion="14" />
    <uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
    <uses-permission android:name="android.permission.CHANGE_WIFI_STATE" />
    <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
    <uses-permission android:name="android.permission.CHANGE_NETWORK_STATE" />
    <uses-permission android:name="android.permission.INTERNET" />
    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
    

    点对点传输(P2P)至少有两个有Wifi的设备,其中一个是Android,首先确定Android设备和另外一个设备是否支持P2P连接。把手机连接电脑运行 adb shell ip addr|grep p2p0 -A2有输出就带边可以使用,一般来说都可以使用。

    29: p2p0: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc mq state DOWN group default qlen 1000
        link/ether 02:00:2d:63:a5:6b brd ff:ff:ff:ff:ff:ff
    

    注意看上面的输出,link/ether 02:00:2d:63:a5:6 为p2p的Mac地址,不同的设备之间使用Mac地址连接,所以首先要知道P2P(p2p0)的Mac地址,这个和wifi(wlan0)的地址不是同一个,在代码中需要使用下面方法获取。

    public static String getLocalMacAddress() {
        try {
            List<NetworkInterface> interfaces = Collections.list(NetworkInterface.getNetworkInterfaces());
            for (NetworkInterface ntwInterface : interfaces) {
    
                if (ntwInterface.getName().equalsIgnoreCase("p2p0")) {
                    byte[] byteMac = ntwInterface.getHardwareAddress();
                    if (byteMac == null) {
                        return null;
                    }
                    StringBuilder strBuilder = new StringBuilder();
                    for (int i = 0; i < byteMac.length; i++) {
                        strBuilder.append(String.format("%02X:", byteMac[i]));
                    }
    
                    if (strBuilder.length() > 0) {
                        strBuilder.deleteCharAt(strBuilder.length() - 1);
                    }
    
                    return strBuilder.toString();
                }
    
            }
        } catch (Exception e) {
            Log.d("Lecon", e.getMessage());
        }
        return null;
    }
    

    接下来看一下如何主动连接到p2p设备。

    使用方法

    首先通过 WifiP2pManager 的initialize初始化。

    val manager: WifiP2pManager? by lazy(LazyThreadSafetyMode.NONE) {
        getSystemService(Context.WIFI_P2P_SERVICE) as WifiP2pManager?
    }
    
    override fun onCreate(savedInstanceState: Bundle?) {
        mChannel = manager?.initialize(this, mainLooper, null)
    }
    

    同时使用广播来接受各种P2P连接的状态变化。

    var mChannel: WifiP2pManager.Channel? = null
    var mReceiver: WiFiDirectBroadcastReceiver? = null
    
    private val mWifiP2pManager: WifiP2pManager by lazy(LazyThreadSafetyMode.NONE) {
        getSystemService(Context.WIFI_P2P_SERVICE) as WifiP2pManager
    }
    
    private val mIntentFilter: IntentFilter by lazy(LazyThreadSafetyMode.NONE) {
        IntentFilter().apply {
            addAction(WifiP2pManager.WIFI_P2P_STATE_CHANGED_ACTION)
            addAction(WifiP2pManager.WIFI_P2P_PEERS_CHANGED_ACTION)
            addAction(WifiP2pManager.WIFI_P2P_CONNECTION_CHANGED_ACTION)
            addAction(WifiP2pManager.WIFI_P2P_THIS_DEVICE_CHANGED_ACTION)
        }
    }
    
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        mChannel = mWifiP2pManager.initialize(this, mainLooper, null)
        mReceiver = WiFiDirectBroadcastReceiver(mWifiP2pManager, mChannel, this)
    
    class WiFiDirectBroadcastReceiver(
            private val mManager: WifiP2pManager?,
            private val mChannel: WifiP2pManager.Channel?,
            private val mActivity: MainActivity
    ) : BroadcastReceiver() {
    		override fun onReceive(context: Context, intent: Intent) {
    		    val action = intent.action
    		    if (WifiP2pManager.WIFI_P2P_STATE_CHANGED_ACTION == action) {
    				// 当 WLAN P2P 在设备上启用或停用时广播
    				} else if (WifiP2pManager.WIFI_P2P_PEERS_CHANGED_ACTION == action) {
    				// 调用 requestPeers() 方法,以获得当前所发现对等设备的列表。
    				// 同时 在这里调用 connect 方法连接对方机器
    				} else if (WifiP2pManager.WIFI_P2P_CONNECTION_CHANGED_ACTION == action) {
    				// 当设备的 WLAN 连接状态更改时广播。
    				// 连接对方机器成功或者失败都会在这里回调
    				} else if (WifiP2pManager.WIFI_P2P_THIS_DEVICE_CHANGED_ACTION == action) {
    				// 当设备的详细信息(例如设备名称)更改时广播
    				}
    }
    

    上边哪一些代码可以当成主动发起扫描之后的回调,使用广播进行回调说起来真的是挺复杂的,但是仔细想想,操作硬件设备本来就是跨进程的,而且这个还是长时间耗时操作,系统通过广播回调也是合理的。

    到现在位置,可以把以上代码运行到Android上,他就可以最为P2P连接的被连接端。

    连接到设备

    连接到设备的时候,首先要确定对方设备的mac地址,上面的两种方法是针对于Android设备的。一种是adb方式,一种是代码获取。

    接下来要发现设备:

    mWifiP2pManager.discoverPeers(mChannel, object : WifiP2pManager.ActionListener {
        override fun onSuccess() {
            Toast.makeText(this@MainActivity, "已发现设备,准备连接", Toast.LENGTH_SHORT).show()
        }
    
        override fun onFailure(reasonCode: Int) {
    
        }
    })
    

    返现设备之后,通过广播回调的 WifiP2pManager.WIFI_P2P_PEERS_CHANGED_ACTION 事件获取设备列表。找到列表中的设备与被连接设备mac地址一致的,确保我们被连接机器已经就绪。

    mManager?.requestPeers(mChannel) { peers ->
        for (device in peers.deviceList) {
            if (mac != null && mac.equals(device.deviceAddress, ignoreCase = true)) {
                connectToDevice(device)
            }
        }
    }
    

    接下来就可以连接设备了!

    val config = WifiP2pConfig()
    config.deviceAddress = "被连接设备的Mac地址"
    mManager?.connect(mChannel, config, object : WifiP2pManager.ActionListener {
        override fun onSuccess() {
            Toast.makeText(mActivity, "连接成功", Toast.LENGTH_SHORT).show()
        }
    
        override fun onFailure(reason: Int) {}
    })
    

    如果被连接设备是Android,你应该能看到一个连接提示,点击接受这样两台设备之间就连接成功了,通过WIFI两个设备可以实现近场通讯。

    通信

    通信之前需要知道被连接设备的ip地址。如果是android设备,在被连接设备执行adb shell ip addr|grep p2p0 -A4 就可以看到,这也是检测是否连接成功的方法。代码获取仍然要获取p2p0网卡的,wlan0获取的ip地址不能用于这里。

    public static String getLocalIp() {
        try {
            List<NetworkInterface> interfaces = Collections
                    .list(NetworkInterface.getNetworkInterfaces());
    
            for (NetworkInterface intf : interfaces) {
                if (!intf.getName().contains("p2p0"))
                    continue;
    
                List<InetAddress> addrs = Collections.list(intf
                        .getInetAddresses());
                for (InetAddress addr : addrs) {
                    if (!addr.isLoopbackAddress()) {
                        return addr.getHostAddress().toUpperCase();
                    }
                }
            }
    
        } catch (Exception ex) {
            ex.printStackTrace();
        }
        return "";
    }
    

    如果被连接设备是一台服务器(在Android里面搭建一台服务器也是可以的),在这台设备上可以用okhttp等框架进行网络访问,或者使用socket进行传输。
    现在两个手机(P2P)设备之间就可以同过WLAN直接通信了。

    下面是源代码:https://github.com/leconio/WifiDircetP2PDemo

    展开全文
  • WiFi 6E与WiFi7技术特点

    千次阅读 2020-12-19 15:23:13
    WiFi的极速传输基于超宽的带宽,而WiFi6E的带宽将新增1200MHz! 增加的带宽可以有更多的非重叠信道、更加干净的频谱、更加高性能的终端、传输延时更低。 更多的频谱资源可以使得WLAN Router具有更灵活的频谱搭配,...

    WiFi6还没有完全普及,WiFi6E与WiFi7已经开始在规划了。技术的更新换代速度超乎想象。
    WiFi的极速传输基于超宽的带宽,而WiFi6E的带宽将新增1200MHz!
    在这里插入图片描述
    增加的带宽可以有更多的非重叠信道、更加干净的频谱、更加高性能的终端、传输延时更低。
    在这里插入图片描述
    更多的频谱资源可以使得WLAN Router具有更灵活的频谱搭配,满足家庭的各种WLAN应用。
    在这里插入图片描述
    全球批准WiFi6E频段的时间节点以及定义的功率大小。
    在这里插入图片描述
    WiFi6E还未大规模应用,WiFi7已经开始规划了。
    在这里插入图片描述
    WiFi7(802.11be)2021年推出Draft1.0, 2023年推出产品。特点是:更高的速度、更低的延时、更高的频谱效率、更高的连接密度。
    在这里插入图片描述
    WiFi7的技术特点:更宽的带宽(320MHz信道带宽)、更高阶的调制(4096QAM)、更灵活的RU分配机制、更丰富的组网架构。
    在这里插入图片描述
    一个终端可以同时用两个不同信道与AP进行传输数据:
    在这里插入图片描述
    Mesh组网,多个AP组建超大AP。OFDMA、SR(Spatial Reuse)、TDMA、Beamforming技术将会应用到产品中。
    在这里插入图片描述
    WiFi7的未来可期…
    在这里插入图片描述

    展开全文
  • KB3070 WIFI DTU(Data Terminal Unit)是采用高可靠性...基于Wifi数据传输具有高速、传输稳定、可靠等特点,KB3070 WIFI DTU 在无人值守、远程设备监控、远程数据采集、远程抄表等领域得到了广泛的应用。由于本产品...

    KB3070 WIFI DTU(Data Terminal Unit)是采用高可靠性ARM7处理器和WIFI的无线数据传输终端。
    基于Wifi数据传输具有高速、传输稳定、可靠等特点,KB3070 WIFI DTU 在无人值守、远程设备监控、远程数据采集、远程抄表等领域得到了广泛的应用。由于本产品是专为工业集成设计的,在使用的温度范围、震动、电磁兼容性和接口多样性等方面均采用特殊设计,保证了恶劣环境下的工作稳定性,为您设备的数据通讯提供了高质量保证。
    针对不同的行业用户要求提供不同的定制终端,这就需结合行业特点进行硬件、软件开发和系统集成。WIFI可连接无线局域网络,进行INTERNET连接、数据传输等应用。而KB3070 WIFI DTU(Data Terminal Unit)数据终端,是专门用于将串口数据通过WIFI无线网络进行传送的WIFI无线设备。
    本产品针对电力系统自动化、工业监控、金融、证券等行业部门的应用。

     产品特点

    • 标准工业级产品,EMC抗干扰设计,适应环境能力强;

    • 自主研发,带有实时操作系统的嵌入式32位ARM7- CPU;

    •  内嵌Watchdog芯片,提供多种复位机制,可软件控制,实现完美工业保障机制;

    • 支持多种方式自动组网;

    • IP自动注册机制,可实现多种服务模式,构建完整的超大规模无线应用系统;

    • 功能强大的服务器软件支持,服务器软件应用多年,功能强大,成熟完善;

    • 支持固定IP与动态域名解析、支持专用APN

    转载于:https://my.oschina.net/u/2473005/blog/518855

    展开全文
  • 随着WIFI技术的发展,其成熟的技术被广泛应用于日常...硬件部分根据STM32的特点设计了所需的外围电路,利用CMOS摄像头OV2640进行视频图像的采集,WIFI传输电路是由一款支持IEEE802.11g/b标准的无线芯片Marvell88W8686实现,
  • 选用MSP430系列单片机MSP430F5529作为主控制器,利用其自身的2个SPI模块分别对ADS1298,GS1011进行控制,实现脑电信号的高精度采集及远距离的WiFi无线传输。本系统具有可复用、便携、低功耗、高集成度的特点,适用于...
  • ZigBee模块。zigbee又称为“紫蜂”,它是一种基于IEEE802.15.4标准的局域网协议,频段在2.4GHz,特点是距离近、应用简单、自组织通讯...WIFI技术也是一种短距离无线传输技术,采用的标准是IEEE802.11a以及IEEE802.11...
  • WiFi 标准

    2021-02-19 15:59:43
    WiFi 6主要特点 802.11 a/b/g/n/ac/ax 参考:802.11 a/b/g/n/ac 是什么以及它们有什么区别 802.11 是一种无线局域网标准,802.11 a/b/g/n/ac 都是由802.11 发展而来的。不同的后缀代表着不同的物理层标准工作频段...
  • 01-iOS之wifi通讯开发简介

    千次阅读 2017-02-13 01:48:58
    wifi通讯开发1.1-wifi通讯简介 1.wifi通讯原理介绍wifi通讯的本质上是网络传输,只不过wifi通讯使用的并不是我们传统的HTTP协议,而是UDP协议 想要了解UDP协议,则...3.wifi通讯的特点传输数据比较稳定 能够传输大量
  • 原文链接: ... SDIO-Wifi模块是基于SDIO接口的符合wifi无线网络标准的嵌入式模块,内置无线网络协议IEEE802.11协议栈以及TCP/IP协议栈,能够实现用户主平台数据通过...SDIO具有传输数据快,兼容SD、MMC接口等特点
  • SDIO接口WiFi驱动浅析

    万次阅读 2018-04-11 18:16:42
    SDIO-Wifi模块是基于SDIO接口的符合wifi无线网络...SDIO具有传输数据快,兼容SD、MMC接口等特点。 对于SDIO接口的wifi,首先,它是一个sdio的卡的设备,然后具备了wifi的功能,所以,注册的时候还是先以sdio的卡的...
  • Linux 下 wifi 驱动开发三 SDIO 接口 WiFi 驱动浅析 SDIO-Wifi 模块是基于 SDIO 接口的符合 wifi 无线网络标准的嵌入式模块内置无线...SDIO 具有传输数据快兼容 SD MMC 接口等特点 对于 SDIO 接口的 wifi 首先它是一个
  • wifi 直连 wifi p2p

    千次阅读 2013-07-17 11:39:22
    wifi direct 简介 2010年10月,Wi-Fi Alliance(wi-fi联盟)发布Wi-Fi Direct白皮书,白皮书中介绍了关于这种技术的基本信息、这种技术的特点和这种技术的功能, Wi-Fi Direct标准是指允许无线网络中的设备无需...
  • 1、空旷环境下,手机搭载在WIFI模组上时最大传输距离400m; 2、当WiFI模组和手机同时搭载在路由器上时传输距离依路由器的信号强 弱而定; 板载5V,10A/250V AC 10A/30V DC继电器,可连续吸合10万次; 模块具有二极管...
  • iOS wifi连接外设

    千次阅读 2017-05-15 16:56:07
    wifi通讯开发1.1-wifi通讯简介1.wifi通讯原理介绍wifi通讯的本质上是网络传输,只不过wifi通讯使用的并不是我们传统的HTTP协议,而是UDP协议 想要了解UDP协议,则必须要了解Socket...3.wifi通讯的特点传输数据比较稳定
  • 方式一:在局域网内几台电脑连接wifi,进行文件互传 1.首先,所有电脑关闭防火墙。 2.电脑连接WiFi,获取自身电脑IP地址:打开win+R,输入cmd,进入控制台,输入命令ipconfig。 3.其他所有人ping接一下这台电脑ip...
  • SDIO-Wifi模块是基于SDIO接口的符合wifi...SDIO具有传输数据快,兼容SD、MMC接口等特点。 对于SDIO接口的wifi,首先,它是一个sdio的卡的设备,然后具备了wifi的功能,所以,注册的时候还是先以sdio的卡的设备去...
  • 嵌入式串口WIFI模块

    2011-12-05 13:29:47
    SEANYWELL WIFI模块,新力维串口转WIFI, 无线WIFI模块 WIFI无线模组,新力维串口转WIFIWIFI模块 串口WIFI模块 WIFI模块应用开发 内置TCP/IP协议价格_嵌入式串口WIFI模块/透明数据传输 产品简介 新力维 WIFI...
  • 2010年10月,Wi-Fi Alliance(wi-fi联盟)发布Wi-Fi Direct白皮书,白皮书中介绍了有关于这种技术的基本信息、这种技术的特点和这种技术的功能,Wi-Fi Direct标准是指允许无线网络中的设备无需通过无线路由器即可相互...
  • Wifi Aliance认证:侧重于产品的互操作性。 Wifi Aliance物理层/MAC层,基于IEEE802.11标准。... 因此wifi6的主要特点:高速传输/高连接可靠性/高频谱利用率。 WIFI Aliance认证也强调在拥堵的环境中和那后的...
  • 串口WIFI模块简介彩页

    2011-12-05 13:40:02
    SEANYWELL WIFI模块,新力维串口转WIFI, 无线WIFI模块 WIFI无线模组,新力维串口转WIFIWIFI模块 串口WIFI模块 WIFI模块应用开发 内置TCP/IP协议价格_嵌入式串口WIFI模块/透明数据传输 产品简介 新力维 WIFI无线...
  • wifi浅析

    千次阅读 2014-01-22 18:23:38
    无线以太网技术是一种基于无线传输的局域网技术,与有线网络技术相比,具有灵活、建网迅速、个人化等特点。将这一技术应用于电信网的接入网领域,能够方便、灵活地为用户提供网络接入,适合于用户流动性较大、有数据...
  • Wifi模块 智能家居

    2019-09-12 21:05:33
    用户通过KB3077模块,既可以在局域网内使用手机或PC机与其通讯,也可以让其连接附近的WiFi路由器来进行使用手机互PC机与其互联网远程通讯,为用户的串口设备通过网络传输数据提供完整快速的解决方案。 主要功能特点...

空空如也

空空如也

1 2 3 4 5 ... 12
收藏数 225
精华内容 90
关键字:

wifi传输特点