从手机定位谈谈科技(手机IP地址分配机制)

从手机定位谈谈科技
有些我以为是常识的东西,后来发现并不是常识。而当我想要分享给大家的时候,经过高手点拨,意外发现居然我自己所了解的也是有偏差的。有鉴于此,写篇文章。
源起是GPS的工作原理,我一直以为是常识来着。不过今天把这个话题延申一下。
一、手机是怎么定位的?
手机定位一般有三个方法。
方法1:基于你当前所接触的WIFI热点,如果这个WIFI热点是公开可查询的热点,存在地址信息对应的。那么你的位置可以锁定在该位置的一定半径内。
通过WIFI定位,你的位置只能被确认在一定半径的范围内,并不能精确识别你的位置,速度。
方法2:基于移动基站定位,你的手机信号是通过移动基站交互的。移动基站的地理位置是清晰明确的,当你手机可以获得多个基站的信号,并且不同基站信号存在不同的强弱衰减,那么可以根据这几个基站的位置和你信号衰减的情况,大致获得你的当前位置范围,以及大致的移动速度,如果你处于具有一定速度的交通工具之内的话。
方法3:最精准的,是通过卫星定位,你看,虽然WIFI,基站,卫星,具体是从近到远;但定位准确度确实越来越精确。
那么卫星定位,其实也包括不同的选择,以前是GPS一统天下,大家一提卫星定位就是GPS,但其实现在有很多家不同的卫星定位系统,GPS依然是全球规模最大的,此外欧洲的伽利略,中国的北斗系统等等。
实际上很多国产智能手机和卫星导航的芯片已经支持北斗系统,用户看到的标志可能还是GPS,但提供定位服务的,实际上可能是来自于不同的系统。
那么手机会自动根据信号强弱选择合适的系统进行定位导航,通常情况下,用户无需自己选择用哪个卫星系统。所以你就不用问我怎么切换到北斗系统啊,手机会在它认为合适的情况下用到的。
二、卫星定位的原理
这就是我以为是常识,而很多人却存在误解的地方。
首先,卫星并不知道你在哪里,它也不关心。其次,你的手机也不会向卫星传递讯号,定位导航卫星不负责跟手机终端交互信息。
从技术上来说,手机给卫星发射信号很难么,似乎也不难,有卫星通讯电话不是么,但这面临两个问题,第一,所需要的功率会比较大,偶尔通讯也就算了,手机实时定位,如果需要交互信息,电池撑不住的,;第二,卫星也没有如此强大的应答系统,全球无数手机每秒钟请求位置,这请求频次不吓死人,卫星上放一组服务器?可能么?
当然,你说马斯克不是要搞全球卫星组网么,丫牛逼,但至少目前技术成本过高,这是不现实的。
那么还有第三,就是,定位,其实不需要这么麻烦。
实际上,导航卫星的工作极为简单,就是广播,广播自己的位置,自己的时间。每个所谓GPS芯片(习惯这么叫,现在很多已经整合了多个卫星系统)就是接受这些信号,然后处理。
怎么处理呢?你如果知道它信号发出的时间,知道自己接受的时间,乘以传播速度,也就是光速,就知道自己和卫星的距离了对不对。当你的手机可以获得多个卫星信号的时候,比如三颗及以上,由于你知道卫星当前的位置数据,就可以通过数学公式,算出自己的所在位置。
但是,且慢,这里有个严峻的问题,因为光速太大,需要极高的时间精确度,卫星上有原子钟,可以提供极为精确的时间,但你手机上没有。这时候,就需要把时间也当作变量,所以,需要四颗以上的卫星,才能精准定位你的位置。
感谢科技的力量,现在的卫星定位极为精准,可以精确到米,从而让驾驶导航成为可能,实际上军方信号未解密,可以有更好的精确度。
这里其实还隐藏了一个问题,就是,由于极高的时间精确度,那么卫星相对于地球是高速运动的,基于相对论,我们知道不同速度下的时间是不同的,在这样的精确度要求下,这个不一致也会很致命,所以,相对论公式被用于修正这一误差。
所以真正的原理是这样的,卫星广播自己的时间(原子钟时间,极为精确到小数点后面n多位),当前位置。手机上的定位芯片获得多个卫星的信息,然后通过相对论公式修正时间误差,然后基于四颗或更多卫星的信息,测算自己的位置。这就是我说的,如此普及而成本低廉的定位芯片,其实技术含量还是蛮高的。
那么这里还有一个冷知识,卫星还负责给你准确的时间,所以你看现在很多智能手机没有调时间的选项,因为完全不需要,只要有卫星信号,时间一定是准确的。再根据你的地理位置判定你所处的时区,给予你当地的时间。
三、服务商如何确定你的位置
很多产品服务商需要你的位置,比如微信,比如微博,比如大众点评,当然更不用说地图导航。确定你的位置提供身边的服务,或者推荐身边的联系人,都是一种非常标准的互联网应用。其实在移动互联网之前,这样的服务并不是主流,通常只是做到同城推荐。而当时定位主要靠IP地址,这也是以前我经常用到的技术面试题。
实际上 ,手机终端用户可以选择是否把自己的定位信息发送给服务商,如果没有发送自己的地理位置,服务商也会通过你上网的IP来判断你的大概位置。当然这个就很难精确定位到具体位置了,通常只能定位到城市范围。
但这里有一个问题,就是手机终端,并不是必须上报真实的信息给服务商。有大量第三方工具可以伪造你的位置信息,你完全可以告诉服务商你在南极,或者在北欧的某个小岛上。
这也就带来了很多灰色产业的问题。
比如刷单,以前有uber幽灵车,假装在你附近。
比如约炮骗局,你身边的美女约你开房,后来延伸到了更多推销的领域,你身边的美女开始卖茶,卖酒,炒股,或者拉你上菠菜网站,或者让你带她打游戏等等。
很多不知情的人以为真的是身边的,其实都是用工具随意篡改地址,一路扫过来的。
新加坡政府曾经为此非常头疼,很多新加坡寂寞大叔被国内的骗子们用这招约炮骗钱。现在街上还能看到政府的公益广告提醒这个骗局。
今天特意街拍了一张这样的公益广告,背景是新加坡的组屋住宅区。
你说服务商有没有办法确认他的位置的真实性,没太多办法,潜在的思路是通过历史轨迹来判断,你总不能一个小时前在湖南,一个小时后就出现在了新加坡对吧。当然还有可以用IP地址+地理信息联合判断,但IP地址也未必可信,因为可以用代理服务器上网的么。
现在还有一种远程移动上网终端,更厉害了,你的sim 卡和终端放在新加坡,人在大陆,通过网络可以远程操纵这个终端上网做任何操作,那就更加完全查不出任何异样,目前是黑产行业最爱。
四、实时路况是如何实现的
我在知识星球分享这个话题的时候,有人提出了这个问题,很多地图软件会展示拥堵情况,并给出路程时间测算,这是怎么实现的呢?
其实不复杂,这是基于用户不断地上报数据汇总得到的。
比如这条路段上当前有10个车辆使用了百度地图,那么百度地图就知道这10部车的平均车速,就能知道这个路段目前的拥堵情况大概是怎样的。
甚至还能分出一些车道情况,比如根据车辆后续上报的行驶轨迹,可以大致区分主路和辅路的车速。(比如辅路可以拐弯,有等红灯的行为记录,而主路一路沿主干道直行)。
如果有充分的历史数据,还可以做出一些预判,比如现在5点半,你要出发,按照现在路况,可能只需要40分钟到达目的地,但根据历史数据可以知道,某些地段马上要进入晚高峰,所以你实际上可能需要60分钟才能到达目的地。坦白说,我觉得预判这块很多地图厂商应该是没做到位的。
前几天有个小新闻证实了这个实现逻辑,有个无聊的人把几十部安卓手机打开谷歌地图,放上小推车,然后推着小推车在一条空旷的道路上慢慢行走,然后很快你就看到谷歌地图显示这条道路拥堵。
真不想教人学坏,如果国内地图厂商用这招恶意竞争,恶心对手,我们以后出行就很难有可信的数据了。
五、地理索引的话题
地理位置信息成为标配信息后,就产生了基于地理位置的搜索诉求。
比如,离我最近的餐厅有哪些。离我最近的活跃用户有谁。一些虚拟增强现实的游戏也会强调这一点。
写出这样的代码或许不难,但高并发情况下呢?
那么传统的数据库索引,就很难满足这种高并发查询的诉求。
我特别提醒初入行的程序员一句,类似的问题,应该自己经常问自己,怎样实现可以满足高并发的查询请求。想想自己有没有办法,然后搜索一下别人怎么做的。很多程序员天天迷茫,不知道怎么进步,其实很多类似的问题要自己提出来,自己去找答案,不能总是等到去面试了才知道自己不会。当然面试了发现不会,也要花点时间去思考解决掉,不能每次面试都不会。
移动互联网刚开始兴起的时候,这个问题其实还是比较有困扰性的,后来一些数据库产品提供了地理空间索引,你至少应该知道这样的方案是什么,以及如何使用?对自己要求高一些,看看这种产品具体实现的源代码和底层的逻辑,搜索开销是怎么计算的,搜索开销和数据规模的对应关系是怎样的,彻底理解通透。
这个问题我就不展开了,技术人员可以作为思考题,多想想。
六,其他七七八八
卫星定位服务目前已经可以做到成本极低,那么应用场景也就极为广泛,防盗,追踪,电子围栏等等等等。
感谢科技的发展。
几十年前,航海中的船只要想知道自己的位置,还是需要凭借船长的经验和完整的记录信息。
十几年前,我和老婆自驾游的时候,还要看着纸地图找路,各种纠结各种开错路各种停车问人。
今天,我们随时可以知道自己在哪里,周围有什么,一个人去陌生的国度自由行,只要手机有电有信号,就不用过度担心迷路,这似乎是理所当然的事情,但真的就是很短的时间,我们才能实现位置认知的自由。
我的微博被禁言了30天,周知一下,我不会认为这是什么丢人的事情,我会把它当作一种荣誉,当然,还要感谢微博的不杀之恩。这事不怪微博,微博已经很保护我了。
今天看到一篇文章 ->中国青年报:不要把伟大的批评者,当做国家的敌人中国青年报说出这样的话,不容易,我当然是非常支持的。
当然,这句话也是有后门的,因为“伟大的批评者”这个定义在人家手里,而我很容易被归入“猥琐的批评者”行列,所以,算了。要做一个人家认可的,合格的批评者,很不容易,你看胡锡进老师偶尔会说几句“某些领导可能不爱听的”,人家是合格的批评者,我觉得我是没戏了。
 

