全面解析android APN
此博文写作坚持以下理念:
图胜于表,表胜于言;
最好的解释是不用解释;
1. APN的概念
1.1 APN的定义
Definition of Access Point Name
In the GPRS backbone, an Access Point Name (APN) is a reference to a GGSN. To support inter-PLMN roaming, the internal GPRS DNS functionality is used to translate the APN into the IP address of the GGSN.
——3gpp 23.003
从定义可看出,APN是GGSN的引用,被internal GPRS DNS转换为GGSN的IP地址。
那么GGSN是什么,又是做什么的?
GGSN: Gateway GPRS Support Node, 网关GPRS支持节点
GGSN主要起网关作用,所扮演的角色:
对内:网络传输; (网络接入控制,分组数据的过滤)
对外:路由器(路由选择和分组的转发,IP地址分配)
1.2 APN的参数
一个典型的APN有如下参数(名称,MCCMNC,接入点,类型)
举例(CMCC APN)
<apn carrier=“连接互联网” //名称
mcc=“460” //MCC
mnc=“07” //MNC
apn=“cmnet” //接入点
type=“default,supl,net” //类型
/>
其他更多参数:
Note :每个有数据业务的运营商都会设定自己的APN,APN可能是多条,包括3G使用、4G使用,NET和WAP,不同APN的使用范围和收费会有差别。
APN的类型:
1.3 APN的存储与加载
1.3.1 APN的存储位置
以XML的格式存储:Apns-conf.xml
sourcecode文件路径:
MTK平台(通常):alps\mediatek\frameworks\base\telephony\etc
高通平台(通常):android\vendor\qcom\proprietary\telephony-apps\etc
编译后打包到systemimage中,
UE文件路径:system/etc/ Apns-conf.xml
当UE开机后,根据XML写入database中。
table:content://telephony/carriers
1.3.2 APN的加载
到database:TelephonyProvider读取XML并在database中插入table
到UI menu:根据MCCMNC从database读取对应参数项填写到UI菜单序列中
PDP建立时:DCtracker负责创建/更新waiting APN list
关系图:
1.4虚拟运营商的APN
虚拟运营商(MVNO)没有自营网段,使用了主运营商的网段,因而和主运营商有相同的MCCMNC。为了能够与主运营商区分,虚拟运营商的APN还包含了MVNO参数。MVNO参数分为SPN/PNN/IMSI/GID1,是从SIM卡对应栏位读取的值,目的是从该值中判断该SIM卡是否属于MVNO。
在读取MVNO卡的APN时,会同时去匹配MCCMNC和MVNO参数。
APN的概念部分到此告一段落,下面做个总结:
2. APN的实现机制
待续。
本文为原创文章。可尽情点赞,留言和讨论。