TCP Cookie Transactions
TCP Cookie Transactions (TCPCT) is specified in RFC 6013 (historic status, formerly experimental) as an extension of Transmission Control Protocol (TCP) intended to secure it against denial-of-service attacks, such as resource exhaustion by SYN flooding and malicious connection termination by third parties. Unlike the original SYN cookies approach, TCPCT does not conflict with other TCP extensions, but requires TCPCT support in the client (initiator) as well as the server (responder) TCP stack.
The immediate reason for the TCPCT extension is deployment of the DNSSEC protocol. Prior to DNSSEC, DNS requests primarily used short UDP packets, but due to the size of DNSSEC exchanges, and shortcomings of IP fragmentation, UDP is less practical for DNSSEC. Thus DNSSEC-enabled requests create a large number of short-lived TCP connections.
TCPCT avoids resource exhaustion on server-side by not allocating any resources until the completion of the three-way handshake. Additionally, TCPCT allows the server to release memory immediately after the connection closes, while it persists in the TIME-WAIT state.
- Simpson, W. (January 2011). TCP Cookie Transactions. IETF. doi:10.17487/RFC6013. RFC 6013. Retrieved March 16, 2012. CS1 maint: discouraged parameter (link)
- Daniel J. Bernstein. "SYN cookies".
SYN cookies "do not allow to use TCP extensions" such as large windows. [...] A connection saved by SYN cookies can't use large windows
- B. Carpenter and S. Brim, “Middleboxes: Taxonomy and Issues,” RFC 3234, February 2002.
- P. Srisuresh and K. Egevang, “Traditional IP Network Address Translator (Traditional NAT),” RFC 3022, January 2001
- D. Wessels (June 2009). "DNSSEC, EDNS, and TCP" (PDF). DNS-OARC. Cite journal requires
- Jake Edge (16 December 2009). "TCP cookie transactions". LWN.net.
- "Linux_2_6_33 - Linux Kernel Newbies".
- Jonathan Corbet (8 May 2013). "What's coming in 3.10, part 2". LWN.net.
- "Moving to "Historic" Status". Moving Outdated TCP Extensions and TCP-Related Documents to Historic or Informational Status. IETF. 2016. p. 4. sec. 2.1. doi:10.17487/RFC7805. RFC 7805.