Dan*_*hev 5 nginx tcp tcpdump chrome
我已经在我的一台服务器上配置了 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;
Run Code Online (Sandbox Code Playgroud)
服务器本身也启用了 TCP Fast Open:
root@server:~/projects/nginx# cat /proc/sys/net/ipv4/tcp_fastopen
3
Run Code Online (Sandbox Code Playgroud)
为了测试这是否有效,我在运行 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
Run Code Online (Sandbox Code Playgroud)
我相信 TCPFastOpenActive 和/或 TCPFastOpenPassive 计数器不应该是“0”,如果这有效。任何想法如何实际找出是否使用 TCP Fast Open 并按预期工作?如果我需要提供更多信息,请告诉我。
小智 2
我已经使用 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
Run Code Online (Sandbox Code Playgroud)
所以我认为你的分析方法是正确的。
并且运行wireshark,可以清楚地看到TCP选项下的Fast Open Cookie。
我使用 Chromium 和 Nginx 在同一对机器上进行了测试。
铬版本:
版本 55.0.2883.75 基于 Debianstretch/sid 构建,在 Debianstretch/sid 上运行(64 位)
在wireshark痕迹中没有快速打开cookie。即使在 Chromium 中启用了快速打开选项。所以我怀疑问题出在 Chromium 上。