好的,我们继续。

深度解析 3GPP TS 23.122:附录A HPLMN Matching Criteria (HPLMN匹配准则)

本文技术原理深度参考了3GPP TS 23.122 V18.10.0 (2025-03) Release 18规范中,关于“Annex A (normative): HPLMN Matching Criteria”的核心章节,旨在为读者深度剖析终端识别其归属网络(HPLMN)时,最底层的“DNA比对”过程。

承前启后:简述第六章 - 3GPP与3GPP2多模终端

在正式进入本次的核心主题“HPLMN匹配准则”之前,我们有必要对规范的第六章“MS supporting access technologies defined both by 3GPP and 3GPP2”做一个简要的说明和过渡。

第六章的内容非常简短,核心思想是为那些同时支持3GPP(如GSM/UMTS/LTE/5G)和3GPP2(如cdma2000)两种技术体制的“全网通”终端,定义一个统一的网络选择行为准则。

其核心原则可以概括为:一视同仁,统一调度

  1. 统一的优先级列表:终端在进行网络选择时,必须将所有它支持的、不同技术体制的网络视为一个统一的资源池。无论是HPLMN、用户自定义列表(UPLMN)还是运营商列表(OPLMN),其中的PLMN优先级适用于所有技术。终端不会因为某个网络是CDMA制式就在选择时降低其优先级。
  2. 目标驱动:选择的最终目标始终是“找到并注册上优先级最高的可用PLMN”,而无论这个PLMN采用何种技术。
  3. 遵从本地规则:一旦终端根据统一的优先级列表,最终选择了一个3GPP2网络进行注册,那么在后续的信令交互、小区驻留等具体操作上,它就必须完全遵循3GPP2系列规范的定义。

简单来说,第六章确保了“全网通”手机在进行宏观的“去哪个国家、找哪个运营商”的决策时,有一套统一的思维模式;而在做出决策、进入某个具体网络后,则“入乡随俗”,使用该网络的技术语言进行沟通。由于该章节内容精炼,我们在此进行概述,不再撰写独立文章,直接进入下一个技术深水区——HPLMN匹配准则。


引言:手机如何认出“家”?

在之前的文章中,我们多次提到,终端在进行网络选择时,总是对自己的归属网络(HPLMN)情有独钟,拥有最高的返回优先级。但这引出了一个根本性的问题:在茫茫的无线电波中,手机究竟是如何在一堆不同运营商的信号里,准确地识别出哪一个才是自己的“家”?

这个过程,就像一次精密的“数字DNA比对”。手机从自己的SIM卡(或eSIM配置)中读取“我家的DNA”(归属网络的MCC和MNC),然后去比对空中每个基站广播出来的“DNA样本”(广播信道的MCC和MNC)。匹配成功,才算找到了家。

然而,这个比对过程远非“字符串完全相等”那么简单。由于历史原因,全球不同地区的运营商在网络标识码(特别是MNC)的长度上存在差异,这给“DNA比对”带来了不小的挑战。今天,我们的老朋友,资深网络工程师李工,将带领新入职的小林,通过解决一个“美版测试机无法识别欧洲HPLMN”的实际问题,来深度剖析这个隐藏在通信最底层的HPLMN匹配准则。


1. 问题的根源:2位数 vs 3位数的MNC之谜

小林今天遇到了一个难题:他拿到了一台支持北美PCS1900频段的美版测试手机,里面插着一张欧洲某运营商的测试SIM卡。但在实验室里,尽管模拟的HPLMN信号满格,手机却始终认为自己处于漫游状态,无法识别出归属网络。

李工看了一眼手机的调试信息,笑了笑说:“这是个经典问题,根源在于移动网络国家码(MNC)的位数。欧洲运营商普遍使用2位数的MNC,而北美则强制要求使用3位数的MNC。你的手机和SIM卡,一个来自‘3位数的世界’,一个来自‘2位数的世界’,它们对话时产生了误解。”

With the introduction of PCS1900 with the regulatory mandate to allocate 3-digit MNC codes, additional functionality is required to identify the HPLMN. … An MNC code shall consist of 2 or 3 decimal digits. In NA PCS1900, all SIMs shall store 3 digit MNCs.

规范的这段背景描述,正是这个问题的由来。为了解决这个“跨文化”的识别难题,3GPP定义了一套精巧的匹配算法。


2. 匹配前的“游戏规则”:基本假设与定义

在深入算法之前,李工先给小林讲解了几个必须遵守的“游戏规则”。

Assumptions Any network using a 2 digit MNC code shall broadcast the hexadecimal code “F” in place of the 3rd digit.

