摘要

  • RFC 9621—9623 允许应用声明硬性要求与软性偏好,再由实现结合系统策略、历史缓存和当前网络候选选择路径与协议栈。
  • Ready 证明至少一个合格协议栈已经建立;它不说明哪些偏好落选、哪些候选被剪除,也不证明远端处理或用户结果。

RFC 9621 不要求应用先钉死 IP 地址、接口和协议,而是让它描述所需传输服务。RFC 9622 定义抽象 API,RFC 9623 说明实现如何收集、排序和竞速候选。这样,新传输能力可以在应用接口不变时进入运行系统。

便利也改变了控制面:应用提交意图,平台拥有更多选择权。事故调查若只保留“调用成功”和 Ready,就看不到选择依据。

五个强度不是同义词

RFC 9622 为多数选择属性规定 Require、Prefer、No Preference、Avoid、Prohibit。Require 只允许具备该属性的候选,否则失败;Prohibit 只允许不具备它的候选,否则失败。Prefer 与 Avoid 影响顺序,却允许继续使用非首选方案。

因此,“偏好非计量网络”仍可能产生流量费用;“禁止计量网络”则宁可无法连接。实现必须遵守全部硬性要求与禁止,但软性偏好的结果可随主机与环境变化。产品承诺若依赖成本、隐私或安全边界,就不能只写成偏好。

接口名称也不是属性证明。Wi-Fi 不自动等于免费、私密或低时延,蜂窝网络也不自动等于昂贵。若计费性质重要,应表达计费属性,而非从接口标签推断。

同一请求面对三类决策者

RFC 9623 列出应用偏好、动态系统策略和实现默认策略。管理规则可以禁用某条路径,平台可以限制某个进程使用接口,实现会为未声明属性提供默认值。被选候选必须同时满足三层约束。

但 RFC 9621 明确指出,系统策略依平台而异,抽象 API 不规定读写它的统一接口。应用意图可以跨平台保持一致,选择理由却未必能以同一方式读出。PolicyProhibited 能解释一种失败,成功的 Ready 并不会自动附上策略版本、候选清单或排序轨迹。

这不是要求全球统一策略,而是要求分开两份记录:共同契约负责硬性语义,本地选择回执负责说明谁依据什么作出决定。

候选树的次序会改变赢家

RFC 9623 建议先按网络路径分支,再按协议选项,最后按解析出的端点分支。其示例同时偏好 Wi-Fi 与 SCTP;若缓存认为 Wi-Fi 上不可用 SCTP,Wi-Fi 子树只剩 TCP,而 LTE 子树仍有 SCTP。因为路径优先,Wi-Fi/TCP 可以早于 LTE/SCTP 尝试。

两个偏好都存在,却不是放进一个全局评分器。树的形状、剪枝与优先次序共同拥有决定权。只记录赢家,无法回答另一个候选为何根本没有参赛。

端点也会随路径变化。不同接口可能得到不同 DNS 结果;代理会改变目标地址和端口;协议可能只在部分路径存在。候选集必须带有时间、网络和实现上下文。

最快只在合格集合内有意义

RFC 9623 区分同时竞速、错峰竞速与失败后切换。同时尝试可减少等待,却消耗更多资源并留下未使用状态,因此不宜作为默认。错峰模式延迟启动后续候选;失败后切换则让强偏好先获得完整机会。

代理是典型例子。若直接路径与代理同时竞速,前者只因快几毫秒就可能绕过策略;若代理具有控制意义,应使用硬性约束或明确的失败后切换。RFC 8305 的 Happy Eyeballs 为地址族竞速提供基础,TAPS 将选择扩展到路径、协议与端点。

安全边界更严格。RFC 8922 把安全参数纳入传输服务。RFC 9623 警告,攻击者可阻断首选尝试,诱导系统使用第二候选。若第二候选更弱,竞速就成了降级通道。所有候选必须保留硬性安全要求,并处在被认可的安全等价范围内。

缓存把昨天变成今天的投票

实现可保存 DNS 结果、TLS 会话状态、TCP Fast Open 凭据,以及 RTT、建立时延和成功率。RFC 9040 提供共享 TCP 控制块信息的背景。这些历史会排序甚至剪除下一轮候选。

优化也会形成反馈:常胜路径获得更多新样本,被剪除路径得不到翻身证据;昨天的故障可能遮住今天的修复。RFC 9621 因此要求应用明确声明必需属性,不应依赖某种固定缓存行为。

缓存还有关联风险。连接上下文可隔离 TLS 状态与复用关系,避免本应分开的活动被识别为同一来源。选择回执宜记录缓存命名空间、数据类别、年龄和失效依据,而不是复制票据、密钥或用户标识。

Ready 只关闭建立阶段

RFC 9623 把“至少一个协议栈已能发送与接收应用数据”视为建立完成;RFC 9622 以 Ready 暴露该状态。这证明本地已有可用且应满足硬性约束的栈。

它不证明软性偏好全部实现,不说明远端应用已处理消息,也不证明费用、时延或用户结果。完整证据链应分开记录:属性强度、有效策略、缓存来源、候选与剪枝、尝试时序、赢家、消息事件、远端处理和最终结果。

RFC 9623 将 Apple Network.framework、NEAT、NEATPy 与 PyTAPS 列为在不同程度上符合其思路的实现。Apple Network 文档 展示了协议选项与路径约束的现实价值,但这不是所有平台行为与审计能力一致的认证。

来源