summaryrefslogtreecommitdiff
path: root/doc/rfc/rfc1263.txt
diff options
context:
space:
mode:
authorThomas Voss <mail@thomasvoss.com> 2024-11-27 20:54:24 +0100
committerThomas Voss <mail@thomasvoss.com> 2024-11-27 20:54:24 +0100
commit4bfd864f10b68b71482b35c818559068ef8d5797 (patch)
treee3989f47a7994642eb325063d46e8f08ffa681dc /doc/rfc/rfc1263.txt
parentea76e11061bda059ae9f9ad130a9895cc85607db (diff)
doc: Add RFC documents
Diffstat (limited to 'doc/rfc/rfc1263.txt')
-rw-r--r--doc/rfc/rfc1263.txt1067
1 files changed, 1067 insertions, 0 deletions
diff --git a/doc/rfc/rfc1263.txt b/doc/rfc/rfc1263.txt
new file mode 100644
index 0000000..55b6e39
--- /dev/null
+++ b/doc/rfc/rfc1263.txt
@@ -0,0 +1,1067 @@
+
+
+
+
+
+
+Network Working Group S. O'Malley
+Request for Comments: 1263 L. Peterson
+ University of Arizona
+ October 1991
+
+
+ TCP EXTENSIONS CONSIDERED HARMFUL
+
+
+Status of this Memo
+
+ This memo provides information for the Internet community. It does
+ not specify an Internet standard. Distribution of this document is
+ unlimited.
+
+Abstract
+
+ This RFC comments on recent proposals to extend TCP. It argues that
+ the backward compatible extensions proposed in RFC's 1072 and 1185
+ should not be pursued, and proposes an alternative way to evolve the
+ Internet protocol suite. Its purpose is to stimulate discussion in
+ the Internet community.
+
+1. Introduction
+
+ The rapid growth of the size, capacity, and complexity of the
+ Internet has led to the need to change the existing protocol suite.
+ For example, the maximum TCP window size is no longer sufficient to
+ efficiently support the high capacity links currently being planned
+ and constructed. One is then faced with the choice of either leaving
+ the protocol alone and accepting the fact that TCP will run no faster
+ on high capacity links than on low capacity links, or changing TCP.
+ This is not an isolated incident. We have counted at least eight
+ other proposed changes to TCP (some to be taken more seriously than
+ others), and the question is not whether to change the protocol
+ suite, but what is the most cost effective way to change it.
+
+ This RFC compares the costs and benefits of three approaches to
+ making these changes: the creation of new protocols, backward
+ compatible protocol extensions, and protocol evolution. The next
+ section introduces these three approaches and enumerates the
+ strengths and weaknesses of each. The following section describes
+ how we believe these three approaches are best applied to the many
+ proposed changes to TCP. Note that we have not written this RFC as an
+ academic exercise. It is our intent to argue against acceptance of
+ the various TCP extensions, most notably RFC's 1072 and 1185 [4,5],
+ by describing a more palatable alternative.
+
+
+
+
+O'Malley & Peterson [Page 1]
+
+RFC 1263 TCP Extensions Considered Harmful October 1991
+
+
+2. Creation vs. Extension vs. Evolution
+
+2.1. Protocol Creation
+
+ Protocol creation involves the design, implementation,
+ standardization, and distribution of an entirely new protocol. In
+ this context, there are two basic reasons for creating a new
+ protocol. The first is to replace an old protocol that is so outdated
+ that it can no longer be effectively extended to perform its original
+ function. The second is to add a new protocol because users are
+ making demands upon the original protocol that were not envisioned by
+ the designer and cannot be efficiently handled in terms of the
+ original protocol. For example, TCP was designed as a reliable
+ byte-stream protocol but is commonly used as both a reliable record-
+ stream protocol and a reliable request-reply protocol due to the lack
+ of such protocols in the Internet protocol suite. The performance
+ demands placed upon a byte-stream protocol in the new Internet
+ environment makes it difficult to extend TCP to meet these new
+ application demands.
+
+ The advantage of creating a new protocol is the ability to start with
+ a clean sheet of paper when attempting to solve a complex network
+ problem. The designer, free from the constraints of an existing
+ protocol, can take maximum advantage of modern network research in
+ the basic algorithms needed to solve the problem. Even more
+ importantly, the implementor is free to steal from a large number of
+ existing academic protocols that have been developed over the years.
+ In some cases, if truly new functionality is desired, creating a new
+ protocol is the only viable approach.
+
+ The most obvious disadvantage of this approach is the high cost of
+ standardizing and distributing an entirely new protocol. Second,
+ there is the issue of making the new protocol reliable. Since new
+ protocols have not undergone years of network stress testing, they
+ often contain bugs which require backward compatible fixes, and
+ hence, the designer is back where he or she started. A third
+ disadvantage of introducing new protocols is that they generally have
+ new interfaces which require significant effort on the part of the
+ Internet community to use. This alone is often enough to kill a new
+ protocol.
+
+ Finally, there is a subtle problem introduced by the very freedom
+ provided by this approach. Specifically, being able to introduce a
+ new protocol often results in protocols that go far beyond the basic
+ needs of the situation. New protocols resemble Senate appropriations
+ bills; they tend to accumulate many amendments that have nothing to
+ do with the original problem. A good example of this phenomena is the
+ attempt to standardize VMTP [1] as the Internet RPC protocol. While
+
+
+
+O'Malley & Peterson [Page 2]
+
+RFC 1263 TCP Extensions Considered Harmful October 1991
+
+
+ VMTP was a large protocol to begin with, the closer it got to
+ standardization the more features were added until it essentially
+ collapsed under its own weight. As we argue below, new protocols
+ should initially be minimal, and then evolve as the situation
+ dictates.
+
+
+2.2. Backward Compatible Extensions
+
+ In a backward compatible extension, the protocol is modified in such
+ a fashion that the new version of the protocol can transparently
+ inter-operate with existing versions of the protocol. This generally
+ implies no changes to the protocol's header. TCP slow start [3] is an
+ example of such a change. In a slightly more relaxed version of
+ backward compatibility, no changes are made to the fixed part of a
+ protocol's header. Instead, either some fields are added to the
+ variable length options field found at the end of the header, or
+ existing header fields are overloaded (i.e., used for multiple
+ purposes). However, we can find no real advantage to this technique
+ over simply changing the protocol.
+
+ Backward compatible extensions are widely used to modify protocols
+ because there is no need to synchronize the distribution of the new
+ version of the protocol. The new version is essentially allowed to
+ diffuse through the Internet at its own pace, and at least in theory,
+ the Internet will continue to function as before. Thus, the explicit
+ distribution costs are limited. Backward compatible extensions also
+ avoid the bureaucratic costs of standardizing a new protocol. TCP is
+ still TCP and the approval cost of a modification to an existing
+ protocol is much less than that of a new protocol. Finally, the very
+ difficulty of making such changes tends to restrict the changes to
+ the minimal set needed to solve the current problem. Thus, it is rare
+ to see unneeded changes made when using this technique.
+
+ Unfortunately, this approach has several drawbacks. First, the time
+ to distribute the new version of the protocol to all hosts can be
+ quite long (forever in fact). This leaves the network in a
+ heterogeneous state for long periods of time. If there is the
+ slightest incompatibly between old and new versions, chaos can
+ result. Thus, the implicit cost of this type of distribution can be
+ quite high. Second, designing a backward compatible change to a new
+ protocol is extremely difficult, and the implementations "tend toward
+ complexity and ugliness" [5]. The need for backward compatibility
+ ensures that no code can every really be eliminated from the
+ protocol, and since such vestigial code is rarely executed, it is
+ often wrong. Finally, most protocols have limits, based upon the
+ design decisions of it inventors, that simply cannot be side-stepped
+ in this fashion.
+
+
+
+O'Malley & Peterson [Page 3]
+
+RFC 1263 TCP Extensions Considered Harmful October 1991
+
+
+2.3. Protocol Evolution
+
+ Protocol evolution is an approach to protocol change that attempts to
+ escape the limits of backward compatibility without incurring all of
+ the costs of creating new protocols. The basic idea is for the
+ protocol designer to take an existing protocol that requires
+ modification and make the desired changes without maintaining
+ backward compatibility. This drastically simplifies the job of the
+ protocol designer. For example, the limited TCP window size could be
+ fixed by changing the definition of the window size in the header
+ from 16-bits to 32-bits, and re-compiling the protocol. The effect of
+ backward compatibility would be ensured by simply keeping both the
+ new and old version of the protocol running until most machines use
+ the new version. Since the change is small and invisible to the user
+ interface, it is a trivial problem to dynamically select the correct
+ TCP version at runtime. How this is done is discussed in the next
+ section.
+
+ Protocol evolution has several advantages. First, it is by far the
+ simplest type of modification to make to a protocol, and hence, the
+ modifications can be made faster and are less likely to contain bugs.
+ There is no need to worry about the effects of the change on all
+ previous versions of the protocol. Also, most of the protocol is
+ carried over into the new version unchanged, thus avoiding the design
+ and debugging cost of creating an entirely new protocol. Second,
+ there is no artificial limit to the amount of change that can be made
+ to a protocol, and as a consequence, its useful lifetime can be
+ extended indefinitely. In a series of evolutionary steps, it is
+ possible to make fairly radical changes to a protocol without
+ upsetting the Internet community greatly. Specifically, it is
+ possible to both add new features and remove features that are no
+ longer required for the current environment. Thus, the protocol is
+ not condemned to grow without bound. Finally, by keeping the old
+ version of the protocol around, backward compatibility is guaranteed.
+ The old code will work as well as it ever did.
+
+ Assuming the infrastructure described in the following subsection,
+ the only real disadvantage of protocol evolution is the amount of
+ memory required to run several versions of the same protocol.
+ Fortunately, memory is not the scarcest resource in modern
+ workstations (it may, however, be at a premium in the BSD kernel and
+ its derivatives). Since old versions may rarely if ever be executed,
+ the old versions can be swapped out to disk with little performance
+ loss. Finally, since this cost is explicit, there is a huge incentive
+ to eliminate old protocol versions from the network.
+
+
+
+
+
+
+O'Malley & Peterson [Page 4]
+
+RFC 1263 TCP Extensions Considered Harmful October 1991
+
+
+2.4. Infrastructure Support for Protocol Evolution
+
+ The effective use of protocol evolution implies that each protocol is
+ considered a vector of implementations which share the same top level
+ interface, and perhaps not much else. TCP[0] is the current
+ implementation of TCP and exists to provide backward compatibility
+ with all existing machines. TCP[1] is a version of TCP that is
+ optimized for high-speed networks. TCP[0] is always present; TCP[1]
+ may or may not be. Treating TCP as a vector of protocols requires
+ only three changes to the way protocols are designed and implemented.
+
+ First, each version of TCP is assigned a unique id, but this id is
+ not given as an IP protocol number. (This is because IP's protocol
+ number field is only 8 bits long and could easily be exhausted.) The
+ "obvious" solution to this limitation is to increase IP's protocol
+ number field to 32 bits. In this case, however, the obvious solution
+ is wrong, not because of the difficultly of changing IP, but simply
+ because there is a better approach. The best way to deal with this
+ problem is to increase the IP protocol number field to 32 bits and
+ move it to the very end of the IP header (i.e., the first four bytes
+ of the TCP header). A backward compatible modification would be made
+ to IP such that for all packets with a special protocol number, say
+ 77, IP would look into the four bytes following its header for its
+ de-multiplexing information. On systems which do not support a
+ modified IP, an actual protocol 77 would be used to perform the de-
+ multiplexing to the correct TCP version.
+
+ Second, a version control protocol, called VTCP, is used to select
+ the appropriate version of TCP for a particular connection. VTCP is
+ an example of a virtual protocol as introduced in [2]. Application
+ programs access the various versions of TCP through VTCP. When a TCP
+ connection is opened to a specific machine, VTCP checks its local
+ cache to determine the highest common version shared by the two
+ machines. If the target machine is in the cache, it opens that
+ version of TCP and returns the connection to the protocol above and
+ does not effect performance. If the target machine is not found in
+ the cache, VTCP sends a UDP packet to the other machine asking what
+ versions of TCP that machine supports. If it receives a response, it
+ uses that information to select a version and puts the information in
+ the cache. If no reply is forthcoming, it assumes that the other
+ machine does not support VTCP and attempts to open a TCP[0]
+ connection. VTCP's cache is flushed occasionally to ensure that its
+ information is current.
+
+ Note that this is only one possible way for VTCP to decide the right
+ version of TCP to use. Another possibility is for VTCP to learn the
+ right version for a particular host when it resolves the host's name.
+ That is, version information could be stored in the Domain Name
+
+
+
+O'Malley & Peterson [Page 5]
+
+RFC 1263 TCP Extensions Considered Harmful October 1991
+
+
+ System. It is also possible that VTCP might take the performance
+ characteristics of the network into consideration when selecting a
+ version; TCP[0] may in fact turn out to be the correct choice for a
+ low-bandwidth network.
+
+ Third, because our proposal would lead to a more dynamically changing
+ network architecture, a mechanism for distributing new versions will
+ need to be developed. This is clearly the hardest requirement of the
+ infrastructure, but we believe that it can be addressed in stages.
+ More importantly, we believe this problem can be addressed after the
+ decision has been made to go the protocol evolution route. In the
+ short term, we are considering only a single new version of TCP---
+ TCP[1]. This version can be distributed in the same ad hoc way, and
+ at exactly the same cost, as the backward compatible changes
+ suggested in RFC's 1072 and 1185.
+
+ In the medium term, we envision the IAB approving new versions of TCP
+ every year or so. Given this scenario, a simple distribution
+ mechanism can be designed based on software distribution mechanisms
+ that have be developed for other environments; e.g., Unix RDIST and
+ Mach SUP. Such a mechanism need not be available on all hosts.
+ Instead, hosts will be divided into two sets, those that can quickly
+ be updated with new protocols and those that cannot. High
+ performance machines that can use high performance networks will need
+ the most current version of TCP as soon as it is available, thus they
+ have incentive to change. Old machines which are too slow to drive a
+ high capacity lines can be ignored, and probably should be ignored.
+
+ In the long term, we envision protocols being designed on an
+ application by application basis, without the need for central
+ approval. In such a world, a common protocol implementation
+ environment---a protocol backplane---is the right way to go. Given
+ such a backplane, protocols can be automatically installed over the
+ network. While we claim to know how to build such an environment,
+ such a discussion is beyond the scope of this paper.
+
+
+2.5. Remarks
+
+ Each of these three methods has its advantages. When used in
+ combination, the result is better protocols at a lower overall cost.
+ Backward compatible changes are best reserved for changes that do not
+ affect the protocol's header, and do not require that the instance
+ running on the other end of the connection also be changed. Protocol
+ evolution should be the primary way of dealing with header fields
+ that are no longer large enough, or when one algorithm is substituted
+ directly for another. New protocols should be written to off load
+ unexpected user demands on existing protocols, or better yet, to
+
+
+
+O'Malley & Peterson [Page 6]
+
+RFC 1263 TCP Extensions Considered Harmful October 1991
+
+
+ catch them before they start.
+
+ There are also synergistic effects. First, since we know it is
+ possible to evolve a newly created protocol once it has been put in
+ place, the pressure to add unnecessary features should be reduced.
+ Second, the ability to create new protocols removes the pressure to
+ overextend a given protocol. Finally, the ability to evolve a
+ protocol removes the pressure to maintain backward compatibility
+ where it is really not possible.
+
+
+3. TCP Extensions: A Case Study
+
+ This section examines the effects of using our proposed methodology
+ to implement changes to TCP. We will begin by analyzing the backward
+ compatible extensions defined in RFC's 1072 and 1185, and proposing a
+ set of much simpler evolutionary modifications. We also analyze
+ several more problematical extensions to TCP, such as Transactional
+ TCP. Finally, we point our some areas of TCP which may require
+ changes in the future.
+
+ The evolutionary modification to TCP that we propose includes all of
+ the functionality described in RFC's 1072 and 1185, but does not
+ preserve the header format. At the risk of being misunderstood as
+ believing backward compatibility is a good idea, we also show how our
+ proposed changes to TCP can be folded into a backward compatible
+ implementation of TCP. We do this as a courtesy for those readers
+ that cannot accept the possibility of multiple versions of TCP.
+
+
+3.1. RFC's 1072 and 1185
+
+ 3.1.1. Round Trip Timing
+
+ In RFC 1072, a new ECHO option is proposed that allows each TCP
+ packet to carry a timestamp in its header. This timestamp is used to
+ keep a more accurate estimate of the RTT (round trip time) used to
+ decide when to re-transmit segments. In the original TCP algorithm,
+ the sender manually times a small number of sends. The resulting
+ algorithm was quite complex and does not produce an accurate enough
+ RTT for high capacity networks. The inclusion of a timestamp in every
+ header both simplifies the code needed to calculate the RTT and
+ improves the accuracy and robustness of the algorithm.
+
+ The new algorithm as proposed in RFC 1072 does not appear to have any
+ serious problems. However, the authors of RFC 1072 go to great
+ lengths in an attempt to keep this modification backward compatible
+ with the previous version of TCP. They place an ECHO option in the
+
+
+
+O'Malley & Peterson [Page 7]
+
+RFC 1263 TCP Extensions Considered Harmful October 1991
+
+
+ SYN segment and state, "It is likely that most implementations will
+ properly ignore any options in the SYN segment that they do not
+ understand, so new initial options should not cause problems" [4].
+ This statement does not exactly inspire confidence, and we consider
+ the addition of an optional field to any protocol to be a de-facto,
+ if not a de-jure, example of an evolutionary change. Optional fields
+ simply attempt to hide the basic incompatibility inside the protocol,
+ it does not eliminate it. Therefore, since we are making an
+ evolutionary change anyway, the only modification to the proposed
+ algorithm is to move the fields into the header proper. Thus, each
+ header will contain 32-bit echo and echo reply fields. Two fields are
+ needed to handle bi-directional data streams.
+
+
+ 3.1.2. Window Size and Sequence Number Space
+
+ Long Fat Networks (LFN's), networks which contain very high capacity
+ lines with very high latency, introduce the possibility that the
+ number of bits in transit (the bandwidth-delay product) could exceed
+ the TCP window size, thus making TCP the limiting factor in network
+ performance. Worse yet, the time it takes the sequence numbers to
+ wrap around could be reduced to a point below the MSL (maximum
+ segment lifetime), introducing the possibility of old packets being
+ mistakenly accepted as new.
+
+ RFC 1072 extends the window size through the use of an implicit
+ constant scaling factor. The window size in the TCP header is
+ multiplied by this factor to get the true window size. This
+ algorithm has three problems. First, one must prove that at all times
+ the implicit scaling factor used by the sender is the same as the
+ receiver. The proposed algorithm appears to do so, but the
+ complexity of the algorithm creates the opportunity for poor
+ implementations to affect the correctness of TCP. Second, the use of
+ a scaling factor complicates the TCP implementation in general, and
+ can have serious effects on other parts of the protocol.
+
+ A final problem is what we characterize as the "quantum window
+ sizing" problem. Assuming that the scaling factors will be powers of
+ two, the algorithm right shifts the receiver's window before sending
+ it. This effectively rounds the window size down to the nearest
+ multiple of the scaling factor. For large scaling factors, say 64k,
+ this implies that window values are all multiples of 64k and the
+ minimum window size is 64k; advertising a smaller window is
+ impossible. While this is not necessarily a problem (and it seems to
+ be an extreme solution to the silly window syndrome) what effect this
+ will have on the performance of high-speed network links is anyone's
+ guess. We can imagine this extension leading to future papers
+ entitled "A Quantum Mechanical Approach to Network Performance".
+
+
+
+O'Malley & Peterson [Page 8]
+
+RFC 1263 TCP Extensions Considered Harmful October 1991
+
+
+ RFC 1185 is an attempt to get around the problem of the window
+ wrapping too quickly without explicitly increasing the sequence
+ number space. Instead, the RFC proposes to use the timestamp used in
+ the ECHO option to weed out old duplicate messages. The algorithm
+ presented in RFC 1185 is complex and has been shown to be seriously
+ flawed at a recent End-to-End Research Group meeting. Attempts are
+ currently underway to fix the algorithm presented in the RFC. We
+ believe that this is a serious mistake.
+
+ We see two problems with this approach on a very fundamental level.
+ First, we believe that making TCP depend on accurate clocks for
+ correctness to be a mistake. The Internet community has NO experience
+ with transport protocols that depend on clocks for correctness.
+ Second, the proposal uses two distinct schemes to deal with old
+ duplicate packets: the sliding window algorithm takes care of "new"
+ old packets (packets from the current sequence number epoch) and the
+ timestamp algorithm deals with "old" old packets (packets from
+ previous sequence number epochs). It is hard enough getting one of
+ these schemes to work much less to get two to work and ensure that
+ they do not interfere with one another.
+
+ In RFC 1185, the statement is made that "An obvious fix for the
+ problem of cycling the sequence number space is to increase the size
+ of the TCP sequence number field." Using protocol evolution, the
+ obvious fix is also the correct one. The window size can be increased
+ to 32 bits by simply changing a short to a long in the definition of
+ the TCP header. At the same time, the sequence number and
+ acknowledgment fields can be increased to 64 bits. This change is
+ the minimum complexity modification to get the job done and requires
+ little or no analysis to be shown to work correctly.
+
+ On machines that do not support 64-bit integers, increasing the
+ sequence number size is not as trivial as increasing the window size.
+ However, it is identical in cost to the modification proposed in RFC
+ 1185; the high order bits can be thought of as an optimal clock that
+ ticks only when it has to. Also, because we are not dealing with
+ real time, the problems with unreliable system clocks is avoided. On
+ machines that support 64-bit integers, the original TCP code may be
+ reused. Since only very high performance machines can hope to drive
+ a communications network at the rates this modification is designed
+ to support, and the new generation of RISC microprocessors (e.g.,
+ MIPS R4000 and PA-RISC) do support 64-bit integers, the assumption of
+ 64-bit arithmetic may be more of an advantage than a liability.
+
+
+
+
+
+
+
+
+O'Malley & Peterson [Page 9]
+
+RFC 1263 TCP Extensions Considered Harmful October 1991
+
+
+ 3.1.3. Selective Retransmission
+
+ Another problem with TCP's support for LFN's is that the sliding
+ window algorithm used by TCP does not support any form of selective
+ acknowledgment. Thus, if a segment is lost, the total amount of data
+ that must be re-transmitted is some constant times the bandwidth-
+ delay product, despite the fact that most of the segments have in
+ fact arrived at the receiver. RFC 1072 proposes to extend TCP to
+ allow the receiver to return partial acknowledgments to the sender in
+ the hope that the sender will use that information to avoid
+ unnecessary re-transmissions.
+
+ It has been our experience on predictable local area networks that
+ the performance of partial re-transmission strategies is highly non-
+ obvious, and it generally requires more than one iteration to find a
+ decent algorithm. It is therefore not surprising that the algorithm
+ proposed in RFC 1072 has some problems. The proposed TCP extension
+ allows the receiver to include a short list of received fragments
+ with every ACK. The idea being that when the receiver sends back a
+ normal ACK, it checks its queue of segments that have been received
+ out of order and sends the relative sequence numbers of contiguous
+ blocks of segments back to the sender. The sender then uses this
+ information to re-transmit the segments transmitted but not listed in
+ the ACK.
+
+ As specified, this algorithm has two related problems: (1) it ignores
+ the relative frequencies of delivered and dropped packets, and (2)
+ the list provided in the option field is probably too short to do
+ much good on networks with large bandwidth-delay products. In every
+ model of high bandwidth networks that we have seen, the packet loss
+ rate is very low, and thus, the ratio of dropped packets to delivered
+ packets is very low. An algorithm that returns ACKs as proposed is
+ simply going to have to send more information than one in which the
+ receiver returns NAKs.
+
+ This problem is compounded by the short size of the TCP option field
+ (44 bytes). In theory, since we are only worried about high bandwidth
+ networks, returning ACKs instead of NAKs is not really a problem; the
+ bandwidth is available to send any information that's needed. The
+ problem comes when trying to compress the ACK information into the 44
+ bytes allowed. The proposed extensions effectively compresses the
+ ACK information by allowing the receiver to ACK byte ranges rather
+ than segments, and scaling the relative sequence numbers of the re-
+ transmitted segments. This makes it much more difficult for the
+ sender to tell which segments should be re-transmitted, and
+ complicates the re-transmission code. More importantly, one should
+ never compress small amounts of data being sent over a high bandwidth
+ network; it trades a scarce resource for an abundant resource. On
+
+
+
+O'Malley & Peterson [Page 10]
+
+RFC 1263 TCP Extensions Considered Harmful October 1991
+
+
+ low bandwidth networks, selective retransmission is not needed and
+ the SACK option should be disabled.
+
+ We propose two solutions to this problem. First, the receiver can
+ examine its list of out-of-order packets and guess which segments
+ have been dropped, and NAK those segments back to the sender. The
+ number of NAKs should be low enough that one per TCP packet should be
+ sufficient. Note that the receiver has just as much information as
+ the sender about what packets should be retransmitted, and in any
+ case, the NAKs are simply suggestions which have no effect on
+ correctness.
+
+ Our second proposed modification is to increase the offset field in
+ the TCP header from 4 bits to 16 bits. This allows 64k-bytes of TCP
+ header, which allows us to radically simplify the selective re-
+ transmission algorithm proposed in RFC 1072. The receiver can now
+ simply send a list of 64-bit sequence numbers for the out-of-order
+ segments to the sender. The sender can then use this information to
+ do a partial retransmission without needing an ouji board to
+ translate ACKs into segments. With the new header size, it may be
+ faster for the receiver to send a large list than to attempt to
+ aggregate segments into larger blocks.
+
+
+ 3.1.4. Header Modifications
+
+ The modifications proposed above drastically change the size and
+ structure of the TCP header. This makes it a good time to re-think
+ the structure of the proposed TCP header. The primary goal of the
+ current TCP header is to save bits in the output stream. When TCP was
+ developed, a high bandwidth network was 56kbps, and the key use for
+ TCP was terminal I/O. In both situations, minimal header size was
+ important. Unfortunately, while the network has drastically
+ increased in performance and the usage pattern of the network is now
+ vastly different, most protocol designers still consider saving a few
+ bits in the header to be worth almost any price. Our basic goal is
+ different: to improve performance by eliminating the need to extract
+ information packed into odd length bit fields in the header. Below
+ is our first cut at such a modification.
+
+ The protocol id field is there to make further evolutionary
+ modifications to TCP easier. This field basically subsumes the
+ protocol number field contained in the IP header with a version
+ number. Each distinct TCP version has a different protocol id and
+ this field ensures that the right code is looking at the right
+ header. The offset field has been increased to 16 bits to support
+ the larger header size required, and to simplify header processing.
+ The code field has been extended to 16 bits to support more options.
+
+
+
+O'Malley & Peterson [Page 11]
+
+RFC 1263 TCP Extensions Considered Harmful October 1991
+
+
+ The source port and destination port are unchanged. The size of both
+ the sequence number and ACK fields have been increased to 64 bits.
+ The open window field has been increased to 32 bits. The checksum and
+ urgent data pointer fields are unchanged. The echo and echo reply
+ fields are added. The option field remains but can be much larger
+ than in the old TCP. All headers are padded out to 32 bit
+ boundaries. Note that these changes increase the minimum header size
+ from 24 bytes (actually 36 bytes if the ECHO and ECHO reply options
+ defined in RFC 1072 are included on every packet) to 48 bytes. The
+ maximum header size has been increased to the maximum segment size.
+ We do not believe that the the increased header size will have a
+ measurable effect on protocol performance.
+
+ 0 1 2 3
+ 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+ +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+ | Protocol ID |
+ +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+ | Offset | Code |
+ +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+ | Source | Dest |
+ +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+ | Seq |
+ | |
+ +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+ | Ack |
+ | |
+ +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+ | Window |
+ +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+ | Checksum | Urgent |
+ +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+ | Echo |
+ +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+ | Echo Reply |
+ +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+ | Options | Pad |
+ +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+
+
+ 3.1.5. Backward Compatibility
+
+ The most likely objection to the proposed TCP extension is that it is
+ not backward compatible with the current version of TCP, and most
+ importantly, TCP's header. In this section we will present three
+ versions of the proposed extension with increasing degrees of
+ backward compatibility. The final version will combine the same
+ degree of backward compatibility found in the protocol described in
+
+
+
+O'Malley & Peterson [Page 12]
+
+RFC 1263 TCP Extensions Considered Harmful October 1991
+
+
+ RFC's 1072/1185, with the much simpler semantics described in this
+ RFC.
+
+ We believe that the best way to preserve backward compatibility is to
+ leave all of TCP alone and support the transparent use of a new
+ protocol when and where it is needed. The basic scheme is the one
+ described in section 2.4. Those machines and operating systems that
+ need to support high speed connections should implement some general
+ protocol infrastructure that allows them to rapidly evolve protocols.
+ Machines that do not require such service simply keep using the
+ existing version of TCP. A virtual protocol is used to manage the use
+ of multiple TCP versions.
+
+ This approach has several advantages. First, it guarantees backward
+ compatibility with ALL existing TCP versions because such
+ implementations will never see strange packets with new options.
+ Second, it supports further modification of TCP with little
+ additional costs. Finally, since our version of TCP will more closely
+ resemble the existing TCP protocol than that proposed in RFC's
+ 1072/1185, the cost of maintaining two simple protocols will probably
+ be lower than maintaining one complex protocol. (Note that with high
+ probability you still have to maintain two versions of TCP in any
+ case.) The only additional cost is the memory required for keeping
+ around two copies of TCP.
+
+ For those that insist that the only efficient way to implement TCP
+ modifications is in a single monolithic protocol, or those that
+ believe that the space requirements of two protocols would be too
+ great, we simply migrate the virtual protocol into TCP. TCP is
+ modified so that when opening a connection, the sender uses the TCP
+ VERSION option attached to the SYN packet to request using the new
+ version. The receiver responds with a TCP VERSION ACK in the SYN ACK
+ packet, after which point, the new header format described in Section
+ 3.1.4 is used. Thus, there is only one version of TCP, but that
+ version supports multiple header formats. The complexity of such a
+ protocol would be no worse than the protocol described in RFC
+ 1072/1185. It does, however, make it more difficult to make
+ additional changes to TCP.
+
+ Finally, for those that believe that the preservation of the TCP's
+ header format has any intrinsic value (e.g., for those that don't
+ want to re-program their ethernet monitors), a header compatible
+ version of our proposal is possible. One simply takes all of the
+ additional information contained in the header given in Section 3.1.4
+ and places it into a single optional field. Thus, one could define a
+ new TCP option which consists of the top 32 bits of the sequence and
+ ack fields, the echo and echo_reply fields, and the top 16 bits of
+ the window field. This modification makes it more difficult to take
+
+
+
+O'Malley & Peterson [Page 13]
+
+RFC 1263 TCP Extensions Considered Harmful October 1991
+
+
+ advantage of machines with 64-bit address spaces, but at a minimum
+ will be just as easy to process as the protocol described in RFC
+ 1072/1185. The only restriction is that the size of the header
+ option field is still limited to 44 bytes, and thus, selective
+ retransmission using NAKs rather than ACKs will probably be required.
+
+ The key observation is that one should make a protocol extension
+ correct and simple before trying to make it backward compatible. As
+ far as we can tell, the only advantages possessed by the protocol
+ described in RFC 1072/1185 is that its typical header, size including
+ options, is 8 to 10 bytes shorter. The price for this "advantage" is
+ a protocol of such complexity that it may prove impossible for normal
+ humans to implement. Trying to maintain backward compatibility at
+ every stage of the protocol design process is a serious mistake.
+
+
+3.2. TCP Over Extension
+
+ Another potential problem with TCP that has been discussed recently,
+ but has not yet resulted in the generation of an RFC, is the
+ potential for TCP to grab and hold all 2**16 port numbers on a given
+ machine. This problem is caused by short port numbers, long MSLs,
+ and the misuse of TCP as a request-reply protocol. TCP must hold onto
+ each port after a close until all possible messages to that port have
+ died, about 240 seconds. Even worse, this time is not decreasing with
+ increase network performance. With new fast hardware, it is possible
+ for an application to open a TCP connection, send data, get a reply,
+ and close the connection at a rate fast enough to use up all the
+ ports in less than 240 seconds. This usage pattern is generated by
+ people using TCP for something it was never intended to do---
+ guaranteeing at-most-once semantics for remote procedure calls.
+
+ The proposed solution is to embed an RPC protocol into TCP while
+ preserving backward compatibility. This is done by piggybacking the
+ request message on the SYN packet and the reply message on the SYN-
+ ACK packet. This approach suffers from one key problem: it reduces
+ the probability of a correct TCP implementation to near 0. The basic
+ problem has nothing to do with TCP, rather it is the lack of an
+ Internet request-reply protocol that guarantees at-most-once
+ semantics.
+
+ We propose to solve this problem by the creation of a new protocol.
+ This has already been attempted with VMTP, but the size and
+ complexity of VMTP, coupled with the process currently required to
+ standardize a new protocol doomed it from the start. Instead of
+ solving the general problem, we propose to use Sprite RPC [7], a much
+ simpler protocol, as a means of off-loading inappropriate users from
+ TCP.
+
+
+
+O'Malley & Peterson [Page 14]
+
+RFC 1263 TCP Extensions Considered Harmful October 1991
+
+
+ The basic design would attempt to preserve as much of the TCP
+ interface as possible in order that current TCP (mis)users could be
+ switched to Sprite RPC without requiring code modification on their
+ part. A virtual protocol could be used to select the correct protocol
+ TCP or Sprite RPC if it exists on the other machine. A backward
+ compatible modification to TCP could be made which would simply
+ prevent it from grabbing all of the ports by refusing connections.
+ This would encourage TCP abusers to use the new protocol.
+
+ Sprite RPC, which is designed for a local area network, has two
+ problems when extended into the Internet. First, it does not have a
+ usefully flow control algorithm. Second, it lacks the necessary
+ semantics to reliably tear down connections. The lack of a tear down
+ mechanism needs to be solved, but the flow control problem could be
+ dealt with in later iterations of the protocol as Internet blast
+ protocols are not yet well understood; for now, we could simple limit
+ the size of each message to 16k or 32k bytes. This might also be a
+ good place to use a decomposed version of Sprite RPC [2], which
+ exposes each of these features as separate protocols. This would
+ permit the quick change of algorithms, and once the protocol had
+ stabilized, a monolithic version could be constructed and distributed
+ to replace the decomposed version.
+
+ In other words, the basic strategy is to introduce as simple of RPC
+ protocol as possible today, and later evolve this protocol to address
+ the known limitations.
+
+
+3.3. Future Modifications
+
+ The header prediction algorithm should be generalized so as to be
+ less sensitive to changes in the protocols header and algorithm.
+ There almost seems to be as much effort to make all modifications to
+ TCP backward compatible with header prediction as there is to make
+ them backward compatible with TCP. The question that needs to be
+ answered is: are there any changes we can made to TCP to make header
+ prediction easier, including the addition of information into the
+ header. In [6], the authors showed how one might generalize
+ optimistic blast from VMTP to almost any protocol that performs
+ fragmentation and reassembly. Generalizing header prediction so that
+ it scales with TCP modification would be step in the right direction.
+
+ It is clear that an evolutionary change to increase the size of the
+ source and destination ports in the TCP header will eventually be
+ necessary. We also believe that TCP could be made significantly
+ simpler and more flexible through the elimination of the pseudo-
+ header. The solution to this problem is to simply add a length field
+ and the IP address of the destination to the TCP header. It has also
+
+
+
+O'Malley & Peterson [Page 15]
+
+RFC 1263 TCP Extensions Considered Harmful October 1991
+
+
+ been mentioned that better and simpler TCP connection establishment
+ algorithms would be useful. Some form of reliable record stream
+ protocol should be developed. Performing sliding window and flow
+ control over records rather than bytes would provide numerous
+ opportunities for optimizations and allow TCP to return to its
+ original purpose as a byte-stream protocol. Finally, it has become
+ clear to us that the current Internet congestion control strategy is
+ to use TCP for everything since it is the only protocol that supports
+ congestion control. One of the primary reasons many "new protocols"
+ are proposed as TCP options is that it is the only way to get at
+ TCP's congestion control. At some point, a TCP-independent congestion
+ control scheme must be implemented and one might then be able to
+ remove the existing congestion control from TCP and radically
+ simplify the protocol.
+
+
+4. Discussion
+
+ One obvious side effect of the changes we propose is to increase the
+ size of the TCP header. In some sense, this is inevitable; just about
+ every field in the header has been pushed to its limit by the radical
+ growth of the network. However, we have made very little effort to
+ make the minimal changes to solve the current problem. In fact, we
+ have tended to sacrifice header size in order to defer future changes
+ as long as possible. The problem with this is that one of TCP's
+ claims to fame is its efficiency at sending small one byte packets
+ over slow networks. Increasing the size of the TCP header will
+ inevitably result in some increase in overhead on small packets on
+ slow networks. Clark among others have stated that they see no
+ fundamental performance limitations that would prevent TCP from
+ supporting very high speed networks. This is true as far as it goes;
+ there seems to be a direct trade-off between TCP performance on high
+ speed networks and TCP performance on slow speed networks. The
+ dynamic range is simply too great to be optimally supported by one
+ protocol. Hence, in keeping around the old version of TCP we have
+ effectively split TCP into two protocols, one for high bandwidth
+ lines and the other for low bandwidth lines.
+
+ Another potential argument is that all of the changes mentioned above
+ should be packaged together as a new version of TCP. This version
+ could be standardized and we could all go back to the status quo of
+ stable unchanging protocols. While to a certain extent this is
+ inevitable---there is a backlog of necessary TCP changes because of
+ the current logistical problems in modifying protocols---it is only
+ begs the question. The status quo is simply unacceptably static;
+ there will always be future changes to TCP. Evolutionary change will
+ also result in a better and more reliable TCP. Making small changes
+ and distributing them at regular intervals ensures that one change
+
+
+
+O'Malley & Peterson [Page 16]
+
+RFC 1263 TCP Extensions Considered Harmful October 1991
+
+
+ has actually been stabilized before the next has been made. It also
+ presents a more balanced workload to the protocol designer; rather
+ than designing one new protocol every 10 years he makes annual
+ protocol extensions. It will also eventually make protocol
+ distribution easier: the basic problem with protocol distribution now
+ is that it is done so rarely that no one knows how to do it and there
+ is no incentive to develop the infrastructure needed to perform the
+ task efficiently. While the first protocol distribution is almost
+ guaranteed to be a disaster, the problem will get easier with each
+ additional one. Finally, such a new TCP would have the same problems
+ as VMTP did; a radically new protocol presents a bigger target.
+
+ The violation of backward compatibility in systems as complex as the
+ Internet is always a serious step. However, backward compatibility is
+ a technique, not a religion. Two facts are often overlooked when
+ backward compatibility gets out of hand. First, violating backward
+ compatibility is always a big win when you can get away with it. One
+ of the key advantages of RISC chips over CISC chips is simply that
+ they were not backward compatible with anything. Thus, they were not
+ bound by design decisions made when compilers were stupid and real
+ men programmed in assembler. Second, one is going to have to break
+ backward compatibility at some point anyway. Every system has some
+ headroom limitations which result in either stagnation (IBM mainframe
+ software) or even worse, accidental violations of backward
+ compatibility.
+
+ Of course, the biggest problem with our approach is that it is not
+ compatible with the existing standardization process. We hope to be
+ able to design and distribute protocols in less time than it takes a
+ standards committee to agree on an acceptable meeting time. This is
+ inevitable because the basic problem with networking is the
+ standardization process. Over the last several years, there has been
+ a push in the research community for lightweight protocols, when in
+ fact what is needed are lightweight standards. Also note that we
+ have not proposed to implement some entirely new set of "superior"
+ communications protocols, we have simply proposed a system for making
+ necessary changes to the existing protocol suites fast enough to keep
+ up with the underlying change in the network. In fact, the first
+ standards organization that realizes that the primary impediment to
+ standardization is poor logistical support will probably win.
+
+
+5. Conclusions
+
+ The most important conclusion of this RFC is that protocol change
+ happens and is currently happening at a very respectable clip. While
+ all of the changes given as example in this document are from TCP,
+ there are many other protocols that require modification. In a more
+
+
+
+O'Malley & Peterson [Page 17]
+
+RFC 1263 TCP Extensions Considered Harmful October 1991
+
+
+ prosaic domain, the telephone company is running out of phone
+ numbers; they are being overrun by fax machines, modems, and cars.
+ The underlying cause of these problems seems to be an consistent
+ exponential increase almost all network metrics: number of hosts,
+ bandwidth, host performance, applications, and so on, combined with
+ an attempt to run the network with a static set of unchanging network
+ protocols. This has been shown to be impossible and one can almost
+ feel the pressure for protocol change building. We simply propose to
+ explicitly deal with the changes rather keep trying to hold back the
+ flood.
+
+ Of almost equal importance is the observation that TCP is a protocol
+ and not a platform for implementing other protocols. Because of a
+ lack of any alternatives, TCP has become a de-facto platform for
+ implementing other protocols. It provides a vague standard interface
+ with the kernel, it runs on many machines, and has a well defined
+ distribution path. Otherwise sane people have proposed Bounded Time
+ TCP (an unreliable byte stream protocol), Simplex TCP (which supports
+ data in only one direction) and Multi-cast TCP (too horrible to even
+ consider). All of these protocols probably have their uses, but not
+ as TCP options. The fact that a large number of people are willing to
+ use TCP as a protocol implementation platform points to the desperate
+ need for a protocol independent platform.
+
+ Finally, we point out that in our research we have found very little
+ difference in the actual technical work involved with the three
+ proposed methods of protocol modification. The amount of work
+ involved in a backward compatible change is often more than that
+ required for an evolutionary change or the creation of a new
+ protocol. Even the distribution costs seem to be identical. The
+ primary cost difference between the three approaches is the cost of
+ getting the modification approved. A protocol modification, no matter
+ how extensive or bizarre, seems to incur much less cost and risk. It
+ is time to stop changing the protocols to fit our current way of
+ thinking, and start changing our way of thinking to fit the
+ protocols.
+
+
+6. References
+
+
+[1] Cheriton D., "VMTP: Versatile Message Transaction Protocol", RFC
+ 1045, Stanford University, February 1988.
+
+
+[2] Hutchinson, N., Peterson, L., Abbott, M., and S. O'Malley, "RPC in
+ the x-Kernel: Evaluating New Design Techniques", Proceedings of the
+ 12th Symposium on Operating System Principles, Pgs. 91-101,
+
+
+
+O'Malley & Peterson [Page 18]
+
+RFC 1263 TCP Extensions Considered Harmful October 1991
+
+
+ December 1989.
+
+
+[3] Jacobson, V., "Congestion Avoidance and Control", SIGCOMM '88,
+ August 1988.
+
+
+[4] Jacobson, V., and R. Braden, "TCP Extensions for Long-Delay Paths",
+ RFC 1072, LBL, ISI, October 1988.
+
+
+[5] Jacobson, V., Braden, R., and L. Zhang, "TCP Extensions for High-
+ Speed Paths", RFC 1185, LBL, ISI, PARC, October 1990.
+
+
+[6] O'Malley, S., Abbott, M., Hutchinson, N., and L. Peterson, "A Tran-
+ sparent Blast Facility", Journal of Internetworking, Vol. 1, No.
+ 2, Pgs. 57-75, December 1990.
+
+
+[7] Welch, B., "The Sprite Remote Procedure Call System", UCB/CSD
+ 86/302, University of California at Berkeley, June 1988.
+
+7. Security Considerations
+
+ Security issues are not discussed in this memo.
+
+
+8. Authors' Addresses
+
+ Larry L. Peterson
+ University of Arizona
+ Department of Computer Sciences
+ Tucson, AZ 85721
+
+ Phone: (602) 621-4231
+ EMail: llp@cs.arizona.edu
+
+
+ Sean O'Malley
+ University of Arizona
+ Department of Computer Sciences
+ Tucson, AZ 85721
+
+ Phone: 602-621-8373
+ EMail: sean@cs.arizona.edu
+
+
+
+
+
+O'Malley & Peterson [Page 19]
+ \ No newline at end of file