TCP 低延迟调优¶
是什么 / 解决什么问题¶
TCP 提供可靠有序字节流,但可靠性、拥塞控制和缓冲机制会带来延迟变化。低延迟系统要理解哪些行为会让小消息被延后。
常用选项¶
int one = 1;
setsockopt(fd, IPPROTO_TCP, TCP_NODELAY, &one, sizeof(one));
setsockopt(fd, SOL_SOCKET, SO_REUSEPORT, &one, sizeof(one));
TCP_NODELAY 禁用 Nagle,适合小消息低延迟发送。它不等于“TCP 一定低延迟”,只是避免某类小包合并等待。
关注点¶
- Nagle 与 delayed ACK 交互。
- send/receive buffer 积压。
- 拥塞窗口和重传。
- accept backlog 与 SYN backlog。
- 用户态写入模式:小包频繁 write 还是聚合 writev。
观测与调试¶
ss -ti 可以看到拥塞窗口、rtt、重传等信息,是 TCP 问题排查的入口。
面试高频问题¶
TCP_NODELAY 是否总是应该打开¶
不总是。低延迟小消息通常打开;大吞吐流或可批处理消息未必需要。关键是理解应用消息边界、包大小和延迟目标。