RFC 4614
A Roadmap for Transmission Control Protocol (TCP) Specification Documents
RFC 4614: A Roadmap for TCP Specification Documents ๐
Part 1 of 7, bestie! ๐
- Authors: M. Duke (Boeing Phantom Works), R. Braden (USC Information Sciences Institute), W. Eddy (Verizon Federal Network Systems), and E. Blanton (Purdue University Computer Science)
- Category: Informational ๐ฆ
- Date: September 2006
- Obsoletes and updates: This header doesn't list anything it obsoletes or updates. The body says outright that it is not an update of RFC 1122, so no drama there ๐
Status of This Memo
okay so this memo is just information for the Internet community ๐ง It does NOT specify an Internet standard of any kind, so don't go treating it like a rulebook. Distribution is unlimited, so share it with everyone you know ๐
Copyright Notice
Copyright (C) The Internet Society (2006).
Abstract โจ
This document is a "roadmap" to the Requests for Comments (RFC) documents about the Internet's Transmission Control Protocol (TCP) ๐ธ It gives a quick summary of the documents that define TCP and the various TCP extensions that have piled up in the RFC series over the years. Think of it as a guide and quick reference for TCP implementers, plus anyone who wants info from the TCP-related RFCs ๐ซถ
Table of Contents
1. Introduction ....................................................2
2. Basic Functionality .............................................4
3. Recommended Enhancements ........................................6
3.1. Congestion Control and Loss Recovery Extensions ............7
3.2. SACK-Based Loss Recovery and Congestion Control ............8
3.3. Dealing with Forged Segments ...............................9
4. Experimental Extensions ........................................10
5. Historic Extensions ............................................13
6. Support Documents ..............................................14
6.1. Foundational Works ........................................15
6.2. Difficult Network Environments ............................16
6.3. Implementation Advice .....................................19
6.4. Management Information Bases ..............................20
6.5. Tools and Tutorials .......................................22
6.6. Case Studies ..............................................22
7. Undocumented TCP Features ......................................23
8. Security Considerations ........................................24
9. Acknowledgments ................................................24
10. Informative References ........................................25
10.1. Basic Functionality ......................................25
10.2. Recommended Enhancements .................................25
10.3. Experimental Extensions ..................................26
10.4. Historic Extensions ......................................27
10.5. Support Documents ........................................28
10.6. Informative References Outside the RFC Series ............31
1. Introduction โจ
okay so a correct and efficient TCP implementation is a huge deal ๐ญ It's a critical part of the software on most Internet hosts. TCP has evolved a lot over the years, so a bunch of distinct documents have become part of the accepted TCP standard. Meanwhile, tons of more experimental TCP tweaks have been published in the RFC series too, along with informational notes, case studies, and other advice.
This doc is here to help newcomers and organize the plethora of info for the old hands ๐ It's a "roadmap" to the TCP-related RFCs with a brief summary of the RFCs that define TCP. It should give implementers a sense of how relevant and significant the standards-track extensions, informational notes, and best current practices are for TCP.
This document is NOT an update of RFC 1122, and it's not a rigorous standard for what TCP has to implement. It's just an informational roadmap that captures and summarizes most of the RFCs that a TCP implementer, experimenter, or student should know about. Any comments or broad categorizations it makes about individual mechanisms and behaviors are not definitive, and the content of this document alone should not drive implementation decisions ๐
Each TCP-related RFC gets a brief description. Sometimes we just copy the abstract or a key summary sentence as a terse description. Also, a letter code after an RFC number shows its category in the RFC series (see BCP 9 [RFC2026] for an explanation of these categories):
S - Standards Track (Proposed Standard, Draft Standard, or
Standard)
E - Experimental
B - Best Current Practice
I - Informational
Heads up, the category of an RFC doesn't necessarily reflect how relevant it is right now ๐ฅ For example, RFC 2581 is nearly universally deployed even though it's only a Proposed Standard. Also, some Informational RFCs contain big technical proposals for changing TCP.
This roadmap has four main sections. Section 2 lists the RFCs that describe absolutely required TCP behaviors for proper functioning and interoperability. Section 3 lists the further RFCs that describe strongly encouraged but non-essential behaviors. Section 4 covers experimental extensions that aren't standard practice yet, but could be someday ๐
Okay, you'll notice these three sections line up pretty well with MUST/SHOULD/MAY specifications (per RFC 2119). The authors do support that intuition, but this document is only descriptive. It is NOT a binding standards-track position. Implementers still need to read the actual standards documents to figure out specific requirement levels ๐
A few older experimental extensions that never got widely implemented, deployed, and used are noted in Section 5 ๐ A lot of other supporting docs for developing, implementing, and deploying TCP are in Section 6. Inside each section, the RFCs are listed in chronological order of their publication dates. Lastly, some super ubiquitous implementation practices that aren't currently documented in the RFC series are listed in Section 7 ๐
2. Basic Functionality โจ
A small number of docs make up the core spec of TCP. They define the required basic functionality for TCP's header parsing, state machine, congestion control, and retransmission timeout computation. These base specs MUST be followed correctly for interoperability ๐ซถ
RFC 793 S: "Transmission Control Protocol", STD 7 (September 1981)
This is the fundamental TCP spec [RFC0793] ๐ Jon Postel wrote it as part of the core of the Internet protocol suite. It describes the TCP packet format, the TCP state machine and event processing, and TCP's semantics for data transmission, reliability, flow control, multiplexing, and acknowledgment. Iconic.
Section 3.6 of RFC 793, which covers TCP's handling of the IP precedence and security compartment, is mostly irrelevant today ๐ RFC 2873 changed the IP precedence handling, and the security compartment part of the API is no longer implemented or used. RFC 793 also didn't describe any congestion control mechanism. Otherwise, though, most of this document still accurately describes modern TCPs โจ RFC 793 is the last in a series of developmental TCP specs, which started in the Internet Experimental Notes (IENs) and continued in the RFC series.
RFC 1122 S: "Requirements for Internet Hosts - Communication Layers" (October 1989)
This doc [RFC1122] updates and clarifies RFC 793, fixing some spec bugs and oversights ๐ง It also explains features like keep-alives and Karn's and Jacobson's RTO estimation algorithms [KP87][Jac88][JK92]. ICMP interactions get mentioned, and there are some tips for efficient implementation. RFC 1122 is an Applicability Statement, listing the various features that MUST, SHOULD, MAY, SHOULD NOT, and MUST NOT be present in standards-conforming TCP implementations. Unlike a purely informational "roadmap," this Applicability Statement is a standards document and gives formal rules for implementation. Very serious, very important ๐
RFC 2460 S: "Internet Protocol, Version 6 (IPv6) Specification" (December 1998)
This doc [RFC2460] matters for TCP because it defines how the pseudo-header for TCP's checksum computation is derived when 128-bit IPv6 addresses are used instead of 32-bit IPv4 addresses ๐ฆ RFC 2675 also describes the TCP changes needed to support IPv6 jumbograms.
RFC 2581 S: "TCP Congestion Control" (April 1999)
So RFC 793 didn't have any congestion control mechanisms, but today congestion control is a required component of TCP implementations ๐ฆ This doc [RFC2581] defines the current versions of Van Jacobson's congestion avoidance and control mechanisms for TCP, based on his 1988 SIGCOMM paper [Jac88]. RFC 2001 was a conceptual precursor that RFC 2581 obsoleted.
A bunch of behaviors that together make up what the community calls "Reno TCP" are described in RFC 2581 ๐ธ The name "Reno" comes from the Net/2 release of the 4.3 BSD operating system. It's generally seen as the least common denominator among TCP flavors running on Internet hosts. Reno TCP includes the congestion control features of slow start, congestion avoidance, fast retransmit, and fast recovery.
RFC 1122 mandates a congestion control mechanism, and RFC 2581 details the currently accepted one. RFC 2581 is a bit different from the other docs in this section, because it doesn't affect whether two TCP endpoints can communicate. Still, congestion control is a critical part of any widely deployed TCP implementation, and it's required to avoid congestion collapse and to keep flows fair to each other ๐ซถ
RFC 2873 S: "TCP Processing of the IPv4 Precedence Field" (June 2000)
This doc [RFC2873] takes all processing of the precedence bits in the TOS byte of the IP header out of the TCP spec ๐ That fixes a conflict over these bits between RFC 793 and Differentiated Services [RFC2474].
RFC 2988 S: "Computing TCP's Retransmission Timer" (November 2000)
Abstract: "This document defines the standard algorithm that Transmission Control Protocol (TCP) senders are required to use to compute and manage their retransmission timer. It expands on the discussion in section 4.2.3.1 of RFC 1122 and upgrades the requirement of supporting the algorithm from a SHOULD to a MUST." [RFC2988]
Okay, that's the main-character requirement of the whole section ๐ฅ Upgraded from SHOULD to MUST, periodt ๐
3. Recommended Enhancements โจ
okay bestie, this section is all about the TCP upgrades that are recommended ๐ they make things faster and safer ๐ RFC 1323 and RFC 3168 are the big glow-ups, basically fundamental changes to the protocol ๐ RFC 1323 (based on RFC 1072 and RFC 1185) lets you use high bandwidth-delay product paths way better by adding the mechanisms high-rate transfers need ๐ฅ RFC 3168 is a change to the Internet's architecture where routers tell end-hosts that congestion is growing, and they can do it before packets get forced to drop ๐ฆ Section 3.1 covers the improvements to congestion control and loss recovery from RFC 2581 โจ Section 3.2 gets into refinements that use selective acknowledgments ๐ซถ and Section 3.3 is about stopping forged segments ๐
RFC 1323 S: "TCP Extensions for High Performance" (May 1992)
This document [RFC1323] defines TCP extensions for window scaling, timestamps, and protection against wrapped sequence numbers, so things run efficiently and safely over paths with large bandwidth-delay products ๐ These extensions are commonly found in systems people use today, but they may require manual tuning and configuration ๐ง One issue in this spec that's still under discussion is a modification to the algorithm for estimating the mean RTT when timestamps are used ๐ค
RFC 2675 S: "IPv6 Jumbograms" (August 1999)
okay so IPv6 supports longer datagrams than IPv4 allowed ๐ฆ These are called Jumbograms, and using them with TCP meant changing how TCP handles its MSS and Urgent fields (both 16 bits) ๐งฉ This document [RFC2675] explains those changes. Even though it changes basic header semantics, these changes should only affect the use of very large segments, like IPv6 jumbograms, which are rarely used on the general Internet right now ๐ Supporting the behavior described here does not affect interoperability with other TCP implementations when IPv4 or non-jumbogram IPv6 is used ๐
Now the spicy part: jumbograms are to only be used when it can be guaranteed that all receiving nodes, including each router in the end-to-end path, will support jumbograms. If even a single node that doesn't support jumbograms is attached to a local network, then no host on that network may use jumbograms ๐ญ That's literally why jumbogram use has been so rare, and why this document is considered a performance optimization and not part of TCP over IPv6's basic functionality ๐
RFC 3168 S: "The Addition of Explicit Congestion Notification (ECN) to IP" (September 2001)
This document [RFC3168] defines a way for end hosts to detect congestion before congested routers are forced to discard packets ๐ Congestion notification happens at the IP level, but ECN also needs support at the transport level (for example, in TCP) to echo the bits and adapt the sending rate ๐ช This document updates RFC 793 to define two previously unused flag bits in the TCP header for ECN support ๐ฉ RFC 3540 gives a supplementary (experimental) way to use ECN more securely ๐, and RFC 2884 shares some sample results from using ECN ๐
3.1. Congestion Control and Loss Recovery Extensions
Two of the most important parts of TCP are its congestion control and loss recovery features ๐ง TCP traditionally treats lost packets as indicating congestion-related loss, and it can't tell that apart from loss caused by transmission errors ๐ Even when ECN is in use, congestion control and loss recovery mechanisms are pretty intimately coupled ๐ There are several extensions to both features, and more often than not, one extension applies to both ๐ค In this subsection, we group enhancements to congestion control, loss recovery, or both, which can be performed unilaterally, meaning without negotiating support between endpoints ๐ซ In the next subsection, we group the extensions that specify or rely on the SACK option, which must be negotiated bilaterally ๐ค
TCP implementations should include the enhancements from both subsections so that TCP senders can perform well without regard to the feature sets of other hosts they connect to โจ For example, if SACK use is not successfully negotiated, a host should use the NewReno behavior as a fall back ๐
RFC 3042 S: "Enhancing TCP's Loss Recovery Using Limited Transmit" (January 2001)
Abstract: "This document proposes Limited Transmit, a new Transmission Control Protocol (TCP) mechanism that can be used to more effectively recover lost segments when a connection's congestion window is small, or when a large number of segments are lost in a single transmission window." [RFC3042] Tests from 2004 showed that Limited Transmit was deployed in roughly one third of the web servers tested [MAF04] ๐
RFC 3390 S: "Increasing TCP's Initial Window" (October 2002)
This document [RFC3390] updates RFC 2581 to permit an initial TCP window of three or four segments during the slow-start phase, depending on the segment size ๐ฑ
RFC 3782 S: "The NewReno Modification to TCP's Fast Recovery Algorithm" (April 2004)
This document [RFC3782] specifies a modification to the standard Reno fast recovery algorithm ๐โโ๏ธ A TCP sender can use partial acknowledgments to make inferences about the next segment to send, in situations where SACK would be helpful but isn't available ๐ต๏ธโโ๏ธ It's only a slight modification, but the NewReno behavior can make a significant difference in performance when multiple segments are lost from a single window of data ๐
3.2. SACK-Based Loss Recovery and Congestion Control
The base TCP specification in RFC 793 only provided a simple cumulative acknowledgment mechanism ๐ A selective acknowledgment (SACK) mechanism, though, improves performance when multiple packets are lost from the same flight, more than making up for the modest increase in complexity ๐ A TCP should be expected to implement SACK; however, SACK is a negotiated option and is only used if support is advertised by both sides of a connection ๐ค
RFC 2018 S: "TCP Selective Acknowledgment Options" (October 1996)
This document [RFC2018] defines the basic selective acknowledgment (SACK) mechanism for TCP ๐
RFC 2883 S: "An Extension to the Selective Acknowledgement (SACK) Option for TCP" (July 2000)
This document [RFC2883] extends RFC 2018 to cover the case of acknowledging duplicate segments ๐ช
RFC 3517 S: "A Conservative Selective Acknowledgment (SACK)-based Loss Recovery Algorithm for TCP" (April 2003)
This document [RFC3517] describes a relatively sophisticated algorithm that a TCP sender can use for loss recovery when SACK reports more than one segment lost from a single flight of data ๐งฎ Support for exchanging SACK information is widely implemented, but not all implementations use an algorithm as sophisticated as the one in RFC 3517 ๐คทโโ๏ธ
3.3. Dealing with Forged Segments
By default, TCP has no cryptographic structures to tell legitimate segments apart from ones spoofed by malicious hosts ๐ Spoofing valid segments requires correctly guessing a number of fields ๐ฒ The documents in this subsection describe ways to make that guessing harder, or to stop it from negatively affecting a connection ๐ก๏ธ
The TCPM working group is currently working toward fully understanding and defining mechanisms for preventing spoofing attacks, including both spoofed TCP segments and ICMP datagrams ๐ Some of the solutions being considered rely on TCP modifications, while others rely on security at lower layers (like IPsec) for protection ๐
RFC 1948 I: "Defending Against Sequence Number Attacks" (May 1996)
This document [RFC1948] describes the TCP vulnerability that lets an attacker send forged TCP packets by guessing the initial sequence number in the three-way handshake ๐ฑ Simple defenses against exploitation are then described ๐งฑ Some variation of these is implemented in most currently used operating systems ๐ป
RFC 2385 S: "Protection of BGP Sessions via the TCP MD5 Signature Option" (August 1998)
From document: "This document describes current existing practice for securing BGP against certain simple attacks. It is understood to have security weaknesses against concerted attacks.
This memo describes a TCP extension to enhance security for BGP. It defines a new TCP option for carrying an MD5 digest in a TCP segment. This digest acts like a signature for that segment, incorporating information known only to the connection end points. Since BGP uses TCP as its transport, using this option in the way described in this paper significantly reduces the danger from certain security attacks on BGP." [RFC2385]
TCP MD5 options are currently only used in very limited contexts, mainly for defending BGP exchanges between routers ๐ฃ๏ธ Some deployment notes for those using TCP MD5 are in the later RFC 3562, "Key Management Considerations for the TCP MD5 Signature Option" [RFC3562] ๐ RFC 4278 deprecates the use of TCP MD5 outside BGP [RFC4278] ๐ซ
4. Experimental Extensions โจ
okay so this section is for the RFCs that are still experimental ๐งช but they might become proposed standards later. part of the reason they're still experimental is so people can get real wide-scale experience with them before anyone makes a standards track decision. the hope is that the TCP research community will poke at these RFCs, analyze them, and test them ๐ซถ experimenting is encouraged, but there is not yet formal consensus that these are fully logical and safe behaviors, so be careful ๐ wide-scale deployment of anything using these features should be well thought-out in terms of consequences โ ๏ธ
RFC 2140 I: "TCP Control Block Interdependence" (April 1997)
this one [RFC2140] suggests how TCP connections between the same endpoints might share information, like their congestion control state ๐ง a few operating systems already do this a little, like Linux with its destination cache ๐ง this RFC is technically informational, but the concepts are in experimental use, so it's included here ๐
there's also a related proposal, the Congestion Manager, specified in RFC 3124 [RFC3124] ๐ the idea is to move congestion control outside of individual TCP connections, which is a modification to the core of TCP that also supports sharing information among connections. it's a Proposed Standard, BUT some pieces of the Congestion Manager support architecture haven't been specified yet, and it hasn't really gotten use beyond experimental stacks. so it's not listed among the standard TCP enhancements in this roadmap ๐
RFC 2861 E: "TCP Congestion Window Validation" (June 2000)
this document [RFC2861] suggests shrinking the congestion window over time when no packets are flowing ๐ฅ this is more aggressive than what RFC 2581 says, which is that a TCP sender SHOULD set its congestion window to the initial window after an idle period of an RTO or greater โณ
RFC 3465 E: "TCP Congestion Control with Appropriate Byte Counting (ABC)" (February 2003)
this document [RFC3465] suggests that congestion control use the number of bytes acknowledged instead of the number of acknowledgments received ๐ it's been implemented in Linux ๐ง ABC behaves differently from the standard method when there isn't a one-to-one relationship between data segments and acknowledgments. it still operates within the accepted guidelines, and it's more robust to delayed ACKs and ACK-division [SCWA99][RFC3449] ๐
RFC 3522 E: "The Eifel Detection Algorithm for TCP" (April 2003)
the Eifel detection algorithm [RFC3522] lets a TCP sender detect after the fact whether it entered loss recovery unnecessarily ๐ like a whole "wait, was that even needed??" moment ๐ญ
RFC 3540 E: "Robust Explicit Congestion Notification (ECN) signaling with Nonces" (June 2003)
this document [RFC3540] suggests a modified ECN to address security concerns, and it updates RFC 3168 ๐ very protective energy ๐ซถ
RFC 3649 E: "HighSpeed TCP for Large Congestion Windows" (December 2003)
this document [RFC3649] suggests a modification to TCP's steady-state behavior so it can use very large windows efficiently ๐ big windows, big energy ๐
RFC 3708 E: "Using TCP Duplicate Selective Acknowledgement (DSACKs) and Stream Control Transmission Protocol (SCTP) Duplicate Transmission Sequence Numbers (TSNs) to Detect Spurious Retransmissions" (February 2004)
"TCP and Stream Control Transmission Protocol (SCTP) provide notification of duplicate segment receipt through Duplicate Selective Acknowledgement (DSACKs) and Duplicate Transmission Sequence Number (TSN) notification, respectively. This document presents conservative methods of using this information to identify unnecessary retransmissions for various applications." [RFC3708]
the abstract basically says: TCP and SCTP both tell you about duplicate receipts (DSACKs and duplicate TSNs), and this doc shows careful ways to use that info to spot unnecessary retransmissions ๐ต๏ธโโ๏ธโจ
RFC 3742 E: "Limited Slow-Start for TCP with Large Congestion Windows" (March 2004)
this document [RFC3742] describes a more conservative slow-start behavior ๐ข the goal is to prevent massive packet losses when a connection uses a very large window ๐
RFC 4015 S: "The Eifel Response Algorithm for TCP" (February 2005)
this document [RFC4015] describes the response part of the Eifel algorithm ๐ซ it can be used together with one of several methods for detecting when loss recovery has been spuriously entered, like the Eifel detection algorithm in RFC 3522, the algorithm in RFC 3708, or F-RTO in RFC 4138 ๐งฉ
"Based on an appropriate detection algorithm, the Eifel response algorithm provides a way for a TCP sender to respond to a detected spurious timeout. It adapts the retransmission timer to avoid further spurious timeouts, and can avoid - depending on the detection algorithm - the often unnecessary go-back-N retransmits that would otherwise be sent. In addition, the Eifel response algorithm restores the congestion control state in such a way that packet bursts are avoided."
ok so the abstract says a sender can respond to a detected spurious timeout, adapt its retransmission timer so it doesn't keep timing out spuriously, skip the often-unnecessary go-back-N retransmits (depending on the detection algorithm), and restore congestion control state so packet bursts get avoided ๐ฅน
RFC 4015 is itself a Proposed Standard ๐ the TCPM working group decided to put it in this section of the roadmap document for three reasons:
- RFC 4015 operates on the output of a detection algorithm, and there is currently no available mechanism for that on the standards track.
- The working group wasn't aware of any wide deployment and use of RFC 4015.
- After discussing the known Intellectual Property Rights claims on the techniques described in RFC 4015, the working group agreed this section of the roadmap was an appropriate location. ๐งพ
RFC 4138 E: "Forward RTO-Recovery (F-RTO): An Algorithm for Detecting Spurious Retransmission Timeouts with TCP and the Stream Control Transmission Protocol" (August 2005)
the F-RTO detection algorithm [RFC4138] is another option for inferring spurious retransmission timeouts ๐ the big difference is that, unlike some similar detection methods, F-RTO does not rely on the use of any TCP options ๐
5. Historic Extensions ๐ฐ๏ธ
the RFCs listed here define extensions that have so far failed to get much interest from implementers, or that turned out to be defective for general use ๐ฅฒ very "it didn't catch on" energy
RFC 1106 "TCP Big Window and NAK Options" (June 1989): found defective
this RFC [RFC1106] defined an alternative to the Window Scale option for using large windows, and it described the "negative acknowledgement" or NAK option ๐ช there's a comparison of NAK and SACK methods, plus early discussion of TCP over satellite issues ๐ฐ๏ธ RFC 1110 explains some problems with the approaches in RFC 1106. the options in this document haven't been adopted by the larger community, although NAKs are used in the SCPS-TP adaptation of TCP for satellite and spacecraft use, developed by the Consultative Committee for Space Data Systems (CCSDS) ๐ spacecraft really said "we'll do NAKs" ๐
RFC 1110 "A Problem with the TCP Big Window Option" (August 1989): deprecates RFC 1106
"The TCP Big Window option discussed in RFC 1106 will not work properly in an Internet environment which has both a high bandwidth * delay product and the possibility of disordering and duplicating packets. In such networks, the window size must not be increased without a similar increase in the sequence number space. Therefore, a different approach to big windows should be taken in the Internet." [RFC1110]
so the abstract is basically: the Big Window option from RFC 1106 breaks when you have a high bandwidth-delay product and packets can get reordered or duplicated ๐ the window can't grow without the sequence number space growing too, so the Internet needs a different big-window approach ๐ง
RFC 1146 E "TCP Alternate Checksum Options" (March 1990): lack of interest
this document [RFC1146] defined more robust TCP checksums than the 16-bit ones-complement one in use today ๐งฎ a typo in RFC 1145 got fixed in RFC 1146, otherwise the two documents are the same ๐
RFC 1263 "TCP Extensions Considered Harmful" (October 1991) - lack of interest
this document [RFC1263] argues against "backwards compatible" TCP extensions ๐ โโ๏ธ it specifically calls out some TCP enhancements that were successful, including timestamps, window scaling, PAWS, and SACK ๐ RFC 1263 presents an alternative called "protocol evolution," where several evolutionary versions of TCP would exist on hosts. these distinct versions would be upgrades to each other and could be header-incompatible ๐งฌ
interoperability would be handled by a virtualization layer that picks the right TCP version for a particular connection ๐ช this idea didn't catch on with the community, even though the kind of extensions RFC 1263 called harmful did become super popular ๐คทโโ๏ธ๐
RFC 1379 I "Extending TCP for Transactions -- Concepts" (November 1992): found defective
see RFC 1644 ๐
RFC 1644 E "T/TCP -- TCP Extensions for Transactions Functional Specification" (July 1994): found defective
the inventors of TCP believed cached connection state could be used to get rid of TCP's 3-way handshake, to support two-packet request/response exchanges ๐ค RFCs 1379 [RFC1379] and 1644 [RFC1644] show that this is far from simple ๐ฅด T/TCP also floundered on how easy it made denial-of-service attacks ๐จ one idea T/TCP pioneered is still alive in RFC 2140, which is sharing state across connections ๐
RFC 1693 E "An Extension to TCP: Partial Order Service" (November 1994): lack of interest
this document [RFC1693] defines a TCP extension for applications that don't care about the order in which application-layer objects are received ๐ฆ examples are multimedia and database applications ๐ฌ in practice, those apps either accept the performance loss from TCP's strict ordering or use more specialized transport protocols ๐ ๏ธ
6. Support Documents ๐
this section has several classes of documents that don't necessarily define current protocol behaviors, but are still super interesting for TCP implementers ๐ค Section 6.1 covers foundational RFCs that help modern readers understand the principles behind TCP's behaviors and how it developed over the years ๐ฑ the documents in Section 6.2 give advice on using TCP in network situations that are harder than typical wired links ๐ง๏ธ some implementation notes live in Section 6.3 ๐งโ๐ป the TCP Management Information Bases are described in Section 6.4 ๐ RFCs that describe tools for testing and debugging TCP implementations, or that contain high-level tutorials on the protocol, are listed Section 6.5 ๐งฐ and Section 6.6 lists case studies that explored TCP performance ๐
6.1. Foundational Works ๐โจ
okay bestie, this section is the "where did all of this come from" lore ๐ง Most of these docs repeat stuff from the standards we already covered, BUT some of them go way deeper into the problem and why it matters. RFCs 813 - 817 are called the "Dave Clark Five" and they describe some early problems and solutions. (RFC 815 only covers reassembly of IP fragments, so it's not part of this TCP roadmap ๐)
RFC 813: "Window and Acknowledgement Strategy in TCP" (July 1982) ๐ธ
This one [RFC0813] has an early chat about Silly Window Syndrome and how to avoid it. It also explains why delayed acknowledgments are a thing and how to use them.
RFC 814: "Name, Addresses, Ports, and Routes" (July 1982) ๐บ๏ธ
This doc [RFC0814] gives suggestions and guidance for designing the tables and algorithms that keep track of all the different identifiers inside a TCP/IP implementation. Very organized, very iconic ๐
RFC 816: "Fault Isolation and Recovery" (July 1982) ๐จ
In this one [RFC0816], we get TCP's response to signs of network trouble, like timeouts or received ICMP messages. Drama, but make it protocol ๐ญ
RFC 817: "Modularity and Efficiency in Protocol Implementation" (July 1982) ๐งฉ
This doc [RFC0817] has implementation suggestions that are general and not TCP-specific. BUT they've been used to build TCP implementations and to describe the performance effects of how the layers in the Internet stack interact. Multi-tasking queen ๐
RFC 872: "TCP-ON-A-LAN" (September 1982) ๐
The conclusion is so satisfying: "The sometimes-expressed fear that using TCP on a local net is a bad idea is unfounded." [RFC0872] ๐
RFC 896: "Congestion Control in IP/TCP Internetworks" (January 1984) ๐ฆ
This one [RFC0896] shares some early experiences with congestion collapse, plus some first ideas on how to avoid it using congestion control in TCP. The OG origin story ๐
RFC 964: "Some Problems with the Specification of the Military Standard Transmission Control Protocol" (November 1985) ๐
This doc [RFC0964] points out several specification bugs in the US Military's MIL-STD-1778 document, which was meant to be the successor to RFC 793. It's a great reminder of how hard specification writing is, even when you're working from existing documents! ๐
RFC 1072: "TCP Extensions for Long-Delay Paths" (October 1988) ๐ฐ๏ธ
This one [RFC1072] has early explanations of mechanisms that were later described in RFCs 1323 and 2018. RFC 1072 is obsoleted by those two, so they're the ones to read ๐ฆ
RFC 1185: "TCP Extension for High-Speed Paths" (October 1990) โก
This doc [RFC1185] builds on RFC 1072 to describe more advanced strategies for dealing with sequence number wrapping and detecting duplicates from earlier connections. It was obsoleted by RFC 1323 ๐
RFC 2914 B: "Congestion Control Principles" (September 2000) ๐ง
This one [RFC2914] makes the case for end-to-end congestion control, which prevents congestion collapse and provides fairness to TCP. Principles era, bestie ๐ซถ
6.2. Difficult Network Environments ๐๐ฐ๏ธ
okay so, as the internetworking field has explored wireless, satellite, cellular telephone, and other kinds of link-layer technologies, a big pile of work has built up on making TCP perform better over those links ๐ The RFCs in this section cover some of these more challenging network environments and how TCP interacts with them. Lowkey the most chaotic part of the whole roadmap ๐ญ
RFC 2488 B: "Enhancing TCP Over Satellite Channels using Standard Mechanisms" (January 1999) ๐ฐ๏ธ
From the abstract: "While TCP works over satellite channels there are several IETF standardized mechanisms that enable TCP to more effectively utilize the available capacity of the network path. This document outlines some of these TCP mitigations. At this time, all mitigations discussed in this document are IETF standards track mechanisms (or are compliant with IETF standards)." [RFC2488] โจ
RFC 2757 I: "Long Thin Networks" (January 2000) ๐งต
This doc [RFC2757] discusses several ways to improve TCP performance over long thin networks, like geosynchronous satellite links. It develops a particular set of TCP options that should work well in those environments and be safe to use on the global Internet. Safe AND effective, iconic ๐ The implications of these environments are discussed further in RFC 3150 and RFC 3155. Where those overlap with RFC 2757, those two docs should be preferred ๐
RFC 2760 I: "Ongoing TCP Research Related to Satellites" (February 2000) ๐ฌ
This one [RFC2760] talks about the advantages and disadvantages of several experimental ways to improve TCP performance over long-delay or error-prone paths. The list is LONG ๐ญ It includes T/TCP, larger initial windows, byte counting, delayed acknowledgments, slow start thresholds, NewReno and SACK-based loss recovery, FACK [MM96], ECN, various corruption-detection mechanisms, congestion avoidance changes for fairness, use of multiple parallel flows, pacing, header compression, state sharing, and ACK congestion control, filtering, and reconstruction. Although RFC 2488 looks at standard extensions, this doc focuses on more experimental performance enhancements ๐งช
RFC 3135 I: "Performance Enhancing Proxies Intended to Mitigate Link-Related Degradations" (June 2001) ๐งฑ
From the abstract: "This document is a survey of Performance Enhancing Proxies (PEPs) often employed to improve degraded TCP performance caused by characteristics of specific link environments, for example, in satellite, wireless WAN, and wireless LAN environments. Different types of Performance Enhancing Proxies are described as well as the mechanisms used to improve performance." [RFC3135] ๐
RFC 3150 B: "End-to-end Performance Implications of Slow Links" (July 2001) ๐ข
From the abstract: "This document makes performance-related recommendations for users of network paths that traverse "very low bit-rate" links....This recommendation may be useful in any network where hosts can saturate available bandwidth, but the design space for this recommendation explicitly includes connections that traverse 56 Kb/second modem links or 4.8 Kb/second wireless access links - both of which are widely deployed." [RFC3150] ๐ฐ๏ธ
RFC 3155 B: "End-to-end Performance Implications of Links with Errors" (August 2001) ๐
From the abstract: "This document discusses the specific TCP mechanisms that are problematic in environments with high uncorrected error rates, and discusses what can be done to mitigate the problems without introducing intermediate devices into the connection." [RFC3155] ๐งฉ
RFC 3366: "Advice to link designers on link Automatic Repeat reQuest (ARQ)" (August 2002) ๐
From the abstract: "This document provides advice to the designers of digital communication equipment and link-layer protocols employing link-layer Automatic Repeat reQuest (ARQ) techniques. This document presumes that the designers wish to support Internet protocols, but may be unfamiliar with the architecture of the Internet and with the implications of their design choices for the performance and efficiency of Internet traffic carried over their links." [RFC3366] ๐
RFC 3449 B: "TCP Performance Implications of Network Path Asymmetry" (December 2002) โ๏ธ
From the abstract: "This document describes TCP performance problems that arise because of asymmetric effects. These problems arise in several access networks, including bandwidth-asymmetric networks and packet radio subnetworks, for different underlying reasons. However, the end result on TCP performance is the same in both cases: performance often degrades significantly because of imperfection and variability in the ACK feedback from the receiver to the sender."
"The document details several mitigations to these effects, which have either been proposed or evaluated in the literature, or are currently deployed in networks." [RFC3449] ๐ซ
RFC 3481 B: "TCP over Second (2.5G) and Third (3G) Generation Wireless Networks" (February 2003) ๐ฑ
From the abstract: "This document describes a profile for optimizing TCP to adapt so that it handles paths including second (2.5G) and third (3G) generation wireless networks." [RFC3481] ๐ถ
RFC 3819 B: "Advice for Internet Subnetwork Designers" (July 2004) ๐งโ๐จ
This one [RFC3819] describes how some particular lower-layer behaviors can hurt TCP performance. It also gives guidance on designing lower-layer networks and protocols that are amicable to TCP. Designers, this one's for you ๐ฅฐ
6.3. Implementation Advice ๐ ๏ธ๐
this part is basically the "how do I actually build this without it going wrong" corner ๐
RFC 879: "The TCP Maximum Segment Size and Related Topics" (November 1983) ๐
From the abstract: "This memo discusses the TCP Maximum Segment Size Option and related topics. The purposes is to clarify some aspects of TCP and its interaction with IP. This memo is a clarification to the TCP specification, and contains information that may be considered as 'advice to implementers'." [RFC0879] ๐ก
RFC 1071: "Computing the Internet Checksum" (September 1988) โ
This doc [RFC1071] lists a bunch of implementation techniques for efficiently computing the Internet checksum (the one TCP uses) ๐งฎ
RFC 1624 I: "Computation of the Internet Checksum via Incremental Update" (May 1994) ๐
Updating the Internet checksum incrementally is useful to routers when they update IP checksums. Some middleboxes that alter TCP headers may also be able to update the TCP checksum incrementally. This doc [RFC1624] expands on the explanation of the incremental update procedure in RFC 1071 ๐ง
RFC 1936 I: "Implementing the Internet Checksum in Hardware" (April 1996) ๐
This one [RFC1936] describes why you'd implement the Internet checksum in hardware instead of software, and it gives an implementation example โ๏ธ
RFC 2525 I: "Known TCP Implementation Problems" (March 1999) ๐
From the abstract: "This memo catalogs a number of known TCP implementation problems. The goal in doing so is to improve conditions in the existing Internet by enhancing the quality of current TCP/IP implementations." [RFC2525] ๐งน
RFC 2923 I: "TCP Problems with Path MTU Discovery" (September 2000) ๐ณ๏ธ
From the abstract: "This memo catalogs several known Transmission Control Protocol (TCP) implementation problems dealing with Path Maximum Transmission Unit Discovery (PMTUD), including the long-standing black hole problem, stretch acknowlegements (ACKs) due to confusion between Maximum Segment Size (MSS) and segment size, and MSS advertisement based on PMTU." [RFC2923] ๐ซ
RFC 3360 B: "Inappropriate TCP Resets Considered Harmful" (August 2002) ๐ โโ๏ธ
This one [RFC3360] is a plea that firewall vendors stop sending gratuitous TCP RST (Reset) packets when unassigned TCP header bits are used. That practice blocks desirable extension and evolution of the protocol, so it's potentially harmful to the future of the Internet ๐ค
RFC 3493 I: "Basic Socket Interface Extensions for IPv6" (February 2003) ๐๐
This doc [RFC3493] describes the de facto standard sockets API for programming with TCP. It's implemented nearly everywhere in modern operating systems and programming languages, so it's basically everywhere ๐
6.4. Management Information Bases ๐
Okay so the very first MIB module for Simple Network Management Protocol (SNMP) was defined in RFC 1066 and its update, RFC 1156 ๐. It was one giant monolithic MIB module called MIB-I, and it evolved into MIB-II in RFC 1213. Then everyone realized one monolithic module just wasn't scalable with how many and how broad the MIB data definitions were getting ๐ญ. So they defined additional MIB modules and split off the parts of MIB-II that needed to evolve. Eventually the remaining parts of MIB-II got split off too, and the TCP-specific part is documented in RFC 2012 โจ.
RFC 2012 got obsoleted by RFC 4022, which is the primary TCP MIB document today ๐. MIB-I (RFC 1156) was obsoleted by the MIB-II spec in RFC 1213. If you're a current TCP implementer, RFC 4022 should be supported ๐ .
Here's the whole lineup, bestie ๐ธ:
- RFC 1066: "Management Information Base for Network Management of TCP/IP-based Internets" (August 1988)
- RFC 1156 S: "Management Information Base for Network Management of TCP/IP-based Internets" (May 1990)
- RFC 1213 S: "Management Information Base for Network Management of TCP/IP-based Internets: MIB-II" (March 1991)
- RFC 2012 S: "SNMPv2 Management Information Base for the Transmission Control Protocol using SMIv2" (November 1996)
- RFC 2452 S: "IP Version 6 Management Information Base for the Transmission Control Protocol" (December 1998)
- This document [RFC2452] augments RFC 2012 by adding an IPv6-specific connection table. The rest of 2012 holds for any IP version. RFC 2012 is now obsoleted by RFC 4022.
- Although it is a standards track document, RFC 2452 is considered a historic mistake by the MIB community ๐. It is based on the idea of parallel IPv4 and IPv6 structures. Although IPv6 requires new structures, the community decided to define a single generic structure for both IPv4 and IPv6. This will aid in definition, implementation, and transition between IPv4 and IPv6 ๐ง.
- RFC 4022 S: "Management Information Base for the Transmission Control Protocol (TCP)" (March 2005)
6.5. Tools and Tutorials ๐ ๏ธ
- RFC 1180 I: "TCP/IP Tutorial" (January 1991)
- This document [RFC1180] is an extremely brief overview of the TCP/IP protocol suite as a whole. It explains how and where TCP fits in.
- RFC 1470 I: "FYI on a Network Management Tool Catalog: Tools for Monitoring and Debugging TCP/IP Internets and Interconnected Devices" (June 1993)
- A few of the tools this document [RFC1470] describes are still maintained and in use today, like ttcp and tcpdump ๐. However, many of the tools don't relate specifically to TCP and are no longer used or easily available.
- RFC 2398 I: "Some Testing Tools for TCP Implementors" (August 1998)
- This document [RFC2398] describes a number of TCP packet generation and analysis tools. Some of these are no longer readily available or widely used, but for the most part they are still relevant and usable ๐.
6.6. Case Studies ๐
- RFC 1337 I: "TIME-WAIT Assassination Hazards in TCP" (May 1992)
- This document [RFC1337] points out a problem with acting on received reset segments while one is in the TIME-WAIT state. The main recommendation is that hosts in TIME-WAIT ignore resets. This recommendation might not currently be widely implemented ๐.
- RFC 2415 I: "Simulation Studies of Increased Initial TCP Window Size" (September 1998)
- This document [RFC2415] presents results of some simulations using TCP initial windows greater than 1 segment. The analysis indicates that user-perceived performance can be improved by increasing the initial window to 3 segments โญ.
- RFC 2416 I: "When TCP Starts Up With Four Packets Into Only Three Buffers" (September 1998)
- This document [RFC2416] uses simulation results to clear up some concerns about using an initial window of 4 segments when the network path has less provisioning ๐.
- RFC 2884 I: "Performance Evaluation of Explicit Congestion Notification (ECN) in IP Networks" (July 2000)
- This document [RFC2884] describes experimental results showing improvements to the performance of both short- and long-lived connections due to ECN ๐ฅ.
7. Undocumented TCP Features ๐ง
There are a few important implementation tactics for TCP that haven't been described in any RFC yet ๐. This roadmap is mainly about mapping the TCP RFCs, but this section is included because an implementer needs to be aware of these important issues.
SYN Cookies ๐ช
A mechanism known as "SYN cookies" is widely used to thwart TCP SYN flooding attacks ๐ซ. In these attacks, an attacker sends a flood of SYNs to a victim but fails to complete the 3-way handshake, and the result is exhaustion of resources at the server ๐. The SYN cookie mechanism lets the server return a cleverly chosen initial sequence number that has all the required state for the secure completion of the handshake. The server can then avoid saving connection state during the 3-way handshake and thus survive a SYN flooding attack ๐ก๏ธ.
A web search for "SYN cookies" will reveal a number of useful descriptions of this mechanism, although there is currently no RFC on the matter ๐.
Header Prediction โก
Header prediction is a trick to speed up the processing of segments ๐๏ธ. Van Jacobson and Mike Karels developed the technique in the late 1980s. The basic idea is that some processing time can be saved when most of a segment's fields can be predicted from previous segments. A good description was sent to the TCP-IP mailing list by Van Jacobson on March 9, 1988:
Quite a bit of the speedup comes from an algorithm that we
('we' refers to collaborator Mike Karels and myself) are
calling "header prediction". The idea is that if you're in the
middle of a bulk data transfer and have just seen a packet, you
know what the next packet is going to look like: It will look
just like the current packet with either the sequence number or
ack number updated (depending on whether you're the sender or
receiver). Combining this with the "Use hints" epigram from
Butler Lampson's classic "Epigrams for System Designers", you
start to think of the tcp state (rcv.nxt, snd.una, etc.) as
"hints" about what the next packet should look like.
If you arrange those "hints" so they match the layout of a tcp
packet header, it takes a single 14-byte compare to see if your
prediction is correct (3 longword compares to pick up the send
& ack sequence numbers, header length, flags and window, plus a
short compare on the length). If the prediction is correct,
there's a single test on the length to see if you're the sender
or receiver followed by the appropriate processing. E.g., if
the length is non-zero (you're the receiver), checksum and
append the data to the socket buffer then wake any process
that's sleeping on the buffer. Update rcv.nxt by the length of
this packet (this updates your "prediction" of the next
packet). Check if you can handle another packet the same size
as the current one. If not, set one of the unused flag bits in
your header prediction to guarantee that the prediction will
fail on the next packet and force you to go through full
protocol processing. Otherwise, you're done with this packet.
So, the *total* tcp protocol processing, exclusive of
checksumming, is on the order of 6 compares and an add.
8. Security Considerations ๐
This document introduces no new security considerations ๐ซถ. Each RFC listed in this document attempts to address the security considerations of the specification it contains.
9. Acknowledgments ๐
This document grew out of a discussion on the end2end-interest mailing list, the public list of the End-to-End Research Group of the IRTF ๐. It then continued development under the IETF's TCP Maintenance and Minor Extensions (TCPM) working group. Big thanks to Joe Touch, Reiner Ludwig, Pekka Savola, Gorry Fairhurst, and Sally Floyd for their contributions, in particular ๐. The chairs of the TCPM working group, Mark Allman and Ted Faber, were instrumental in developing this document โจ. Keith McCloghrie also provided some useful notes and clarification on the various MIB-related RFCs ๐.
10. Informative References ๐
10.1. Basic Functionality
[RFC0793] Postel, J., "Transmission Control Protocol", STD 7, RFC
793, September 1981.
[RFC1122] Braden, R., "Requirements for Internet Hosts -
Communication Layers", STD 3, RFC 1122, October 1989.
[RFC2026] Bradner, S., "The Internet Standards Process -- Revision
3", BCP 9, RFC 2026, October 1996.
[RFC2460] Deering, S. and R. Hinden, "Internet Protocol, Version 6
(IPv6) Specification", RFC 2460, December 1998.
[RFC2474] Nichols, K., Blake, S., Baker, F., and D. Black,
"Definition of the Differentiated Services Field (DS
Field) in the IPv4 and IPv6 Headers", RFC 2474, December
1998.
[RFC2581] Allman, M., Paxson, V., and W. Stevens, "TCP Congestion
Control", RFC 2581, April 1999.
[RFC2675] Borman, D., Deering, S., and R. Hinden, "IPv6 Jumbograms",
RFC 2675, August 1999.
[RFC2873] Xiao, X., Hannan, A., Paxson, V., and E. Crabbe, "TCP
Processing of the IPv4 Precedence Field", RFC 2873, June
2000.
[RFC2988] Paxson, V. and M. Allman, "Computing TCP's Retransmission
Timer", RFC 2988, November 2000.
10.2. Recommended Enhancements โจ
okay these are the upgrades that make TCP lowkey iconic ๐ here's the list bestie ๐ซถ
- [RFC1323] Jacobson, V., Braden, R., and D. Borman, "TCP Extensions for High Performance", RFC 1323, May 1992.
- [RFC1948] Bellovin, S., "Defending Against Sequence Number Attacks", RFC 1948, May 1996.
- [RFC2018] Mathis, M., Mahdavi, J., Floyd, S., and A. Romanow, "TCP Selective Acknowledgment Options", RFC 2018, October 1996.
- [RFC2385] Heffernan, A., "Protection of BGP Sessions via the TCP MD5 Signature Option", RFC 2385, August 1998.
- [RFC2883] Floyd, S., Mahdavi, J., Mathis, M., and M. Podolsky, "An Extension to the Selective Acknowledgement (SACK) Option for TCP", RFC 2883, July 2000.
- [RFC3042] Allman, M., Balakrishnan, H., and S. Floyd, "Enhancing TCP's Loss Recovery Using Limited Transmit", RFC 3042, January 2001.
- [RFC3168] Ramakrishnan, K., Floyd, S., and D. Black, "The Addition of Explicit Congestion Notification (ECN) to IP", RFC 3168, September 2001.
- [RFC3390] Allman, M., Floyd, S., and C. Partridge, "Increasing TCP's Initial Window", RFC 3390, October 2002.
- [RFC3517] Blanton, E., Allman, M., Fall, K., and L. Wang, "A Conservative Selective Acknowledgment (SACK)-based Loss Recovery Algorithm for TCP", RFC 3517, April 2003.
- [RFC3562] Leech, M., "Key Management Considerations for the TCP MD5 Signature Option", RFC 3562, July 2003.
- [RFC3782] Floyd, S., Henderson, T., and A. Gurtov, "The NewReno Modification to TCP's Fast Recovery Algorithm", RFC 3782, April 2004.
- [RFC4015] Ludwig, R. and A. Gurtov, "The Eifel Response Algorithm for TCP", RFC 4015, February 2005.
- [RFC4278] Bellovin, S. and A. Zinin, "Standards Maturity Variance Regarding the TCP MD5 Signature Option (RFC 2385) and the BGP-4 Specification", RFC 4278, January 2006.
10.3. Experimental Extensions ๐งช
these ones are still in the lab being tested, so think of them as the cool experiments ๐ฆ
- [RFC2140] Touch, J., "TCP Control Block Interdependence", RFC 2140, April 1997.
- [RFC2861] Handley, M., Padhye, J., and S. Floyd, "TCP Congestion Window Validation", RFC 2861, June 2000.
- [RFC3124] Balakrishnan, H. and S. Seshan, "The Congestion Manager", RFC 3124, June 2001.
- [RFC3465] Allman, M., "TCP Congestion Control with Appropriate Byte Counting (ABC)", RFC 3465, February 2003.
- [RFC3522] Ludwig, R. and M. Meyer, "The Eifel Detection Algorithm for TCP", RFC 3522, April 2003.
- [RFC3540] Spring, N., Wetherall, D., and D. Ely, "Robust Explicit Congestion Notification (ECN) Signaling with Nonces", RFC 3540, June 2003.
- [RFC3649] Floyd, S., "HighSpeed TCP for Large Congestion Windows", RFC 3649, December 2003.
- [RFC3708] Blanton, E. and M. Allman, "Using TCP Duplicate Selective Acknowledgement (DSACKs) and Stream Control Transmission Protocol (SCTP) Duplicate Transmission Sequence Numbers (TSNs) to Detect Spurious Retransmissions", RFC 3708, February 2004.
- [RFC3742] Floyd, S., "Limited Slow-Start for TCP with Large Congestion Windows", RFC 3742, March 2004.
- [RFC4138] Sarolahti, P. and M. Kojo, "Forward RTO-Recovery (F-RTO): An Algorithm for Detecting Spurious Retransmission Timeouts with TCP and the Stream Control Transmission Protocol (SCTP)", RFC 4138, August 2005.
10.4. Historic Extensions ๐ฐ๏ธ
these are the vintage pieces. they're retired now, but they still have main character history ๐
- [RFC1106] Fox, R., "TCP big window and NAK options", RFC 1106, June 1989.
- [RFC1110] McKenzie, A., "Problem with the TCP big window option", RFC 1110, August 1989.
- [RFC1146] Zweig, J. and C. Partridge, "TCP alternate checksum options", RFC 1146, March 1990.
- [RFC1263] O'Malley, S. and L. Peterson, "TCP Extensions Considered Harmful", RFC 1263, October 1991.
- [RFC1379] Braden, R., "Extending TCP for Transactions -- Concepts", RFC 1379, November 1992.
- [RFC1644] Braden, R., "T/TCP -- TCP Extensions for Transactions Functional Specification", RFC 1644, July 1994.
- [RFC1693] Connolly, T., Amer, P., and P. Conrad, "An Extension to TCP : Partial Order Service", RFC 1693, November 1994.
10.5. Support Documents ๐
and last but not least, the support squad ๐ซถ these docs back up the whole TCP story, and some of them are literally older than me ๐
- [RFC0813] Clark, D., "Window and Acknowledgement Strategy in TCP", RFC 813, July 1982.
- [RFC0814] Clark, D., "Name, addresses, ports, and routes", RFC 814, July 1982.
- [RFC0816] Clark, D., "Fault isolation and recovery", RFC 816, July 1982.
- [RFC0817] Clark, D., "Modularity and efficiency in protocol implementation", RFC 817, July 1982.
- [RFC0872] Padlipsky, M., "TCP-on-a-LAN", RFC 872, September 1982.
- [RFC0879] Postel, J., "TCP maximum segment size and related topics", RFC 879, November 1983.
- [RFC0896] Nagle, J., "Congestion control in IP/TCP internetworks", RFC 896, January 1984.
- [RFC0964] Sidhu, D. and T. Blumer, "Some problems with the specification of the Military Standard Transmission Control Protocol", RFC 964, November 1985.
- [RFC1066] McCloghrie, K. and M. Rose, "Management Information Base for Network Management of TCP/IP-based internets", RFC 1066, August 1988.
- [RFC1071] Braden, R., Borman, D., and C. Partridge, "Computing the Internet checksum", RFC 1071, September 1988.
- [RFC1072] Jacobson, V. and R. Braden, "TCP extensions for long-delay paths", RFC 1072, October 1988.
- [RFC1156] McCloghrie, K. and M. Rose, "Management Information Base for network management of TCP/IP-based internets", RFC 1156, May 1990.
- [RFC1180] Socolofsky, T. and C. Kale, "TCP/IP tutorial", RFC 1180, January 1991.
- [RFC1185] Jacobson, V., Braden, B., and L. Zhang, "TCP Extension for High-Speed Paths", RFC 1185, October 1990.
- [RFC1213] McCloghrie, K. and M. Rose, "Management Information Base for Network Management of TCP/IP-based internets: MIB-II", STD 17, RFC 1213, March 1991.
- [RFC1337] Braden, R., "TIME-WAIT Assassination Hazards in TCP", RFC 1337, May 1992.
- [RFC1470] Enger, R. and J. Reynolds, "FYI on a Network Management Tool Catalog: Tools for Monitoring and Debugging TCP/IP Internets and Interconnected Devices", FYI 2, RFC 1470, June 1993.
- [RFC1624] Rijsinghani, A., "Computation of the Internet Checksum via Incremental Update", RFC 1624, May 1994.
- [RFC1936] Touch, J. and B. Parham, "Implementing the Internet Checksum in Hardware", RFC 1936, April 1996.
- [RFC2012] McCloghrie, K., "SNMPv2 Management Information Base for the Transmission Control Protocol using SMIv2", RFC 2012, November 1996.
- [RFC2398] Parker, S. and C. Schmechel, "Some Testing Tools for TCP Implementors", RFC 2398, August 1998.
- [RFC2415] Poduri, K. and K. Nichols, "Simulation Studies of Increased Initial TCP Window Size", RFC 2415, September 1998.
- [RFC2416] Shepard, T. and C. Partridge, "When TCP Starts Up With Four Packets Into Only Three Buffers", RFC 2416, September 1998.
- [RFC2452] Daniele, M., "IP Version 6 Management Information Base for the Transmission Control Protocol", RFC 2452, December 1998.
- [RFC2488] Allman, M., Glover, D., and L. Sanchez, "Enhancing TCP Over Satellite Channels using Standard Mechanisms", BCP 28, RFC 2488, January 1999.
- [RFC2525] Paxson, V., Allman, M., Dawson, S., Fenner, W., Griner, J., Heavens, I., Lahey, K., Semke, J., and B. Volz, "Known TCP Implementation Problems", RFC 2525, March 1999.
- [RFC2757] Montenegro, G., Dawkins, S., Kojo, M., Magret, V., and N. Vaidya, "Long Thin Networks", RFC 2757, January 2000.
- [RFC2760] Allman, M., Dawkins, S., Glover, D., Griner, J., Tran, D., Henderson, T., Heidemann, J., Touch, J., Kruse, H., Ostermann, S., Scott, K., and J. Semke, "Ongoing TCP Research Related to Satellites", RFC 2760, February 2000.
- [RFC2884] Hadi Salim, J. and U. Ahmed, "Performance Evaluation of Explicit Congestion Notification (ECN) in IP Networks", RFC 2884, July 2000.
- [RFC2914] Floyd, S., "Congestion Control Principles", BCP 41, RFC 2914, September 2000.
- [RFC2923] Lahey, K., "TCP Problems with Path MTU Discovery", RFC 2923, September 2000.
- [RFC3135] Border, J., Kojo, M., Griner, J., Montenegro, G., and Z. Shelby, "Performance Enhancing Proxies Intended to Mitigate Link-Related Degradations", RFC 3135, June 2001.
- [RFC3150] Dawkins, S., Montenegro, G., Kojo, M., and V. Magret, "End-to-end Performance Implications of Slow Links", BCP 48, RFC 3150, July 2001.
- [RFC3155] Dawkins, S., Montenegro, G., Kojo, M., Magret, V., and N. Vaidya, "End-to-end Performance Implications of Links with Errors", BCP 50, RFC 3155, August 2001.
- [RFC3360] Floyd, S., "Inappropriate TCP Resets Considered Harmful", BCP 60, RFC 3360, August 2002.
- [RFC3366] Fairhurst, G. and L. Wood, "Advice to link designers on link Automatic Repeat reQuest (ARQ)", BCP 62, RFC 3366, August 2002.
- [RFC3449] Balakrishnan, H., Padmanabhan, V., Fairhurst, G., and M. Sooriyabandara, "TCP Performance Implications of Network Path Asymmetry", BCP 69, RFC 3449, December 2002.
- [RFC3481] Inamura, H., Montenegro, G., Ludwig, R., Gurtov, A., and F. Khafizov, "TCP over Second (2.5G) and Third (3G) Generation Wireless Networks", BCP 71, RFC 3481, February 2003.
- [RFC3493] Gilligan, R., Thomson, S., Bound, J., McCann, J., and W. Stevens, "Basic Socket Interface Extensions for IPv6", RFC 3493, February 2003.
- [RFC3819] Karn, P., Bormann, C., Fairhurst, G., Grossman, D., Ludwig, R., Mahdavi, J., Montenegro, G., Touch, J., and L. Wood, "Advice for Internet Subnetwork Designers", BCP 89, RFC 3819, July 2004.
- [RFC4022] Raghunarayan, R., "Management Information Base for the Transmission Control Protocol (TCP)", RFC 4022, March 2005.
10.6. Informative References Outside the RFC Series โจ
okay bestie, these are the papers the whole doc leans on, and they're not RFCs ๐ง so they live out here in the "outside the RFC series" zone. some are super old (1987-1992!) and they're the classics behind congestion control and RTT estimation ๐ฅ here's the full list, copied exactly so you can go find them:
[JK92] Jacobson, V. and M. Karels, "Congestion Avoidance and
Control", This paper is a revised version of [Jac88], that
includes an additional appendix. This paper has not been
traditionally published, but is currently available at
ftp://ftp.ee.lbl.gov/papers/congavoid.ps.Z. 1992.
[Jac88] Jacobson, V., "Congestion Avoidance and Control", ACM
SIGCOMM 1988 Proceedings, in ACM Computer Communication
Review, 18 (4), pp. 314-329, August 1988.
[KP87] Karn, P. and C. Partridge, "Round Trip Time Estimation",
ACM SIGCOMM 1987 Proceedings, in ACM Computer
Communication Review, 17 (5), pp. 2-7, August 1987
[MAF04] Medina, A., Allman, M., and S. Floyd, "Measuring the
Evolution of Transport Protocols in the Internet", ACM
Computer Communication Review, 35 (2), April 2005.
[MM96] Mathis, M. and J. Mahdavi, "Forward Acknowledgement:
Refining TCP Congestion Control", ACM SIGCOMM 1996
Proceedings, in ACM Computer Communication Review 26 (4),
pp. 281-292, October 1996.
[SCWA99] Savage, S., Cardwell, N., Wetherall, D., and T. Anderson,
"TCP Congestion Control with a Misbehaving Receiver", ACM
Computer Communication Review, 29 (5), pp. 71-78, October
1999.
[JK92] is basically the revised, extra-appendix version of [Jac88], and it was never formally published, just floating around as a PostScript file at the LBL FTP site. the rest are the conference and journal papers that wrote the story of TCP congestion control, Forward Acknowledgement, and misbehaving receivers ๐ lowkey iconic reading list.
Authors' Addresses
the people who wrote this doc, with where to find them ๐ (phone numbers and emails kept exactly as they were):
Martin H. Duke
The Boeing Company
PO Box 3707, MC 7L-49
Seattle, WA 98124-2207
Phone: 425-373-2852
EMail: martin.duke@boeing.com
Robert Braden
USC Information Sciences Institute
Marina del Rey, CA 90292-6695
Phone: 310-448-9173
EMail: braden@isi.edu
Wesley M. Eddy
Verizon Federal Network Systems
21000 Brookpark Rd, MS 54-5
Cleveland, OH 44135
Phone: 216-433-6682
EMail: weddy@grc.nasa.gov
Ethan Blanton
Purdue University Computer Science
250 N. University St.
West Lafayette, IN 47907
EMail: eblanton@cs.purdue.edu
Full Copyright Statement
okay the legal bit, but make it quick ๐ the whole thing is copyright The Internet Society (2006) ๐ธ this document falls under the rights, licenses and restrictions in BCP 78, and apart from what that says, the authors keep all their rights.
the doc is provided on an "AS IS" basis, and the contributor, the organisation they represent or are sponsored by (if any), the Internet Society, and the Internet Engineering Task Force all disclaim every warranty, express or implied. that includes no promise that using the info won't infringe anyone's rights, and no implied warranties of merchantability or fitness for a particular purpose. so it's on you to decide if it fits your use ๐
Intellectual Property
the IETF doesn't take a side on whether any IPR or other rights claimed around this tech are valid or how far they reach, and whether licences are available or not ๐ฆ it also hasn't gone hunting for those rights on its own. if you want the procedures on rights in RFC documents, check BCP 78 and BCP 79.
copies of IPR disclosures sent to the IETF Secretariat, any assurances of licences that will be available, and the results of any attempt to get a general licence or permission for implementers or users are all in the IETF online IPR repository at http://www.ietf.org/ipr ๐
if you know about any copyrights, patents, patent applications, or other proprietary rights that might cover tech needed to implement this standard, tell the IETF at ietf-ipr@ietf.org โจ they really want to hear it.
Acknowledgement
funding for the RFC Editor function comes from the IETF Administrative Support Activity (IASA) ๐ซถ the end of the doc, bestie, and we made it ๐ญ๐
๐ฆ where this page comes from
- ietf: rfc4614 2006-09
- ๐ girlified by claude-haiku-5-5 on : a language model's rewrite of the original, under its terms