摘要

  • 预测式快速切换可以在移动节点离开旧链路之前解析候选接入点、形成预期转交地址、授权转发并准备隧道;这些回执只证明“已经准备”,不能证明“已经抵达”。
  • 链路附着、DAD 或明确地址分配、UNA 处理、缓冲释放、常规 Mobile IPv6 绑定、实际收包和应用连续性仍是各自独立的证据层。

最容易被误判的,恰恰是提前完成的部分

移动网络希望把切换时延压到尽可能低。RFC 5268 所处理的,是移动检测之后在 IP 层配置新转交地址、更新绑定和重定向流量所需的时间。它允许系统在设备真正换链路以前,就先把新路径铺起来。

时间顺序因此被故意倒置:数据面准备可以早于物理到达。旧接入路由器可能已经接受 Fast Binding Update,新旧路由器可能已经协调,隧道可能已经建立,发往新侧的分组甚至已经进入缓冲;而移动节点此刻仍在旧链路上。

这不是漏洞,而是优化本身。但管理系统若只保留“切换成功”一个字段,就会把优化的领先量变成错误的事实声明。RFC 5268 明确不负责缩短链路切换本身的时延,也不定义触发移动的无线侧判断。RFC 5568 后来取代 RFC 5268,成为现行标准轨参考;它没有消除准备与附着之间的证据断层。

因此,正确问题不是“快速切换有没有成功”,而是:哪一个阶段成功、属于哪一次切换代际、最后被证明的边界在哪里。

候选接入点只是坐标,不是位置事实

移动节点可以向旧接入路由器发送 RtSolPr,把一个或多个接入点标识交给它。旧路由器以 PrRtAdv 返回 AR-Info,其中包含候选路由器的链路层地址、IP 地址和该接口上的前缀。节点据此可以形成一个预期的新转交地址。

这套流程把“无线侧可能去那里”转换成“IP 层如何为那里做准备”。然而,选择候选接入点的链路触发器并不在规范范围内。节点可能最终选择另一个接入点,可能附着失败,也可能根本没有离开。

所以,“已解析候选 AP”只说明某个 AP-ID 在某次观察中被映射到一套路由器坐标;“已形成 NCoA”只说明出现了一个面向未来链路的地址提案。二者都不能改写成“设备已位于新路由器”。

重复移动会放大这个问题。相同接入点、前缀乃至地址可能再次出现。如果记录没有切换代际,第一次预测留下的状态就可能被第二次移动继承,陈旧准备会伪装成新的抵达证据。

FBack 回来时,设备可能还没走

预测式模式下,移动节点仍连接旧链路时便发送 FBU,请求旧路由器把 PCoA 与预期 NCoA 绑定,并把流量转向新路由器。FMIPv6 Binding Authorization Data 选项用于证明发送者有权代表旧地址发出请求。

旧路由器随后与预期新路由器交换 HI 与 HAck。新路由器可以接受候选地址、换发另一个地址,也可以拒绝准备。若节点在离开前收到 FBack,它可以知道隧道准备正在进行。

但 FBack 的观察位置仍是旧链路。它证明旧路由器处理了准备请求,不证明节点完成了无线切换。HI/HAck 同样只是路由器之间的处置结果;其安全关联由规范之外的机制建立,也不能充当终端在场证明。

反应式模式从另一侧揭示了边界。节点若先到新链路,再发送 FBU,或者旧链路发过 FBU 却没来得及收到 FBack,抵达后就要发送 UNA,并发送或重发 FBU。没有旧链路上的 FBack,节点无法知道旧请求是否被处理。

因此状态机至少要区分:预测请求、授权、路由器准备、旧链路回执、实际链路附着,以及附着后的激活。把这些压成一个绿色状态,会让最早到达的控制回执冒充最后发生的物理事实。

一个 NCoA 背后有多种真值

预期 NCoA 可以由节点根据前缀自行形成,但它还要经历碰撞与分配生命周期。新路由器可通过 Duplicate Address Detection 检查它,也可在 HAck/FBack 中给出替代地址。节点抵达后,如果 UNA 暴露地址冲突,NAACK 仍可能要求节点换用地址并重新发送 FBU。

