跳转至

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 一定低延迟”,只是避免某类小包合并等待。

关注点

  1. Nagle 与 delayed ACK 交互。
  2. send/receive buffer 积压。
  3. 拥塞窗口和重传。
  4. accept backlog 与 SYN backlog。
  5. 用户态写入模式:小包频繁 write 还是聚合 writev。

观测与调试

ss -tinp
netstat -s | grep -i retrans
perf trace -e sendto,recvfrom -p <pid>

ss -ti 可以看到拥塞窗口、rtt、重传等信息,是 TCP 问题排查的入口。

面试高频问题

TCP_NODELAY 是否总是应该打开

不总是。低延迟小消息通常打开;大吞吐流或可批处理消息未必需要。关键是理解应用消息边界、包大小和延迟目标。