如何实时获取广播星历_来一场思想实验,Wifi 版的 iPad 在户外是如何知道自己的位置的?...

af8e379cf57c4df837841e2209c33023.png

2012 年的时候,我买了我的第一只 iPad,是第三代的型号,苹果公司当时叫它 the New iPad,国内网友称“牛排”。当时出厂自带的系统是 iOS 5.0。

苹果公司的 iPad ,在硬件上有两种配置,一种叫 Wifi 版(或叫 WLAN 版),另一种叫蜂窝版。蜂窝版在硬件上其实比 Wifi 版多了两样东西:

  1. 蜂窝网络调制解调器。你插一张手机卡进去,就可以在户外通过电信运营商的网络来连通 Internet 了。
  2. GPS 接收器(硬件芯片),可以接收卫星定位信号来准确获知自己的位置。当然,这个 GPS 定位功能跟你是否插入手机卡完全无关。


我刚买到这个 Wifi 版 iPad 时,我并不清楚它是否自带 GPS 芯片,到网上搜索一番,得知它是不带的。亲自拿着这个 iPad 到户外去验证,比如找个野外公园转上一圈,发现它在户外果然没有定位功能,这下不得不信了。

不过后来让我惊讶的事发生了,大约在 2015 年,我带着这个 Wifi iPad 到了一个远郊的住宅小区附近,我并没有在那里连接任何的 Wifi 热点,但回家后却发现,在那里用 iPad 拍摄的照片中竟然相当准确地标注了照片的拍摄地点,在地图上看,跟真实地点的偏差也就二三十米吧。嘿,这是怎么做到的呢?我还真困惑了好几天,随后想到,这只 iPad 跟我刚买来的时候有一个变化,它的 iOS 版本已经从 5.0 升级到 7.0 了。能够在户外“非联网的情况下”获知自己的位置,这也许是 iOS 7 的新功能,但这是如何做到的呢?


还好我是搞软件开发的,对于 WLAN 协议有一定的研究,不久后就想通了,虽然没有 100% 直接的证据,但我相信我推导的合理性。

现在我来一步一步推导,看一个移动设备是怎么获知自己的地理位置的(即经纬度信息),看你想的是否跟我一样。

【第一阶段】 纯粹依赖 GPS 卫星信号。

典型的代表设备是 Nokia N78。2008 年的时候,我冲着它有这个 GPS 功能,就买来尝鲜了一番。在户外还真能定位,不过毛病是首次定位时间相当漫长,长达几分钟到十几分钟,这是传统 GPS 设备的通病了,所谓的 GPS 冷启动,它要搜索足够量的卫星信号并且收集几分钟的数据才能很肯定地报告自己的位置,首次确定位置后就能逐秒连续跟踪了,配合一个离线的凯立德地图软件,拿着手机就能知道自己正在那条街道上了。倘若关闭这个手机上的 GPS 功能,几天后到另一个地点再开启 GPS 功能,又要经过几分钟的冷启动,十分不方便。

GPS 卫星信号定位,在民用终端上能提供的精度在 5~10 米,据说军方的专用终端可以高达 1 米。而且 GPS 可以提供海拔信息。

【第一阶段增强版】 Assisted GPS , 网络辅助的快速 GPS 定位。

为了对付 GPS 冷启动缓慢的问题,人们想出一种称为 Assisted GPS (A-GPS) 的手段。根据维基百科条目,GPS 冷启动的时间大多耗费在从 GPS 卫星下载星历信息上了,这个下载的速率慢得可怜,只有 50 bit/s 。现在,如果我们的手持终端能够连通 Internet 的话,就能够从 Internet 上的 A-GPS server 下载星历信息,这样就大大节省了时间。

按我自己的体会,有联网的情况下,iPhone 4s 3~5 秒就能获知 GPS 精度的准确位置。 如果让我的 iPhone 4S 切断 Internet 连接,带到一个陌生的空旷地点,然后开启它的 GPS 功能,也是要漫长的几分钟到十几分钟才会报告当前的位置。

后头有网友评论说,Nokia N78 是有 A-GPS 功能的,也许是吧。不过当年我在户外启动 N78 的 GPS 时并未同时开启蜂窝数据功能,因此就没有体会到。毕竟 2008 左右塞班系统上的软件生态很薄弱,当时手机连上 Internet 能做的事很少,移动数据资费还挺贵。

