Я настроил 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
Чтобы проверить, работает ли это, я настроил Chrome на ПК с Ubuntu для использования 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 и работает ли он должным образом? Дайте мне знать, если мне понадобится дополнительная информация.
Я провел несколько тестов, используя тестовый код быстрого открытия 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
Поэтому я считаю, что ваш метод анализа правильный.
Запустив wirehark, вы можете четко увидеть Fast Open Cookie в параметрах TCP.
Я тестировал ту же пару машин, используя Chromium и Nginx.
Версия Chromium:
Версия 55.0.2883.75 построена на Debian stretch / sid, работает на Debian stretch / sid (64-разрядная версия)
В следах Wirehark нет файлов cookie быстрого открытия. Даже если в Chromium включена опция быстрого открытия. Так что я подозреваю, что проблема в Chromium.