摘要

  • 9 月 3 日两次成功取得的 LACNIC geofeed 完全一致:13,569 行记录对应 13,546 个不同前缀,23 个前缀各出现两次。
  • 其中 9 组两行完全相同,14 组地点字段不同;后者有 4 组国家代码冲突。重复、详略不同和国家冲突不能算成同一种错误。
  • RFC 8805 将相同前缀的重复列为错误,却允许大小网段相互包含。两个相同的 /24 无法靠最长前缀匹配分出先后。
  • 这些记录不证明实际位置错误,也没有证实任何用户受损。可以核查并改善的是声明的汇总和冲突处理,而不是让登记机构代替所有人裁定地理事实。

在 LACNIC 的公开 geofeed里,170.51.97.0/24 第一次出现时,国家代码是 UY,地区为 UY-MO,城市写作 Montevideo。向下翻到第 12,633 行,同一个前缀再次出现,国家代码变成 PY,后面跟着 PY-ASU 和 Asuncion。

一行指向乌拉圭,另一行指向巴拉圭。两行的地址范围没有差别。后一行不是前一行中更小的子网,也没有一个日期字段告诉读者它在纠正前一行。

如果读取程序保留第一次遇到的值,它会留下乌拉圭;如果相同键的新值覆盖旧值,它会留下巴拉圭。这只是两种可能的程序写法,并非对 LACNIC 或某家地理位置供应商实现方式的观察。然而,这个小小的思想实验已经指出了边界:软件得到了一个确定答案,证据却没有因此增加。

先把 23 组拆开

本次调查保存了 9 月 3 日两次成功下载的原文件。首次请求始于协调世界时 10:31:23,第二次始于 10:45:12,并在 10:45:48 完成。两个文件均为 438,145 字节,内容逐字节相同。中间两次请求超时,因此这里不作服务可用率判断,也不声称已经建立连续监测。

文件含 13,569 行非空、非注释记录,其中 10,782 行是 IPv4,2,787 行是 IPv6。按地址与前缀长度识别网络,并统一 IPv6 的合法写法后,得到 13,546 个不同前缀。23 个前缀各有两行,涉及 46 行;相对于每个前缀只保留一条记录的计数,多出 23 行。简单的原始前缀字符串分组也得到了相同结果。

但这 23 组不能一起贴上“定位错误”的标签。

重复组的情况 组数 文件实际显示了什么
两行完全相同 9 同一声明被重复输出
国家代码相同,地点字段不同 10 4 组地区或城市不同,6 组只是详略不同
国家代码不同 4 同一前缀对应两个不同国家代码

例如,200.123.12.0/24 连续两次被写为秘鲁利马,整行内容完全相同。200.80.255.0/24 的一条记录给出阿根廷、地区和布宜诺斯艾利斯,另一条只保留阿根廷的国家代码。200.63.248.0/21 则分别指向厄瓜多尔的伊瓦拉和基多,地区代码也不同。

这三种差别需要三种判断。完全重复没有提供第二份地理证据;信息较少不自动意味着错误;两个不同城市也不能仅凭文件顺序决定谁是现状。尤其不能把有城市的那一行视为天然优先——更详细的资料同样可能已经过时。

除了开头的乌拉圭、巴拉圭组合,另外三个国家冲突前缀分别是 181.238.0.0/24、181.239.32.0/24 和 186.182.0.0/24,均同时出现巴拉圭的 PY 与阿根廷的 AR。这给出了一个可以逐项核查的小集合,不是对整个地区地址使用情况的抽样结论。分母是文件中的前缀与记录,不是用户、组织或实际网络路径。

包含关系不是这次的问题

RFC 8805 第 2.1.3 节作了关键区分:相同地址或前缀重复出现应当被视为错误并供管理审查;前缀相互嵌套则可以存在,消费者通常应采用匹配范围最小、也就是前缀最长的那条记录。地点字段本身可以留空。

这个区别在实际文件中就能看见。177.126.48.0/22 和 177.126.48.0/24 都在其中;后者是前者的一部分。一个覆盖较大范围的概括声明,可以与一条针对其中较小范围的声明同时存在。查找落在 /24 内的地址时,长度能够帮助选择。

170.51.97.0/24 对 170.51.97.0/24 没有这种区别。它们的范围与长度完全相同。所谓“选最具体的记录”,在这里没有给出答案。

同样,省略城市并不违反“城市必填”规则,因为没有这样一条规则。需要审查的是同一个前缀为何出现多个版本,而不是要求所有成员提供越来越精细的位置。把所有包含关系判成重复,会误伤有用的细分声明;把所有空字段判成缺陷,则可能推动不必要的信息披露。两种过度纠正都偏离了眼前这个可以精确定义的问题。

声明工具有价值,恰恰因为它的职责有限

LACNIC 的服务说明描述的是自愿机制:成员组织的管理员通过 MiLACNIC 填写 IP 地址使用的国家、地区和城市,对外提供汇总文件。这段服务介绍发表于 2020 年,不能把今天重新取得它误写成今天上线了一项功能。

其地理位置说明也明确区分了联系地址和资源实际使用地点。Whois 中的城市、国家可能来自组织与 LACNIC 的合同资料;geofeed 让运营者另外声明地址在哪里使用,并按需要细分网段。对于商业地理位置数据库的内容,LACNIC 并不承担裁定角色。

这是对服务最有力的辩护。知道一个组织在哪里签约,并不等于知道它的网络在哪里运行。让运营者用一个公开、可重复读取的格式提供声明,能够减少资料被迫挤进不适合字段的情形。服务无须拥有全球每个地址的实测坐标,仍然可以有用。

不过,不裁定地理事实,不等于无法维护汇总文件的结构。两条完全相同的记录,可以在保留来源的前提下合并输出。两条有差别的记录,则可以被明确标为冲突,进入有记录的纠正过程。这些都不要求 LACNIC 宣布哪个国家才是真正的地点。

反过来,如果把冲突无声地交给下载者,每个下载者就得自己决定保留第一条、最后一条、最详细的一条,或者放弃整个文件。技术上的自由仍然存在,但相同输入可能得到不同结果,而且差异来自读取习惯而非新证据。一个为便于交换而设计的共同文件,便把一部分解释成本重新分散给了所有使用者。

让“不确定”留在记录里

本次核查没有登录成员账户,没有查看逐条修改历史,也没有测量这些网段的实际部署。无法得知谁提交了两条记录、哪条较新、为什么它们同时出现,或者资源是否确实以某种方式分布在不同地点。两次相同快照,只说明在两个观察时点文件相同,不能推断这种状况持续了多久。

也没有证据显示某家供应商读取了这四组冲突,或者因此拒绝了一个用户。如果位置数据进入内容选择、访问判断或其他业务规则,隐含的取舍可能产生后果;从“可能”到“已经发生”,还缺少消费者端的资料。

这并不使修复问题失去意义。一个小范围、可复现的结构冲突,值得在它成为更大范围解释分歧之前处理。合理目标不是给整个文件盖上“位置真实”的印章,而是让消费者知道:哪些前缀只有一条声明,哪些只是重复输出,哪些存在尚未解决的不同说法。

去重可以消除重复记录。它不能增加地理证据。保留这条界线,才不会把一次文件整理悄悄升级成一次位置裁决。