【第二阶段】 基于 WLAN 网络的定位。在能够访问 Internet 的情况下,通过周围的 WLAN 热点来进行定位。

所谓的 WLAN 热点(Wifi 热点),行话叫 AP (802.11 Access Point)。现在我们家里用的一两百块钱的所谓“宽带无线路由器”,就是是结合了 AP 和路由器功能的二合一设备。

WLAN 热点的定位精度,大约 20~100米。

要明白 WLAN 热点定位是如何工作的,需要先了解一些基本事实:

  1. 一个 WLAN 热点的信号覆盖范围,在空旷区域可达 100~200米。或者说,你的手机、平板,离它接入的 Wifi 热点 200 米以内都是可以通信的,只不过,距离越远信号越弱,数据传输速率也会越慢。另外要知道,有建筑物遮挡的话,会减弱无线电波信号强度,大大缩短可通信距离。
  2. 所有工作中的 WLAN 热点,都会持续不断地往外界广播信标包(行话叫 Beacon),通常是每秒钟均匀地发射 10 个信标。信标包用于通告 WLAN 热点自身的存在,信标包里头会包含一些重要的信息,比如自己这个热点的名字(一串英文)、自己所在的信道号、自己支持哪些速率、支持哪些加密方式,以及 AP 自己的 MAC 地址(独一无二的硬件标识号,形如 CC:E1:D5:BD:C3:10,六个字节) 。正是由于有了信标,我们的手机才能够扫描到周围有哪些 AP 存在。
  3. 当我们的手机选择某个 AP 连上的时候,并不是说我们的手机从此只跟这个 AP 发生数据交换。事实上,我们的手机的 Wifi 硬件依旧会不断地监听当前信道上其他 AP 发来的信标包,甚至还会抽空在后台扫描一下其他的信道上的信标 (2.4GHz 频段范围的信道号是 1~13)。此举的目的是,如果在后台找到了信号更好的 AP,就会自动切换(或说漫游)到新的 AP 上去。

用 Wifi 抓包软件和特定的 Wifi 网卡,可以抓取 802.11 链路层数据包来观察到 Beacon 中携带的信息。

7378a03e921f3e446cd0fa3e62bce8af.png
CommView for Wifi 7.1 捕捉到的 802.11 数据包

ccc3cdd45bfa4d39cae86337eee28488.png
Beacon 数据包各字段解读

好了,现在只差一个信息就能够让 WLAN 客户机得知(算出)自己的位置了。这个信息是:世界上各个 AP 的地理位置。想象一下,苹果公司有一台这样的位置服务器,上头存储了世界上所有 AP 的地理位置(你可以想象它是一张很长很长的从 MAC 查询经纬度的对应表),那么,iPad 通过查询自己所扫描到的各个 AP MAC 的对应经纬度,就可以估算出自己所在的经纬度了。当然,本段说的这个位置服务器,跟第一阶段那个 A-GPS server 是两个不同的概念。

如果 WLAN 客户机周围只有一台 AP 在工作,那么它估算出的位置误差可能就会偏出去 100~200 米,但如果周围有 5 台 AP 呢?我们考察收到的这 5 台 AP 的信号强度,如果 #1, #3, #5 信号很强,我们就估算自己离它们比较近,如果 #2, #4 信号很弱,我们就估算自己离它们比较远。周围有越多的 AP, 对自己位置的估算就越准确。

最后需要失落的一环。苹果的位置服务器是怎么知道世界上各个 AP 的地理位置的呢?这里头可是包括你家里和我家里自行购买的 AP 哦,它怎么知道我买来 AP 后会放在哪个地点使用呢?

简单地说,这些信息是靠手拿 iPhone 的人自动收集的。iPhone 是有 GPS 定位芯片的,能够准确知道自己的位置,同时 iPhone 也是个 WLAN 客户机,它能够收集自己周围有哪些 WLAN AP。iPhone 的后台系统将这两样信息上传给苹果的服务器,苹果就能够大致估算出各个 WLAN AP 的物理位置了。

