RenzheCloud跨境直连核心品牌

问答笔记

同一个目标的 IPv4 与 IPv6 结果,必须分开保存

双栈设备打开同一域名时,实际连接可能来自不同 DNS 答案、地址族和路径。本文用 RIPE Atlas 结果接口与 RFC 8305 拆解受控比较:固定探针、目标、协议和时间窗,分开保留成功、失败与未尝试样本。

同一个域名,在笔记本上很快打开,在手机上却先停顿几秒。若记录里只有“同一网站、同一地点”,还不足以比较。两台设备可能解析到不同地址,也可能分别使用 IPv4 与 IPv6。即使都支持双栈,客户端选中的连接仍会受到答案到达顺序和竞速策略影响。

真正的双栈比较,需要把浏览器最终选中的连接与独立测量分开。浏览器的目标是尽快建立一个可用连接。测量的目标则是控制变量,观察两个地址族在相同条件下的结果。两者回答的问题不同。

先查实际连接使用哪个地址族

域名可以同时返回 A 与 AAAA 记录。A 记录给出 IPv4 地址,AAAA 记录给出 IPv6 地址。记录域名而不保留解析结果,就无法知道两次访问是否到达同一个服务端位置,也无法判断差异是否来自地址族。

应在测试开始时保存两个答案集合及查询时间。若目标使用内容分发网络,答案可能随地区、解析器和时间改变。相同域名并不保证取得相同地址。比较结束后再次查询,可发现测试期间是否发生变化。

还要记录应用实际使用的远端地址。只因设备具备 IPv6 地址,不能推定页面走了 IPv6。反过来,看到 A 与 AAAA 同时存在,也不能推定两个连接都完成。

页面打开成功只留下一个赢家

RFC 8305 描述的 Happy Eyeballs 机制,目的在于双栈环境中减少用户等待。客户端会接近同时提出 AAAA 与 A 查询,并异步处理答案。它不必等两个地址族的答案都返回,才启动第一个连接。

取得候选地址后,客户端会排序并交错两个地址族,再按短暂间隔启动连接。一个候选成功后,其他尚未成功的尝试会被取消。于是,页面打开记录天然偏向赢家。

一个候选连接成功后,其他尚未成功的连接尝试可能被取消。被取消不等于路径失败,也不等于延迟更高。它可能只是还没有足够时间完成。把浏览器赢家当成 IPv4 与 IPv6 的速度排名,会混淆连接选择与性能测量。

地址顺序本身就是一个变量

RFC 8305 要求先依地址选择规则排序,并允许有状态客户端参考过往路径 RTT。实现还可把曾使用过的地址放在较优位置。不过,历史资料不应跨不同网络接口沿用,并应在设备换网时清除。

这说明手机从 Wi-Fi 切到移动网络后,不能直接沿用前一网络的连接选择解释。设备、接口和接入网络改变,会同时影响历史状态、来源地址和实际路由。

若要比较地址族,不能只观察哪一个先被应用选择。需要为 IPv4 与 IPv6 建立两个独立测量定义,让两边拥有清楚的目标地址、协议和时间。

固定探针,才能控制测量起点

公开测量平台的探针位于不同网络。即使地图上两个探针落在同一城市,它们也可能属于不同自治系统、家庭宽带或机构网络。起点不同,路径和拥塞条件自然不同。

RIPE Atlas 结果接口允许按探针编号筛选。受控比较应先找出同时具备两种地址族能力的探针,再让 IPv4 与 IPv6 两栏使用相同编号集合。若某个探针只在一栏出现,应标为不可配对,不能拿另一地点补齐。

RIPE Atlas 结果可按探针编号、开始时间和停止时间筛选。探针编号固定后,还要保留当时状态。相同编号不表示接入网络永远不变,也不保证每个时间窗都有完整结果。

目标必须说明是域名还是固定地址

