十分钟搞懂手机号码一键登录( 二 )


P-GW:PDN Gateway , PDN网关 。运营商核心网与互联网之间的网关 , 手机真正上网就是通过它了 。它会给手机分配一个IP地址 , 控制上网的速度 , 对流量进行计费等 。
PCRF:Policy and Charging Rules Function , 策略与计费控制单元 , 保存每个用户的网络访问策略和计费规则 。
上网过程为了方便理解 , 这里将上网的过程大致分为两个部分(和上图的1、2对应):

  • 1 接入:建立连接时 , 手机携带IMSI信息 , 通过基站访问到MME , MME通过HSS验证IMSI信息 , 然后MME进行一些初始化工作 , 返回一些鉴权参数给手机 , 手机再进行一些计算 , 然后把计算结果返回给MME , MME验证手机的计算结果 , 验证通过则允许接入 。这个过程保证了接入的安全 , MME还为后续的数据传输提供了加密传输支持 , 保护数据不被窃听和篡改 , 有兴趣的同学可以去详细了解下 。如果手机卡销售的时候没有写入手机号 , 手机卡首次注册登记的时候 , 运营商会从HSS中取出手机号 , 然后再写入手机卡中 。实际应用中 , 为了防止跟踪和攻击 , 不是每次通信时都要携带IMSI , MME会生成一个临时的GUTI对应到IMSI , 就像Web程序中的SessionId 。MME还有一定的机制控制GUIT的重新分配 。
  • 2 传输:手机网络流量的传输 , 还是先要通过基站 , 然后下一步进入S-GW , S-GW会检查用户的授权 , 就像Web程序中检查前端提交过来的SessionId , 再看看用户有没有权限进行其提交的业务 , 这里就是看看用户有没有开通流量上网 , 这是S-GW通过连接MME实现的 。S-GW处理完毕后 , 数据包会进入P-GW , P-GW在手机使用流量上网时会给用户分配一个IP地址 , 然后数据包通过网关进入互联网 , 访问到相关的资源 。P-GW还会对上网行为进行速率控制、流量计费等操作 , 这些策略来源于PCRF , PCRF中的规则是根据HSS中的用户套餐、用户等级等计算出来的 。对P-GW来说S-GW屏蔽了用户的移动性 , 手机在多个基站切换时 , S-GW不变 。
以上就是手机流量上网的基本原理了 , 可以看到 , 运营商通过IMSI或者GUTI完全有能力获取到当前上网用户的手机号码 。对于运营商的一键登录具体是怎么实现的 , 我并没有找到相关的介绍 , 但是可以设想下:手机应用通过运营商的SDK发起获取手机号码的业务请求 , 此时会携带IMSI或者GUTI , 业务请求到达S-GW , S-GW鉴权通过 , 然后将这个业务请求路由到运营商核心网中获取手机号码的服务 , 服务根据业务规则从HSS中取出手机号码并进行若干处理 。
一键登录的原理【十分钟搞懂手机号码一键登录】理解了手机流量上网的原理 , 再来看下一键登录业务是如何实现的 , 这个部分属于上层应用程序开发 , 大家应该相对熟悉一些 。
如果你接入过微信的第三方应用登录 , 或者其他类似的第三方应用登录 , 过程是差不多的 。还是先来看图:
十分钟搞懂手机号码一键登录

文章插图
 
这里对一些关键步骤进行说明: