BGP 采集器数据并不干净:做路由分析前先处理噪声
解释 route collector、MRT 更新、noisy routers 和测量偏差,给出适合博客测评使用的数据清洗思路。
公共 BGP 数据不是事实全貌
RIPE RIS、RouteViews 和各种 Looking Glass 是路由分析的基础,但它们看到的是观察点附近的 BGP 视角,不是全球统一真相。
同一个路由事件,在不同 collector 上可能出现不同时间、不同 AS Path、不同可见性。更麻烦的是,一些路由器会产生大量重复更新、撤销和属性变化,把数据集变得很吵。
什么是 noisy routers
在 BGP 更新流里,有些 peer 会贡献异常多的 updates。这些更新未必代表真实拓扑变化,可能只是会话抖动、策略刷新、MED/community 变化或设备行为导致的重复通告。
如果直接用原始更新数量判断“某条线路不稳定”,很容易把单个观察点的噪声误判为全球故障。
VPS 测评中的常见误区
- 只用一个 Looking Glass 判断回程。
- 只看一次 traceroute,把瞬时 ECMP 结果当固定路径。
- 看到 AS Path 变长就断言绕路,但没有对比 RTT 和丢包。
- 把 collector 的更新量当成用户侧质量。
这些做法可以作为线索,但不能单独作为结论。
国外研究给测评的提醒
APNIC 对 noisy routers 的讨论强调了一个事实:公共 BGP 数据规模很大,但里面包含大量重复、抖动和观察点偏差。对研究者来说,这意味着要清洗数据;对博客测评来说,意味着不要把“某个 collector 看到很多更新”直接翻译成“这家 VPS 网络很烂”。
RouteViews 和 RIPE RIS 都是宝贵数据源,但它们的位置和 peer 选择会影响结果。一个亚洲网络的路由变化,可能在欧洲 collector 上表现得很慢或不完整。相反,一个欧洲上游的策略变化,可能在亚洲用户侧几乎没有影响。
国外网络运维论坛里也常见类似建议:先确认用户侧问题,再用控制面数据解释问题。控制面告诉你 BGP 想怎么走,数据面告诉你包实际走得怎么样。两者不一致时,不能强行选一个相信。
如何减少误判
对一条路由变化,至少用三种证据交叉:
- 本机 traceroute/MTR。
- 至少两个公共 collector。
- 目标网络或上游 Looking Glass。
如果三个证据都指向同一个 AS Path 变化,可信度较高。如果只有单个 collector 看到异常,而用户侧没有任何丢包或延迟变化,应该标成“观察到控制面波动”,而不是直接写故障。
适合博客的轻量数据模型
不需要搭建完整 BGP 数据平台,也能做基本留档:
event_id:
observed_at:
prefix:
origin_as:
old_path:
new_path:
collectors:
data_plane_result:
impact:
confidence:
confidence 可以分为 Low、Medium、High。这样读者能知道结论的证据强度。
更稳妥的数据处理方式
建议把路由分析分成四层:
- 控制面:BGP collector、Looking Glass、RPKI、IRR。
- 数据面:traceroute、MTR、TCP ping、iperf3。
- 时间面:白天、晚高峰、凌晨至少三个窗口。
- 方向面:去程、回程、跨运营商方向分别记录。
对公共 BGP 数据,至少做三步过滤:
- 去掉明显重复的 announcement/withdrawal 抖动。
- 对比多个 collector,只保留多点可见的变化。
- 把时间粒度拉到分钟级或更粗,避免被秒级抖动带偏。
一个简单记录模板
目标前缀:
观察时间:
本机 ASN / 接入运营商:
数据面路径:
控制面 AS Path:
RPKI 状态:
collector 数量:
异常说明:
结论
BGP 数据的价值在于解释“为什么路径会这样走”,不是替代用户侧实测。Portchannel1 后续测评会把公共 BGP 视图作为证据链的一部分,而不是只靠单点截图做判断。
参考来源
- APNIC Blog: Noisy routers: Investigating the make-up of route collector data
- RIPE RIS: Routing Information Service
- RouteViews: MRT and routing data archive