wifi direct 简介
2010年10月,Wi-Fi Alliance(wi-fi联盟)发布Wi-Fi Direct白皮书,白皮书中介绍了关于这种技术的基本信息、这种技术的特点和这种技术的功能,
Wi-Fi Direct标准是指允许无线网络中的设备无需通过无线路由器即可相互连接。
与蓝牙技术类似,这种标准允许无线设备以点对点形式互连,而且在传输速度与传输距离方面则比蓝牙有大幅提升。
安卓中 wifi direct 操作方式说明
在安卓4.0系统中已经有wifi direct的实现,在网上找了一些图,说明一下wifi direct的操作方式
1.首先看一下wifi direct功能的存在位置,见下图
2.如果打开了wifi ,wifi ap(热点功能),可能会看到下面的提示信息,见下图
(因为wifi direct 是作为wifi硬件设备的一种模式,暂时没发现几种模式共存的例子)
3.wifi direct 功能打开后,会看到附近的wifi direct设备,示例见下图
4.点击可用的网络,发起链接邀请,可以看到要链接的设备的硬件地址,设备名称,见下图
5.被链接的设备收到请求,弹出的确认链接选项,见下图
标准linux下解决方案说明
现在找到的解决方案是采用wpa_supplicant.
简单介绍一下wpa_supplicant,软件的目的是用来完成跟网络相关的wpa wpa2 验证,支持多种操作系统。
该软件实现了key的交换和认证,以及漫游、wlan驱动中IEEE 802.11认证/链接的控制
从使用角度来说,该软件分为两个部分,一个是wpa_supplicant daemon 程序,一个是控制程序(有图形和命令行两种)
wifi direct直连建立过程说明
采用设备说明
lenovo S10-3t
网卡支持情况判断方式说明
通过iw list 命令 查看 supported interface mode,
wifi direct 相关的模式为 P2P-CLIENT 以及 P2P-GO
(查看相关历史,可以看出 wif direct最初被称为 wifi p2p )
lenovo S10-3t 的内置无线网卡为Atheros AR9285,通过查询得知该网卡为最早通过
wifi direct认证的五款网卡之一,通过iw list 命令也可以看到其支持 上述wifi direct相关模式
wpa_supplicant 相关说明说明
ubuntu 系统默认安装的0.73版本暂时不支持p2p 相关功能
android 采用的wpa_supplicant 采用的版本为0.8,在社区找到的最新稳定版本为1.1
该版本已经支持了相关功能,但需要添加编译选项,才能真正支持起来,需要添加的编译选项如下(可能有的已经有了,请检查是否都包含,nl80211为联系小本使用的设备驱动)
CONFIG_DRIVER_NL80211=y
CONFIG_CTRL_IFACE=y
CONFIG_WPS=y
CONFIG_WPS2=y
CONFIG_P2P=y
CONFIG_AP=y
支持过程说明
使用wpa_supplicant包中相关指令说明
wpa_supplicant
wpa_supplicant 的主程序
一般使用方式:wpa_supplicant -Dnl82011 -iwlan0 -c /etc/p2p.conf -ddt
说明:
-D 指定使用的driver
-i 指定使用的端口
-c 指定运行wpa_supplicant需要的配置文件
-ddt 输出log信息到当前终端
-B 指定wpa_supplicant以daemon的形式运行在后台
wpa_cli
wpa_cli 为端口控制程序,使用方式分为两种模式,一种为交换式,一种为命令行方式。
一般使用方式 : wpa_cli 进入交互式控制方式;wpa_cli [command ] 这样为命令行模式
说明:
交换模式常用的指令分析
p2p_find 发送探测数据帧,查找设备周边跑直连设备
p2p_peers 获取搜索到的设备的mac地址
p2p_connect 跟直连设备建立链接
p2p_group_add 添加一个p2p group
wps_pin 设置wps 校验方式为pin码方式
wps_pbc 设置wps 校验方式为pbc(push button control)方式
p2p_flush 清除发现的设备列表,以及p2p状态操作
命令行模式常用参数分析
-a 指定action脚本(接收到相应事件做出何种响应的一个脚本)
-B 作为daemon后台运行
此外,交换模式的指令可以直接放在命令行模式使用(但有些返回数据无法看到,因此在下面的操作步骤中选择交换模式)
操作流程
wpa_supplicant建立数据链路层链接相关操作流程见下图:
说明:
-
完成上述步骤之后,就已经建立起数据链路层的链接
-
在步骤6设置wps的验证方式时,也可以使用pbc 模式,方式如下
为使上层能够正常使用需要为端口设置IP,设置方式分为两种:
静态IP
两设备要设置为同一网段,示例如下
ifconfig wlan0 192.168.1.3 netmask 255.255.255.0
ifconfig wlan0 192.168.1.4 netmask 255.255.255.0
动态分配IP
为使设备成功分配IP,下面将要列出的步骤要在建立数据链路层的步骤7之前完成
(设备2 p2p_connect 操作之前)。
可以采用的方式有两种:
-
wpa_supplicant本身支持的方式 ,具体如下
在两设备上同时运行如下指令 wpa_cli -a p2p-action.sh -B
p2p-action.sh 为wpa_supplicant 的action脚本,该脚本位于源码包examples文件夹下
该脚本可以直接使用,也可以修改其内部动态分配相关内容以指定使用的网段和IP。
-
手动搭建DHCP服务器,以及dhclient,具体方式如下
在设备1 端搭建DHCP 服务器,具体内容可以参考wifi热点中该部分的描述wifi 热点
在设备2端要建立client 使用的指令如下
sudo dhclient -pf /var/run/dhclient-wlan0.pid -lf /var/run/dhclient.leases-wlan0 -nw wlan0
遗留问题
1.wps的模式中,pbc模式不是很稳定
2.和其它设备(lenovo手机,三星手机)的数据交互仍存在问题
(可以成功建立链接,但无法传递数据)