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不变 。
一键登录的原理【十分钟搞懂手机号码一键登录】理解了手机流量上网的原理 , 再来看下一键登录业务是如何实现的 , 这个部分属于上层应用程序开发 , 大家应该相对熟悉一些 。
如果你接入过微信的第三方应用登录 , 或者其他类似的第三方应用登录 , 过程是差不多的 。还是先来看图:

文章插图
这里对一些关键步骤进行说明:
- 2预取手机号掩码:这个手机号掩码需要在请求用户授权的页面展示给用户看 , 因为获取这个信息要通过电信运营商的网络 , 所以可能会比较慢 , 为了提升用户体验 , 可以在应用启动的时候就去获取 , 然后缓存一段时间 。
- 8授权请求:因为应用获取用户手机号这个事比较敏感 , 必须让用户清楚地了解并授权之后才能进行 , 为了确保这件事 , 运营商的认证SDK提供了这个授权请求页面 , 用户确认授权后 , SDK直接向运营商认证服务发起请求认证 , 认证服务会返回一个认证Token给应用 。应用再通过自己的服务端拿着这个Token找运营商获取手机号码 。
- 17生成应用授权Token:应用要维护自己用户的登录状态 , 这里可以采用传统的Session机制 , 也可以使用JWT机制 。
推荐阅读
- 一图搞懂扫码登录的技术原理
- 银行卡怎么换绑定手机号码?
- 阿里资深软件测试工程师总结的这几点,让小白轻松搞懂性能调优
- 彻底搞懂字符编码
- 十分钟学会用 Go 编写命令行工具
- gmail谷歌邮箱账号注册教程,轻松解决手机号码无法用于验证问题
- proxies 1分钟搞懂什么是 JS 代理对象
- 循环、双向、链式、数组 一文搞懂队列
- 学数据库这么久了?SQL数据库基础函数都搞懂了吗?安排
- 彻底搞懂Java线程池的工作原理
