Does TCP_FASTOPEN actually work?

Pieter de Goeje pieter at degoeje.nl
Fri Jul 6 17:50:33 UTC 2018


Op 2018-07-05 om 20:33 schreef Michael Tuexen:
>> On 5. Jul 2018, at 17:23, Pieter de Goeje <pieter at degoeje.nl> wrote:
>>
>> I'm trying to test this new feature, but I have trouble getting the client to actually send a cached cookie. It keeps requesting new ones and as a consequence it never sends data in the initial SYN packet. Tcpdump shows that the server correctly replies to a cookie request with a cookie.
> Can you provide a tracefile?

See http://lux.student.utwente.nl/~pyotr/dump/tfo.pcap which was taken 
on the client host, by running tfo-client 3 times in quick succession.

>>
>> Or am I misunderstanding how it should work and is the cookie cache per-process instead of system wide?
> No, the cache is system wide. You can use
> https://reviews.freebsd.org/D14554
> to see the entries.

No entries appear in the cache.
I've verified that the kernel actually does receive the cookie by adding 
a printf() to tcp_input.c just before tcp_fastopen_update_cache() is 
called. The kernel finds the cookie and attempts to update the cache, 
and then it is apparently black-holed.

>>
>> I'm using the test programs from https://people.freebsd.org/~pkelsey/tfo-tools/ for this purpose.
> How are you using the client and server?

On the server I run tfo-srv without arguments, on the client I run 
"tfo-client $host 22222" multiple times in quick succession. My 
expectation is that after the first run the cookie is retrieved and used.

>>
>> Server and client run on r335760 or later, with no changes to net.inet.tcp.fastopen except that server_enable was set to 1.
> Is client_enable = 1?

Yes (by default).

- Pieter


More information about the freebsd-net mailing list