规则一:2位数网络的“补位”原则 这是一个核心约定。如果一个网络(比如欧洲的运营商)实际只使用2位MNC,那么它在通过广播信道(BCCH)发送自己的PLMN ID时,必须在代表MNC的三个数字位中的第三位,填上一个特殊的十六进制值F作为占位符。

例如,一个MNC为15的运营商,它广播出来的MNC在底层信令中会被编码为15F

规则二:北美过渡期的“0后缀”原则

For PCS1900 for North America, regulations mandate that a 3-digit MNC shall be used; however during a transition period, a 2 digit MNC may be broadcast by the Network and, in this case, the 3rd digit of the SIM is stored as 0 (this is the 0 suffix rule).

这是针对北美市场的一个特殊历史遗留规则。在从2位MNC向3位MNC过渡的时期,如果一个北美网络广播了2位MNC(补F),那么与之对应的SIM卡,在存储3位MNC时,第三位必须是0。例如,网络广播26F,那么SIM卡里的MNC必须是260,才能匹配。

核心定义 为了清晰地讨论,李工在白板上写下了两个关键术语:

  • SIM-MCC/MNC:存储在SIM卡里的归属网络MCC和MNC。
  • BCCH-MCC/MNC:手机从基站广播信道(BCCH)上读取到的当前小区的MCC和MNC。

“我们的目标,就是比对这两个东西。”李工说。


3. 标准匹配算法(非北美场景)- 解读Figure A.1

李工首先讲解了适用于全球大部分地区的标准匹配算法,这套算法的逻辑流程被清晰地绘制在规范的Figure A.1: HPLMN Matching Criteria Logic Flow for mobiles which support GSM and DCS1800中。

(1) The MS shall compare using all 3 digits of the SIM-MCC with the BCCH-MCC. If the values do not match, then the HPLMN match fails.

第一步:比对国家码 (MCC) 这是最基础的筛选。手机首先完整比对SIM卡中的MCC和广播信号中的MCC。如果国家码都对不上(例如,一张中国移动的SIM卡,收到了一个美国运营商的信号),那毫无疑问不是归属网络,匹配直接失败。

(2) The MS shall read the 3rd digit of the BCCH-MNC. If the 3rd digit is Hex F, then proceed to step (4).

第二步:检查广播MNC的第三位 比对完MCC后,手机会检查从基站广播中读到的MNC的第三位数字。

  • Case A: 第三位是 F 这意味着这是一个2位MNC的网络。流程跳转到第四步。
  • Case B: 第三位是正常的数字 (0-9) 这意味着这是一个3位MNC的网络。流程进入第三步。

(3) The MS shall compare using all 3 digits of the SIM-MNC with the BCCH-MNC. If the values match, then the HPLMN match succeeds, otherwise the HPLMN match fails.

第三步:3位MNC的直接比对 这是最简单的情况。既然网络广播的是3位MNC,手机就用SIM卡里存储的3位MNC进行逐位比较。完全相同,则匹配成功;否则,失败。

场景举例

  • SIM-MNC = 123
  • BCCH-MNC = 123 匹配成功
  • BCCH-MNC = 124 匹配失败

(4) The MS shall compare using just the 1st 2 digits the SIM-MNC with the BCCH-MNC. If the values match, then the HPLMN match succeeds, otherwise the HPLMN match fails.

第四步:2位MNC的“忽略第三位”比对 当第二步判断出网络广播的是一个2位MNC(形如 XYF)时,手机会忽略广播MNC的第三位F,也忽略SIM卡里存储的MNC的第三位,只用前两位进行比较。

场景举例

  • SIM-MNC = 15 (在SIM卡里可能存储为15F或根据实现有不同)
  • BCCH-MNC = 15F 手机只比较 15 vs 15 匹配成功
  • BCCH-MNC = 16F 手机比较 16 vs 15 匹配失败

“这套标准算法,就解决了大部分2位和3位MNC的共存问题。但小林你的美版手机,遇到的情况更特殊。”李工说道。


4. 北美特殊匹配算法 - 解读Figure A.2

现在,李工开始讲解导致小林困惑的北美地区(PCS1900)特殊匹配算法,对应规范中的Figure A.2: HPLMN Matching Criteria Logic Flow for mobiles which support PCS1900 for NA

前三步与标准算法完全一致,关键的区别从第四步开始。

(4) The MS shall determine if the BCCH-MCC lies in the range 310-316 (i.e., whether this network is a PCS1900 for NA network). If the BCCH-MCC lies outside the range 310-316, then proceed to step (6).

