TCP Fast Open (TFO) is an extension designed to speed up successive TCP connections by using a TFO cookie, a cryptographic token set by the server during the initial connection. When reconnecting, the client includes this cookie in the SYN packet, allowing the server to send data before completing the three-way handshake, thus reducing latency. The cookie is created using a block cipher to generate an authentication tag that guards against spoofing, but TFO does not provide security against man-in-the-middle attacks and should be combined with protocols like TLS or IPsec for better protection. Despite benefits, TFO faces deployment issues and presents privacy risks by enabling persistent client tracking. As of 2020, no major web browsers enabled it by default.
History
The TFO proposal was originally presented in 20114 and was published as the experimental RFC 7413 in December 2014.5 TCP Fast Open shares the goal of bypassing the three-way handshake of TCP with an earlier proposal from 1994, called T/TCP (RFC 1644). In contrast to TCP Fast Open, T/TCP paid no attention to security,6 opening a path for vulnerabilities and failing to gain traction.
Characteristics
TFO implementations include the following:
- IPv4 support for TFO was merged into the Linux kernel mainline in kernel versions 3.6 (support for clients) and 3.7 (Dec 2012) (support for servers),78 and was turned on by default in kernel version 3.13 (Jan 2014).9 TFO support for IPv6 servers was merged in kernel version 3.16.10
- FreeBSD from version 10.311 (support for servers) and 12.0.1213 (support for clients).
- Mozilla Firefox from version 58.14 The support was disabled by default due to network device compatibility issues with TFO and TLS 1.315 and eventually removed in version 87.16
- Google Chrome and Chromium browsers have support for TFO on Linux, including ChromeOS and Android.
- Exim mail transfer agent (MTA) from version 4.88.17
- Unbound DNS Resolver from version 1.5.10.18
- BIND Domain Name System (DNS) from version 9.11.0.19
- Knot DNS from version 2.6.0.20
- Apple's iOS 9 and OS X 10.11 both support TCP Fast Open, but it is not enabled for individual connections by default.21
- Microsoft Edge supports TCP Fast Open since Windows 10 Preview build 14352.22
- PowerDNS Recursor supports TCP Fast Open from version 4.1.23
- dnsmasq supports TCP-fastopen (RFC-7413) from version 2.81.24
See also
Bibliography
- Rybczyńska, Marta (13 March 2020). "A QUIC look at HTTP/3". LWN.net.
- Sy, Erik; Mueller, Tobias; Burkert, Christian; Federrath, Hannes; Fischer, Mathias (2020). "Enhanced Performance and Privacy for TLS over TCP Fast Open". Proceedings on Privacy Enhancing Technologies. 2020 (2): 271–287. arXiv:1905.03518. doi:10.2478/popets-2020-0027.
External links
References
Kerrisk, Michael (2012-08-01). "TCP Fast Open: expediting web services". LWN.net. https://lwn.net/Articles/508865/ ↩
Rybczyńska 2020. - Rybczyńska, Marta (13 March 2020). "A QUIC look at HTTP/3". LWN.net. https://lwn.net/Articles/814522/ ↩
Sy et al. 2020, p. 275-279. - Sy, Erik; Mueller, Tobias; Burkert, Christian; Federrath, Hannes; Fischer, Mathias (2020). "Enhanced Performance and Privacy for TLS over TCP Fast Open". Proceedings on Privacy Enhancing Technologies. 2020 (2): 271–287. arXiv:1905.03518. doi:10.2478/popets-2020-0027. https://doi.org/10.2478%2Fpopets-2020-0027 ↩
Radhakrishnan S, Cheng Y, Chu J, Jain A, Raghavan B (2011-12-06). "TCP Fast Open" (PDF). ACM CoNEXT. http://conferences.sigcomm.org/co-next/2011/papers/1569470463.pdf ↩
Cheng, Yuchung; Chu, Jerry; Radhakrishnan, Sivasankar & Jain, Arvind (December 2014). TCP Fast Open. IETF. doi:10.17487/RFC7413. RFC 7413. Retrieved 27 June 2022. https://datatracker.ietf.org/doc/html/rfc7413 ↩
Cheng, Yuchung; Chu, Jerry; Radhakrishnan, Sivasankar & Jain, Arvind (December 2014). TCP Fast Open. IETF. doi:10.17487/RFC7413. RFC 7413. Retrieved 27 June 2022. https://datatracker.ietf.org/doc/html/rfc7413 ↩
Kerrisk, Michael (2012-08-01). "TCP Fast Open: expediting web services". LWN.net. The client-side support has been merged for Linux 3.6 https://lwn.net/Articles/508865/ ↩
Vaughan-Nichols, Steven J (2012-12-11). "Linux 3.7 arrives, ARM developers rejoice". Linux and Open Source. ZDNet. Linux 3.7. TCP Fast Open will now be supported on servers https://www.zdnet.com/article/linux-3-7-arrives-arm-developers-rejoice/ ↩
"Linux Kernel 3.13, Section 1.10. TCP Fast Open enabled by default". kernelnewbies.org. 19 January 2014. Retrieved 11 February 2014. http://kernelnewbies.org/Linux_3.13#head-159ff61ea3acfd67b88855e75dbbb140f8825c4a ↩
"Linux Kernel 3.16, Section 1.4. TCP Fast Open server mode on IPv6 support". kernelnewbies.org. 3 August 2014. Retrieved 14 September 2014. http://kernelnewbies.org/Linux_3.16#head-93fbb9abc6149e9c3055322f27cdc3a8fcc198e6 ↩
"Implementation of server-side TCP Fast Open (TFO) [RFC7413]: MFC into stable/10 branch". 2015-12-28. https://svnweb.freebsd.org/base?view=revision&revision=292823 ↩
"This is an implementation of the client side of TCP Fast Open (TFO) [RFC7413]". 2018-02-26. https://svnweb.freebsd.org/base?view=revision&revision=330001 ↩
"Enable TCP_FASTOPEN by default for FreeBSD 12". 2018-06-24. https://svnweb.freebsd.org/base?view=revision&revision=335610 ↩
"1188435 - Support TCP Fast Open". 2017-05-05. https://bugzilla.mozilla.org/show_bug.cgi?id=1188435 ↩
"1398201 - Disable TCP Fast Open for 57". 2017-09-10. https://bugzilla.mozilla.org/show_bug.cgi?id=1398201 ↩
"1689604 - Remove TCP FastOpen". 2021-03-23. https://bugzilla.mozilla.org/show_bug.cgi?id=1689604 ↩
"Exim 4.88 released". 2016-12-25. https://lists.exim.org/lurker/message/20161225.101705.4bbe7ae8.en.html ↩
"Unbound 1.5.10". Retrieved 2017-12-05. https://www.unbound.net/pipermail/unbound-users/2016-September/004466.html ↩
"Release Notes for BIND Version 9.11.0". 2016-10-05. https://ftp.isc.org/isc/bind9/9.11.0/RELEASE-NOTES-bind-9.11.0.html ↩
"Knot DNS 2.6.0". 2017-09-29. https://gitlab.labs.nic.cz/knot/knot-dns/tags/v2.6.0 ↩
"Your App and Next Generation Networks". Apple Inc. 2015. https://developer.apple.com/videos/wwdc/2015/?id=719 ↩
"Windows 10 build 14352 - New web platform features". Microsoft. Retrieved 2016-05-27. https://developer.microsoft.com/en-us/microsoft-edge/platform/changelog/desktop/14352/ ↩
"Changelogs for 4.1.x". PowerDNS. 2017-12-04. https://doc.powerdns.com/recursor/changelog/4.1.html ↩
Kelley, Simon (2019-03-10). "Support TCP fastopen on incoming and outgoing connections". http://thekelleys.org.uk/gitweb/?p=dnsmasq.git;a=commitdiff;h=608aa9fcfca2ffeba40d78c7c4e0dcb50e0d5704 ↩