若测量目标写成域名,要注明解析发生在探针端还是集中位置。两种方式可能得到不同地址。若固定 IP,则要确认该地址在两栏中分别属于预期的 IPv4 与 IPv6 服务。

同一服务可能为两个地址族部署不同边缘节点。此时比较得到的是两条实际服务路径,而不是纯粹的协议开销。这个结果仍有价值,但结论应写成“该探针到这两个目标地址的差异”。

不能把目标地址差异藏在同一个域名标签下。记录应保留域名、A 或 AAAA 答案、最终测量地址与查询时间。任何一个地址变化,都应开启新的一轮比较。

协议和指标不能混用

ping 观察的是特定 ICMP 往返结果。traceroute 观察逐跳响应与路径线索。TCP 或 TLS 连接还涉及端口、握手和应用端响应。它们不能互相替代。

如果 IPv4 使用 ping,IPv6 使用 traceroute,即使两边都显示毫秒数,也不是同一种指标。受控比较要固定测量类型、包数量、间隔和目标含义。改变协议时,应另开表格。

路径跳数也不能直接当成速度。某些路由器不回应,某些链路跨越距离很长,某些路径经过更多可见设备却有较低排队延迟。跳数只是一项路径描述,不是吞吐量或稳定性的保证。

时间窗决定比较的是哪段网络状态

晚高峰与清晨的负载不同。把 IPv4 的清晨结果与 IPv6 的晚间结果比较,会把时间影响错算给地址族。两栏应使用同一起止时间,并注明时区。

RIPE Atlas 接口可用 start 与 stop 限定结果范围。下载原始结果时,应保存筛选参数。这样下次复核者才能取得同一批资料,而不是只看到一张已聚合的折线图。

时间窗还应覆盖足够多的样本。一次成功不能代表整晚稳定。持续测量可计算中位数、分位数和失败比例,但要先检查两栏样本数量是否接近。

失败与缺失要分开计数

没有结果可能来自探针离线、测量未排入、地址族不可用或资料延迟回传。明确失败则可能有超时、不可达或其他错误。两者含义不同。

若只计算成功样本,较差的一栏可能因大量失败样本被排除,剩余成功值反而看起来很快。这是幸存者偏差。汇总表至少要列计划样本数、实际结果数、成功数、失败数与缺失数。

普通页面连接还有第三种状态:未尝试。Happy Eyeballs 在一个连接成功后会取消其他尝试。未尝试与失败必须分开,不能都写成“另一地址族不可用”。

建立配对样本,而不是比较两个平均值

更可靠的方法,是按探针和时间槽配对。同一个探针在相邻时间内各有 IPv4 与 IPv6 结果,才进入差值计算。只有单边数据的时间槽保留在完整性统计,不进入配对延迟比较。

配对后可看每个探针的差值分布。若少数探针差异很大,不应只用全体平均数掩盖。可以同时报告中位差、较高分位和异常探针比例。

受控比较固定探针、目标、协议和时间窗,只改变地址族;普通页面打开则可能同时改变 DNS 答案、候选顺序与连接延迟。前者能讨论地址族相关差异,后者只能描述一次用户体验。

解析结果也可能在连接过程中变化

RFC 8305 还讨论了连接建立期间 DNS 答案增加或移除的情况。新地址可能被加入候选列表,已移除的地址也会改变后续尝试。这使得“开始时看到的地址”不一定等于最终连接候选全集。

因此,自动测试若持续较长时间,应记录每次解析或明确缓存策略。不要假设首次查询在整个时间窗内永久有效。若地址集合改变,应标注边界,并分别汇总变化前后的样本。

客户端的历史 RTT 与地址偏好也会影响排序。设备换网络后重新测试时,应把它视为新场景,不与原接口的结果直接拼接。

一张双栏记录应保留什么

每轮比较先写测量编号。RIPE Atlas 结果按唯一测量编号取得,因此编号是回到原始资料的入口。截图没有编号,无法确认使用了哪些探针和筛选条件。

