用户超时是 TCP 本机、按连接保存的时限:已发送的数据若一直得不到确认,到期就放弃这条连接。现行文本 RFC 9293 仍把全局默认写成五分钟,并把它和重传超时分成两只定时器。RFC 5482 的选项只是把本机时限建议给对端,对端可以不采纳。
放弃连接的是另一只定时器
一个可独立引用的定义句:用户超时控制已传送的数据在未被确认的情况下可以保留多久,然后 TCP 强制关闭相应连接。它是本机的、按连接的参数(RFC 5482 摘要)。
2026 年 10 月 20 日重读的 RFC 9293 把这个参数留在两处。OPEN 的 timeout 若出现,允许调用者为交给 TCP 的全部数据设置时限;数据若未在该时限内成功交付,端点将放弃连接。该节写明,当前的全局默认是五分钟。这句没有挂 MUST 编号。
第 3.10.8 节把到期后的动作写成:对任何状态,若用户超时到期,清空队列,向用户发出 “error: connection aborted due to user timeout”,删除传输控制块,进入 CLOSED。同一节的下一条才是重传超时:重发重传队列最前面的段,并重新初始化重传定时器。两只定时器的到期动作不同。
过多重传另有 R1 和 R2。一个可独立引用的定义句:对同一段的重传达到大于 R1 的阈值 R2 时,关闭连接。R2 的值应当对应至少 100 秒。SYN 段的 R2 必须设得足以把该段重传至少 3 分钟(RFC 9293 第 3.8.3 节,SHLD-11 与 MUST-23)。
R1 应当对应按当前重传超时至少 3 次重传,这是 SHLD-10。应用必须能为某条连接设置 R2,这是 MUST-21。RFC 5482 的引言把 R1、R2 和五分钟默认归于 RFC 793 与 RFC 1122。2026 年 10 月 20 日没有重读 RFC 1122。上面的编号来自当日重读的 RFC 9293,不是把 5482 的引言改写成 9293。
重传超时 决定没有确认时隔多久重发。用户超时决定这种状态持续到何时放弃整条连接。第 3.1 节还有一条必须:下限 L_LIMIT 必须大于该连接当前的重传超时。否则时限可能先于一次重传到期,连接会被放弃。RFC 5482 此处引用的重传超时上限说明仍是 RFC 2988。重传超时一文写明现行文本是 RFC 6298,若设上限则至少 60 秒。2026 年 10 月 20 日没有重读 RFC 6298。
零窗口 探的是接收窗口是否重新打开。用户超时不读取窗口字段。窗口为 0 时数据仍可能未被确认,两只计时可以同时存在。某一系统是否在零窗口期间停止用户超时,本文没有测量。
种类 28 只携带建议
一个可独立引用的定义句:TCP 用户超时选项让连接的一端通告自己当前的用户超时。这是给另一端的建议,让它考虑据此调整;若本机策略认为不合适,TCP 仍可无视该建议(RFC 5482 第 1 节、第 3 节)。
选项格式在第 3.3 节:
| 字段 | 宽度 | 第 3.3 节的要求 |
|---|---|---|
| Kind | 8 位 | 必须是 28 |
| Length | 8 位 | 必须是 4 |
| G | 1 位 | 为 1 时,后面的数值必须按分钟解释;为 0 时必须按秒解释 |
| User Timeout | 15 位 | 必须当作无符号整数。数值为 0 时,无论 G 是 0 还是 1,都保留给将来 |
第 3.4 节:User Timeout 为 0 的选项,当前实现不得发送,收到时必须忽略。
2026 年 10 月 20 日检索 IANA 的 TCP 选项种类登记 的 CSV。种类 28 的长度列是 4,含义列写着 User Timeout Option,参考文献是 RFC 5482。同一格还注明 “other known unauthorized use”。脚注写明:这个值曾以与本登记所记载用法不兼容的方式部署在互联网上。CSV 的 Last-Modified 是 2026-10-13。脚注里的外部链接当日没有打开,因此不描述那些不兼容部署。看见种类 28,只说明这个 8 位是 28,不说明发送方遵守了第 3.3 节。
四个每连接变量里,三个是这份选项新加的。ENABLED 默认 false,发送和接收都看它。CHANGEABLE 默认 true;应用显式设置 USER_TIMEOUT 时,CHANGEABLE 必须变成 false,以免对端选项覆盖应用的要求。ADV_UTO 是通告给对端的值;应用未指定时,默认等于系统的默认用户超时。
双方交换选项不是绑定协商。只有 ENABLED 和 CHANGEABLE 都为 true,本端才会按收到的建议调整。CHANGEABLE 为 false 时,无论收到什么,USER_TIMEOUT 都不得改变;此时应当把对端通告的值通知应用,这是 SHOULD。
在 CHANGEABLE 为 true 且采用第 3.1 节的建议方案时,每一端应当按下面的式子计算本机值:取 ADV_UTO、REMOTE_UTO 和 L_LIMIT 的最大者,再与 U_LIMIT 取最小者。原文的理由是取两端通告的较大者,让连接能度过更长的不通期。它同时写明,两端因此不一定采用同一个用户超时。
跟随该建议方案时,L_LIMIT 应当至少为 100 秒。5482 把理由写成 RFC 1122 建议的时间间隔至少 100 秒。RFC 9293 则把 R2 写成应当至少 100 秒。两处都是 100 秒,5482 没有把 L_LIMIT 定义成 R2。实现必须对所接受、所使用的用户超时施加上下限。这是 MUST,先于那个建议公式。
选项里的数值预期用在同步状态:ESTABLISHED、FIN-WAIT-1、FIN-WAIT-2、CLOSE-WAIT、CLOSING、LAST-ACK。其他状态必须使用 RFC 793 和 RFC 1122 定义的默认时限。2026 年 10 月 20 日的 RFC 元数据没有列出更新 RFC 5482 的文件,因此这句仍然指向那两份旧文本,而不是 RFC 9293。
选项可以丢掉,中间盒也不读它的时限
第 3.2 节:这个选项是建议性的,不改变后续段的处理,因此不要求可靠交换,也不定义可靠性握手。携带它的段丢失时,对端只是没有机会更新本机用户超时。实现可以在重传时再次带上它,但不得假设传输是可靠的。
支持该选项的主机,在开始对这条连接使用新的用户超时时,应当在下一个可能的出站段里放上一个。不支持的实现必须静默忽略它,依据是 RFC 5482 所引的 RFC 1122。2026 年 10 月 20 日没有重读 RFC 1122 的那一条。
选项空间最多 40 字节。窗口缩放、时间戳和 SACK 已经各占其中一部分,见 窗口缩放、TCP 时间戳 和 TCP SACK。用户超时选项本身是 4 字节。同一次握手里它们是否挤不下,本文没有测量。
第 4.1 节写:路径上的有状态防火墙通常会在空闲一段时间后丢掉连接状态。若存在这样的防火墙,它可以不管这个选项,照样关闭或放弃连接。原文把「防火墙将来也许学会解析未加密 TCP 段里的该选项」写成设想,不是一项要求。本文不提供让中间盒忽略或识别这个选项的步骤。
第 4.2 节:若一条连接既启用 TCP 保活,又使用用户超时选项,则保活定时器必须设得大于所采用的用户超时。RFC 9293 第 3.8.4 节把保活写成可选,默认关闭;间隔必须可配置(MUST-27),默认不得小于两小时(MUST-28)。VPN 保活 说的是隧道客户端的探测和重连,不是这只 TCP 定时器。
隧道外面还有一只钟
外层若是 UDP,外层没有用户超时。用 TCP 还是 UDP 区分的是外层传输。内层 TCP 仍按自己的确认计算这只时限。隧道中断期间,内层已发送的数据继续处于未确认,这段时间会计入用户超时。某一客户端是否在隧道重连后保留原来的内层控制块,本文没有测量。
把时限拉长,连接状态就要留得更久。第 6 节讨论这会放大已经完成握手的资源占用,并要求用上下限约束。本文不复述该节的攻击情形,也不提供修改时限的步骤。
2026 年 10 月 20 日查阅 RFC 5482 的勘误检索,没有列出勘误条目。同日的 RFC 元数据把状态标成 PROPOSED STANDARD,没有把它标成已被取代。
核对清单
- 它放弃的是整条连接:RFC 9293 的全局默认写成五分钟,这句没有 MUST 编号。到期动作在第 3.10.8 节,和重传超时的到期动作并列而不同;
- R2 不是这个选项:R2 应当至少 100 秒,SYN 的 R2 必须至少 3 分钟。选项里的 15 位是另一份建议;
- 种类 28、长度 4:G 为 1 是分钟,为 0 是秒。全 0 的数值不得发送,收到必须忽略。登记表另注不兼容部署,本文没有打开那个脚注链接;
- 建议可以不采纳:应用显式设置后,CHANGEABLE 必须为 false。建议公式取两端通告的较大者,再夹在上下限之间。两端不必相同;
- 外层保活不算内层确认:UDP 外层没有用户超时。有状态防火墙仍可按自己的空闲时间丢掉状态。