前面我提到,WLAN 的信号传播范围是 100~200 米,那么,苹果后端系统对于 WLAN AP 的位置估算的误差范围大约也在百米级别,当然,对于有些情况可以估算得更准确一些,比如,所有(从户外路过的) iPhone 都报告 CC:E1:D5:BD:C3:10 这个 AP 的信号特别强,而且各个 iPhone 报告的自身 GPS 位置也高度一致,那么,我们可以认为 CC:E1:D5:BD:C3:10 这只 AP 的位置可信度很高(也许它是个户外的 Wifi 热点),就给它较高的计算权重。

至此我们可以看出,Wifi-only iPad 只要能够连上苹果的那个位置服务器,就能够估算出自己的位置了。这就解释了为什么在室内有联网的地方使用 iPad,一般都能够获得自己的位置信息。

这下你明白了吧。iPhone 上提示说“打开 WLAN 开关能够增强定位精确度”的内在含义。想象你手头有一只蜂窝版的 iPad,并且打开了 3G/4G 网络连通了 Internet,这时候你进到一个没有卫星信号的房子里,该怎么定位呢?显然,打开 WLAN 全局开关就能定位了,无需连接具体的 WLAN 热点。

显然,以上工作原理同样适用于安卓系统。

借助 Internet 位置服务器,无需 GPS 信号也可以大致估算自己的位置了。能够辅助定位的信息除了 WLAN 热点的 MAC 地址以外,有蜂窝电话功能的设备结合手机基站提供的蜂窝号也能够大致推测自己的位置。手机基站(2G/3G/4G)的密集度显然比 WLAN 热点要低很多,因此估计出的位置偏差也较大,也许是 500~1000 米。如何验证苹果和安卓的软件系统有没有借助手机基站的位置信息来帮助提供位置信息呢?这个不好说,因为不太容易验证,我们很难确认手机只用了蜂窝基站的信号而没有用 WLAN 的信号,毕竟现在找一个没有 WLAN 信号的地方不容易。用安卓手机也许可以,比如小米 8,我们可以要求关闭 Wifi,关闭 GPS 硬件,只打开蜂窝数据,观察它的定位精度;用 iPhone 可能就验证不了,因为 iPhone 没有独立的 GPS on/off 开关,只要用户开启了定位功能,GPS 硬件就一定会被开启。

【第三阶段】 相邻设备辅助定位

这一阶段终于要回答,为什么没有 Internet 连接的 Wifi-only iPad,在户外还是有自身定位能力呢?

我的推测是这样的:iPad 可以向周围有定位能力的 iPhone 询问位置,如果周围的 iPhone 足够多,而且离 iPad 比较近,那么定位可信度就会比较高,大约跟 WLAN 网络定位是同一级别的。 iPad 向 iPhone 询问位置,走的是什么通道呢?走的肯定还是 WLAN 通道(也可能将蓝牙作为辅助通道吧),只不过,两个 WLAN 客户机之间不是通过 AP 来交换信息,而是直接走 802.11 链路层(类似于 ad-hoc mode),这个信息交换,可能是苹果自己定的一套协议。走 WLAN 通道,并不消耗蜂窝数据流量,iOS 在后台顺道当个活雷锋,iPhone 用户应该是不会有意见的。

请注意,被询问位置的 iPhone,并不需要开启“Wifi 热点功能”,它只要开启全局的 Wifi 开关(“无线局域网”开关)即可。

这个相邻设备定位手段,我猜测可能是 iBeacon 功能的一部分。

至于不带 GPS 芯片的安卓平板有没有类似的户外定位功能,这个不好说。市面上知名厂家的这种平板比较少,我没有去验证。

结束语

充分利用系统所能收集到的信息,以及充分利用各种信息交换渠道,能帮我们获取意想不到的解决方案。

类似道理,百度地图、腾讯地图等地图数据服务商,凭什么来知道某某小县城里头开辟了一条新道路呢?它们不用专门派测绘人员来丈量,而是通过行走在新道路上的人和车主动提供的位置信息来绘制的。当足够多的人和车一致地沿着一条之前未被标记为道路的路线在移动时,那肯定是一条新道路了,然后呢,通过路人在这条道路上拍摄的街景照片,地图 App 就能够看到这条路叫什么名,边上开了些什么店。

我对 WLAN 协议的了解,来源于一本十多年前的入门读物,802.11 Wireless Networks The Definitive Guide 2nd-edition, by Matthew Gast (Amazon 商品页)。该作者后续还有 802.11n A Survival Guide (2012) 和 802.11ac A Survival Guide (2013) 两本书。

(初稿于 2019-07-01)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值