摘要
- IPv6 地址的首选生命周期决定它是否应当继续承接新通信;有效生命周期决定它是否仍然绑定在接口上。首选期结束后,地址只是进入 deprecated 状态,并未立即消失。
- 双计时器为重编号创造了重叠窗口:新地址接手新的连接,旧地址继续服务不能随意换端点的既有会话。默认源地址选择会避开旧地址,但不把它当作不可达地址。
- 这套缓退机制同时带来撤回难题。未经认证的路由器通告不能轻易把有效期压到两小时以内;路由器若重启后忘掉旧前缀,又可能失去说出“请退役它”的能力。
一项租约有两个截止时刻
1996 年的 RFC 1971 已经把 IPv6 自动配置地址分成 preferred、deprecated、valid 与 invalid 四种状态。地址刚被正常分配时是 preferred,上层协议可以不受限制地选择它。当 preferred lifetime 归零,它变成 deprecated:使用受到劝阻,却仍是合法地址。只有 valid lifetime 也归零,地址才变成 invalid,接口绑定随之结束。
因此,“过时”不是“死亡”的委婉说法。一个 deprecated 地址仍能出现在报文源地址或目的地址中,主机仍应接收发往它的报文。规范特别指出,已经打开的 TCP 连接通常无法在中途更换端点地址;若为了配合重编号而立刻删除旧地址,控制面看似完成了更新,数据面却会切断仍有价值的通信。
这个区分把退役从一次跳变变成一段时间。旧地址停止争取新工作,但继续承担已经开始的工作。新地址与旧地址可以同时绑定在同一接口上,重编号不再只能在“全部留住”和“立即拔掉”之间二选一。
路由器传递的是两只钟
RFC 4861 在 Router Advertisement 的 Prefix Information Option 中放入两个 32 位字段:Preferred Lifetime 与 Valid Lifetime。全一比特表示无限期;首选期不得长于有效期。若主机收到首选期大于有效期的组合,RFC 4862 要求忽略这个选项,因为一个已经无效的地址不可能继续被首选。
两只钟并非看到一个前缀就自动启动。Prefix Information Option 的 Autonomous 标志还要表明该前缀可用于无状态地址自动配置。前缀、标志与寿命共同构成授权边界;单独出现的时间值不能凭空创建地址。
路由器会周期性发送通告,主机也会不断刷新计时。一个固定寿命值可在每次新通告到来时向前续期,也可以由路由器发出不断递减、指向某个绝对退场时刻的数值。反过来,某次通告里没有出现旧前缀,并不等于撤回。丢包、分包或路由器选择减少选项,都可能造成一次缺席;主机只能根据实际收到的信息和已有计时器行动。
先停止选择,而不是先停止接收
当首选期到期,主机应当避免用旧地址发起新通信,只要存在范围合适的非 deprecated 地址。2012 年的 RFC 6724 把这项原则写进默认源地址选择算法的规则 3:在两个候选源中,避开 deprecated 的那个。
“默认”与“禁止”仍有距离。应用若明确指定一个仍然 valid 的源地址,网络层可以尊重这个选择。已经建立的会话也可能继续使用旧地址,因为更换端点会给上层活动造成实质困难。即使是从外部到来的新 TCP SYN,只要旧地址仍有效且连接原本允许,主机仍可能以该 deprecated 地址发出 SYN-ACK。首选状态管理新工作的去向,有效状态管理地址是否仍被承认,两者不能互相代替。
这也解释了为何观察接口上“还有这个地址”不足以判断重编号是否完成。运维者需要看到地址状态与剩余时间,还要区分新连接实际选择了哪个源地址、旧连接是否仍在传输。存在、首选、可达与正在使用,是四份不同证据。
零首选期可以立即让地址退居二线
管理者若要开始迁移,可在旧前缀的通告中把 Preferred Lifetime 设为零,同时保留一段 Valid Lifetime。主机收到后会立刻把相关地址标为 deprecated,却不删除它。新通信转向替代地址,旧通信获得排空时间。
RFC 5887 描述的计划重编号正依赖这种重叠:先引入新前缀,再降低旧前缀的首选期,等现有会话和配置逐步迁移,最后让旧地址失效。然而,地址状态只是整场迁移中的一环。路由、DNS、防火墙、访问控制列表、证书、日志识别和应用配置都可能仍引用旧值。主机本地说“仍有效”,不代表远端路由还把报文送回来;说“不再首选”,也不会自动清理名称记录。
于是,双寿命提供的是协调原语,不是自动重编号承诺。它允许各层获得一个过渡区间,却不能替各层完成过渡。
强制失效比强制退居二线更危险
路由器通告通常没有认证。如果任何一份伪造通告都能把 Valid Lifetime 直接改成几秒,攻击者就能让主机所有地址迅速失效。RFC 4862 因此设置两小时保护:对于原本剩余较长有效期的地址,未经认证的短有效期通告通常只能把剩余时间压到两小时,而不能立即清零;若剩余时间已经不超过两小时,更短的未经认证值在有效期计算中会被忽略。
Preferred Lifetime 的处理有意不同。主机会按收到的值重置首选期,即使有效期的缩短受到保护。规范给出的理由很务实:恶意强制“不要优先选它”的破坏小于恶意强制“它已不存在”;而合法管理员确实需要迅速让旧地址停止承接新会话。安全边界不是平均保护两个字段,而是按不可逆后果分级。
经过认证的通告可以走不同分支。这里不能反推所有路由器通告都已认证,也不能把两小时当作普通退役的必选等待时间。它是一项针对未认证输入的主机侧损害上限。
路由器忘记旧前缀时,撤回也会消失
缓退依赖一件容易忽略的事:发出新配置的设备还记得旧配置。若家庭或小型办公室路由器重启后从上游取得新前缀,却丢失重启前使用的旧前缀,它只能宣布“新的是什么”,无法准确宣布“哪个旧的应当归零”。
RFC 8978 把这种情况称为 flash renumbering 的重要来源。没有明确、可靠的旧前缀撤回,主机只能等待上次收到的计时器自然到期。该文引用 RFC 4861 的默认 PIO 值说明风险尺度:地址可能保持 preferred 七天、valid 三十天。这些是规范默认值,不是现网设备调查;它们展示的是遗忘撤回后,长期定时器怎样把旧状态保存下来。
即使路由器还记得旧前缀并发送零有效期,未经认证通告也会碰到两小时保护。防伪造失效的安全选择,与快速清除确已失效前缀的运维愿望发生了直接张力。协议没有免费同时满足两者。
撤回责任必须穿过重启
RFC 9096 把改进重点放在客户边缘路由器。它建议缩短与上游租约相协调的下游寿命,把曾经发布过的前缀和标志保存在稳定存储中,并在前缀失效后持续用首选期和有效期都为零的 PIO 广告旧前缀。
持续时间也有理由:主机可能错过一份路由器通告。路由器需要在先前有效期覆盖的时段内重复告知,才有机会触达仍保留旧状态的主机。撤回不是发送一次报文的动作,而是一项跨越丢包和重启的记忆义务。
这项后来指导没有证明每台设备都照做。它揭示的是早期双寿命机制的制度前提:若发布者能刷新状态,就也应保有足够历史来结束状态。只记住新增、不记住撤回,会让时间机制从平滑迁移的工具变成陈旧配置的保存器。
会员简报
档案背景详情
使用相应会员等级登录,即可解锁完整简报与来源注释。
仅限 Strategic Circle
Strategic Circle
所有读者均可浏览。加入并登录后可解锁档案简报。
加入 Strategic Circle仅限 Leadership Alliance
Leadership Alliance
符合条件的 IP 资产所有者和管理层可登录查看 Leadership Alliance 简报。
加入 Leadership Alliance
