MNP是什么鬼?
MNP是MobileNumberPortability的简写。MobileNumber即手机号码,Portability即可携带能力,手机号码可以像物品一样携带,就是所谓的“携号转网”。在国外,部分地区已经实现MNP,在国内,MIIT(MinistryofIndustryandInformation)已经组织云南、江西、湖北、天津、海南进行方案验证。大概再过半年,试点地区以外的“手机用户”,也可以带着号码投奔新运营商了。
对用户来说,MNP是好事,至少多些选择的自由。不过,MNP来的稍晚一些,语音业务高峰过去很久了。MNP要是早几年实现,也许会激动人心一些。毕竟,我不怎么打电话,打电话关心我的,也只剩下几个行业的精英:银行、保险、物流、房地产、六合彩……手机号码的意义,几乎只剩下接收验证码了。话虽如此,对于MNP用户,运营商依然需要提供基本的服务——特别是,通过原号码依然可以找到用户。
准确的说,国内的MNP应该称为LMNP,即Local的MNP。由于网络组织和计费结算等原因,CT(ChinaTelecom)、CM(ChinaMobile)和CU(ChinaUnicom)都以省为单位部署网络,每个省对应一个本地网。MIIT方案只支持同一本地网的MNP。也就是说,一个北京CT用户,可以转为北京CM或CU用户,但不可以转为上海CM或CU用户。当然,国内漫游费已取消,限制对用户影响并不是很大。
“手机号码”为什么可以携带?要从“手机号码”的本质说起。“手机号码”即MSISDN(MobileSubscriberInternationalISDNnumber),从业务的角度看,“手机号码”是“用户标识”。举个例子,“牛魔王”把“小甜甜”和“牛夫人”的MSISDN存入通讯录,“小甜甜”打电话给“牛魔王”,“牛魔王”手机会显示“小甜甜”来电,“牛魔王”打电话给“小甜甜”,电话会接续到“小甜甜”,而不是“牛夫人”。在“牛魔王”看来,“小甜甜”的MSISDN就代表了“小甜甜”本人。
不过,从网络的角度看,特别是空中接口,IMSI(InternationalMobileSubscriberIdentificationNumber)才是真正意义的“用户标识”。换句话说,“牛魔王”打电话找“小甜甜”,输入的是“小甜甜”的MSISDN,对网络而言,找的实际是MSISDN对应的IMSI。更具体的,找的是IMSI对应的SIM(SubscriberIdentityModule)卡,以及插入SIM卡的终端,即UE(UserEquipment)。
用户在开户时,会从运营商获得一张SIM卡,对应一个IMSI。IMSI和密钥K提前写入SIM卡和AUC(AuthenticationCenter),网络和UE共享相同密钥,就可以通过AKA(AuthenticationandKeyAgreement)验证对方身份的合法性,并获得数据保护的密钥。从网络的角度看,每张SIM卡,或每个IMSI,就代表一个用户。把SIM卡插入新手机,来电就会接续到新手机,经常买手机的童鞋应该Get到了。
除了别有用心的,一般用户不太关心IMSI,密钥K也无法直接从SIM卡读出。用户(或第三方)如果知道IMSI和密钥K,就可以复制SIM卡,也就是所谓的“孖卡”。如果原始SIM卡和复制SIM卡同时附着,网络也无法分辨哪个是孙悟空,哪个是六耳猕猴。在网络看来,还是只有一张SIM卡,但可能一会儿出现在吐鲁番,一会儿出现在海南岛,就像是用户“瞬间转移”一般(有筋斗云也行),而真相是用户“有丝分裂”了。
IMSI有对应的实体(SIM卡),相比之下,MSISDN就不那么“实在”了。MSISDN属于“签约数据”(SubscriptionData),用户的HLR(HomeLocationRegister)保存了IMSI和MSISDN的绑定关系。通过修改数据,同一IMSI,可以绑定不同MSISDN。反过来,同一MSISDN,也可以绑定不同IMSI。用户在办理补卡时,运营商会提供新SIM卡,并将新IMSI和原MSISDN绑定,经常丢手机的童鞋应该Get到了(扎心)。
在CS(CircuitSwitch)网络中,UE使用业务前,需要先附着MSC(MobileSwitchingCenter)/VLR(VisitorLocationRegister),UE发送IMSI给MSC,MSC找到归属HLR/AUC,请求AV(AuthenticationVector)并执行AKA。同时,HLR将MSISDN作为签约数据发送给MSC。在MSC看来,IMSI是UE上报的,而MSISDN是HLR下发的。在PS(PacketSwitch)和EPS(EvolvedPacketSwitch)网络中,只是CN(CoreNetwork)节点替换为SGSN(ServingGPRSSupportNode)或MME(MobilityManagementEntity),过程是类似的。
可见,IMSI决定了UE可以附着的PLMN(PublicLandMobileNetwork),因为只有发放SIM卡的运营商,AUC有相同的IMSI和密钥K,换一家就“查无此人”了。UE知道自己的IMSI,但MSISDN是什么,由HLR说了算。SIM卡可在文件(EF-MSISDN)写入MSISDN,但通过分析可知,这个数据不可靠,因为HLR可能已经修改。
实际上,UE不需要知道MSISDN,MSC知道就够了。在UE作为主叫时(MobileOriginating,简称MO)时,MSC通过请求的IMSI或TMSI(TemporaryMobileSubscriberIdentity)找到用户上下文,将从HLR获得的MSISDN写入IAM(InitialAddressMessage)的主叫号码(CallingPartyNumber);在UE作为被叫时(MobileTerminating,简称MT)时,网络根据被叫号码(CalledPartyNumber,MSISDN)找到UE所在的MSC,MSC再使用IMSI或TMSI寻呼(Paging)UE。
UE不能写入“主叫号码”,“牛夫人”就不能伪装成“小甜甜”打电话给“牛魔王”,这在一定程度上控制了“虚假主叫”。MSC写入的“主叫号码”来自于HLR签约数据,那么,HLR是否可以签约任何号码呢?如果网络都是孤立的,HLR可以这么做,结果是在不同网络中,存在号码相同的号码,大家井水不犯河水,倒也相安无事。就好像我叫“吴彦祖”,你也叫“吴彦祖”(想得挺美),只要我们的圈子没有交集,是没问题的。
如果有一个人,既认识我,又认识你,问题就来了。别人要是问他,“吴彦祖”在哪儿,他会反问一句:哪个“吴彦祖”?如果我叫“南山吴彦祖”,你叫“福田吴彦祖”,我们就区分开了。相似的,PLMN是互通的,不同PLMN的用户,MSISDN也应区分开来。在这方面,大家并不陌生,我们看到“139”开头的号码,就知道这是CM用户,看到“133”开头的号码,就知道这是CT用户,看到“170”开头的号码,就知道这是“虚拟”用户——好吧,虚拟运营商用户。
更准确的说,运营商有各自的MSISDN号段。MSISDN采用ITU-TE.164编码,构成方式为CC(CountryCode)+NDC(NationalDestinationCode)+SN(SubscriberNumber)。CC表示国家码,中国的CC为86。NDC表示国内目的码,或网络接入号:CT的NDC包括133、153、180、189等;CM的NDC包括134~139、150~152、157和188等;CU的NDC包括130~132、185~186等。SN表示用户号码,用于区分CC和NDC相同的用户。举个例子,MSISDN=8613301234567是CT用户;MSISDN=8615701234567是CM用户;MSISDN=8618601234567是CU用户。
通过MSISDN,可以推断出运营商,还可以推断出本地网。国内“手机用户”数量庞大,共用一个HLR是不够的(吃不消)。运营商需要在各地部署HLR,对应不同MSISDN号段。同一HLR的不同MSISDN号段,可以分配给不同地市(比如,深圳、东莞或惠州)。获得MSISDN号段和归属地的对应关系,手机就可以显示来电的归属地——在MNP之后,“地市”部分就不一定准确了。
不过,对外部网络来说,也不用知道这么多。举个例子,美国用户发起呼叫,如果被叫MSISDN的CC=86,就往中国ISC(InternationalSwitchingCenter)接续,至于中国的内部接续,美国就不用管了(不能干涉内政呀)。同样,CT用户发起呼叫,如果被叫MSISDN的CC=86,NDC=139,就往CM的GMSC(GatewayMSC)接续,至于CM的内部接续,CT就不用管了。
运营商也有各自的IMSI号段。IMSI采用ITU-TE.212编码,构成方式为MCC(MobileCountryCode)+MNC(MobileNationCode)+MSIN(MobileSubscriptionIdentificationNumber)。MCC表示移动国家代码,中国的MCC为460。MNC表示移动网络号码:CT的MNC包括03、05和11等;CM的MNC包括00、02、04和07等;CU的MNC包括01、06和09等。MSIN表示移动用户识别号码,用于区分MCC和MNC相同的用户。举个例子,IMSI=460030123456789是CT用户;IMSI=460070123456789是CM用户;IMSI=460090123456789是CU用户。
综上所述,IMSI和MSISDN是“手机用户”的“用户标识”。IMSI写入AUC和SIM,决定了UE可以附着的PLMN。MSISDN决定了UE作为被叫时,呼叫往哪家运营商的GMSC接续。举个例子,IMSI=460110123456789(MCC=460,MNC=11)的UE只能附着CT网络;呼叫MSISDN=8615701234567(CC=86,NDC=157)的用户,应该往CM的GMSC接续。
为了帮助理解,这里先做些约定。示图中,小人表示“手机用户”,头部表示MSISDN归属的运营商,身体表示IMSI归属的运营商——蓝色表示CT,黄色表示CM,红色表示CU。在运营商的网络中,只有“很单纯,很天真”的小蓝人、小黄人和小红人,MSC(以及GMSC)通过被叫MSISDN,就知道在内部接续,还是路由到其他网络——很简单,很美好。
直到MNP出现。
在申请MNP通过后,用户在新运营商领取新的SIM卡,并继续使用原MSISDN。对新运营商来说,这个用户是“携入用户”,对原运营商来说,这个用户是“携出用户”。为了帮助理解,这里再做些约定——对某家运营商来说,“原生用户”(即小蓝人、小黄人或小红人)称为“土著”;“携入用户”称为“俘虏”;“携出用户”称为“叛徒”;“其他用户”称为“野人”。
无论是“俘虏”还是“叛徒”,MSISDN的归属运营商,和IMSI的归属运营商是不一样的。举个例子。对CT来说,从CM来的“俘虏”,IMSI是CT的,MSISDN还是CM的,在CT的网络中,小蓝人中间多了一个黄色头的家伙;往CM去的“叛徒”,IMSI是CM的,MSISDN还是CT的,在CM的网络中,小黄人中间多了一个蓝色头的家伙。通过MNP,手机用户终于“质壁分离”(或“灵肉分离”)了。
“俘虏”和“叛徒”带走“自己”的MSISDN,但MSISDN号段还是原运营商的。比方说,MSISDN=8615701234567从CM投奔CT,这个MSISDN变成CT用户,但MSISDN号段86157XXXXXXXX还是CM的。毕竟“俘虏”和“叛徒”只是“少数”,同一号段的“多数”还在原运营商。从某种意义来说,“俘虏”和“叛徒”的MSISDN也还是原运营商的,如果用户在新运营商销户,冻结期结束后MSISDN归还原运营商。
“俘虏”的附着过程,和“土著”没太大的不同。以上图为例,在CT的网络中,“俘虏”和“土著”的IMSI都是CT的。不同的是,CT将“俘虏”集中在特殊的HLR——NP-HLR(NumberPortability-HomeLocationRegister)。NP-HLR记录“俘虏”所在MSC,并将“俘虏”的原MSISDN下发MSC。反过来看,CT的“叛徒”就是CM(或CU)的“俘虏”,在CM(或CU)的网络中,附着过程是相似的——无论如何,CT的“叛徒”,CT是管不着了(更糟心的是,运营商没收到钱,还要帮忙擦屁股)。
“俘虏”的主叫过程,和“土著”也没太大的不同。主叫号码(MSISDN)是MSC根据签约填入的,“土著”签约来自普通HLR,“俘虏”签约来自NP-HLR。如果“俘虏”呼叫原运营商的用户,会出现一些状况。比方说,如果CT的“俘虏”(CM的“叛徒”)呼叫CM用户,CM的GMSC会看到主叫MSISDN属于CM号段。
在MNP之前,GMSC会判定为“虚假主叫”,理论上CM用户不应通过GMSC呼入(见鬼了)。不过,CM用户呼叫也可能迂回到CM网络,为了保险起见,GMSC向HLR发送ATI(AnyTimeInterrogation),HLR向MSC发送PSI(ProvideSubscriberInfo)查询主叫状态,如果返回“用户闲”,才判定为“虚假主叫”(用户状态不一致)。在MNP之后,为避免“叛徒”的呼入误判为“虚假主叫”,NP-MSC(NumberPortability–MobileSwitchingCenter)总是返回“用户忙”。关于NP-HLR和NP-MSC的更多细节,后面再谈。
因而,MNP重点在于“叛徒”和“俘虏”的被叫过程。对某家运营商来说,如果被叫MSISDN归属自己的号段,MSC识别出“土著”和“叛徒”,对“土著”的呼叫在内部接续,对“叛徒”的呼叫送往外网(好走不送,拜拜啦);如果被叫MSISDN归属别人的号段,MSC识别出“野人”和“俘虏”,对“野人”的呼叫送往外网,对“俘虏”的呼叫在内部接续(给你家一般的感觉)。