
撰稿 | 张大圣
苹果Airdrop三部曲
https://mp.weixin.qq.com/s/23DTl05QWj-pRoGJxxPNvQ
http://苹果这些年,AWDL 一代神兵,技术详细拆解https://mp.weixin.qq.com/s/C8QZSSxwrL2gUul6KmoO7g
http://一晃13年过去了,苹果的Airdrop依然很坚挺。https://mp.weixin.qq.com/s/b3_mSvk4rl2PV-8EG8YawA
http://苹果转向:Wifi Aware优势在哪里?原理解析
先看技术时间线
-
2010.6.30 BLE随着core4.0发布
-
2012年 三星S Beam(NFC)
-
2013年 Airdrop跟随IOS 7发布
-
2016年 华为 HUAWEI分享
-
2020年 三星快速分享
Airdrop是苹果开发的短距通信功能,比如分享视频,照片等等。体验确实无比丝滑,发现附近设备没有明显延迟。
手机间分享文件,蓝牙吞吐率太低,一张3MB照片需要几分钟;用wifi Direct设备确实快,但设备连接过程复杂,可以劝退绝大多数用户。
逆向工程的完美揭开Airdrop的真面目,协议框架非常精致。

Airdrop的整个传输过程分为三个阶段
-
设备发现BLE+AWDL
-
身份验证Authentication
-
数据传输Data Transfer
功能启动:双方都需要启动Airdrop功能,同时其依赖的蓝牙和wifi功能也需要打开。开启Airdrop后会在后台开启ble的广播和扫描动作。
设备发现过程:以用户信息为参数计算Hash值,ble广播的有效字段填充这个Hash值以及截短的设备名字,设备收到广播并解析Hash后,对照自己存储的历史用户列表,匹配成功就直接显示对方的头像等详细信息,否则只有截断的名字。

采用BLE主要两个原因:首先,ble的广播是在37、38和39广播信道,发现过程非常快,最快十几ms就可以完成发现过程;其次,ble的功耗极低,而且还可以配合ble的背景扫描功能,controller可以过滤特定字段的广播,避免频繁和host通信。
随后,进入设备发现第二步AWDL设备发现,Apple Wireless Direct Link,苹果无线直连属于私有协议,工作在二层的数据链路层,基于这一层的多播通信发现AWDL设备。要比mDNS等应用层基于ip地址的多播快很多。

AWDL创造了一个虚拟的、所有苹果设备共用的BSSID (抓包显示:00:25:00:ff:94:73),所有AWDL设备都将自己的网卡"逻辑上"关联到这个BSSID,从而监听发往该地址的帧。

但随后致命的问题又出现了!每个设备占用自己的wifi物理频段,不仅影响本机的wifi通信,而且不同信道的设备也无法直接通信。AWDL进入设备发现后,会强制切换到共同的频段,通常是44信道;并且会在局域网中协商出来一个master,其主要的作用是提供时钟,兼顾普通wifi和AWDL之间的通信。
这也正是苹果电脑平时要关闭AWDL功能的原因,否则wifi网络会收到明显影响。苹果论坛中有用户反馈的数据,ping网络出现非常高的时延,甚至联通失败。

大神提供了关闭AWDL的命令脚本:每秒监测一次,当awdl网卡启动后,就直接将网卡干掉。

AWDL是苹果这些年非常亮眼的成果之一,基于它实现的功能很多:Airdrop文件传输协议、Airplay投屏协议、通用控制"一套键鼠控制多台Mac/iPad",以及快速连接iPhone热点。
AWDL通信识别对方是Airdrop设备后,会创建awdl0网络节点,同时操作系统会自动为其配置链路本地IPv6地址(如 fe80:: 开头的地址),然后通过Bonjour / mDNS启动应用层的多播服务,为真正的传输交互数据。

开启awdl后,系统中会看到awdl0名称的网卡。

在用户真正点击对方头像"分享"后,进入用户认证阶段,对方手机会出现图片的缩略图,以及接受和拒绝的按钮。请求用户许可。这个阶段对应建立TLS安全链路,并携带用户信息。

当用户认证完成后,就可以看到对方的头像缩略图信息。

最后,数据传输阶段依然是建立TLS安全链路,http协议传输用户数据。

iphone中Airdrop功能有多种模式:所有人可见,仅限联系人,接收关闭,平时基本不使用其传输文件的,建议默认关闭。
设置路径:
-
iPhone/iPad:前往 设置 > 通用 > 隔空投送;或在控制中心长按网络设置块后点击隔空投送图标进行快速切换。
-
Mac:前往 系统设置 > 通用 > 隔空投送与接力
创作不易,关注一哈,谢谢

未来侦察班
科技圈的这点事儿,挺有意思
108篇原创内容
公众号
往期文章
wifi7失去6GHz频段,还有竞争力吗?看看实测数据(文末领报告)
参考:
https://jiapan.me/2023/AWDL-Mac-disconnected/
https://discussionschinese.apple.com/thread/255369050?sortBy=best