第四步:判断是否为北美网络 当手机判断出广播MNC的第三位是F(即2位MNC网络)后,它会额外做一个判断:检查广播的MCC是否在美国的国家码范围(310-316)之内。

  • Case A: 是北美网络 (MCC in 310-316) 流程进入第五步,执行特殊的“0后缀”规则检查。
  • Case B: 不是北美网络 流程跳转到第六步,回归到与标准算法第四步相同的逻辑。

(5) The MS shall compare the 3rd digit of the SIM-MNC with ‘0’. If the 3rd digit is not ‘0’ then the HPLMN match fails.

第五步:北美专属的“0后缀”规则检查 这是解决小林问题的关键!如果确定这是一个广播2位MNC的北美网络,手机会去检查SIM卡里存储的MNC的第三位。如果第三位不是0,则匹配直接失败!

场景解析:小林的困境 小林的欧洲SIM卡,MNC是两位数,比如 15。根据欧洲的习惯,这张SIM卡里存储的3位MNC可能是 15F。 他的美版手机,在美国的实验室里,收到了一个模拟的、广播MNC为 15F 的北美网络信号(MCC=310)。

匹配流程如下:

  1. MCC比对成功 (310 vs 310)。
  2. BCCH-MNC第三位是F,跳转。
  3. (跳过)
  4. 判断出是北美网络 (MCC=310),进入第五步。
  5. 关键点:手机检查SIM卡里的MNC 15F 的第三位。第三位是F,不是0
  6. 匹配失败!

“这就是你的手机无法认出HPLMN的原因。”李工解释道,“北美手机严格遵守‘0后缀’规则,它认为一个广播2位MNC的北美网络,其对应的SIM卡MNC第三位必须是0。”

(6) The MS shall compare using just the 1st 2 digits of the SIM-MNC with the BCCH-MNC. …

第六步:回归标准2位MNC比对 如果第四步判断出不是北美网络,或者第五步“0后缀”检查通过,流程就进入第六步,执行与标准算法第四步完全相同的操作:只比较MNC的前两位。


5. FAQ环节

Q1:为什么当初要设计2位和3位两种MNC?

A1:这主要是出于地址空间规划的考虑。MNC(Mobile Network Code)用于在一个国家内区分不同的移动运营商。一个2位数的MNC(00-99)理论上可以标识100个运营商,对于大多数国家来说是足够的。但像美国这样地域广阔、运营商众多的国家,100个码号就不够用了,因此北美地区率先强制推行了3位数MNC(000-999),提供了1000个码号空间。

Q2:为什么用十六进制的 F 来作为2位MNC的补位符?

A2:在底层的通信协议中,PLMN ID通常是用BCD(Binary-Coded Decimal)码来编码的。每个十进制数字用4个比特来表示。例如,数字9表示为1001。4个比特可以表示0-15的数值,而十进制只需要0-9。1111(即十六进制的F)这个编码在BCD中是未定义的,因此被巧妙地用来作为一个特殊的标志位,表示“此位无效”或“此位为填充位”。

Q3:我的SIM卡里MNC到底是2位还是3位?我怎么知道?

A3:在现代的USIM卡标准中,MNC总是以3位数字的形式存储。如果你的运营商是一个2位MNC的运营商(例如欧洲的),那么第三位会用F来填充。例如,沃达丰英国的MNC是15,在SIM卡文件(EF_IMSI)中,其对应的PLMN ID(MCC+MNC)会编码为2341F5。手机在读取时会解析出MCC=234, MNC=15。

Q4:如果HPLMN匹配失败了,手机会怎么办?

A4:如果手机在所有EHPLMN列表和IMSI中都找不到与任何广播信号匹配的HPLMN,它就会认为自己当前不在归属网络覆盖范围内。此时,它会启动VPLMN(拜访地网络)的选择流程,即按照各种优先级列表(用户列表、运营商列表等)去寻找一个可用的漫游网络进行注册。此时,手机屏幕上通常会显示另一个运营商的名称,并可能出现一个“R”字母,表示处于漫游(Roaming)状态。

Q5:这些复杂的匹配规则,在5G SA网络和SNPN中还适用吗?

A5:是的,完全适用。PLMN ID(MCC+MNC)和SNPN ID(PLMN ID + NID)是移动网络最根本的身份标识,无论技术如何演进,这套基于PLMN ID的HPLMN匹配逻辑是所有网络选择和漫游策略的基础。AGV-007在寻找它的Future-Fab-Net(MCC=999, MNC=123)时,其底层执行的匹配算法,与我们今天讨论的完全相同。