协议开发最大的法宝就是反复阅读3GPP协议标准,然后结合标准梳理信令流程,同时比对modem日志或者ap侧日志,阅读modem侧源码或者ap侧源码。本系列主题在操作系统OpenHarmony 侧即ap侧,不涉及modem侧代码或者日志解读,但是同样要对3GPP协议标准弄明白。
何为搜网?
从消费者角度来看,在手机设置-》移动网络设置中有一项网络运营商搜索选择的功能设置,如下图所示:
如上图所示,可以选择“自动搜网”和“手动搜网”两种模式,通过搜索网络,可以把手机所在环境的网络给搜索出来,然后选择其中一个运营商的网络去进行注册。
搜网,从技术原理角度看,就是UE(User Equipment的缩写,可以简单理解为手机)对所有的频段进行扫描,选择合适的PLMN和小区之后进行注册。
搜网流程可以简单化为PLMN选择-》小区选择-》注册网络,本节内容将只讲解PLMN选择。
自动搜网
UE根据事先设定好的PLMN优先级准则,自主完成PLMN的搜索和选择,确定好了PLMN之后,会选择该PLMN内信号最好的小区进行注册。绝大多数UE都是采用自动搜网模式,手机开机之后也会进行自动搜网。
手动搜网
UE对所有频段进行扫描,讲所有满足条件的所有PLMN以列表形式呈现给用户,由用户来进行选择。
MCC与MNC
MCC: Mobile Country Code,移动国家码,MCC的资源由国际电联(ITU)统一分配和管理,唯一识别移动用户所属的国家,共3位,中国为460。
MNC: Mobile Network Code,移动网络号,用于识别移动用户所归属的移动通信网,2~3位数字组成。
中国MCC常用值如下:
IMSI
国际移动用户识别码(英语:IMSI,International Mobile Subscriber Identity),是用于区分蜂窝网络中不同用户的、在所有蜂窝网络中不重复的识别码。手机将IMSI存储于一个64比特的字段发送给网络。IMSI一般存储在SIM卡中。
IMSI由一串十进制数字组成,最大长度为15位。实际使用的IMSI的长度绝大部分都是15位,短于15位的例子少见,例如,南非MTN有一些仍在网络中使用的较旧的IMSI为14位数字。IMSI由MCC、MNC和移动订户识别代码(MSIN,Mobile subscription identification number)依次连接而成。MSIN的值由运营商自行分配。
IMSI可以用来在归属位置寄存器(HLR,Home Location Register)或拜访位置寄存器(VLR,Visitor Location Register)中查询用户的信息。为了避免被监听者识别并追踪特定的用户,大部分情形下手机和网络之间的通信会使用随机产生的临时移动用户识别码(TMSI,Temporary Mobile Subscriber Identity)代替IMSI。
PLMN简介
PLMN(Public Land Mobile Network,公共陆地移动网络),由政府批准的经营者,为公众提供陆地移动通信业务目的而建立和经营的网络。该网路必须与公众交换电话网(PSTN)互连,形成整个地区或国家规模的通信网。PLMN = MCC + MNC,例如中国移动的PLMN为46000,中国联通的PLMN为46001。
PLMN分类
UE通常需要维护几种不同类型的PLML列表,而每个列表中会有多个不同的PLMN。
- RPLMN(Registered PLMN 已登记PLMN):
已注册PLMN。是UE在上次关机或脱网前注册上的PLMN。在3GPP 2003年第TSG TP-21次会议上决定,将该参数从USIM卡上删掉,而将其保存在UE的内存中。
- EPLMN(Equivalent PLMN 等效PLMN):
即对等公用陆地移动网,是与用户终端当前所选择的PLMN处于同等地位的PLMN,其优先级相同。EPLMN主要解决共享网络与原网络的用户驻留和漫游策略。运营商可以配置对等的PLMN网络,这些网络之间可以实现通信网络资源共享。从业务的角度,它使得不同运营商的网络资源之间,或者同一运营商定义的不同PLMN之间可以实现通信网络资源共享。
运营商在网络侧(MSCS中)配置EPLMN列表,在EPLMN列表中配置不同PLMN间的对等关系,使这些PLMN处于一个平等的网络中,这样,其归属的签约用户就可以在不同的EPLMN之间进行驻留。一个EPLMN列表最多可配置5个EPLMN(3GPP R5及其以前的阶段)或者15个EPLMN(3GPP R6及其以后的阶段)。
有了EPLMN列表之后,MSCS将相关的EPLMN数据通过Location Updating Accept(位置更新接受)消息下发给移动用户,移动用户将MSCS下发的EPLMN列表加上当前网络的网络号保存在SIM卡中,直到下次位置更新成功后刷新该列表。
EPLMN的作用是在跨PLMN漫游时,UE优先选择签约注册网络推荐的PLMN,保护本运营商的利益。EPLMN功能使得UE在选择PLMN时可以将不同的PLMN代码认为是彼此地位相等的,在位置更新(Location Update)、路由区更新(Routing Area Update)、跟踪区更新(Tracking Area Update)、GPRS(General Packet Radio Service,通用无线分组业务)附着(GPRS Attach)、LTE附着(LTE Attach)过程中,网络侧向UE发送EPLMN列表,UE会将此EPLMN列表和发送此列表的PLMN共同存储在UE的“Equivalent PLMNs”表中。
比如在边境地区网络若配置了EPLMN,具体为本国/地区的运营商将邻近国家/地区运营商网络的PLMN标识配置成本国/地区网络的EPLMN,在该区域的UE可在空闲态从本国/地区网络进行小区重选到邻近国家/地区网络,在连接态从本国/地区网络进行切换或重定向到邻近国家/地区网络,不需要等到脱网后再通过网络搜索和网络选择进行登记,较大的节省了漫游注册的时延。
- EHPLMN(Equivalent Home PLMN 等效归属PLMN):
USIM卡中引入EHPLMN文件,能够配合终端彻底解决一网双号甚至一网多号带来的“终端周期搜网 、出现漫游标识、耗电较快”等问题。其实:EHPLMN和EPLMN就好比是中移动的新建的158网络,而PLMN就好比是原来的135~139网络。这是中移为解决一网多号问题而引入的概念,可以参考《对等网络(EHPLMN)技术标准》。移动用户激增,移动运营商需要启用新网号(MNC)与新号段MSISDN映射;运营商重组并购也会导致一个运营商拥有多个网号。但是网络只能广播一个网号,这就导致网络侧广播网号和终端侧多个网号不能匹配,终端无法找到归属网络(HPLMN)。例如,目前中移新增号段为158的PLMN为(MCC:460,MNC:02),而以前的135~139号段的PLMN为(MCC:460,MNC:00)。终端在进行PLMN选择时,除了映射IMSI中的MCC+MNC外,还要进行EHPLMN中MCC+MNC与网络侧进行映射,直到有一个成功或均失败。
- HPLMN(Home PLMN 归属PLMN):为终端用户归属的PLMN。
也就是UE用户开户的PLMN,存储在用户USIM卡中,即USIM卡上的IMSI号中包含的MCC和MNC,对于某一用户来说,其归属的PLMN只有一个。
- UPLMN(User Controlled PLMN ,用户控制PLMN):
是终端在用户手动选网时选择的PLMN,USIM卡会存储下来。
- OPLMN(Operator Controlled PLMN 运营商控制PLMN):
运营商烧卡时将与该运营商签署了漫游协议的运营商PLMN作为OPLMN写入USIM卡,作为后面用户选网的建议。
- VPLMN(Visited PLMN 访问PLMN):
即拜访PLMN。其PLMN和存在SIM卡中的IMSI的MCC,MNC是不完全相同的。UE在内部会维护一个VPLMN列表,存储拜访地网络下发的PLMN标识信息。当UE切换或者漫游的时候,需要登记到拜访PLMN。VPLMN的MCC与HPLMN的MCC相同,而MNC不同,这时UE可以根据这种状况通过周期性搜网的方式回到归属网络。
- APLMN(approve PLMN可捕获PLMN):
为UE能在其上找到至少一个小区,并能读出其PLMN标识信息的PLMN。
- FPLMN(Forbidden PLMN禁用PLMN):
为被禁止访问的PLMN,通常UE在尝试接入某个PLMN被拒绝以后,会将其加到本列表中。
PLMN选择优先级
不同类型的PLMN其优先级别不同,终端在进行PLMN选择时将按照以下顺序依次进行:
(1) RPLMN/EPLMN。
(2) EHPLMN。
(3) HPLMN。
(4) UPLMN。
(6) OPLMN。
(7) 其他PLMN。
想要梳理清楚PLMN的选择流程,就需要阅读3GPP协议文档了。
在3GPP 23122中对开机或者小区重选时的PLMN选择做出了如下说明,
即最先选择RPLMN或者它的等效PLMN即EPLMN(如果可用的情况下)。
RPLMN或对等PLMN选择失败后按照如下顺序选择:
上述顺序翻译过来就是:
- HPLMN(如果EHPLMN列表不存在或为空)或最高优先级的EHPLMN(如果EHPLMN列表存在)。
- 在USIM/SIM卡数据中按照UPLMN优先级顺序选择;(User Controlled PLMN Selector with Access Technology)。
- 在USIM/SIM卡数据中按照OPLMN优先级顺序选择;(Operator Controlled PLMN Selector with Access Technology)。
- 以随机顺序接收高质量信号的其他PLMN/接入技术组合。
- 当信号强度不够时,根据接收信号强度递减排序选择其他所有PLMN。
- 符合灾难条件下的FPLMN。
OpenHarmony中相关源码
OpenHarmony对应搜网的相关核心代码在 telephony_core_service/ services / network_search下。
而关于PLMN选择的核心代码在network_search_manager.cpp 文件中。