首页/网络/协议速查/时间戳选项(TSval/TSecr)
TCP 与 UDP54 条

时间戳选项(TSval/TSecr)

TCP 时间戳用于精确测量 RTT(RTTM)、防止旧报文串扰(PAWS)以及某些环境下的 2MSL 快速回收判断。

协议速查网络更新于 2026-10-13

时间戳选项是什么

TCP 时间戳选项(RFC 7323,早期版本为 RFC 1323)在每个报文里带两个 32 位字段:TSval 是发送方自己的当前时间戳,TSecr 回显最近一次收到的对端时间戳。有了它,发送方不必靠重传去猜,就能精确测出往返时延;同时借助 PAWS 机制丢弃序号回绕后仍残留在网络里的旧报文,避免老数据被当成新数据交付。Linux 上由 net.ipv4.tcp_timestamps 控制,默认开启并在握手中协商。

基本信息

规范RFC 7323
字段TSval 发送方时间戳,TSecr 回显对端时间戳
占用空间每个报文 10 字节选项,另加 2 字节对齐
启用方式SYN 中协商,双方都支持才生效
内核开关net.ipv4.tcp_timestamps,默认 1
主要用途精确 RTT 测量、PAWS 防旧包

查看与验证

查看与验证
sysctl net.ipv4.tcp_timestamps        # 1 为开启
ss -ti state established | grep -i rtt   # 看内核给出的 RTT 估计
tcpdump -nn -v 'tcp port 8080' -c 4 | grep -i ts   # 抓包看 TSval 与 TSecr

三项作用对照

作用做法没开启时的影响
精确 RTT 测量用 TSecr 回显直接算出往返时延只能按重传与定时器估算,误差偏大
PAWS 防旧包丢弃时间戳早于已确认数据的报文极端情况下旧重复包会被接收
重传超时更准基于采样值调整 RTORTO 偏保守,恢复更慢

典型使用场景

  • 排障时区分「时延高」与「丢包」:RTT 与重传计数一起看才有结论
  • 路径存在序号回绕可能的极高速链路:PAWS 是必要保护
  • 老设备兼容性验证:个别实现与时间戳选项不兼容,关闭后问题消失即可定位
  • 内核加固审查:确认 tcp_timestamps 与相关参数是否被历史调优脚本改过
内核参数 tcp_tw_recycle 曾与时间戳配合使用,但在 NAT 环境下会造成大量连接异常,该参数已在 Linux 4.12 中移除。在仍在运行老内核的系统上排查 NAT 场景连接失败时,需要确认这一历史配置是否还存在于调优脚本里。关闭时间戳在个别老设备上确实能解决兼容问题,但应作为特例记录在案,不要变成默认动作。

易错点

  • 抓包对比时把时间戳算出的 RTT 与 tcpdump 的估算值当成同一个口径,看到小差异就以为链路异常
  • 为了「省开销」关闭时间戳,导致 RTO 估算变保守,弱网下重传与恢复明显变慢
  • 只看内核给出的 RTT 而不看重传计数:把丢包引发的重复传输误判成链路时延问题
  • 照抄网上老调优脚本打开已移除的参数,配置不生效还留下隐患

数据来源与参考

  • RFC 7323 §3(时间戳选项)

相关工具

​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