我已在一台服务器上配置了 Nginx 和 Apache。nginx 服务器监听端口 80,Apache 监听端口 81。Nginx 用作反向代理。我在 nginx 中配置了 TCP Fast Open:
server {
listen 107.6.155.74 fastopen=50;
server_name servtest.com www.servtest.com;
服务器本身也启用了 TCP Fast Open:
root@server:~/projects/nginx# cat /proc/sys/net/ipv4/tcp_fastopen
3
为了测试这是否有效,我在运行 Ubuntu 的 PC 上配置了 Chrome 以使用 TCP Fast Open(chrome://flags 页面)。客户端上的 tcp_fastopen 设置为 1。
在服务器上我使用以下 grep 来查明是否使用了 TCP Fast Open:
grep '^TcpExt:' /proc/net/netstat | cut -d ' ' -f 87-92 | column -t
TCPOFOMerge TCPChallengeACK TCPSYNChallenge TCPFastOpenActive TCPFastOpenPassive TCPFastOpenPassiveFail
0 2 2 0 0 0
我相信如果这可行,TCPFastOpenActive 和/或 TCPFastOpenPassive 计数器不应该为“0”。有什么想法可以真正找出 TCP Fast Open 是否被使用并且按预期工作?如果我需要提供更多信息,请告诉我。
答案1
我使用 TCP 快速打开测试代码进行了一些测试https://github.com/yuryu/tfoecho
当使用测试代码时,我的 TCPFastOpenPassive 计数确实增加了。
$ grep '^TcpExt:' /proc/net/netstat | cut -d ' ' -f 87-92 | column -t
TCPOFOMerge TCPChallengeACK TCPSYNChallenge TCPFastOpenActive TCPFastOpenActiveFail TCPFastOpenPassive
1000 56217 1316 0 0 2041
所以我认为你的分析方法是正确的。
并且运行wireshark,可以清楚地看到TCP选项下的Fast Open Cookie。
我使用 Chromium 和 Nginx 对同一对机器进行了测试。
Chronium 版本:
版本 55.0.2883.75 基于 Debian stretch/sid 构建,在 Debian stretch/sid(64 位)上运行
wireshark 跟踪中没有快速打开 cookie。即使在 Chromium 中启用了快速打开选项。所以我怀疑问题出在 Chromium 上。