From 88ce198f30f60b4201e7ccc142d9942fa8104412 Mon Sep 17 00:00:00 2001 From: Sergey Matveev Date: Sat, 11 Nov 2023 12:30:43 +0300 Subject: [PATCH] TCP Fast Open MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit https://lwn.net/Articles/508865/ https://blog.apnic.net/2021/07/05/tcp-fast-open-not-so-fast/ https://en.wikipedia.org/wiki/TCP_Fast_Open https://datatracker.ietf.org/doc/html/rfc7413 https://github.com/bradleyfalzon/tcp-fast-open/ Пока читал про всякие AQM, ECN (6588786a31b2cbec545beeecf1232338609ff9ce), то обратил внимание на TCP Fast Open. Название то слышал, но думал что это какая-нибудь опция внутри TCP и поэтому не вчитывался. Оказалось что штука интересная: сервер, при обычном TCP рукопожатии, может отправить клиенту некую криптографически аутентифицированную cookie, которую клиент позже, при установке нового соединения, может предъявить вместе с данными, а сервер ответить тоже данными не дожидаясь третьего пакета рукопожатия от клиента. Выходит настоящий 0RTT. FreeBSD, судя по man-ам и ядру это поддерживает. Надо будет поиграться. Хотя и требуются небольшие изменения в программы. Go вообще ничего про него не знает, но нашёл какой-то репозиторий, где, явно выставляя опции для сокета, включают всё это. Если совмещать с TLS 1.3 session resumption, а то и его early data, то по RTT это становится как QUIC. # sysctl net.inet.tcp.fastopen.ccache_list net.inet.tcp.fastopen.ccache_list: Local IP address Remote IP address Port MSS Disabled Cookie 127.0.0.1 127.0.0.1 22222 16344 No 19f2ad06c2e26754 Тут не IPv6, потому что тестовая утилитка не понимала его, на коленках кем-то сделана. -- 2.50.0