两栏共同字段包括探针编号、探针网络、域名、协议、测量类型、开始时间、停止时间和时区。IPv4 栏另写 A 答案与实际地址。IPv6 栏写 AAAA 答案与实际地址。

样本栏分别保存成功、失败、缺失和未尝试。统计栏记录中位数、分位数与失败比例,不只留一个平均值。异常栏说明探针状态、解析改变或资料回传延迟。

最小记录动作是:分别保存 IPv4 与 IPv6 的探针、解析地址、测量编号、时间窗、成功、失败和缺失样本。缺少关键字段时,应把结论限制为现场描述,不做地址族比较。

如何解释看似相反的结果

浏览器优先使用 IPv6,而独立测量显示 IPv4 中位延迟较低,并不矛盾。浏览器选择还涉及地址排序、答案到达顺序和连接延迟。独立测量则在固定定义下收集多个样本。

另一种情况是 IPv6 首次失败,随后页面通过 IPv4 打开。它说明该次客户端回退成功,却不能证明整个 IPv6 网络长期故障。应查看同一探针后续样本、目标地址是否变化,以及失败是否集中在单一接入网络。

IPv6 先成功不代表长期更快,IPv4 回退也不代表整个 IPv6 网络长期不可用。任何结论都要包含探针、目标、协议与时间范围。

地图颜色必须能回到样本与规则

把双栏结果画成地图时,应先说明一个点代表探针位置、目标位置还是聚合区域。三者不能共用同一图例。探针位置回答测量从哪里发起,目标位置回答流量去向,区域色块则通常已经经过汇总。

每种颜色还需要阈值定义。例如绿色可能表示中位延迟低于某值,也可能表示成功率高于某值。若图例没有指标、单位、时间窗和样本数量,颜色只能用来导航资料,不能直接支持性能结论。

区域汇总要公开纳入规则。一个地区若只有单个探针,不能与拥有数百个配对样本的地区表现成同等可信度。地图可同时显示样本数量或覆盖等级,让读者知道哪里是密集观测,哪里只是稀疏线索。

同一探针在两个地址族中缺一栏时,不应把现有一栏复制到整个地区。缺失本身是覆盖信息。应让地图留白或标成资料不足,而不是用邻近点或另一地址族填色。

为复核者保存机器可读清单

除了可视化,还应保存一份机器可读清单。每行对应一个探针、一个时间槽和一个地址族。字段包括测量编号、探针编号、目标地址、解析时间、协议、样本状态、延迟或错误代码。

清单应保留原始单位,不要在导出时把超时改成极大延迟。超时属于失败类别,极大延迟仍是成功样本。两者混用会改变成功率和分位数。

统计脚本的版本、排除规则和时区也要进入说明。若剔除异常值,应保留剔除前数量和理由。这样复核者可以重建结果,并检验结论是否依赖某个清理步骤。

地址排序、分时启动和成功后取消,使浏览器最终连接带有选择机制,不能直接视为两地址族的完整对照实验。机器可读清单则把两栏的实际观测保留下来,避免只展示赢家。

结论:把连接选择与测量比较拆开

双栈页面体验只告诉我们,客户端最终建立了一个连接。它没有自动完成两地址族的公平测试。要回答 IPv4 与 IPv6 在某一现场是否不同,必须另建受控比较。

固定探针、目标、协议和时间窗,保留两边的解析地址,并把失败、缺失与未尝试分开。最后再用配对样本讨论差异。这样得到的是有边界的观测,而不是把一次页面打开扩写成全球线路结论。

文章解释公开测量与双栈连接机制,不推断未公开线路拓扑,也不把 ping、traceroute 或一次页面连接扩张为吞吐量。长期稳定性或所有用户体验。

资料来源

  • RIPE Atlas Documentation:《GET /measurements/{msm}/results/》,发布或更新于 2026-03-23
  • RFC Editor:《RFC 8305: Happy Eyeballs Version 2》,发布或更新于 2017-12-01