17
2015
12

如何根据LAC(TAC)/CELLID(ECI)区分2G/3G/4G基站

很多人询问如何根据一个基站的lac和cellid区分这个基站是2G,3G还是4G基站,这里做一下总结。

国内运营商在建网初期就对LAC代码按省进行了分配,每个省/自治区/直辖市都分配到了一定数量的LAC代码区间。当时的2G网络规定了LAC使用的是BCD编码,所以2G的LAC范围是十六进制的 [0x1000-0x1999], [0x2000-0x2999], [0x3000-0x3999]…, [0x9000-0x9999],这一范围对移动联通都适用。

到了3G时代,没有了LAC必须是BCD编码的限制,同时为避免冲突,WCDMA和TD-SCDMA分配了[0xa000-0xffff]的区间分配3G网络的LAC。

4G网络中,LAC被TAC(Tracking Area Code)取代,TAC的分配方式和2G网络下的LAC分配保持一致。那么如何根据这个值区分2G和4G基站呢?这就需要借助CELLID(ECI)字段了,在2G网络中CELLID定义为16位二进制值,范围是[0-65535],4G网络的ECI是28位的二进制值,由20位的enodeb id和8位的cellid组成,而enodeb id是大于256的,因此可以通过判断CELLID(ECI)字段的值来区分2G基站和4G基站。

总结:
LAC(TAC)>=40960 -> 3G基站
LAC(TAC)<40960 并且 CELLID(ECI) > 65535 -> 4G基站
LAC(TAC)<40960 并且 CELLID(ECI) <= 65535 -> 2G基站
这一规则同时适用于移动、联通和电信基站。

上述文字转载自:http://www.cellocation.com/distinguish-2g-3g-4g-with-lac-cellid/

前文转载的这一规定在实际执行中会存在一定程度的问题,尤其是3G网络最为突出,因为很多系统在表达3G基站时是把RNC和CID合并在一起的,比如某地3G LAC是56342,RNC是739,CID为10466,按照正常情况,我们表达该基站是LAC:56342,CID:10466即可,但是正因为刚才说的有些系统表达时将RNC和CID连在一起表达了,就变成了LAC:56342,CID:739+10466。可能有些人问,这有什么问题吗?有。因为这些系统不像我这样拿一个“+”加号去表达,而是十六进制之连接合再转十进制来表达,也就变成了(RNC:2E3)+(CID:28E2)=2E328E2,再转十进制48441570。最后就变成了LAC:56342,没问题,CID:48441570……全不对了。

这个问题在互联网数据源查询基站时尤其明显,很多系统采集数据的时候就是按照刚才说的RNC+CID连接合来采集的,比如谷歌,就是这样。然后这个数据再去查询对应的经纬度。导致不同的系统采集的数据差异很大,不能查询出对应的结果来!这个问题我几年前也曾发博客讨论过:http://www.lainzy.net/post/121.html

目前由于4G基站也一定程度存在这个问题,不同系统表达的基站参数都不相同,还需要进一步理解相关网络制式标准。


举例:

LAC:38165,CID:50952

LAC:7810,CID:19411

LAC值小于40960,CID小于65535,这些都是2G基站。


LAC:56337或者LAC:61153,只要LAC大于40960,不管CID多少,都是3G基站。


LAC:38269,CID:158819842或者LAC:48422,CID:198556005,只要LAC小于40960,并且CID大于65535的,就是4G基站。


« 上一篇 下一篇 »

发表评论:

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。