]> Sergey Matveev's repositories - stargrave-blog.git/commit
TCP Fast Open
authorSergey Matveev <stargrave@stargrave.org>
Sat, 11 Nov 2023 09:30:43 +0000 (12:30 +0300)
committerSergey Matveev <stargrave@stargrave.org>
Sat, 11 Nov 2023 12:01:03 +0000 (15:01 +0300)
commit88ce198f30f60b4201e7ccc142d9942fa8104412
tree4b825dc642cb6eb9a060e54bf8d69288fbee4904
parent08a651d3bf3f54a1cef5b1a3744fd6d9cd88bac6
TCP Fast Open

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, потому что тестовая утилитка не понимала его, на коленках
кем-то сделана.