RFC 5268 承认碰撞概率可以很低,却不能因此被当成零。只有部署明确决定,例如地址管理已把冲突控制到可忽略程度时,才可按策略禁用 DAD;预测本身从来不是唯一性证明。地址自动配置边界仍应以 RFC 4862 为依据。

证据模型至少要保留:节点提出的地址、路由器检查过的地址、路由器另行分配的地址、附着后通过邻居通告确认的地址,以及后来常规 Mobile IPv6 绑定真正使用的地址。还要保留 DAD 结果,或明确的 DAD 绕过策略。

若数据库只有一个 NCoA 字段,旧提案很容易覆盖新分配,或继续被用于归属与转发。正确做法是保留地址谱系:它为什么出现、由谁确认、在哪次切换中失效。

UNA 证明在场并解锁转发,但仍不证明送达

RFC 5268 对隧道边界的表述非常直接:只建立隧道,并不能保证节点附着后收到分组;新路由器还必须能检测到节点已经出现。

链路连通后,移动节点发送 Override 位清零的 Unsolicited Neighbor Advertisement。新路由器据此可以删除代理邻居缓存项,或把不完整项转为 STALE,然后开始转发隧道送来的分组,并释放切换缓冲中的内容。

UNA 因而是强有力的附着侧证据:它把节点与新链路联系起来,并改变邻居缓存与缓冲的可执行状态。但它仍不证明每个分组都没有丢、不证明传输会话继续,也不证明用户看到的应用没有中断。

一条可逆证据链应能回答:哪次链路附着产生了 UNA;UNA 改变了哪个邻居项;该变化释放了哪一批缓冲;路由器实际发出了哪些分组;接收端观察到什么;应用层又观察到什么。只有这样,失败发生在准备与现实之间时,系统才不会只剩一句模糊的“切换已完成”。

缓冲可能只是把丢包搬到另一个时刻

预测转发使分组可能早于节点到达新路由器。没有缓冲,分组会在新侧丢失;反应式切换时,在旧路由器处理 FBU 之前到达的流量也可能在那里丢失。

缓冲缩短了暴露窗口,却引入容量与释放速率问题。一次性倾倒大量分组可能压垮新路由器、移动节点或中间链路,制造拥塞、抖动和第二轮丢包。RFC 5268 给出默认释放方式:参考原到达速率,最初最多允许五个分组连续发送,之后按节奏释放。

所以“已缓冲”不是结果证明。准入范围、保留内容、溢出、释放触发、速率、实际转发区间和接收侧结果都是不同观察。缓冲可能促成平滑切换,但其存在不能倒推用户体验;缓冲清空也只证明路由器发出了其保留内容。

RFC 5568 还划出一个协议代际边界

RFC 5268 曾取代实验性的 RFC 4068,随后又被 RFC 5568 取代。后一次变化不是简单换编号:RFC 5568 把 HI 与 HAck 从 RFC 5268 使用的 ICMPv6 报文改为 Mobility Header 报文。现行实现不得再发送旧 ICMPv6 形式,但可为兼容而解释收到的旧报文。

因此,抓包、设备声明与一致性证明都必须带协议代际和报文格式。只有“看到了 HI”仍不足以判断实现遵循的是哪一代规范。RFC 5268 对准备与到达边界的阐述仍有历史与分析价值,却不能作为部署旧编码的依据。

快速切换之后,常规 Mobile IPv6 的绑定和 Return Routability 也没有消失。提前铺路不能自动取得长期绑定权威。RFC 6275 所定义的后续义务仍需各自完成和留证。

运行代码不是“无缝”,而是一串边界

按照 Lu Heng 的 Running-Code Primacy,真正需要治理的对象不是“无缝移动”这个产品名,而是实际发生的顺序:候选观察、代理通告、预期地址、FBU 授权、路由器处置、隧道与缓冲准备、物理附着、UNA、地址确认、缓冲释放、常规绑定、分组接收与应用结果。

现实层纪律要求每一层只陈述自己证明的事实。预测不等于准备,准备不等于附着,附着不等于地址唯一,允许转发不等于已经送达,送达也不等于应用连续。

快速切换的本质,就是故意让某一层跑在现实前面。只有组织保留这段距离,而不是把它抹掉,这种提前才安全。任何“成功”都应能反查到切换代际、模式、地址谱系与最后被证明的边界。如果证据止于准备好的隧道,诚实状态只能是“路径已就绪,等待抵达”。

来源