月下博客

不建议开启tcp fast open功能

TCP快速打开(TCP Fast Open, TFO),是Google在2011年提出的缩短页面加载时间的方案。众所周知,常规的tcp连接需要经历三次握手,对于向同一个主机的多次短连接完全是浪费时间。使用TFO后,对已经连接过的主机,可以使用之前的cookie再次连接,避免了无谓的握手过程。Google测算有了TFO,可以节省4-40%的页面加载时间。

至2012年起的Linux 3.7内核支持TFO,2013年安卓4.4支持TFO,2015年iOS支持TFO,2016年Windows 10支持TFO。此外某些软硬件厂商的产品也支持TFO,例如大名鼎鼎的F5。

理想是美好的,现实是残酷的。到目前为止,极少浏览器支持TFO功能。即使有,功能默认也是关闭的。究竟是什么原因让一个这么好的方案在现实中不受待见呢?

原因之一是与许多现有的软硬件不兼容。例如各种路由器、中间件等。其次是隐私问题,因为使用到了跟踪的cookie。再者即将到来的HTTP/3、已经普及的TLS 1.3有更好的解决方法。因此,TFO在实践中较少用到,虽然Nginx等主流软件支持。

对于科学上网的人,TFO更是不建议开启。根据 shadowsocks-libev 的反馈,TFO在中国移动数据网络下不能正常工作,而且长城防火墙会识别和丢弃TFO的包,开启TFO只会自找麻烦。

虽然不建议用TFO,但是本站提供的 Shadowsocks/SS一键脚本ShadowsocksR/SSR一键脚本V2Ray一键脚本 均在服务端开启了TFO的内核支持,但在程序配置中默认禁用。如果你想尝试TFO,只需在配置文件中打开tcp fast open即可,虽然强烈不建议!

参考

1. The Sad Story of TCP Fast Open