GeoIP基础知识

IP 归属地查询是怎么实现的?聊聊 GeoIP 数据库

为什么查一个 IP 能定位到城市?GeoIP 数据库的来源、精度、更新机制,以及为什么你的定位有时差一个省。

在 IPchase 查询一个 IP,几毫秒就返回"中国 福建 宁德 联通"。很多朋友好奇:这数据哪来的?准不准?为什么有时会偏到隔壁省?

核心逻辑:一张"IP 段地图"

IP 地址不是一台台设备登记的,而是按段分配的。IANA(互联网号码分配机构)把地址块分给各大区域注册机构(APNIC 负责亚太),注册机构再分给运营商和企业。

每次分配记录都包含:"这段 IP 分给了谁、登记在哪个城市"。把这些分配数据 + 路由广播数据 + 实测数据汇总起来,就形成了 GeoIP 数据库。

数据库的本质是一个前缀树:查询 1.2.4.8 时沿着二进制前缀往下走,命中某个节点,节点上写着"这个段属于福建宁德"。

主流数据源

  • MaxMind GeoLite2:事实标准,社区版免费,城市级精度,每周更新。IPchase 用的就是它,服务器本地部署
  • IP2Location / DB-IP:商业数据库,各家有自家的数据修正
  • 纯真 IP 库:国内老牌库,对中国大陆数据补充较好

精度:城市级是上限,不是保证

要建立一个预期:GeoIP 的城市级精度大约 70%–90%,再往上没有了

原因是 IP 归属登记的是运营商注册地址,不是用户物理位置:

  • 运营商给一个县城分配的 IP 段,可能登记在地级市分公司
  • 手机流量走省级网关,全省用户查出来都是省会
  • CDN 的 anycast IP(如 8.8.8.8)全球几十个节点共用,只能说"任播"

所以"查出来是宁德,实际我在福州"这类偏差属于数据机制的天然误差,任何 GeoIP 服务都存在,不存在"绝对准"的库。

更新机制:为什么每周都要更新

运营商不断调整地址段。MaxMind 每周二发布新版 GeoLite2,内容会包含:

  • 新分配的地址段
  • 归属信息修正
  • ASN(自治系统)变更

数据库不更新的后果:新 IP 段查出来一片空白,或者归属还是上家。

IPchase 的做法是服务器本地部署 + 每天自动检查更新——查询时不依赖任何外部 API,响应快、无次数限制,数据库有新版本就自动拉取。

除了归属地,还能查到什么

一次 IP 查询能附带的信息比想象中多:

字段 来源 用途
国家/省/市 GeoIP City 库 展示归属
经纬度 City 库(城市中心点) 地图标注
时区 City 库 显示当地时钟
ASN / 运营商 GeoIP ASN 库 判断是机房还是家宽
IP 类型 数据中心/家宽标记 代理识别的关键

其中 ASN 特别值得说:AS4134 是电信骨干、AS15169 是 Google——看到 ASN 就知道这个 IP 属于谁的网络。它是代理识别的核心依据之一。

小结

  • IP 归属地 = 分配登记数据 + 路由数据的汇总,城市级精度 70–90%
  • 查询实现是本地数据库的前缀匹配,毫秒级
  • 数据每周都在变,选服务时要看更新机制
  • ASN 是 IP 背后的"门派",比城市归属更有信息量

试试:IP 查询工具,输入任意 IP 看看它的完整档案。

检测你的网络环境:回到首页做一次完整检测,或试试 指纹检测