]> Sergey Matveev's repositories - stargrave-blog.git/commit
Попробовал TCP Fast Open
authorSergey Matveev <stargrave@stargrave.org>
Thu, 16 Nov 2023 13:03:11 +0000 (16:03 +0300)
committerSergey Matveev <stargrave@stargrave.org>
Thu, 16 Nov 2023 13:03:11 +0000 (16:03 +0300)
commit0569bd4a712d92a33ed743ab8ed90008a95beef5
tree4b825dc642cb6eb9a060e54bf8d69288fbee4904
parent6d6db63e2a2f529c56d74baa69101bbb30ea3e58
Попробовал TCP Fast Open

о котором узнал в 88ce198f30f60b4201e7ccc142d9942fa8104412.

Глядя на исходный код cURL и GnuTLS, в которых есть его поддержка,
оказалось, что они только для GNU/Linux или macOS. Видимо, когда был
hype на эту тему, то в macOS оно раньше появилось.

Вообще просто так его включить то не сложно: setsockopt(sock,
IPPROTO_TCP, TCP_FASTOPEN, ...). Но посылки данных с первыми SYN-ами
конечно не будет. Для этого надо делать не connect(), а
sendto(sock, ...). Что не всегда тривиально легко сделать. У меня код
подключения (connect()) и создания сокета были совмещены в одной
функции. После которой и всякий Capsicum включался, который sendto и
setsockopt не даст выполнить просто так. В общем, немного порефакторить
пришлось код.

Данные от сервера же могут не пойти с первым SYN+ACK если успеет
сработать таймер на delayed ACK. Но в трафике теперь видно что handshake
сообщение от клиента идёт с первым пакетом, тогда как от не быстрого
сервера приходит SYN+ACK, SYN, но он в это время уже считает
Диффи-Хельмана.