手机IP地址分配机制
(一)
手机IP地址分配机制
牛先生有冤诉
近日,邢台的牛先生向客服热线反映,他们公司参加某招标代理机构的招投标活动,他们按照招标代理机构的要求,通过手机向招标代理机构指定的网站服务器上传了投标文件,但是后来被告知,他们公司上传投标文件所用的手机IP地址和石家庄另外一家公司投标所使用的IP地址相同,因此被判定为“串标”,不仅被取消本次投标资格,还被列入“黑名单”禁止参与其后的招投标活动。
牛先生还委屈地说,从一开始他们都不知道到底都还有哪些家公司参与了这次招投标活动,更不要说和“八竿子打不着”的石家庄某公司“串标”了,他们是被“冤枉”的,为此,一定要找电信运营商“讨个说法”还他们“清白”。
事实真如牛先生所言吗?
牛先生所在的公司到底有没有“串标”呢?
如果不是“串标”那何来的“IP地址相同”呢?
是招标代理机构“误判”?
还是另有“隐情”?
手机IP地址的分配机制
牛先生所说的这个事,其实涉及到手机用户上网时所使用IP地址的分配机制。
通常情况下,手机直接获取的IP地址为IPv4格式的“私网地址”,比如:10.10.0.1(因为IPv4公网地址总数毕竟有限,为了实现各省移动分组网上IP地址的“复用”,所以给手机直接分配的IPv4格式的地址都是私网地址,类似局域网内给各个电脑终端分配IP地址)。
手机IP地址的分配,一般有以下几种方式:
1
HSS(Home Subscriber Server,归属签约用户服务器)签约静态分配采用这种方式手机每次上网所使用的私网IP均“相同”且唯一,不同用户之间IP地址不同。
2
GGSN/PGW(Gateway GPRS Support Node/PDN GateWay,网关GPRS支持节点/PDN网关)网元动态分配这种方式下,就是GGSN/PGW网元在用户上网请求流程中,从一个事先定义好的“地址池”当中随机选择一个IP来供用户在“本次”上网过程中使用,用户“下线”或关机后,该IP会被“回收”到地址池当中,再被别的用户重复使用。由于在这种方式下,用户每次上网获取的私网IP不尽相同,因此称为动态分配。目前,电信运营商大都采用这种手机IP地址分配方式。
3
AAA(Authentication Authorization Accounting,认证、授权和记账)服务器分配这种方式有点像前面2种IP分配方式的结合,AAA服务器中按照用户MSISDN (Mobile Station International ISDN number,即指手机号码)和事先规划好的IP地址做“绑定”,用户每次上网时,由GGSN/PGW到AAA服务器当中查询用户所对应的IP,然后分配给用户使用。这种方式,用户每次上网所使用的私网IP也均“相同”且唯一,而且不同“企业网”之间的IP地址段也可以复用,一般用于物联网集团客户组网。
以上说完了手机的IP地址分配机制,由于手机终端获取的IP地址为私网IP地址,光有私网IP地址,还不能直接访问互联网。要访问Internet互联网,还需要通过防火墙NAT(Network Address Translation,网络地址转换)功能转换为公网IP地址才行。
需要说明的是,GGSN/PGW覆盖下的用户共享IP地址池中的地址,经过防火墙进行NAT转换时,并不是按照一个私网IP地址对应一个公网IP地址的方式来进行转换的,而是采用多个私网IP(对应多个手机用户)共同使用一个公网IP地址,并根据不同端口号来区分不同用户的工作机制。
也就是说,2个手机号码同时访问互联网时,存在使用相同公网IP地址的可能,但是这2个手机号码使用的“端口号”是不相同的,因此能够“区分”用户。这样做的好处是显而易见的,既节约了公网IP地址,也可以同时支持更多数量的用户同时上网。
假如NAT地址转换后使用的公网IP地址为256个,每一个公网IP又可以关联0-65535个端口号,所以理论上一个GGSN/PGW下就可以承载256*65535个用户(私网地址分配数量也需要满足),这个数量是相当大的。
现在再回过头来,看看牛先生所说的事。
学懂了以上知识就不难看出,如果邢台的牛先生和石家庄的某投标公司上传投标文件时,所用手机终端处于同一个GGSN/PGW业务覆盖区,那么2部手机获取并使用“相同的公网IP地址”(招标代理机构判定“IP地址”相同,一定是指公网IP地址相同,因为互联网上网站服务器是不可能获取到手机终端的私网IP地址的)的可能性是存在的,如果NAT地址转换后使用的公网IP地址只有256个的话,那这种公网IP地址相同的概率还是很大的。
令人欣慰的是,邢台的牛先生通过我们给出的“技术原理”知道了自己被“冤枉”的原因,最后也从招标代理机构那里讨回了公道。
总结和建议
1
通常情况下,手机直接获取的IP地址为IPv4格式的“私网地址”,访问互联网时要通过防火墙NAT转换为公网IP地址。
2
手机IP地址分配有三种方式:HSS签约静态分配、GGSN/PGW网元动态分配、AAA服务器分配。
3
GGSN/PGW覆盖下的用户共享IP地址池中的地址,经过防火墙进行NAT转换时,采用的是多个私网IP(对应多个手机用户)共同使用一个公网IP地址,并根据不同端口号来区分不同用户的工作机制。
4
招标网站仅靠手机使用的公网IP相同就判断投标人“串标”是不严谨的,需要完善判断方法。比如增加公网IP“端口号”的识别,或者增加具体手机号码的判别等信息。