最近公司在做移动网络的优化和治理工作,借这个机会,好好学习了下移动网络底层传输的工作原理,并将结果分享出来。
GSM(Global System For Mobile Communications)是第一代移动通信网络,也就是常用的2G移动电话系统。其做出的改变是将信令和语音信道都转换成数字式的。
GPRS(General Packet Radio Service)是第二代移动通信系统,在GSM的基础上,采用分组交换传输数据的高效率方式,利用“包交换”(Packet-Switched)将数据封装成许多独立的封包,再将这些封包一个一个传送出去,效率比GSM高的多,因为这样做,只有在需要传输时,才会占用带宽。GPRS核心网元包括SGSN(Serving GPRS Support Node)和GGSN(Gateway GPRS Support Node)
UMTS(Universal Mobile Telecommunications System)在GPRS的基础上,引入了WCDMA空中接口技术,“空中接口”相对于有线通信中的线路接口,是基站和移动电话之间的无线传输规范,它定义每个无线信道的使用频率。UMTS被称为第三代移动通信系统。同时,GPRS/UMTS也成为了一个完整的3G移动通信技术标准。
LTE(Lang Term Evolution)是目前普遍应用的4G通信的主流技术,原有3G核心网的SGSN和GGSN功能归并后重新被划分,生成新的逻辑网元:移动管理实体(MME)和服务网关(Serving Gateway)。换言之,3G和4G核心网络的逻辑架构是不同的,演进过程中需要对SGSN和GGSN的软硬件进行升级。
综上所述,GPRS/UMTS起到了承前启后的作用,其工作原理与机制也被4G、5G所沿用并优化。因此我们详细来看GPRS/UMTS系统。
简单来说,GPRS/UMTS的网络架构主要包括两部分:无线接入网络(RAN)和核心网(CN)。如下图所示:
无线接入网(Radio Access Network),简称RAN。RAN中包括的设备包括有:基站(Node B)和无线网络控制器(RNC),主要的功能就是控制用户通过无线接入到移动通信网络中来。
其中,基站的作用是为了数据的无线传递,而RNC主要用于管理和控制它下面的多个基站,并决定接入到核心网。
现阶段,3G核心网由电路域(CS域)和分组域(PS域)两部分组成,分别负责传统语音业务和分组域业务(数据和多媒体业务),我们只看PS域。
PS核心网主要由SGSN和GGSN两部分组成。统称为GSN,GSN的功能包括:
SGSN
SGSN主要用于为在其地理范围内的移动站传递数据包,相当于无线网络中的路由节点。它可以进行分组路由和转发,移动性管理(附着,去附着和位置管理),逻辑链路管理,鉴权以及计费功能。SGSN的位置寄存器保存着位置信息,比如当前的小区。
SGSN的主要功能包括:
1 完成和GGSN的通信,通过GTP协议将用户数据传递给GGSN,并将GGSN返回的数据传递给用户
2 当用户地理位置发生变化,执行移动性管理。
GGSN
GSGN作为整个GPRS/UMTS网络的网关,位于GPRS网络和外部分组交换网络(Internet)之间。网关的作用能将一种协议格式的数据转换为另一种格式的数据。
GGSN把来自的SGSN的GPRS数据包转化为适当的分组数据协议格式,比如IP,然后再把它们发送到相应的分组数据网络,比如广域有线网。反之亦然。
SGSN和GGSN的区别
所以,GGSN和SGSN的主要区别就在于,GGSN作为网关,是在不同的通信网中转换协议,而SGSN作为路由,只是在使用相同协议的网络中发送、接受以及延迟它的数据包。
另外,GGSN能够实现地址的转换,比如把无线网络内部地址(PDP地址)转换为一个分组数据网络协议地址(IP地址),而SGSN只能实现PDP地址映射,即根据一个地址,映射到相同种类的另一个地址。可见,我们常说的3、4G网络的IP地址,其实就是对应GGSN的出口IP地址。
GTP协议为GPRS/UMTS分组域核心网中的SGSN和GGSN之间的信令和用户数据提供隧道。隧道协议能够将其他协议的数据帧或包重新封装然后通过隧道发送。新的帧头提供路由信息,以便在不同网络下传递被封装的负载数据
GPRS隧道通过GTP协议封装了含有终结点标识TEID的头,用于实现路由以及多路复用。在核心网内部通过GTP协议通信,在外部数据网侧是TCP协议或者UDP协议通信,所以数据报在这两种网络间交互需要对数据报头进行处理(SGSN、GGSN都可以实现)。进入核心网时需要对数据报进行加GTP头处理,反之,则需要对数据报进行去GTP头处理。
在GPRS/UMTS分组域核心网中,通过PDP上下文(Pocket Data Protocol, 分组数据协议)来管理用户从移动终端到GGSN及外部分组数据网的数据路由信息。PDP上下文的数据分别存储在移动终端、SGSN和GGSN中。移动用户需要使用分组数据业务时,需要先执行激活PDP上下文,激活成功后,在移动终端、SGSN和GGSN中就增加了一条新的PDP上下文记录,根据这条记录信息,SGSN和GGSN才能正确地路由和转发用户数据。
所以,一个完整的分组业务过程包括三个阶段:
如下图所示,移动终端发送PDP激活请求消息给SGSN,SGSN验证PDP类型,根据地址转发到GGSN。GGSN在PDP上下文表中加入一条新的记录,这条新的记录允许GGSN在SGSN和互联网之间正确地路由通信。
GGSN返回一条响应消息给SGSN,SGSN更新自己的PDP上下文表,可以在GGSN和移动终端之间正确的路由通信。并发送响应告知移动终端建连成功。
当PDP上下文成功建立后,该用户就可以通过GPRS/UMTS网络,在移动终端使用分组数据网提供的各种应用程序,如HTTP、FTP、邮件和流媒体业务。
当用户不再使用业务时,移动终端发送去激活消息给SGSN。SGSN发送删除PDP上下文请求给GGSN,GGSN删除PDP上下文,并返回消息给SGSN。SGSN将去激活响应消息再返回给移动终端。
移动网络传输的特性对我们的性能策略提出了新的、独特的要求。应用层协议虽然相同,但物理传输层的差别却有很多限制,如果对这些限制估计不足,就会导致响应速度慢、延迟时间摇摆不定,最终导致用户体验大打折扣。
底层的无线传输优化必须依赖于运营商,作为应用程序提供方,参考《Web性能权威指南》,我们可以做的事情包括:
手机无线电模块的耗电量仅次于设备的屏幕,全功率打开无线电模块只消几小时就可耗尽电量。我们应该尽最大可能在无线电开启时传输数据,而尽量把唤醒无线电以传输数据的次数减到最少。
这里提供给开发和测试一款开源工具,可以用于测试和评估应用程序的耗电量:Application Resource Optimizer(ARO,应用资源优化器)工具包。
ARO包含两个组件:收集器和分析器。其中,收集器是一个后台Android应用(可以在手机或模拟器中运行),用于捕获传输的数据分组、无线模块活动息及其他与手机的交互行为。要想记录用电情况,可以打开收集器,点击记录,使用应用,然后将记录结果复制到系统中。
得到记录结果后,可以通过分析器打开它,从而得知无线电状态、电量消耗、应用的通信模式等信息。另外,分析器有一个很不错的功能,即针对常见的性能陷阱提供建议,比如没有压缩、重复传输数据,等等。
轮询在移动网络中代价极高,少用,尽可能使用推送和通知,且要控制推送频率。一般来说,推送比轮询效果更好。但频率过高的推送与轮询也不相上下。
对推送而言,原生应用可以访问平台专有的推送服务,因此应该尽可能使用。对Web应用来说,可以使用SSE(Server Sent Events,服务器发送事件)和WebSocket以降低延时间和协议消耗,尽可能不使用轮询和更耗资源的XHR技术。
即便用户手里拿着最新的手机,也需要不断在4G、3G,甚至2G网络之间切换。我们的应用必须接受这些接口变化,作出相应调整:
了解了移动数据核心网络的架构和工作原理后,对我们分析用户常见的一些网络现象和问题帮助很多,比如说:
场景一:在同一个地区,使用同一个运营商的同一个基站的用户出口IP是否相同?
不相同,正如我们上面说的,基站的作用其实仅仅是无线数据的传递(只涉及到物理层和数据链路层),而真正决定用户出口IP的是GGSN(GGSN将无线地址转换成IP地址)。而每个地区运营商的GGSN,使用的不只一个IP地址,而是一个IP地址池。
所以同地区运营商的用户,IP地址不同,但会处于一个网段中。同时,每个用户的IP在一定时间内会变换(GGSN会从地址池中更新IP)
场景二:为什么手机漫游到外省后上网却显示归属地 IP?
比如用户是上海联通的,来到南京,显示的仍是上海联通的IP。
漫游用户接入互联网的方案有两种:1. 归属地接入方式,2. 漫游地接入方式。苹果手机默认使用归属地接入方式。
归属地接入方式就是无论用户漫游还是在本地,最终都是通过归属地的GGSN连接到互联网的。归属地接入方式的好处就是各省之间的计费话单对账方便,缺点就是增加了时延。
漫游地接入方式顾名思义就是直接使用漫游地运营商的GGSN/P-GW接入Internet,此时用户所使用的公网IP地址就是漫游地的IP地址。漫游地接入方式的优点就是省去了数据可能要绕大半个中国甚至大半个地球的麻烦,有利于降低时延,节省长途链路资源等等。
场景三:漫游手机用户的网络问题应该如何排查?
漫游手机用户的网络问题肯定是由于漫游地运营商网络造成的。而如果采用归属地接入方式的话,网络问题有可能是归属地运营商网络造成,也有可能是由漫游地的SSGN无线核心网造成的。