GeoIP 数据库是怎么工作的(以及为什么城市级不准)
地理定位数据从哪来、accuracy_radius 到底是什么意思、为什么免费库和商业库会打架、多久更新一次。
位置数据的三个来源
IP 地理定位是拼出来的:
- 注册局数据:RIR 记录说明地址段分配给了哪个国家。
- 网络拓扑:前缀在哪宣告、路由怎么走。
- 真值:问卷、App 遥测、探针、众包修正。
不同厂商的权重不一样,这就是为什么同一个地址,两个数据库能差几百公里。
accuracy_radius 是什么意思
MaxMind 给每条记录一个 accuracy_radius:估计点周围的大致半径(公里)。5 公里说明有城市级把握;500 公里基本等于只知道国家,城市是拿最大城市猜的。
这是最该显示的字段:写「柏林 ±50 公里」比只写「柏林」诚实得多。
为什么免费和付费会打架
- 商业源会买 ISP 级数据和探针网络,免费数据买不起。
- 免费数据多来自同一批注册局数据,所以国家一致、城市不一致。
- Anycast 和 CDN 基础设施会彻底打破位置假设(见 Anycast 那篇)。
更新节奏
注册数据每天在变,城市级估计变化很慢。MaxMind 的 GeoLite2 每周更新,商业库更频繁。记录超过两周,城市字段就该当过期处理。
怎么判断一个定位说法
问三个问题:
- 厂商有没有公布精度半径?
- 库的类型匹配用途吗(国家级 vs 城市级)?
- 数据源是免费还是商业维护——厂商有没有说明?
只给城市名、不给半径的,是把猜测当事实。
读完先验一批 IP?
去验一批 →