摘要

  • QUIC 采用双方所通告的较小非零空闲超时,并以当前 PTO 的三倍作为下限。
  • 计时器只在协议规定的接收与发送事件上重启;本地不断发包并不能无限续期。
  • 较长的 QUIC 超时不会预留 UDP 映射、后端亲和关系、应用状态或业务会话有效期。

两个端点都通告三十分钟,产品看板于是写下“静默会话可保留半小时”。最后一次交换后的第九十秒,防火墙清除了 UDP 映射。客户端下一包无法到达仍保存连接状态的后端。传输参数没有被违反,因为它从未替这条路径保留中间设备状态。

RFC 9000 第 10.1 节规定的是协议端点状态的边界。只要任一端点通告非零 max_idle_timeout,有效值就是双方通告值中的较小者;若只有一方给出非零值,则采用该值。连接超过适用的空闲期后,端点会静默关闭连接并丢弃状态。

“最大”是关键限定。这是容忍静默的上界,不是保证连接至少可用到该时刻的租约。端点通告该值后,如果主动决定更早放弃连接,便承诺发起即时关闭。但应用截止时间、显式关闭、无状态重置、凭证失效、路由中断或中间设备故障,仍可更早终结连接的可用性。

计时器的重启规则也不是简单的“最后发包时间”。端点收到并成功处理来自对端的包时会重启空闲计时器。端点发送会触发确认的包时,也只有在“自上次收到并处理对端包以来,尚未发送过另一份会触发确认的包”这一条件下才重启。缺少对端进展时反复本地发送,不能构成无限续期。因此,只保存“最后一个本地发送包”的看板无法复现真正的超时状态。

配置值也未必就是实际到期边界。RFC 9000 要求空闲期至少等于当前探测超时(PTO)的三倍。RFC 9002 第 6.2 节给 PTO 规定了另一层含义:预期确认迟迟未到,或地址验证尚未完成时,PTO 触发一个或两个探测数据报。PTO 到期本身并不把此前未确认的包判为丢失。

RFC 9002 第 6.2.1 节以平滑 RTT、RTT 变异量、计时器粒度,以及适用时的最大确认延迟计算 PTO;连续到期会触发指数退避,使 PTO 时长增加。因此“三倍 PTO”是随恢复状态变化的下限,不是静态配置常数。若只留下协商的毫秒数,事件复盘就失去了能解释实际到期边界的恢复上下文。

存活探测可以提供证据,但不能变成万能证明。RFC 9000 第 10.1.1 节提醒,临近到期时发送的包可能在对端已经丢弃状态之后才抵达。PING 或其他会触发确认的帧可以测试传输层是否仍有响应。收到 ACK 只证明观察到一次传输交换,不能证明应用进程健康、登录仍有效,或业务事务可以安全续接。

RFC 9000 第 10.1.2 节允许实现向应用提供延后空闲到期的能力,例如周期性发送 PING。安静期属于正常行为时,这可以维持端点状态;但是否值得,应由应用协议指导。不必要的探测会带来无线唤醒、报文、处理和网络容量成本。保活策略是一项运维决定,不能把超时参数自动改造成可用性承诺。

同一节还明确指出,中间设备状态可能比协商的 QUIC 计时器更早到期。NAT、防火墙或负载均衡器各自拥有独立时钟。即使两端仍保存状态,下一包也可能撞上已经消失的映射,或到达错误的后端。端点配置无法替自己不控制的基础设施预留资源。

RFC 9000 第 18.2 节说明,双方都省略该参数或设为零时,QUIC 的这一空闲机制被禁用。被禁用的只是这一机制,不是应用时限、安全到期、即时关闭、网络故障或中间设备垃圾回收。端点愿意无限等待,也无法保住外部映射或授权记录。

可辩护的运维记录应把双方通告值、所得最小值、当时 PTO 及输入、最后成功处理的对端包、最后一次符合条件的本地会触发确认发送、PING 与 ACK 结果、中间设备观察、后端亲和、应用会话到期和最终终止机制连接起来。一个计时器只能为一个边界作证。