Linux系统开启TCP Fast Open
TCP Fast Open是啥
TCP Fast Open,以下简称TFO,即TCP快速打开,是TCP连接的一种简化握手手续的拓展,用于提高两端点间连接的打开速度
正常情况下,服务端和客户端相互建立连接需要握手三次,这会导致延时,启用 TFO 后,如果验证成功,它可以在三次握手最终的ACK包收到之前就开始发送数据,这样便减少了连接延迟
需要注意的是,TFO只是 降低了握手阶段的延迟,至于握手成功后数据传递的速度,和 TFO 没有关系
如何开启
首先检查一下服务器现在的状态
cat /proc/sys/net/ipv4/tcp_fastopen
将会返回一个数字,分别代表:
- 0:关闭
- 1:仅在传出连接上启用
- 2:仅在侦听套接字上允许TFO
- 3:客户端和服务端都启用TFO
更改设置的方法为:执行并在/etc/rc.local中添加
echo 'net.ipv4.tcp_fastopen=3' > /etc/sysctl.d/98-tcp_fastopen.conf
测试
测试客户端是否正常启用TFO:
运行几次curl --tcp-fastopen www.google.com
再运行ip tcp_metrics show | grep "fo_cookie"
如果有输出,则配置正确
Nginx设置
打开网站配置文件,在listen xxx后加上fastopen=[快速打开队列最大长度]