TCP 时间戳是什么
net.ipv4.tcp_timestamps 控制是否在 TCP 头部使用时间戳选项,默认开启。它有两个作用:一是让收发双方更精确地测量往返时延,从而更准确地估算重传超时;二是实现 PAWS 机制,用来识别并丢弃延迟到达或序号回绕后的旧报文。此外,TIME_WAIT 端口的安全复用判定也依赖时间戳,因此它与 net.ipv4.tcp_tw_reuse 是绑定关系。
基本信息
| 参数 | net.ipv4.tcp_timestamps |
|---|---|
| 默认值 | 1(开启) |
| 核心作用 | 精确 RTT 测量与 PAWS 旧报文防护 |
| 依赖关系 | 启用 tcp_tw_reuse 时需保持开启,否则复用条件不成立 |
| 协商方式 | 在三次握手中与对端协商,双方都支持才启用 |
| 观测方式 | ss -ti 显示连接的 rtt 等实时参数 |
典型使用场景
- 理解端口复用前提:调整 tcp_tw_reuse 时先确认时间戳处于开启状态
- 排查超时估算异常:关闭时间戳会让重传退避更保守,在高延迟链路上更明显
- 兼容性验证:遇到老旧设备对时间戳处理异常时,临时关闭做对照实验
- 协议分析:抓包时识别时间戳选项,判断对端是否支持该特性
- 安全评审:时间戳会反映设备运行时间的量级,部分场景会评估这一信息暴露
查看与关联
查看与关联
sysctl net.ipv4.tcp_timestamps net.ipv4.tcp_tw_reuse # 两者一起看
ss -ti | grep -m3 -E 'rtt|ts' # 观察连接的时间戳与 RTT
sysctl -w net.ipv4.tcp_timestamps=1 # 恢复开启
nstat -az TcpExtPAWSEstab 2>/dev/null # PAWS 相关计数
sysctl net.ipv4.tcp_sack # 同为常见 TCP 选项,可一并核对开关影响对照
| 状态 | 影响 | 注意点 |
|---|---|---|
| 开启(默认) | RTT 测量精确,具备 PAWS 防护 | 是安全复用 TIME_WAIT 端口的前提 |
| 关闭 | 重传超时估算变粗,退避更保守 | 与端口复用同开时复用条件不成立 |
| 对端不支持 | 协商失败则该连接不使用该选项 | 老旧设备环境可能出现,属正常协商结果 |
| 修改后 | 仅对新建连接生效 | 需要新建连接才能验证效果 |
关闭时间戳会连带失去延迟报文与序号回绕的防护,也失去更细的 RTT 采样能力。现代链路上没有充分理由不建议关闭,只有在遇到明确的对端兼容性问题时才临时关闭做对照验证。
与它对偶的旧参数 tcp_tw_recycle 已在较新内核中移除:它依赖时间戳丢弃看似过期的报文,在 NAT 后的客户端上会造成随机连接失败,属于应当废弃的方案,遗留脚本里不应再出现。