home *** CD-ROM | disk | FTP | other *** search
/ Internet Info 1997 December / Internet_Info_CD-ROM_Walnut_Creek_December_1997.iso / rfc / rfc1379 < prev    next >
Text File  |  1992-11-06  |  91KB  |  2,132 lines

  1.  
  2.  
  3.  
  4.  
  5.  
  6.  
  7. Network Working Group                                          R. Braden
  8. Request for Comments: 1379                                           ISI
  9.                                                            November 1992
  10.  
  11.  
  12.                Extending TCP for Transactions -- Concepts
  13.  
  14. Status of This Memo
  15.  
  16.    This memo provides information for the Internet community.  It does
  17.    not specify an Internet standard.  Distribution of this memo is
  18.    unlimited.
  19.  
  20. Abstract
  21.  
  22.    This memo discusses extension of TCP to provide transaction-oriented
  23.    service, without altering its virtual-circuit operation.  This
  24.    extension would fill the large gap between connection-oriented TCP
  25.    and datagram-based UDP, allowing TCP to efficiently perform many
  26.    applications for which UDP is currently used.  A separate memo
  27.    contains a detailed functional specification for this proposed
  28.    extension.
  29.  
  30.    This work was supported in part by the National Science Foundation
  31.    under Grant Number NCR-8922231.
  32.  
  33. TABLE OF CONTENTS
  34.  
  35.    1. INTRODUCTION ..................................................  2
  36.    2. TRANSACTIONS USING STANDARD TCP ...............................  3
  37.    3. BYPASSING THE 3-WAY HANDSHAKE .................................  6
  38.       3.1  Concept of TAO ...........................................  6
  39.       3.2  Cache Initialization ..................................... 10
  40.       3.3  Accepting <SYN,ACK> Segments ............................. 11
  41.    4. SHORTENING TIME-WAIT STATE .................................... 13
  42.    5. CHOOSING A MONOTONIC SEQUENCE ................................. 15
  43.       5.1  Cached Timestamps ........................................ 16
  44.       5.2  Current TCP Sequence Numbers ............................. 18
  45.       5.3  64-bit Sequence Numbers .................................. 20
  46.       5.4  Connection Counts ........................................ 20
  47.       5.5  Conclusions .............................................. 21
  48.    6. CONNECTION STATES ............................................. 24
  49.    7. CONCLUSIONS AND ACKNOWLEDGMENTS ............................... 32
  50.    APPENDIX A: TIME-WAIT STATE AND THE 2-PACKET EXCHANGE ............ 34
  51.    REFERENCES ....................................................... 37
  52.    Security Considerations .......................................... 38
  53.    Author's Address ................................................. 38
  54.  
  55.  
  56.  
  57.  
  58. Braden                                                          [Page 1]
  59.  
  60. RFC 1379              Transaction TCP -- Concepts          November 1992
  61.  
  62.  
  63. 1. INTRODUCTION
  64.  
  65.    The TCP protocol [STD-007] implements a virtual-circuit transport
  66.    service that provides reliable and ordered data delivery over a
  67.    full-duplex connection.  Under the virtual circuit model, the life of
  68.    a connection is divided into three distinct phases: (1) opening the
  69.    connection to create a full-duplex byte stream; (2) transferring data
  70.    in one or both directions over this stream; and (3) closing the
  71.    connection.  Remote login and file transfer are examples of
  72.    applications that are well suited to virtual-circuit service.
  73.  
  74.    Distributed applications, which are becoming increasingly numerous
  75.    and sophisticated in the Internet, tend to use a transaction-oriented
  76.    rather than a virtual circuit style of communication.  Currently, a
  77.    transaction-oriented Internet application must choose to suffer the
  78.    overhead of opening and closing TCP connections or else build an
  79.    application-specific transport mechanism on top of the connectionless
  80.    transport protocol UDP.  Greater convenience, uniformity, and
  81.    efficiency would result from widely-available kernel implementations
  82.    of a transport protocol supporting a transaction service model [RFC-
  83.    955].
  84.  
  85.    The transaction service model has the following features:
  86.  
  87.    *    The fundamental interaction is a request followed by a response.
  88.  
  89.    *    An explicit open or close phase would impose excessive overhead.
  90.  
  91.    *    At-most-once semantics is required; that is, a transaction must
  92.         not be "replayed" by a duplicate request packet.
  93.  
  94.    *    In favorable circumstances, a reliable request/response
  95.         handshake can be performed with exactly one packet in each
  96.         direction.
  97.  
  98.    *    The minimum transaction latency for a client is RTT + SPT, where
  99.         RTT is the round-trip time and SPT is the server processing
  100.         time.
  101.  
  102.    We use the term "transaction transport protocol" for a transport-
  103.    layer protocol that follows this model [RFC-955].
  104.  
  105.    The Internet architecture allows an arbitrary collection of transport
  106.    protocols to be defined on top of the minimal end-to-end datagram
  107.    service provided by IP [Clark88].  In practice, however, production
  108.    systems implement only TCP and UDP at the transport layer.  It has
  109.    proven difficult to leverage a new transport protocol into place, to
  110.    be widely enough available to be useful for application builders.
  111.  
  112.  
  113.  
  114. Braden                                                          [Page 2]
  115.  
  116. RFC 1379              Transaction TCP -- Concepts          November 1992
  117.  
  118.  
  119.    This memo explores an alternative approach to providing a transaction
  120.    transport protocol: extending TCP to implement the transaction
  121.    service model, while continuing to support the virtual circuit model.
  122.    Each transaction will then be a single instance of a TCP connection.
  123.    The proposed transaction extension is effectively implementable
  124.    within current TCPs and operating systems, and it should also scale
  125.    to the much faster networks, interfaces, and CPUs of the future.
  126.  
  127.    The present memo explains the theory behind the extension, in
  128.    somewhat exquisite detail.  Despite the length and complexity of this
  129.    memo, the TCP extensions required for transactions are in fact quite
  130.    limited and simple.  Another memo [TTCP-FS] provides a self-contained
  131.    functional specification of the extensions.
  132.  
  133.    Section 2 of this memo describes the limitations of standard TCP for
  134.    transaction processing, to motivate the extensions.  Sections 3, 4,
  135.    and 5 explore the fundamental extensions that are required for
  136.    transactions.  Section 6 discusses the changes required in the TCP
  137.    connection state diagram.  Finally, Section 7 presents conclusions
  138.    and acknowledgments.  Familiarity with the standard TCP protocol
  139.    [STD-007] is assumed.
  140.  
  141. 2.  TRANSACTIONS USING STANDARD TCP
  142.  
  143.    Reliable transfer of data depends upon sequence numbers.  Before data
  144.    transfer can begin, both parties must "synchronize" the connection,
  145.    i.e, agree on common sequence numbers.  The synchronization procedure
  146.    must preserve at-most-once semantics, i.e., be free from replay
  147.    hazards due to duplicate packets.  The TCP developers adopted a
  148.    synchronization mechanism known as the 3-way handshake.
  149.  
  150.    Consider a simple transaction in which client host A sends a single-
  151.    segment request to server host B, and B returns a single-segment
  152.    response.  Many current TCP implementations use at least ten segments
  153.    (i.e., packets) for this sequence: three for the 3-way handshake
  154.    opening the connection, four to send and acknowledge the request and
  155.    response data, and three for TCP's full-duplex data-conserving close
  156.    sequence.  These ten segments represent a high relative overhead for
  157.    two data-bearing segments.  However, a more important consideration
  158.    is the transaction latency seen by the client:  2*RTT + SPT, larger
  159.    than the minimum by one RTT.  As CPU and network speeds increase, the
  160.    relative significance of this extra transaction latency also
  161.    increases.
  162.  
  163.    Proposed transaction transport protocols have typically used a
  164.    "timer-based" approach to connection synchronization [Birrell84].  In
  165.    this approach, once end-to-end connection state is established in the
  166.    client and server hosts, a subset of this state is maintained for
  167.  
  168.  
  169.  
  170. Braden                                                          [Page 3]
  171.  
  172. RFC 1379              Transaction TCP -- Concepts          November 1992
  173.  
  174.  
  175.    some period of time.  A new request before the expiration of this
  176.    timeout period can then reestablish the full state without an
  177.    explicit handshake.  Watson pointed out that the timer-based approach
  178.    of his Delta-T protocol [Watson81] would encompass both virtual
  179.    circuits and transactions.  However, the TCP group adopted the 3-way
  180.    handshake (because of uncertainty about the robustness of enforcing
  181.    the packet lifetime bounds required by Delta-T, within a general
  182.    Internet environment).  More recently, Liskov, Shrira, and Wroclawski
  183.    [Liskov90] have proposed a different timer-based approach to
  184.    connection synchronization, requiring loosely-synchronized clocks in
  185.    the hosts.
  186.  
  187.    The technique proposed in this memo, suggested by Clark [Clark89],
  188.    depends upon cacheing of connection state but not upon clocks or
  189.    timers; it is described in Section 3 below.  Garlick, Rom, and Postel
  190.    also proposed a connection synchronization mechanism using cached
  191.    state [Garlick77].  Their scheme required each host to maintain
  192.    connection records containing the highest sequence number on each
  193.    connection.  The technique suggested here retains only per-host
  194.    state, not per-connection state.
  195.  
  196.    During TCP development, it was suggested that TCP could support
  197.    transactions with data segments containing both SYN and FIN bits.
  198.    (These "Kamikaze" segments were not supported as a service; they were
  199.    used mainly to crash other experimental TCPs!)  To illustrate this
  200.    idea, Figure 1 shows a plausible application of the current TCP rules
  201.    to create a minimal transaction.  (In fact, some minor adjustments in
  202.    the standard TCP spec would be required to make Figure 1 fully legal
  203.    [STD-007]).
  204.  
  205.    Figure 1, like many of the examples shown in this memo, uses an
  206.    abbreviated form to illustrate segment sequences.  For clarity and
  207.    brevity, it omits explicit sequence and acknowledgment numbers,
  208.    assuming that these will follow the well-known TCP rules.  The
  209.    notation "ACK(x)" implies a cumulative acknowledgment for the control
  210.    bit or data "x" and everything preceding "x" in the sequence space.
  211.    The referent of "x" should be clear from the context.  Also, host A
  212.    will always be the client and host B will be the server in these
  213.    diagrams.
  214.  
  215.    The first three segments in Figure 1 implement the standard TCP
  216.    three-way handshake.  If segment #1 had been an old duplicate, the
  217.    client side would have sent an RST (Reset) bit in segment #3,
  218.    terminating the sequence.  The request data included on the initial
  219.    SYN segment cannot be delivered to user B until segment #3 completes
  220.    the 3-way handshake.  Loading control bits onto the segments has
  221.    reduced the total number of segments to 5, but the client still
  222.    observes a transaction latency of 2*RTT + SPT.  The 3-way handshake
  223.  
  224.  
  225.  
  226. Braden                                                          [Page 4]
  227.  
  228. RFC 1379              Transaction TCP -- Concepts          November 1992
  229.  
  230.  
  231.    thus precludes high-performance transaction processing.
  232.  
  233.  
  234.        TCP A  (Client)                                 TCP B (Server)
  235.        _______________                                 ______________
  236.  
  237.        CLOSED                                               LISTEN
  238.  
  239.    (Client sends request)
  240.     1. SYN-SENT             --> <SYN,data1,FIN> -->       SYN-RCVD
  241.                                                        (data1 queued)
  242.  
  243.     2. ESTABLISHED  <-- <SYN,ACK(SYN)> <--                SYN-RCVD
  244.  
  245.  
  246.     3. FIN-WAIT-1            --> <ACK(SYN),FIN> -->     CLOSE-WAIT
  247.                                                     (data1 to server)
  248.  
  249.                                                  (Server sends reply)
  250.     4. TIME-WAIT    <-- <ACK(FIN),data2,FIN> <--          LAST-ACK
  251.     (data2 to client)
  252.  
  253.     5. TIME-WAIT                 --> <ACK(FIN)> -->         CLOSED
  254.  
  255.        (timeout)
  256.        CLOSED
  257.  
  258.                Figure 1: Transaction Sequence: RFC-793 TCP
  259.  
  260.  
  261.    The TCP close sequence also poses a performance problem for
  262.    transactions: one or both end(s) of a closed connection must remain
  263.    in "TIME-WAIT" state until a 4 minute timeout has expired [STD-007].
  264.    The same connection (defined by the host and port numbers at both
  265.    ends) cannot be reopened until this delay has expired.  Because of
  266.    TIME-WAIT state, a client program should choose a new local port
  267.    number (i.e., a different connection) for each successive
  268.    transaction.  However, the TCP port field of 16 bits (less the
  269.    "well-known" port space) provides only 64512 available user ports.
  270.    This limits the total rate of transactions between any pair of hosts
  271.    to a maximum of 64512/240 = 268 per second.  This is much too low a
  272.    rate for low-delay paths, e.g., high-speed LANs.  A high rate of
  273.    short connections (i.e., transactions) could also lead to excessive
  274.    consumption of kernel memory by connection control blocks in TIME-
  275.    WAIT state.
  276.  
  277.    In summary, to perform efficient transaction processing in TCP, we
  278.    need to suppress the 3-way handshake and to shorten TIME-WAIT state.
  279.  
  280.  
  281.  
  282. Braden                                                          [Page 5]
  283.  
  284. RFC 1379              Transaction TCP -- Concepts          November 1992
  285.  
  286.  
  287.    Protocol mechanisms to accomplish these two goals are discussed in
  288.    Sections 3 and 4, respectively.  Both require the choice of a
  289.    monotonic sequence-like space; Section 5 analyzes the choices and
  290.    makes a selection for this space.  Finally, the TCP connection state
  291.    machine must be extended as described in Section 6.
  292.  
  293.    Transaction processing in TCP raises some other protocol issues,
  294.    which are discussed in the functional specification memo [TTCP-FS].
  295.    These include:
  296.  
  297.    (1)  augmenting the user interface for transactions,
  298.  
  299.    (2)  delaying acknowledgment segments to allow maximum piggy-backing
  300.         of control bits with data,
  301.  
  302.    (3)  measuring the retransmission timeout time (RTO) on very short
  303.         connections, and
  304.  
  305.    (4)  providing an initial server window.
  306.  
  307.    A recently proposed set of enhancements [RFC-1323] defines a TCP
  308.    Timestamps option that carries two 32-bit timestamp values.  The
  309.    Timestamps option is used to accurately measure round-trip time
  310.    (RTT).  The same option is also used in a procedure known as "PAWS"
  311.    (Protect Againsts Wrapped Sequence) to prevent erroneous data
  312.    delivery due to a combination of old duplicate segments and sequence
  313.    number reuse at very high bandwidths.  The particular approach to
  314.    transactions chosen in this memo does not require the RFC-1323
  315.    enhancements; however, they are important and should be implemented
  316.    in every TCP, with or without the transaction extensions described
  317.    here.
  318.  
  319. 3.  BYPASSING THE 3-WAY HANDSHAKE
  320.  
  321.    To avoid 3-way handshakes for transactions, we introduce a new
  322.    mechanism for validating initial SYN segments, i.e., for enforcing
  323.    at-most-once semantics without a 3-way handshake.  We refer to this
  324.    as the TCP Accelerated Open, or TAO, mechanism.
  325.  
  326.    3.1 Concept of TAO
  327.  
  328.       The basis of TAO is this: a TCP uses cached per-host information
  329.       to immediately validate new SYNs [Clark89].  If this validation
  330.       fails, e.g., because there is no current cached state or the
  331.       segment is an old duplicate, the procedure falls back to a normal
  332.       3-way handshake to validate the SYN.  Thus, bypassing a 3-way
  333.       handshake is considered to be an optional optimization.
  334.  
  335.  
  336.  
  337.  
  338. Braden                                                          [Page 6]
  339.  
  340. RFC 1379              Transaction TCP -- Concepts          November 1992
  341.  
  342.  
  343.       The proposed TAO mechanism uses a finite sequence-like space of
  344.       values that increase monotonically with successive transactions
  345.       (connections) between a given (client, server) host pair.  Call
  346.       this monotonic space M, and let each initial SYN segment carry an
  347.       M value SEG.M.  If M is not the existing sequence (SEG.SEQ) field,
  348.       SEG.M may be carried in a TCP option.
  349.  
  350.       When host B receives from host A an initial SYN segment containing
  351.       a new value SEG.M, host B compares this against cache.M[A], the
  352.       latest M value that B has cached for host A.  This comparison is
  353.       the "TAO test".  Because the M values are monotonically
  354.       increasing, SEG.M > cache.M[A] implies that the SYN must be new
  355.       and can be accepted immediately.  If not, a normal 3-way handshake
  356.       is performed to validate the initial SYN segment.  Figure 2
  357.       illustrates the TAO mechanism; cached M values are shown enclosed
  358.       in square brackets.  The M values generated by host A satisfy
  359.       x0 < x1, and the M values generated by host B satisfy y0 < y1.
  360.  
  361.       An appropriate choice for the M value space is discussed in
  362.       Section 5.  M values are drawn from a finite number space, so
  363.       inequalities must be defined in the usual way for sequence numbers
  364.       [STD-007].  The M space must not wrap so quickly that an old
  365.       duplicate SYN will be erroneously accepted.  We assume that some
  366.       maximum segment lifetime (MSL) is enforced by the IP layer.
  367.  
  368.         ____T_C_P__A_____                                ____T_C_P__B_____
  369.  
  370.             cache.M[B]                                  cache.M[A]
  371.                V                                            V
  372.  
  373.             [ y0 ]                                       [ x0 ]
  374.  
  375.       1.             -->  <SYN,data1,M=x1> -->       ( (x1 > x0) =>
  376.                                                       data1 -> user_B;
  377.                                                       cache.M[A]= x1)
  378.  
  379.             [ y0 ]                                       [ x1 ]
  380.       2.            <-- <SYN,ACK(data1),data2,M=y1> <--
  381.  
  382.          (data2 -> user_A,
  383.           cache.M[B]= y1)
  384.  
  385.             [ y1 ]                                       [ x1 ]
  386.                               ... (etc.) ...
  387.  
  388.  
  389.                    Figure 2. TAO: Three-Way Handshake is Bypassed
  390.  
  391.  
  392.  
  393.  
  394. Braden                                                          [Page 7]
  395.  
  396. RFC 1379              Transaction TCP -- Concepts          November 1992
  397.  
  398.  
  399.       Figure 2 shows the simplest case: each side has cached the latest
  400.       M value of the other, and the SEG.M value in the client's SYN
  401.       segment is greater than the value in the cache at the server host.
  402.       As a result, B can accept the client A's request data1 immediately
  403.       and pass it to the server application.  B's reply data2 is shown
  404.       piggybacked on the <SYN,ACK> segment.  As a result of this 2-way
  405.       exchange, the cached M values are updated at both sites; the
  406.       client side becomes relevant only if the client/server roles
  407.       reverse.  Validation of the <SYN,ACK> segment at host A is
  408.       discussed later.
  409.  
  410.       Figure 3 shows the TAO test failing but the consequent 3-way
  411.       handshake succeeding.  B updates its cache with the value x2 >= x1
  412.       when the initial SYN is known to be valid.
  413.  
  414.  
  415.            _T_C_P__A                                     _T_C_P__B
  416.  
  417.             cache.M[B]                                  cache.M[A]
  418.                V                                           V
  419.  
  420.             [ y0 ]                                       [ x0 ]
  421.       1.                 --> <SYN,data1,M=x1> -->   ( (x1 <= x0) =>
  422.                                                     data1 queued;
  423.                                                     3-way handshake)
  424.  
  425.             [ y0 ]                                       [ x0 ]
  426.       2.                <-- <SYN,ACK(SYN),M=y1> <--
  427.          (cache.M[B]= y1)
  428.  
  429.             [ y1 ]                                       [ x0 ]
  430.       3.                  --> <ACK(SYN),M=x2> -->  (Handshake OK =>
  431.                                                    data1->user_B,
  432.                                                    cache.M[A]= x2)
  433.  
  434.             [ y1 ]                                       [ x2 ]
  435.                             ...  (etc.)  ...
  436.  
  437.           Figure 3. TAO Test Fails but 3-Way Handshake Succeeds.
  438.  
  439.       There are several possible causes for a TAO test failure on a
  440.       legitimate new SYN segment (not an old duplicate).
  441.  
  442.       (1)  There may be no cached M value for this particular client
  443.            host.
  444.  
  445.       (2)  The SYN may be the one of a set of nearly-simultaneous SYNs
  446.            for different connections but from the same host, which
  447.  
  448.  
  449.  
  450. Braden                                                          [Page 8]
  451.  
  452. RFC 1379              Transaction TCP -- Concepts          November 1992
  453.  
  454.  
  455.            arrived out of order.
  456.  
  457.       (3)  The finite M space may have wrapped around between successive
  458.            transactions from the same client.
  459.  
  460.       (4)  The M values may advance too slowly for closely-spaced
  461.            transactions.
  462.  
  463.       None of these TAO failures will cause a lockout, because the
  464.       resulting 3-way handshake will succeed.  Note that the first
  465.       transaction between a given host pair will always require a 3-way
  466.       handshake; subsequent transactions can take advantage of TAO.
  467.  
  468.       The per-host cache required by TAO is highly desirable for other
  469.       reasons, e.g., to retain the measured round trip time and MTU for
  470.       a given remote host.  Furthermore, a host should already have a
  471.       per-host routing cache [HR-COMM] that should be easily extensible
  472.       for this purpose.
  473.  
  474.       Figure 4 illustrates a complete TCP transaction sequence using the
  475.       TAO mechanism.  Bypassing the 3-way handshake leads to new
  476.       connection states; Figure 4 shows three of them, "SYN-SENT*",
  477.       "CLOSE-WAIT*", and "LAST-ACK*".  Explanation of these states is
  478.       deferred to Section 6.
  479.  
  480.  
  481.           TCP A  (Client)                                 TCP B (Server)
  482.           _______________                                 ______________
  483.  
  484.           CLOSED                                                  LISTEN
  485.  
  486.       1.  SYN-SENT*    --> <SYN,data1,FIN,M=x1> -->          CLOSE-WAIT*
  487.                                                          (TAO test OK=>
  488.                                                           data1->user_B)
  489.  
  490.                    <-- <SYN,ACK(FIN),data2,FIN,M=y1> <--       LAST-ACK*
  491.       2.  TIME-WAIT
  492.        (data2->user_A)
  493.  
  494.  
  495.       3.  TIME-WAIT          --> <ACK(FIN),M=x2> -->              CLOSED
  496.  
  497.           (timeout)
  498.             CLOSED
  499.  
  500.  
  501.                Figure 4: Minimal Transaction Sequence Using TAO
  502.  
  503.  
  504.  
  505.  
  506. Braden                                                          [Page 9]
  507.  
  508. RFC 1379              Transaction TCP -- Concepts          November 1992
  509.  
  510.  
  511.    3.2 Cache Initialization
  512.  
  513.       The first connection between hosts A and B will find no cached
  514.       state at one or both ends, so both M caches must be initialized.
  515.       This requires that the first transaction carry a specially marked
  516.       SEG.M value, which we call SEG.M.NEW.  Receiving a SEG.M.NEW value
  517.       in an initial SYN segment, B will cache this value and send its
  518.       own M back to initialize A's cache.  When a host crashes and
  519.       restarts, all its cached M values cache.M[*] must be invalidated
  520.       in order to force a re-synchronization of the caches at both ends.
  521.  
  522.       This cache synchronization procedure is illustrated in Figure 5,
  523.       where client host A has crashed and restarted with its cache
  524.       entries undefined, as indicated by "??".  Since cache.TS[B] is
  525.       undefined, A sends a SEG.M.NEW value instead of SEG.M in the <SYN>
  526.       segment of its first transaction request to B.  Receiving this
  527.       SEG.M.NEW, the server host B invalidates cache.TS[A] and performs
  528.       a 3-way handshake.  SEG.M in segment #2 updates A's cache, and
  529.       when the handshake completes successfully, B updates its cached M
  530.       value to x2 >= x1.
  531.  
  532.  
  533.            _T_C_P__A                                     _T_C_P__B
  534.  
  535.             cache.M[B]                                  cache.M[A]
  536.                V                                           V
  537.             [ ?? ]                                       [ x0 ]
  538.  
  539.       1.           --> <SYN,data1,M.NEW=x1> -->   (invalidate cache;
  540.                                                         queue data1;
  541.             [ ?? ]                                  3-way handshake)
  542.  
  543.                                                          [ ?? ]
  544.       2.              <-- <SYN,ACK(SYN),M=y1> <--
  545.          (cache.M[B]= y1)
  546.  
  547.             [ y1 ]                                       [ ?? ]
  548.  
  549.       3.                  --> <ACK(SYN),M=x2> -->  data1->user_B,
  550.                                                    cache.M[A]= x2)
  551.  
  552.             [ y1 ]                                       [ x2 ]
  553.                             ...  (etc.)  ...
  554.  
  555.                   Figure 5.  Client Host Crashed
  556.  
  557.  
  558.       Suppose that the 3-way handshake failed, presumably because
  559.  
  560.  
  561.  
  562. Braden                                                         [Page 10]
  563.  
  564. RFC 1379              Transaction TCP -- Concepts          November 1992
  565.  
  566.  
  567.       segment #1 was an old duplicate.  Then segment #3 from host A
  568.       would be an RST segment, with the result that both side's caches
  569.       would be left undefined.
  570.  
  571.       Figure 6 shows the procedure when the server crashes and restarts.
  572.       Upon receiving a <SYN> segment from a host for which it has no
  573.       cached M value, B initiates a 3-way handshake to validate the
  574.       request and sends its own M value to A.  Again the result is to
  575.       update cached M values on both sides.
  576.  
  577.  
  578.               _T_C_P__A                                     _T_C_P__B
  579.  
  580.                cache.M[B]                                  cache.M[A]
  581.                   V                                           V
  582.                [ y0 ]                                       [ ?? ]
  583.  
  584.          1.               --> <SYN,data1,M=x1> -->      (data1 queued;
  585.                                                        3-way handshake)
  586.  
  587.                [ y0 ]                                       [ ?? ]
  588.          2.              <-- <SYN,ACK(SYN),M=y1> <--
  589.             (cache.M[B]= y1)
  590.  
  591.                [ y1 ]                                       [ ?? ]
  592.          3.                --> <ACK(SYN),M=x2> -->   (data1->user_B,
  593.                                                       cache.M[A]= x2)
  594.  
  595.                [ y1 ]                                       [ x2 ]
  596.                                ...  (etc.)  ...
  597.  
  598.  
  599.                         Figure 6. Server Host Crashed
  600.  
  601.  
  602.    3.3  Accepting <SYN,ACK> Segments
  603.  
  604.       Transactions introduce a new hazard of erroneously accepting an
  605.       old duplicate <SYN,ACK> segment.  To be acceptable, a <SYN,ACK>
  606.       segment must arrive in SYN-SENT state, and its ACK field must
  607.       acknowledge something that was sent.  In current TCPs the
  608.       effective send window in SYN-SENT state is exactly one octet, and
  609.       an acceptable <SYN,ACK> must exactly ACK this one octet.  The
  610.       clock-driven selection of Initial Sequence Number (ISN) makes an
  611.       erroneous acceptance exceedingly unlikely.  An old duplicate SYN
  612.       could be accepted erroneously only if successive connection
  613.       attempts occurred more often than once every 4 microseconds, or if
  614.       the segment lifetime exceeded the 4 hour wraparound time for ISN
  615.  
  616.  
  617.  
  618. Braden                                                         [Page 11]
  619.  
  620. RFC 1379              Transaction TCP -- Concepts          November 1992
  621.  
  622.  
  623.       selection.
  624.  
  625.       However, when TCP is used for transactions, data sent with the
  626.       initial SYN increases the range of sequence numbers that have been
  627.       sent.  This increases the danger of accepting an old duplicate
  628.       <SYN,ACK> segment, and the consequences are more serious.  In the
  629.       example in Figure 7, segments 1-3 form a normal transaction
  630.       sequence, and segment 4 begins a new transaction (incarnation) for
  631.       the same connection.  Segment #5 is a duplicate of segment #2 from
  632.       the preceding transaction.  Although the new transaction has a
  633.       larger ISN, the previous ACK value 402 falls into the new range
  634.       [200,700) of sequence numbers that have been sent, so segment #5
  635.       could be erroneously accepted and passed to the client as the
  636.       response to the new request.
  637.  
  638.            _T_C_P__A                                       _T_C_P__B
  639.  
  640.          CLOSED                                                   LISTEN
  641.  
  642.       1.           --> <seq=100,SYN,data=300,FIN,M=x1> --> (TAO test OK)
  643.  
  644.  
  645.       2.         <-- <seq=800,ack=402,SYN,data=350,FIN,M=y1> <--
  646.  
  647.  
  648.       3. TIME-WAIT                      --> <ACK(FIN)> -->       CLOSED
  649.          (short timeout)
  650.          CLOSED
  651.  
  652.          (New Request)
  653.       4.           --> <seq=200,SYN,data=500,FIN,M=x2> --> ...
  654.  
  655.                                             (Duplicate of segment #2)
  656.       5.         <-- <seq=800,ack=402,SYN,data=300,FIN,M=y1> <--...
  657.          (Acceptable!!)
  658.  
  659.  
  660.                Figure 7: Old Duplicate <SYN,ACK> Causing Error
  661.  
  662.  
  663.       Unfortunately, we cannot simply use TAO on the client side to
  664.       detect and reject old duplicate <SYN,ACK> segments.  A TAO test at
  665.       the client might fail for a valid <SYN,ACK> segment, due to out-
  666.       of-order delivery, and this could result in permanent non-delivery
  667.       of a valid transaction reply.
  668.  
  669.       Instead, we include a second M value, an echo of the client's M
  670.       value from the initial <SYN> segment, in the <SYN,ACK> segment.  A
  671.  
  672.  
  673.  
  674. Braden                                                         [Page 12]
  675.  
  676. RFC 1379              Transaction TCP -- Concepts          November 1992
  677.  
  678.  
  679.       specially-marked M value, SEG.M.ECHO, is used for this purpose.
  680.       The client knows the value it sent in the initial <SYN> and can
  681.       therefore positively validate the <SYN,ACK> using the echoed
  682.       value.  This is illustrated in Figure 12, which is the same as
  683.       Figure 4 with the addition of the echoed value on the <SYN,ACK>
  684.       segment #2.
  685.  
  686.       It should be noted that TCP allows a simultaneous open sequence in
  687.       which both sides send and receive an initial <SYN> (see Figure 8
  688.       of [STD-007].  In this case, the TAO test must be performed on
  689.       both sides to preserve the symmetry.  See [TTCP-FS] for an
  690.       example.
  691.  
  692. 4.  SHORTENING TIME-WAIT STATE
  693.  
  694.    Once a transaction has been initiated for a particular connection
  695.    (pair of ports) between a given host pair, a new transaction for the
  696.    same connection cannot take place for a time that is at least:
  697.  
  698.        RTT + SPT + TIME-WAIT_delay
  699.  
  700.    Since the client host can cycle among the 64512 available port
  701.    numbers, an upper bound on the transaction rate between a particular
  702.    host pair is:
  703.  
  704.    [1]    TRmax = 64512 /(RTT + TIME-WAIT_Delay)
  705.  
  706.    in transactions per second (Tps), where we assumed SPT is negligible.
  707.    We must reduce TIME-WAIT_Delay to support high-rate TCP transaction
  708.    processing.
  709.  
  710.    TIME-WAIT state performs two functions: (1) supporting the full-
  711.    duplex reliable close of TCP, and (2) allowing old duplicate segments
  712.    from an earlier connection incarnation to expire before they can
  713.    cause an error (see Appendix to [RFC-1185]).  The first function
  714.    impacts the application model of a TCP connection, which we would not
  715.    want to change.  The second is part of the fundamental machinery of
  716.    TCP reliable delivery; to safely truncate TIME-WAIT state, we must
  717.    provide another means to exclude duplicate packets from earlier
  718.    incarnations of the connection.
  719.  
  720.    To minimize the delay in TIME-WAIT state while performing both
  721.    functions, we propose to set the TIME-WAIT delay to:
  722.  
  723.    [2]    TIME-WAIT_Delay = max( K*RTO, U )
  724.  
  725.    where U and K are constants and RTO is the dynamically-determined
  726.    retransmission timeout, the measured RTT plus an allowance for the
  727.  
  728.  
  729.  
  730. Braden                                                         [Page 13]
  731.  
  732. RFC 1379              Transaction TCP -- Concepts          November 1992
  733.  
  734.  
  735.    RTT variance [Jacobson88].  We choose K large enough so that there is
  736.    high probability of the close completing successfully if at all
  737.    possible; K = 8 seems reasonable.  This takes care of the first
  738.    function of TIME-WAIT state.
  739.  
  740.    In a real implementation, there may be a minimum RTO value Tr,
  741.    corresponding to the precision of RTO calculation.  For example, in
  742.    the popular BSD implementation of TCP, the minimum RTO is Tr = 0.5
  743.    second.  Assuming K = 8 and U = 0, Eqns [1] and [2] impose an upper
  744.    limit of TRmax = 16K Tps on the transaction rate of these
  745.    implementations.
  746.  
  747.    It is possible to have many short connections only if RTO is very
  748.    small, in which case the TIME-WAIT delay [2] reduces to U.  To
  749.    accelerate the close sequence, we need to reduce U below the MSL
  750.    enforced by the IP layer, without introducing a hazard from old
  751.    duplicate segments.  For this purpose, we introduce another monotonic
  752.    number sequence; call it X.  X values are required to be monotonic
  753.    between successive connection incarnations; depending upon the choice
  754.    of the X space (see Section 5), X values may also increase during a
  755.    connection.  A value from the X space is to be carried in every
  756.    segment, and a segment is rejected if it is received with an X value
  757.    smaller than the largest X value received.  This mechanism does not
  758.    use a cache; the largest X value is maintained in the TCP connection
  759.    control block (TCB) for each connection.
  760.  
  761.    The value of U depends upon the choice for the X space, discussed in
  762.    the next section.  If X is time-like, U can be set to twice the time
  763.    granularity (i.e, twice the minimum "tick" time) of X.  The TIME-WAIT
  764.    delay will then ensure that current X values do not overlap the X
  765.    values of earlier incarnations of the same connection.  Another
  766.    consequence of time-like X values is the possibility that an open but
  767.    idle connection might allow the X value to wrap its sign bit,
  768.    resulting in a lockup of the connection.  To prevent this, a 24-day
  769.    idle timer on each open connection could bypass the X check on the
  770.    first segment following the idle period, for example.  In practice,
  771.    many implementations have keep-alive mechanisms that prevent such
  772.    long idle periods [RFC-1323].
  773.  
  774.    Referring back to Figure 4, our proposed transaction extension
  775.    results in a minimum exchange of 3 packets.  Segment #3, the final
  776.    ACK segment, does not increase transaction latency, but in
  777.    combination with the TIME-WAIT delay of K*RTO it ensures that the
  778.    server side of the connection will be closed before a new transaction
  779.    is issued for this same pair of ports.  It also provides an RTT
  780.    measurement for the server.
  781.  
  782.    We may ask whether it would be possible to further reduce the TIME-
  783.  
  784.  
  785.  
  786. Braden                                                         [Page 14]
  787.  
  788. RFC 1379              Transaction TCP -- Concepts          November 1992
  789.  
  790.  
  791.    WAIT delay.  We might set K to zero; alternatively, we might allow
  792.    the client TCP to start a new transaction request while the
  793.    connection was still in TIME-WAIT state, with the new initial SYN
  794.    acting as an implied acknowledgment of the previous FIN.  Appendix A
  795.    summarizes the issues raised by these alternatives, which we call
  796.    "truncating" TIME-WAIT state, and suggests some possible solutions.
  797.    Further study would be required, but these solutions appear to bend
  798.    the theory and/or implementations of the TCP protocol farther than we
  799.    wish to bend them.
  800.  
  801.    We therefore propose using formula [2] with K=8 and retaining the
  802.    final ACK(FIN) transmission.  To raise the transaction rate,
  803.    therefore, we require small values of RTO and U.
  804.  
  805. 5.  CHOOSING A MONOTONIC SEQUENCE
  806.  
  807.    For simplicity, we want the monotonic sequence X used for shortening
  808.    TIME-WAIT state to be identical to the monotonic sequence M for
  809.    bypassing the 3-way handshake.  Calling the common space M, we will
  810.    send an M value SEG.M in each TCP segment.  Upon receipt of an
  811.    initial SYN segment, SEG.M will be compared with a per-host cached
  812.    value to authenticate the SYN without a 3-way handshake; this is the
  813.    TAO mechanism.  Upon receipt of a non-SYN segment, SEG.M will be
  814.    compared with the current value in the connection control block and
  815.    used to discard old duplicates.
  816.  
  817.    Note that the situation with TIME-WAIT state differs from that of
  818.    bypassing 3-way handshakes in two ways: (a) TIME-WAIT requires
  819.    duplicate detection on every segment vs. only on SYN segments, and
  820.    (b) TIME-WAIT applies to a single connection vs. being global across
  821.    all connections.  This section discusses possible choices for the
  822.    common monotonic sequence.
  823.  
  824.    The SEG.M values must satisfy the following requirements.
  825.  
  826.    *    The values must be monotonic; this requirement is defined more
  827.         precisely below.
  828.  
  829.    *    Their granularity must be fine-grained enough to support a high
  830.         rate of transaction processing; the M clock must "tick" at least
  831.         once between successive transactions.
  832.  
  833.    *    Their range (wrap-around time) must be great enough to allow a
  834.         realistic MSL to be enforced by the network.
  835.  
  836.    The TCP spec calls for an MSL of 120 secs.  Since much of the
  837.    Internet does not carefully enforce this limit, it would be safer to
  838.    have an MSL at least an order of magnitude larger.  We set as an
  839.  
  840.  
  841.  
  842. Braden                                                         [Page 15]
  843.  
  844. RFC 1379              Transaction TCP -- Concepts          November 1992
  845.  
  846.  
  847.    objective an MSL of at least 2000 seconds.  If there were no TIME-
  848.    WAIT delay, the ultimate limit on transaction rate would be set by
  849.    speed-of-light delays in the network and by the latency of host
  850.    operating systems.  As the bottleneck problems with interfacing CPUs
  851.    to gigabit LANs are solved, we can imagine transaction durations as
  852.    short as 1 microsecond.  Therefore, we set an ultimate performance
  853.    goal of TRmax at least 10**6 Tps.
  854.  
  855.    A particular connection between hosts A and B is identified by the
  856.    local and remote TCP "sockets", i.e., by the quadruplet: {A, B,
  857.    Port.A, Port.B}.  Imagine that each host keeps a count CC of the
  858.    number of TCP connections it has initiated.  We can use this CC
  859.    number to distinguish different incarnations of the same connection.
  860.    Then a particular SEG.M value may be labeled implicitly by 6
  861.    quantities: {A, B, Port.A, Port.B, CC, n}, where n is the byte offset
  862.    of that segment within the connection incarnation.
  863.  
  864.    To bypass the 3-way handshake, we require thgt SEG.M values on
  865.    successive SYN segments from a host A to a host B be monotone
  866.    increasing.  If CC' > CC, then we require that:
  867.  
  868.        SEG.M(A,B,Port.A,Port.B,CC',0) >  SEG.M(A,B,Port.A,Port.B,CC,0)
  869.  
  870.    for any legal values of Port.A and Port.B.
  871.  
  872.    To delete old duplicates (allowing TIME-WAIT state to be shortened),
  873.    we require that SEG.M values be disjoint across different
  874.    incarnations of the same connection.   If CC' > CC then
  875.  
  876.        SEG.M(A,B,Port.A,Port.B,CC',n') > SEG.M(A,B,Port.A,Port.B,CC,n),
  877.  
  878.    for any non-negative integers n and n'.
  879.  
  880.    We now consider four different choices for the common monotonic
  881.    space: RFC-1323 timestamps, TCP sequence numbers, the connection
  882.    count, and 64-bit TCP sequence numbers.  The results are summarized
  883.    in Table I.
  884.  
  885.    5.1 Cached Timestamps
  886.  
  887.       The PAWS mechanism [RFC-1323] uses TCP "timestamps" as
  888.       monotonically increasing integers in order to throw out old
  889.       duplicate segments within the same incarnation.  Jacobson
  890.       suggested the cacheing of these timestamps for bypassing 3-way
  891.       handshakes [Jacobson90], i.e., that TCP timestamps be used for our
  892.       common monotonic space M.  This idea is attractive since it would
  893.       allow the same timestamp options to be used for RTTM, PAWS, and
  894.       transactions.
  895.  
  896.  
  897.  
  898. Braden                                                         [Page 16]
  899.  
  900. RFC 1379              Transaction TCP -- Concepts          November 1992
  901.  
  902.  
  903.       To obtain at-most-once service, the criterion for immediate
  904.       acceptance of a SYN must be that SEG.M is strictly greater than
  905.       the cached M value.  That is, to be useful for bypassing 3-way
  906.       handshakes, the timestamp clock must tick at least once between
  907.       any two successive transactions between the same pair of hosts
  908.       (even if different ports are used).  Hence, the timestamp clock
  909.       rate would determine TRmax, the maximum possible transaction rate.
  910.  
  911.       Unfortunately, the timestamp clock frequency called for by RFC-
  912.       1323, in the range 1 sec to 1 ms, is much too slow for
  913.       transactions.  The TCP timestamp period was chosen to be
  914.       comparable to the fundamental interval for computing and
  915.       scheduling retransmission timeouts; this is generally in the range
  916.       of 1 sec. to 1 ms., and in many operating systems, much closer to
  917.       1 second.  Although it would be possible to increase the timestamp
  918.       clock frequency by several orders of magnitude, to do so would
  919.       make implementation more difficult, and on some systems
  920.       excessively expensive.
  921.  
  922.       The wraparound time for TCP timestamps, at least 24 days, causes
  923.       no problem for transactions.
  924.  
  925.       The PAWS mechanism uses TCP timestamps to protect against old
  926.       duplicate non-SYN segments from the same incarnation [RFC-1323].
  927.       It can also be used to protect against old duplicate data segments
  928.       from earlier incarnations (and therefore allow shortening of
  929.       TIME-WAIT state) if we can ensure that the timestamp clock ticks
  930.       at least once between the end of one incarnation and the beginning
  931.       of the next.  This can be achieved by setting U = 2 seconds, i.e.,
  932.       to twice the maximum timestamp clock period.  This value in
  933.       formula [2] leads to an upper bound TRmax = 32K Tps between a host
  934.       pair.  However, as pointed out above, old duplicate SYN detection
  935.       using timestamps leads to a smaller transaction rate bound, 1 Tps,
  936.       which is unacceptable.  In addition, the timestamp approach is
  937.       imperfect; it allows old ACK segments to enter the new connection
  938.       where they can cause a disconnect.  This happens because old
  939.       duplicate ACKs that arrive during TIME-WAIT state generate new
  940.       ACKs with the current timestamp [RFC-1337].
  941.  
  942.       We therefore conclude that timestamps are not adequate as the
  943.       monotonic space M; see Table I.  However, they may still be useful
  944.       to effectively extend some other monotonic number space, just as
  945.       they are used in PAWS to extend the TCP sequence number space.
  946.       This is discussed below.
  947.  
  948.  
  949.  
  950.  
  951.  
  952.  
  953.  
  954. Braden                                                         [Page 17]
  955.  
  956. RFC 1379              Transaction TCP -- Concepts          November 1992
  957.  
  958.  
  959.    5.2 Current TCP Sequence Numbers
  960.  
  961.       It is useful to understand why the existing 32-bit TCP sequence
  962.       numbers do not form an appropriate monotonic space for
  963.       transactions.
  964.  
  965.       The sequence number sent in an initial SYN is called the Initial
  966.       Sequence Number or ISN.  According to the TCP specification, an
  967.       ISN is to be selected using:
  968.  
  969.       [3]      ISN = (R*T) mod 2**32
  970.  
  971.       where T is the real time in seconds (from an arbitrary origin,
  972.       fixed when the system is started) and R is a constant, currently
  973.       250 KBps.  These ISN values form a monotonic time sequence that
  974.       wraps in 4.55 hours = 16380 seconds and has a granularity of 4
  975.       usecs.  For transaction rates up to roughly 250K Tps, the ISN
  976.       value calculated by formula [3] will be monotonic and could be
  977.       used for bypassing the 3-way handshake.
  978.  
  979.       However, TCP sequence numbers (alone) could not be used to shorten
  980.       TIME-WAIT state, because there are several ways that overlap of
  981.       the sequence space of successive incarnations can occur (as
  982.       described in Appendix to [RFC-1185]).  One way is a "fast
  983.       connection", with a transfer rate greater than R; another is a
  984.       "long" connection, with a duration of approximately 4.55 hours.
  985.       TIME-WAIT delay is necessary to protect against these cases.  With
  986.       the official delay of 240 seconds, formula [1] implies a upper
  987.       bound (as RTT -> 0) of TRmax = 268 Tps; with our target MSL of
  988.       2000 sec, TRmax = 32 Tps.  These values are unacceptably low.
  989.  
  990.       To improve this transaction rate, we could use TCP timestamps to
  991.       effectively extend the range of the TCP sequence numbers.
  992.       Timestamps would guard against sequence number wrap-around and
  993.       thereby allow us to increase R in [3] to exceed the maximum
  994.       possible transfer rate.  Then sequence numbers for successive
  995.       incarnations could not overlap.  Timestamps would also provide
  996.       safety with an MSL as large as 24 days.  We could then set U = 0
  997.       in the TIME-WAIT delay calculation [2].  For example, R = 10**9
  998.       Bps leads to TRmax <= 10**9 Tps. See 2(b) in Table I.  These
  999.       values would more than satisfy our objectives.
  1000.  
  1001.       We should make clear how this proposal, sequence numbers plus
  1002.       timestamps, differs from the timestamps alone discussed (and
  1003.       rejected) in the previous section.  The difference lies in what is
  1004.       cached and tested for TAO; the proposal here is to cache and test
  1005.       BOTH the latest TCP sequence number and the latest TCP timestamp.
  1006.       In effect, we are proposing to use timestamps to logically extend
  1007.  
  1008.  
  1009.  
  1010. Braden                                                         [Page 18]
  1011.  
  1012. RFC 1379              Transaction TCP -- Concepts          November 1992
  1013.  
  1014.  
  1015.       the sequence space to 64 bits.  Another alternative, presented in
  1016.       the next section, is to directly expand the TCP sequence space to
  1017.       64 bits.
  1018.  
  1019.       Unfortunately, the proposed solution (TCP sequence numbers plus
  1020.       timestamps) based on equation [3] would be difficult or impossible
  1021.       to implement on many systems, which base their TCP implementation
  1022.       upon a very low granularity software clock, typically O(1 sec).
  1023.       To adapt the procedure to a system with a low granularity software
  1024.       clock, suppose that we calculate the ISN as:
  1025.  
  1026.       [4]      ISN = ( R*Ts*floor(T/Ts) + q*CC) mod 2**32
  1027.  
  1028.       where Ts is the time per tick of the software clock, CC is the
  1029.       connection count, and q is a constant.  That is, the ISN is
  1030.       incremented by the constant R*Ts once every clock tick and by the
  1031.       constant q for every new connection.  We need to choose q to
  1032.       obtain the required monotonicity.
  1033.  
  1034.       For monotonicity of the ISN's themselves, q=1 suffices.  However,
  1035.       monotonicity during the entire connection requires q = R*Ts.  This
  1036.       value of q can be deduced as follows.  Let S(T, CC, n) be the
  1037.       sequence number for byte offset n in a connection with number CC
  1038.       at time T:
  1039.  
  1040.           S(T, CC, n) = (R*Ts*floor(T/Ts) + q*CC + n) mod 2**32.
  1041.  
  1042.       For any T1 > T2, we require that: S(T2, CC+1, 0) - S(T1, CC, n) >
  1043.       0 for all n.  Since R is assumed to be an upper bound on the
  1044.       transfer rate, we can write down:
  1045.  
  1046.           R > n/(T2 - T1),  or  T2/Ts - T1/Ts > n/(R*Ts)
  1047.  
  1048.       Using the relationship:  floor(x)-floor(y) > x-y-1 and a little
  1049.       algebra leads to the conclusion that using q = R*Ts creates the
  1050.       required monotonic number sequence.  Therefore, we consider:
  1051.  
  1052.       [5]      ISN = R*Ts*(floor(T/Ts) + CC) mod 2**32
  1053.  
  1054.       (which is the algorithm used for ISN selection by BSD TCP).
  1055.  
  1056.       For error-free operation, the sequence numbers generated by [5]
  1057.       must not wrap the sign bit in less than MSL seconds.  Since CC
  1058.       cannot increase faster than TRmax, the safe condition is:
  1059.  
  1060.             R* (1 + Ts*TRmax) * MSL < 2**31.
  1061.  
  1062.       We are interested in the case: Ts*TRmax >> 1, so this relationship
  1063.  
  1064.  
  1065.  
  1066. Braden                                                         [Page 19]
  1067.  
  1068. RFC 1379              Transaction TCP -- Concepts          November 1992
  1069.  
  1070.  
  1071.       reduces to:
  1072.  
  1073.       [6]     R * Ts * TRmax * MSL < 2**31.
  1074.  
  1075.       This shows a direct trade-off among the maximum effective
  1076.       bandwidth R, the maximum transaction rate TRmax, and the maximum
  1077.       segment lifetime MSL.  For reasonable limiting values of R, Ts,
  1078.       and MSL, formula [6] leads to a very low value of TRmax.  For
  1079.       example, with MSL= 2000 secs, R=10**9 Bps, and Ts = 0.5 sec, TRmax
  1080.       < 2*10**-3 Tps.
  1081.  
  1082.       To ease the situation, we could supplement sequence numbers with
  1083.       timestamps.  This would allow an effective MSL of 2 seconds in
  1084.       [6], since longer times would be protected by differing
  1085.       timestamps.  Then TRmax < 2**30/(R*Ts).  The actual enforced MSL
  1086.       would be increased to 24 days.  Unfortunately, TRmax would still
  1087.       be too small, since we want to support transfer rates up to R ~
  1088.       10**9 Bps.  Ts = 0.5 sec would imply TRmax ~ 2 Tps.  On many
  1089.       systems, it appears infeasible to decrease Ts enough to obtain an
  1090.       acceptable TRmax using this approach.
  1091.  
  1092.    5.3 64-bit TCP Sequence Numbers
  1093.  
  1094.       Another possibility would be to simply increase the TCP sequence
  1095.       space to 64 bits as suggested in [RFC-1263].  We would also
  1096.       increase the R value for clock-driven ISN selection, beyond the
  1097.       fastest transfer rate of which the host is capable.  A reasonable
  1098.       upper limit might be R = 10**9 Bps.  As noted above, in a
  1099.       practical implementation we would use:
  1100.  
  1101.             ISN = R*Ts*( floor(T/Ts) + CC) mod 2**64
  1102.  
  1103.       leading to:
  1104.  
  1105.             R*(1 +  Ts * TRmax) * MSL < 2**63
  1106.  
  1107.       For example, suppose that R = 10**9 Bps, Ts = 0.5, and MSL = 16K
  1108.       secs (4.4 hrs); then this result implies that TRmax < 10**6 Tps.
  1109.       We see that adding 32 bits to the sequence space has provided
  1110.       feasible values for transaction processing.
  1111.  
  1112.    5.4 Connection Counts
  1113.  
  1114.       The Connection Count CC is well suited to be the monotonic
  1115.       sequence M, since it "ticks" exactly once for each new connection
  1116.       incarnation and is constant within a single incarnation.  Thus, it
  1117.       perfectly separates segments from different incarnations of the
  1118.       same connection and would allow U = 0 in the TIME-WAIT state delay
  1119.  
  1120.  
  1121.  
  1122. Braden                                                         [Page 20]
  1123.  
  1124. RFC 1379              Transaction TCP -- Concepts          November 1992
  1125.  
  1126.  
  1127.       formula [2].  (Strictly, U cannot be reduced below 1/R = 4 usec,
  1128.       as noted in Section 4.  However, this is of little practical
  1129.       consequence until the ultimate limits on TRmax are approached).
  1130.  
  1131.       Assume that CC is a 32-bit number.  To prevent wrap-around in the
  1132.       sign bit of CC in less than MSL seconds requires that:
  1133.  
  1134.            TRmax * MSL < 2**31
  1135.  
  1136.       For example, if MSL =  2000 seconds then TRmax < 10**6 Tp.  These
  1137.       are acceptable limits for transaction processing.  However, if
  1138.       they are not, we could augment CC with TCP timestamps to obtain
  1139.       very far-out limits, as discussed below.
  1140.  
  1141.       It would be an implementation choice at the client whether CC is
  1142.       global for all destinations or private to each destination host
  1143.       (and maintained in the per-host cache).  In the latter case, the
  1144.       last CC value assigned for each remote host could also be
  1145.       maintained in the per-host cache.  Since there is not typically a
  1146.       large amount of parallelism in the network connection of a host,
  1147.       there should be little difference in the performance of these two
  1148.       different approaches, and the single global CC value is certainly
  1149.       simpler.
  1150.  
  1151.       To augment CC with TCP timestamps, we would bypass a 3-way
  1152.       handshake if both SEG.CC > cache.CC[A] and SEG.TSval >=
  1153.       cache.TS[A].  The timestamp check would detect a SYN older than 2
  1154.       seconds, so that the effective wrap-around requirement would be:
  1155.  
  1156.            TRmax * 2 < 2**31
  1157.  
  1158.       i.e., TRmax < 10**9 Tps.  The required MSL would be raised to 24
  1159.       days.  Using timestamps in this way, we could reduce the size of
  1160.       CC.  For example, suppose CC were 16 bits.  Then the wrap-around
  1161.       condition TRmax * 2 < 2**15 implies that TRmax is 16K.
  1162.  
  1163.       Finally, note that using CC to delete old duplicates from earlier
  1164.       incarnations would not obviate the need for the time-stamp-based
  1165.       PAWS mechanism to prevent errors within a single incarnation due
  1166.       to wrapping the 32-bit TCP sequence space at very high transfer
  1167.       rates.
  1168.  
  1169.    5.5  Conclusions
  1170.  
  1171.       The alternatives for monotonic sequence are summarized in Table I.
  1172.       We see that there are two feasible choices for the monotonic
  1173.       space: the connection count and 64-bit sequence numbers.  Of these
  1174.       two, we believe that the simpler is the connection count.
  1175.  
  1176.  
  1177.  
  1178. Braden                                                         [Page 21]
  1179.  
  1180. RFC 1379              Transaction TCP -- Concepts          November 1992
  1181.  
  1182.  
  1183.       Implementation of 64-bit sequence numbers would require
  1184.       negotiation of a new header format and expansion of all variables
  1185.       and calculations on the sequence space.  CC can be carried in an
  1186.       option and need be examined only once per packet.
  1187.  
  1188.       We propose to use a simple 32-bit connection count CC, without
  1189.       augmentation with timestamps, for the transaction extension.  This
  1190.       choice has the advantages of simplicity and directness.  Its
  1191.       drawback is that it adds a third sequence-like space (in addition
  1192.       to the TCP sequence number and the TCP timestamp) to each TCP
  1193.       header and to the main line of packet processing.  However, the
  1194.       additional code is in fact very modest.
  1195.  
  1196.    We now have a general outline of the proposed TCP extensions for
  1197.    transactions.
  1198.  
  1199.    o    A host maintains a 32-bit global connection counter variable CC.
  1200.  
  1201.    o    The sender's current CC value is carried in an option in every
  1202.         TCP segment.
  1203.  
  1204.    o    CC values are cached per host, and the TAO mechanism is used to
  1205.         bypass the 3-way handshake when possible.
  1206.  
  1207.    o    In non-SYN segments, the CC value is used to reject duplicates
  1208.         from earlier incarnations.  This allows TIME-WAIT state delay to
  1209.         be reduced to K*RTO (i.e., U=0 in Eq. [2]).
  1210.  
  1211.  
  1212.  
  1213.  
  1214.  
  1215.  
  1216.  
  1217.  
  1218.  
  1219.  
  1220.  
  1221.  
  1222.  
  1223.  
  1224.  
  1225.  
  1226.  
  1227.  
  1228.  
  1229.  
  1230.  
  1231.  
  1232.  
  1233.  
  1234. Braden                                                         [Page 22]
  1235.  
  1236. RFC 1379              Transaction TCP -- Concepts          November 1992
  1237.  
  1238.  
  1239.                 TABLE I: Summary of Monotonic Sequences
  1240.  
  1241.       APPROACH              TRmax (Tps)    Required MSL      COMMENTS
  1242.    __________________________________________________________________
  1243.  
  1244.    1. Timestamp & PAWS        1              24 days         TRmax is
  1245.                                                             too small
  1246.    __________________________________________________________________
  1247.  
  1248.    2. Current TCP Sequence Numbers
  1249.  
  1250.      (a) clock-driven
  1251.        ISN: eq. [3]           268           240 secs      TRmax & MSL
  1252.                                                             too small
  1253.  
  1254.      (b) Timestamps& clock-
  1255.          driven ISN [3] &     10**9         24 days           Hard to
  1256.          R=10**9                                            implement
  1257.  
  1258.      (c) Timestamps & c-dr
  1259.          ISN: eq. [4]        2**30/(R*Ts)   24 days         TRmax too
  1260.                                                                small.
  1261.    __________________________________________________________________
  1262.  
  1263.    3. 64-bit TCP Sequence Numbers
  1264.  
  1265.                           2**63/(MSL*R*Ts)      MSL        Significant
  1266.                                                           TCP change
  1267.                            e.g., R=10**9 Bps,
  1268.                                MSL = 4.4 hrs,
  1269.                                Ts = 0.5 sec=>
  1270.                                TRmax = 10**6
  1271.    __________________________________________________________________
  1272.  
  1273.    4. Connection Counts
  1274.  
  1275.      (a) no timestamps       2**31/MSL        MSL        3rd sequence
  1276.                         e.g., MSL=2000 sec                      space
  1277.                              TRmax = 10**6
  1278.  
  1279.      (b) with timestamps     2**30           24 days     (ditto)
  1280.                  and PAWS
  1281.    __________________________________________________________________
  1282.  
  1283.  
  1284.  
  1285.  
  1286.  
  1287.  
  1288.  
  1289.  
  1290. Braden                                                         [Page 23]
  1291.  
  1292. RFC 1379              Transaction TCP -- Concepts          November 1992
  1293.  
  1294.  
  1295. 6.  CONNECTION STATES
  1296.  
  1297.    TCP has always allowed a connection to be half-closed.  TAO makes a
  1298.    significant addition to TCP semantics by allowing a connection to be
  1299.    half-synchronized, i.e., to be open for data transfer in one
  1300.    direction before the other direction has been opened.  Thus, the
  1301.    passive end of a connection (which receives an initial SYN) can
  1302.    accept data and even a FIN bit before its own SYN has been
  1303.    acknowledged.  This SYN, data, and FIN may arrive on a single segment
  1304.    (as in Figure 4), or on multiple segments; packetization makes no
  1305.    difference to the logic of the finite-state machine (FSM) defining
  1306.    transitions among connection states.
  1307.  
  1308.    Half-synchronized connections have several consequences.
  1309.  
  1310.    (a)  The passive end must provide an implied initial data window in
  1311.         order to accept data.  The minimum size of this implied window
  1312.         is a parameter in the specification; we suggest 4K bytes.
  1313.  
  1314.    (b)  New connection states and transitions are introduced into the
  1315.         TCP FSM at both ends of the connection.  At the active end, new
  1316.         states are required to piggy-back the FIN on the initial SYN
  1317.         segment.  At the passive end, new states are required for a
  1318.         half-synchronized connection.
  1319.  
  1320.    This section develops the resulting FSM description of a TCP
  1321.    connection as a conventional state/transition diagram.  To develop a
  1322.    complete FSM, we take a constructive approach, as follows: (1) write
  1323.    down all possible events; (2) write down the precedence rules that
  1324.    govern the order in which events may occur; (3) construct the
  1325.    resulting FSM; and (4) augment it to support TAO.  In principle, we
  1326.    do this separately for the active and passive ends; however, the
  1327.    symmetry of TCP results in the two FSMs being almost entirely
  1328.    coincident.
  1329.  
  1330.    Figure 8 lists all possible state transitions for a TCP connection in
  1331.    the absence of TAO, as elementary events and corresponding actions.
  1332.    Each transition is labeled with a letter.  Transitions a-g are used
  1333.    by the active side, and c-i are used by the passive side.  Without
  1334.    TAO, transition "c" (event "rcv ACK(SYN)") synchronizes the
  1335.    connection, allowing data to be accepted for the user.
  1336.  
  1337.    By definition, the first transition for an active (or passive) side
  1338.    must be "a" (or "i", respectively).  During a single instance of a
  1339.    connection, the active side will progress through some permutation of
  1340.    the complete sequence of transitions {a b c d e f } or the sequence
  1341.    {a b c d e f g}.  The set of possible permutations is determined by
  1342.    precedence rules governing the order in which transitions can occur.
  1343.  
  1344.  
  1345.  
  1346. Braden                                                         [Page 24]
  1347.  
  1348. RFC 1379              Transaction TCP -- Concepts          November 1992
  1349.  
  1350.  
  1351.           Label              Event / Action
  1352.           _____              ________________________
  1353.             a                OPEN / snd SYN
  1354.  
  1355.             b                rcv SYN [No TAO]/ snd ACK(SYN)
  1356.  
  1357.             c                rcv ACK(SYN) /
  1358.  
  1359.             d                CLOSE / snd FIN
  1360.  
  1361.             e                rcv FIN / snd ACK(FIN)
  1362.  
  1363.             f                rcv ACK(FIN) /
  1364.  
  1365.             g                timeout=2MSL / delete TCB
  1366.         ___________________________________________________
  1367.             h                passive OPEN / create TCB
  1368.  
  1369.             i                rcv SYN [No TAO]/ snd SYN, ACK(SYN)
  1370.         ___________________________________________________
  1371.  
  1372.            Figure 8.  Basic TCP Connection Transitions
  1373.  
  1374.  
  1375.    Using the notation "<." to mean "must precede", the precedence rules
  1376.    are:
  1377.  
  1378.    (1)  Logical ordering: must open connection before closing it:
  1379.  
  1380.         b <. e
  1381.  
  1382.    (2)  Causality -- cannot receive ACK(x) before x has been sent:
  1383.  
  1384.         a <. c and i <. c and d <. f
  1385.  
  1386.    (3)  Acknowledgments are cumulative
  1387.  
  1388.         c <. f
  1389.  
  1390.    (4)  First packet in each direction must contain a SYN.
  1391.  
  1392.         b <. c and b <. f
  1393.  
  1394.    (5)  TIME-WAIT state
  1395.  
  1396.         Whenever d precedes e in the sequence, g must be the last
  1397.         transition.
  1398.  
  1399.  
  1400.  
  1401.  
  1402. Braden                                                         [Page 25]
  1403.  
  1404. RFC 1379              Transaction TCP -- Concepts          November 1992
  1405.  
  1406.  
  1407.    Applying these rules, we can enumerate all possible permutations of
  1408.    the events and summarize them in a state transition diagram.  Figure
  1409.    9 shows the result, with boxes representing the states and directed
  1410.    arcs representing the transitions.
  1411.  
  1412.           ________            ________
  1413.          |        |    h     |        |
  1414.          | CLOSED |--------->| LISTEN |
  1415.          |________|          |________|
  1416.               |                   |
  1417.               | a                 | i
  1418.           ____V____           ____V___                 ________
  1419.          |        |    b     |        |      e        |        |
  1420.          |        |--------->|        |-------------->|        |
  1421.          |________|          |________|               |________|
  1422.             /                    /   |                /       |
  1423.            /                    /    | c           d /        | c
  1424.           /                    /   __V_____          |    ____V___
  1425.          /                    /   |        | e       |   |        |
  1426.       d  |                d  /    |        |------------>|        |
  1427.          |                   |    |________|         |   |________|
  1428.          |                   |       |               |         |
  1429.          |                   |       |            ___V____     |
  1430.          |                   |       |           |        |    |
  1431.          |                   |       |           |        |    |
  1432.          |                   |       |           |________|    |
  1433.          |                   |       |                   |     |
  1434.      ____V___          ______V_      |     ________      |     |
  1435.     |        |    b   |        | e   |    |        |     |     |
  1436.     |        |------->|        |--------->|        |     |     |
  1437.     |________|        |________|     |    |________|     |     |
  1438.                               |      /          |        |     |
  1439.                             c |     / d       c |      c |   d |
  1440.                               |    /            |        |     |
  1441.                              _V___V__       ____V___     V_____V_
  1442.                             |        |  e  |        |   |        |
  1443.                             |        |---->|        |   |        |
  1444.                             |________|     |________|   |________|
  1445.                                  |              |           |
  1446.                                  | f            | f         | f
  1447.                              ____V___       ____V___     ___V____
  1448.                             |        |  e  | TIME-  | g |        |
  1449.                             |        |---->|   WAIT |-->| CLOSED |
  1450.                             |________|     |________|   |________|
  1451.  
  1452.  
  1453.                Figure 9: Basic State Diagram
  1454.  
  1455.  
  1456.  
  1457.  
  1458. Braden                                                         [Page 26]
  1459.  
  1460. RFC 1379              Transaction TCP -- Concepts          November 1992
  1461.  
  1462.  
  1463.    Although Figure 9 gives a correct representation of the possible
  1464.    event sequences, it is not quite correct for the actions, which do
  1465.    not compose as shown.   In particular, once a control bit X has been
  1466.    sent, it must continue to be sent until ACK(X) is received.  This
  1467.    requires new transitions with modified actions, shown in the
  1468.    following list.  We use the labeling convention that transitions with
  1469.    the same event part all have the same letter, with different numbers
  1470.    of primes to indicate different actions.
  1471.  
  1472.           Label              Event / Action
  1473.           _____              _______________________________________
  1474.             b' (=i)          rcv SYN [No TAO] / snd SYN,ACK(SYN)
  1475.             b''              rcv SYN [No TAO] / snd SYN,FIN,ACK(SYN)
  1476.             d'               CLOSE / snd SYN,FIN
  1477.             e'               rcv FIN / snd FIN,ACK(FIN)
  1478.             e''              rcv FIN / snd SYN,FIN,ACK(FIN)
  1479.  
  1480.  
  1481.    Figure 10 shows the state diagram of Figure 9, with the modified
  1482.    transitions and with the states used by standard TCP [STD-007]
  1483.    identified. Those states that do not occur in standard TCP are
  1484.    numbered 1-5.
  1485.  
  1486.    Standard TCP has another implied restriction: a FIN bit cannot be
  1487.    recognized before the connection has been synchronized, i.e., c <. e.
  1488.    This eliminates from standard TCP the states 1, 2, and 5 shown in
  1489.    Figure 10.  States 3 and 4 are needed if a FIN is to be piggy-backed
  1490.    on a SYN segment (note that the states shown in Figure 1 are actually
  1491.    wrong; the states shown as SYN-SENT and ESTABLISHED are really states
  1492.    3 and 4).  In the absence of piggybacking the FIN bit, Figure 10
  1493.    reduces to the standard TCP state diagram [STD-007].
  1494.  
  1495.    The FSM described in Figure 10 is intended to be applied
  1496.    cumulatively; that is, parsing a single packet header may lead to
  1497.    more than one transition.  For example, the standard TCP state
  1498.    diagram includes a direct transition from SYN-SENT to ESTABLISHED:
  1499.  
  1500.        rcv SYN,ACK(SYN) / snd ACK(SYN).
  1501.  
  1502.    This is transition b followed immediately by c.
  1503.  
  1504.  
  1505.  
  1506.  
  1507.  
  1508.  
  1509.  
  1510.  
  1511.  
  1512.  
  1513.  
  1514. Braden                                                         [Page 27]
  1515.  
  1516. RFC 1379              Transaction TCP -- Concepts          November 1992
  1517.  
  1518.  
  1519.           ________            ________
  1520.          |        |     h    |        |
  1521.          | CLOSED |--------->| LISTEN |
  1522.          |________|          |________|
  1523.               |                   |
  1524.               | a                 | i
  1525.           ____V____           ____V___                 ________
  1526.          | SYN-   |     b'   |  SYN-  |     e'        |        |
  1527.          |   SENT |--------->|RECEIVED|-------------->|   1    |
  1528.          |________|          |________|               |________|
  1529.             /                    /   |                  |     |
  1530.          d'/                  d'/    | c             d' |   c |
  1531.           /                    /   __V_____             |    _V______
  1532.          /                    /   |ESTAB-  | e          |   | CLOSE- |
  1533.          |                   /    |  LISHED|------------|-->|   WAIT |
  1534.          |                   |    |________|            |   |________|
  1535.          |                   |       |                  |      |
  1536.          |                   |       |             _____V__    |
  1537.          |                   |       |            |        |   |
  1538.          |                   |       |            |   2    |   |
  1539.          |                   |       |            |________|   |
  1540.          |                   |       |                   |     |
  1541.      ____V___          ______V_      |     ________      |     |
  1542.     |        |  b''   |        |e''' |    |        |     |     |
  1543.     |    3   |------->|    4   |--------->|    5   |     |     |
  1544.     |________|        |________|     |    |________|     |     |
  1545.                               |      /          |        |     |
  1546.                             c |     / d       c |      c |   d |
  1547.                               |    /            |        |     |
  1548.                              _V___V__       ____V___     V_____V_
  1549.                             | FIN-   | e'' |        |   | LAST-  |
  1550.                             |  WAIT-1|---->|CLOSING |   |   ACK  |
  1551.                             |________|     |________|   |________|
  1552.                                  |              |           |
  1553.                                  | f            | f         | f
  1554.                              ____V___       ____V___     ___V____
  1555.                             | FIN-   |  e  | TIME-  | g |        |
  1556.                             |  WAIT-2|---->|   WAIT |-->| CLOSED |
  1557.                             |________|     |________|   |________|
  1558.  
  1559.  
  1560.         Figure 10: Basic State Diagram -- Correct Actions
  1561.  
  1562.  
  1563.    Next we introduce TAO.  If the TAO test succeeds, the connection
  1564.    becomes half-synchronized.  This requires a new set of states,
  1565.    mirroring the states of Figure 10, beginning with acceptance of a SYN
  1566.    (transition "b" or "i"), and ending when ACK(SYN) arrives (transition
  1567.  
  1568.  
  1569.  
  1570. Braden                                                         [Page 28]
  1571.  
  1572. RFC 1379              Transaction TCP -- Concepts          November 1992
  1573.  
  1574.  
  1575.    "c").  Figure 11 shows the result of augmenting Figure 10 with the
  1576.    additional states for TAO.  The transitions are defined in the
  1577.    following table:
  1578.  
  1579.            Key for Figure 11: Complete State Diagram with TAO
  1580.  
  1581.  
  1582.                 Label            Event / Action
  1583.                 _____            ________________________
  1584.  
  1585.                   a              OPEN / create TCB, snd SYN
  1586.                   b'             rcv SYN [no TAO]/ snd SYN,ACK(SYN)
  1587.                   b''            rcv SYN [no TAO]/ snd SYN,FIN,ACK(SYN)
  1588.                   c              rcv ACK(SYN) /
  1589.                   d              CLOSE / snd FIN
  1590.                   d'             CLOSE / snd SYN,FIN
  1591.                   e              rcv FIN / snd ACK(FIN)
  1592.                   e'             rcv FIN / snd SYN,ACK(FIN)
  1593.                   e''            rcv FIN / snd FIN,ACK(FIN)
  1594.                   e'''           rcv FIN / snd SYN,FIN,ACK(FIN)
  1595.                   f              rcv ACK(FIN) /
  1596.                   g              timeout=2MSL / delete TCB
  1597.                   h              passive OPEN / create TCB
  1598.                   i (= b')       rcv SYN [no TAO]/ snd SYN,ACK(SYN)
  1599.                   j              rcv SYN [TAO OK] / snd SYN,ACK(SYN)
  1600.                   k              rcv SYN [TAO OK] / snd SYN,FIN,ACK(SYN)
  1601.  
  1602.  
  1603.  
  1604.    Each new state in Figure 11 bears a very simple relationship to a
  1605.    standard TCP state.  We indicate this by naming the new state with
  1606.    the standard state name followed by a star.  States SYN-SENT* and
  1607.    SYN-RECEIVED* differ from the corresponding unstarred states in
  1608.    recording the fact that a FIN has been sent.  The other new states
  1609.    with starred names differ from the corresponding unstarred states in
  1610.    being half-synchronized (hence, a SYN bit needs to be transmitted).
  1611.  
  1612.    The state diagram of Figure 11 is more general than required for
  1613.    transaction processing.  In particular, it handles simultaneous
  1614.    connection synchronization from both sides, allowing one or both
  1615.    sides to bypass the 3-way handshake.  It includes other transitions
  1616.    that are unlikely in normal transaction processing, for example, the
  1617.    server sending a FIN before it receives a FIN from the client
  1618.    (ESTABLISHED* -> FIN-WAIT-1* in Figure 11).
  1619.  
  1620.  
  1621.  
  1622.  
  1623.  
  1624.  
  1625.  
  1626. Braden                                                         [Page 29]
  1627.  
  1628. RFC 1379              Transaction TCP -- Concepts          November 1992
  1629.  
  1630.  
  1631.    ________                  ________
  1632.   |        |      h         |        |
  1633.   | CLOSED |--------------->| LISTEN |
  1634.   |________|                |________|
  1635.        |                     /     |
  1636.       a|                    / i    | j
  1637.        |                   /       |
  1638.        |                  /       _V______               ________
  1639.        |           j      |      |ESTAB-  |       e'    | CLOSE- |
  1640.        |        /---------|----->| LISHED*|------------>|   WAIT*|
  1641.        |       /          |      |________|             |________|
  1642.        |      /           |       |     |                 |    |
  1643.        |     /            |       |d'   | c            d' |    | c
  1644.    ____V___ /       ______V_      |    _V______           |   _V______
  1645.   | SYN-   |   b'  |  SYN-  | c   |   |ESTAB-  |  e       |  | CLOSE- |
  1646.   |   SENT |------>|RECEIVED|-----|-->|  LISHED|----------|->|   WAIT |
  1647.   |________|       |________|     |   |________|          |  |________|
  1648.        |               |          |     |                 |       |
  1649.        |               |          |     |              ___V____   |
  1650.        |               |          |     |             | LAST-  |  |
  1651.        | d'            | d'       | d'  | d           |  ACK*  |  |
  1652.        |               |          |     |             |________|  |
  1653.        |               |          |     |                    |    |
  1654.        |               |    ______V_    |        ________    |c   |d
  1655.        |          k    |   |  FIN-  |   |  e''' |        |   |    |
  1656.        |        /------|-->| WAIT-1*|---|------>|CLOSING*|   |    |
  1657.        |       /       |   |________|   |       |________|   |    |
  1658.        |      /        |          |     |            |       |    |
  1659.        |     /         |          | c   |            | c     |    |
  1660.    ____V___ /      ____V___       V_____V_       ____V___    V____V__
  1661.   | SYN-   |  b'' |  SYN-  |  c  |  FIN-  | e'' |        |  | LAST-  |
  1662.   |  SENT* |----->|RECEIVD*|---->| WAIT-1 |---->|CLOSING |  |   ACK  |
  1663.   |________|      |________|     |________|     |________|  |________|
  1664.                                      |               |           |
  1665.                                      | f             | f         | f
  1666.                                   ___V____       ____V___     ___V____
  1667.                                  |  FIN-  | e   |TIME-   | g |        |
  1668.                                  | WAIT-2 |---->|   WAIT |-->| CLOSED |
  1669.                                  |________|     |________|   |________|
  1670.  
  1671.        Figure 11: Complete State Diagram with TAO
  1672.  
  1673.  
  1674.  
  1675.    The relationship between starred and unstarred states is very
  1676.    regular.  As a result, the state extensions can be implemented very
  1677.    simply using the standard TCP FSM with the addition of two "hidden"
  1678.    boolean flags, as described in the functional specification memo
  1679.  
  1680.  
  1681.  
  1682. Braden                                                         [Page 30]
  1683.  
  1684. RFC 1379              Transaction TCP -- Concepts          November 1992
  1685.  
  1686.  
  1687.    [TTCP-FS].
  1688.  
  1689.    As an example of the application of Figure 11, consider the minimal
  1690.    transaction shown in Figure 12.
  1691.  
  1692.  
  1693.        TCP A  (Client)                                 TCP B (Server)
  1694.        _______________                                 ______________
  1695.  
  1696.        CLOSED                                                  LISTEN
  1697.  
  1698.    1.  SYN-SENT*    --> <SYN,data1,FIN,CC=x1> -->     CLOSE-WAIT*
  1699.                                                       (TAO test OK=>
  1700.                                                        data1->user_B)
  1701.  
  1702.                                                              LAST-ACK*
  1703.               <-- <SYN,ACK(FIN),data2,FIN,CC=y1,CC.ECHO=x1> <--
  1704.    2.  TIME-WAIT
  1705.     (TAO test OK,
  1706.      data2->user_A)
  1707.  
  1708.  
  1709.    3.  TIME-WAIT          --> <ACK(FIN),CC=x2> -->              CLOSED
  1710.  
  1711.        (timeout)
  1712.          CLOSED
  1713.  
  1714.  
  1715.              Figure 12: Minimal Transaction Sequence
  1716.  
  1717.    Sending segment #1 leaves the client end in SYN-SENT* state, which
  1718.    differs from SYN-SENT state in recording the fact that a FIN has been
  1719.    sent.  At the server end, passing the TAO test enters ESTABLISHED*
  1720.    state, which passes the data to the user as in ESTABLISHED state and
  1721.    also records the fact that the connection is half synchronized.  Then
  1722.    the server processes the FIN bit of segment #1, moving to CLOSE-WAIT*
  1723.    state.
  1724.  
  1725.    Moving to CLOSE-WAIT* state should cause the server to send a segment
  1726.    containing SYN and ACK(FIN).  However, transmission of this segment
  1727.    is deferred so the server can piggyback the response data and FIN on
  1728.    the same segment, unless a timeout occurs first.  When the server
  1729.    does send segment #2 containing the response data2 and a FIN, the
  1730.    connection advances from CLOSE-WAIT* to LAST-ACK* state; the
  1731.    connection is still half-synchronized from B's viewpoint.
  1732.  
  1733.    Processing segment #2 at the client again results in multiple
  1734.    transitions:
  1735.  
  1736.  
  1737.  
  1738. Braden                                                         [Page 31]
  1739.  
  1740. RFC 1379              Transaction TCP -- Concepts          November 1992
  1741.  
  1742.  
  1743.        SYN-SENT* -> FIN-WAIT-1* -> CLOSING* -> CLOSING -> TIME-WAIT
  1744.  
  1745.    These correspond respectively to receiving a SYN, a FIN, an ACK for
  1746.    A's SYN, and an ACK for A's FIN.
  1747.  
  1748.    Figure 13 shows a slightly more complex example, a transaction
  1749.    sequence in which request and response data each require two
  1750.    segments.  This figure assumes that both client and server TCP are
  1751.    well-behaved, so that e.g., the client sends the single segment #5 to
  1752.    acknowledge both data segments #3 and #4.  SEG.CC values are omitted
  1753.    for clarity.
  1754.  
  1755.  
  1756.         _T_C_P__A                                            _T_C_P__B
  1757.  
  1758.  
  1759.     1.  SYN-SENT*      --> <SYN,data1>   -->         ESTABLISHED*
  1760.                                                     (TAO OK,
  1761.                                                      data1-> user)
  1762.  
  1763.     2.  SYN-SENT*      --> <data2,FIN>   -->          CLOSE-WAIT*
  1764.                                                     (data2-> user)
  1765.  
  1766.     3.  FIN-WAIT-2     <-- <SYN,ACK(FIN),data3> <--   CLOSE-WAIT*
  1767.          (data3->user)
  1768.  
  1769.     4.  TIME_WAIT      <-- <ACK(FIN),data4,FIN> <--     LAST-ACK*
  1770.          (data4->user)
  1771.  
  1772.     5.  TIME-WAIT      --> <ACK(FIN)> -->                  CLOSED
  1773.  
  1774.  
  1775.          Figure 13. Multi-Packet Request/Response Transaction
  1776.  
  1777.  
  1778. 7.  CONCLUSIONS AND ACKNOWLEDGMENTS
  1779.  
  1780.    TCP was designed to be a highly symmetric protocol.  This symmetry is
  1781.    evident in the piggy-backing of acknowledgments on data and in the
  1782.    common header format for data segments and acknowledgments.  On the
  1783.    other hand, the examples and discussion in this memo are in general
  1784.    highly unsymmetrical; the actions of a "client" are clearly
  1785.    distinguished from those of a "server".  To explain this apparent
  1786.    discrepancy, we note the following.  Even when TCP is used for
  1787.    virtual circuit service, the data transfer phase is symmetrical but
  1788.    the open and close phases are not.  A minimal transaction, consisting
  1789.    of one segment in each direction, compresses the open, data transfer,
  1790.    and close phases together, and making the asymmetry of the open and
  1791.  
  1792.  
  1793.  
  1794. Braden                                                         [Page 32]
  1795.  
  1796. RFC 1379              Transaction TCP -- Concepts          November 1992
  1797.  
  1798.  
  1799.    close phases dominant.  As request and response messages increase in
  1800.    size, the virtual circuit model becomes increasingly relevant, and
  1801.    symmetry again dominates.
  1802.  
  1803.    TCP's 3-way handshake precludes any performance gain from including
  1804.    data on a SYN segment, while TCP's full-duplex data-conserving close
  1805.    sequence ties up communication resources to the detriment of high-
  1806.    speed transactions.  Merely loading more control bits onto TCP data
  1807.    segments does not provide efficient transaction service.  To use TCP
  1808.    as an effective transaction transport protocol requires bypassing the
  1809.    3-way handshake and shortening the TIME-WAIT delay.  This memo has
  1810.    proposed a backwards-compatible TCP extension to accomplish both
  1811.    goals.  It is our hope that by building upon the current version of
  1812.    TCP, we can give a boost to community acceptance of the new
  1813.    facilities.  Furthermore, the resulting protocol implementations will
  1814.    retain the algorithms that have been developed for flow and
  1815.    congestion control in TCP [Jacobson88].
  1816.  
  1817.    O'Malley and Peterson have recently recommended against backwards-
  1818.    compatible extensions to TCP, and suggested instead a mechanism to
  1819.    allow easy installation of alternative versions of a protocol [RFC-
  1820.    1263].  While this is an interesting long-term approach, in the
  1821.    shorter term we suggest that incremental extension of the current TCP
  1822.    may be a more effective route.
  1823.  
  1824.    Besides the backward-compatible extension proposed here, there are
  1825.    two other possible approaches to making efficient transaction
  1826.    processing widely available in the Internet: (1) a new version of TCP
  1827.    or (2) a new protocol specifically adapted to transactions.  Since
  1828.    current TCP "almost" supports transactions, we favor (1) over (2).  A
  1829.    new version of TCP that retained the semantics of STD-007 but used 64
  1830.    bit sequence numbers with the procedures and states described in
  1831.    Sections 3, 4, and 6 of this memo would support transactions as well
  1832.    as virtual circuits in a clean, coherent manner.
  1833.  
  1834.    A potential application of transaction-mode TCP might be SMTP.  If
  1835.    commands and responses are batched, in favorable cases complete SMTP
  1836.    delivery operations on short messages could be performed with a
  1837.    single minimal transaction; on the other hand, the body of a message
  1838.    may be arbitrarily large.  Using a TCP extended as in this memo could
  1839.    significantly reduce the load on large mail hosts.
  1840.  
  1841.    This work began as an elaboration of the concept of TAO, due to Dave
  1842.    Clark.  I am grateful to him and to Van Jacobson, John Wroclawski,
  1843.    Dave Borman, and other members of the End-to-End Research group for
  1844.    helpful ideas and critiques during the long development of this work.
  1845.    I also thank Liming Wei, who tested the initial implementation in Sun
  1846.    OS.
  1847.  
  1848.  
  1849.  
  1850. Braden                                                         [Page 33]
  1851.  
  1852. RFC 1379              Transaction TCP -- Concepts          November 1992
  1853.  
  1854.  
  1855. APPENDIX A -- TIME-WAIT STATE AND THE 2-PACKET EXCHANGE
  1856.  
  1857.    This appendix considers the implications of reducing TIME-WAIT state
  1858.    delay below that given in formula [2].
  1859.  
  1860.    An immediate consequence of this would be the requirement for the
  1861.    server host to accept an initial SYN for a connection in LAST-ACK
  1862.    state.  Without the transaction extensions, the arrival of a new
  1863.    <SYN> in LAST-ACK state looks to TCP like a half-open connection, and
  1864.    TCP's rules are designed to restore correspondence by destroying the
  1865.    state (through sending a RST segment) at one end or the other.  We
  1866.    would need to thwart this action in the case of transactions.
  1867.  
  1868.    There are two different possible ways to further reduce TIME-WAIT
  1869.    delay.
  1870.  
  1871.    (1)  Explicit Truncation of TIME-WAIT state
  1872.  
  1873.         TIME-WAIT state could be explicitly truncated by accepting a new
  1874.         sendto() request for a connection in TIME-WAIT state.
  1875.  
  1876.         This would allow the ACK(FIN) segment to be delayed and sent
  1877.         only if a timeout occurs before a new request arrives.  This
  1878.         allows an ideal 2-segment exchange for closely-spaced
  1879.         transactions, which would restore some symmetry to the
  1880.         transaction exchange.  However, explicit truncation would
  1881.         represent a significant change in many implementations.
  1882.  
  1883.         It might be supposed that even greater symmetry would result if
  1884.         the new request segment were a <SYN,ACK> that explicitly
  1885.         acknowledges the previous reply, rather than a <SYN> that is
  1886.         only an implicit acknowledgment.  However, the new request
  1887.         segment might arrive at B to find the server side in either
  1888.         LAST-ACK or CLOSED state, depending upon whether the ACK(FIN)
  1889.         had arrived.  In CLOSED state, a <SYN,ACK> would not be
  1890.         acceptable.  Hence, if the client sent an initial <SYN,ACK>
  1891.         instead of a <SYN> segment, there would be a race condition at
  1892.         the server.
  1893.  
  1894.    (2)  No TIME-WAIT delay
  1895.  
  1896.         TIME-WAIT delay could be removed entirely.  This would imply
  1897.         that the ACK(FIN) would always be sent (which does not of course
  1898.         guarantee that it will be received).  As a result, the arrival
  1899.         of a new SYN in LAST-ACK state would be rare.
  1900.  
  1901.         This choice is much simpler to implement.  Its drawback is that
  1902.         the server will get a false failure report if the ACK(FIN) is
  1903.  
  1904.  
  1905.  
  1906. Braden                                                         [Page 34]
  1907.  
  1908. RFC 1379              Transaction TCP -- Concepts          November 1992
  1909.  
  1910.  
  1911.         lost.  This may not matter in practice, but it does represent a
  1912.         significant change of TCP semantics.  It should be noted that
  1913.         reliable delivery of the reply is not an issue.  The client
  1914.         enter TIME-WAIT state only after the entire reply, including the
  1915.         FIN bit, has been received successfully.
  1916.  
  1917.    The server host B must be certain that a new request received in
  1918.    LAST-ACK state is indeed a new SYN and not an old duplicate;
  1919.    otherwise, B could falsely acknowledge a previous response that has
  1920.    not in fact been delivered to A.  If the TAO comparison succeeds, the
  1921.    SYN must be new; however, the server has a dilemma if the TAO test
  1922.    fails.
  1923.  
  1924.    In Figure A.1, for example, the reply segment from the first
  1925.    transaction has been lost; since it has not been acknowledged, it is
  1926.    still in B's retransmission queue.  An old duplicate request, segment
  1927.    #3, arrives at B and its TAO test fails.  B is in the position of
  1928.    having old state it cannot discard (the retransmission queue) and
  1929.    needing to build new state to pursue a 3-way handshake to validate
  1930.    the new SYN.  If the 3-way handshake failed, it would need to restore
  1931.    the earlier LAST-ACK* state.  (Compare with Figure 15 "Old Duplicate
  1932.    SYN Initiates a Reset on Two Passive Sockets" in STD-007).  This
  1933.    would be complex and difficult to accomplish in many implementations.
  1934.  
  1935.  
  1936.        TCP A  (Client)                               TCP B (Server)
  1937.        _______________                               ______________
  1938.  
  1939.          CLOSED                                          LISTEN
  1940.  
  1941.  
  1942.    1.    SYN-SENT*       --> <SYN,data1,FIN> -->    CLOSE-WAIT*
  1943.                                                      (TAO test OK;
  1944.                                                       data1->server)
  1945.  
  1946.    2.        (lost) X<-- <SYN,ACK(FIN),data2,FIN> <-- LAST-ACK*
  1947.  
  1948.                    (old duplicate)
  1949.    3.                     ... <SYN,data3,FIN> -->     LAST-ACK*
  1950.                                                   (TAO test fail;
  1951.                                                    3-way handshake?)
  1952.  
  1953.                  Figure A.1: The Server's Dilemma
  1954.  
  1955.  
  1956.    The only practical action A can taken when the TAO test fails on a
  1957.    new SYN received in LAST-ACK state is to ignore the SYN, assuming it
  1958.    is really an old duplicate.  We must pursue the possible consequences
  1959.  
  1960.  
  1961.  
  1962. Braden                                                         [Page 35]
  1963.  
  1964. RFC 1379              Transaction TCP -- Concepts          November 1992
  1965.  
  1966.  
  1967.    of this action.
  1968.  
  1969.    Section 3.1 listed four possible reasons for failure of the TAO test
  1970.    on a legitimate SYN segment: (1) no cached state, (2) out-of-order
  1971.    delivery of SYNs, (3) wraparound of CCgen relative to the cached
  1972.    value, or (4) the M values advance too slowly.   We are assuming that
  1973.    there is a cached CC value at B (otherwise, the SYN cannot be
  1974.    acceptable in LAST-ACK state).  Wrapping the CC space is very
  1975.    unlikely and probably impossible; it is difficult to imagine
  1976.    circumstances which would allow the new SYN to be delivered but not
  1977.    the ACK(FIN), especially given the long wraparound time of CCgen.
  1978.  
  1979.    This leaves the problem of out-of-order delivery of two nearly-
  1980.    concurrent SYNs for different ports.  The second to be delivered may
  1981.    have a lower CC option and thus be locked out.  This can be solved by
  1982.    using a new CCgen value for every retransmission of an initial SYN.
  1983.  
  1984.    Truncation of TIME-WAIT state and acceptance of a SYN in LAST-ACK
  1985.    state should take place only if there is a cached CC value for the
  1986.    remote host.  Otherwise, a SYN arriving in LAST-ACK state is to be
  1987.    processed by normal TCP rules, which will result in a RST segment
  1988.    from either A or B.
  1989.  
  1990.    This discussion leads to a paradigm for rejecting old duplicate
  1991.    segments that is different from TAO.  This alternative scheme is
  1992.    based upon the following:
  1993.  
  1994.    (a)  Each retransmission of an initial SYN will have a new value of
  1995.         CC, as described above.
  1996.  
  1997.         This provision takes care of reordered SYNs.
  1998.  
  1999.    (b)  A host maintains a distinct CCgen value for each remote host.
  2000.         This value could easily be maintained in the same cache used for
  2001.         the received CC values, e.g., as cache.CCgen[].
  2002.  
  2003.         Once the caches are primed, it should always be true that
  2004.         cache.CCgen[B] on host A is equal to cache.CC[A] on host B, and
  2005.         the next transaction from A will carry a CC value exactly 1
  2006.         greater.  Thus, there is no problem of wraparound of the CC
  2007.         value.
  2008.  
  2009.    (c)  A new SYN is acceptable if its SEG.CC > cache.CC[client],
  2010.         otherwise the SYN is ignored as an old duplicate.
  2011.  
  2012.    This alternative paradigm was not adopted because it would be a
  2013.    somewhat greater perturbation of TCP rules, because it may not have
  2014.    the robustness of TAO, and because all of its consequences may not be
  2015.  
  2016.  
  2017.  
  2018. Braden                                                         [Page 36]
  2019.  
  2020. RFC 1379              Transaction TCP -- Concepts          November 1992
  2021.  
  2022.  
  2023.    understood.
  2024.  
  2025.  
  2026. REFERENCES
  2027.  
  2028.     [Birrell84]  Birrell, A. and B. Nelson, "Implementing Remote
  2029.       Procedure Calls", ACM TOCS, Vo. 2, No. 1, February 1984.
  2030.  
  2031.     [Clark88]  Clark, D., "The Design Philosophy of the Internet
  2032.       Protocols", ACM SIGCOMM '88, Stanford, CA, August 1988.
  2033.  
  2034.     [Clark89]  Clark, D., Private communication, 1989.
  2035.  
  2036.     [Garlick77]  Garlick, L., R. Rom, and J. Postel, "Issues in Reliable
  2037.       Host-to-Host Protocols", Proc. Second Berkeley Workshop on
  2038.       Distributed Data Management and Computer Networks, May 1977.
  2039.  
  2040.     [HR-COMM]  Braden, R., Ed., "Requirements for Internet Hosts --
  2041.       Communication Layers", STD-003, RFC-1122, October 1989.
  2042.  
  2043.     [Jacobson88] Jacobson, V., "Congestion Avoidance and Control",
  2044.       SIGCOMM '88, Stanford, CA., August 1988.
  2045.  
  2046.     [Jacobson90] Jacobson, V., private communication, 1990.
  2047.  
  2048.     [Liskov90]  Liskov, B., Shrira, L., and J. Wroclawski, "Efficient
  2049.       At-Most-Once Messages Based on Synchronized Clocks", ACM SIGCOMM
  2050.       '90, Philadelphia, PA, September 1990.
  2051.  
  2052.     [RFC-955]  Braden, R., "Towards a Transport Service Transaction
  2053.       Protocol", RFC-955, September 1985.
  2054.  
  2055.     [RFC-1185]  Jacobson, V., Braden, R., and Zhang, L., "TCP Extension
  2056.       for High-Speed Paths", RFC-1185, October 1990.
  2057.  
  2058.     [RFC-1263]  O'Malley, S. and L. Peterson, "TCP Extensions Considered
  2059.       Harmful", RFC-1263, University of Arizona, October 1991.
  2060.  
  2061.     [RFC-1323]  Jacobson, V., Braden, R., and Borman, D., "TCP
  2062.       Extensions for High Performance, RFC-1323, February 1991.
  2063.  
  2064.     [RFC-1337]  Braden, R., "TIME-WAIT Assassination Hazards in TCP",
  2065.       RFC-1337, May 1992.
  2066.  
  2067.     [STD-007]  Postel, J., "Transmission Control Protocol - DARPA
  2068.       Internet Program Protocol Specification", STD-007, RFC-793,
  2069.       September 1981.
  2070.  
  2071.  
  2072.  
  2073.  
  2074. Braden                                                         [Page 37]
  2075.  
  2076. RFC 1379              Transaction TCP -- Concepts          November 1992
  2077.  
  2078.  
  2079.     [TTCP-FS]  Braden, R., "Transaction TCP -- Functional
  2080.       Specification", Work in Progress, September 1992.
  2081.  
  2082.     [Watson81]  Watson, R., "Timer-based Mechanisms in Reliable
  2083.       Transport Protocol Connection Management", Computer Networks, Vol.
  2084.       5, 1981.
  2085.  
  2086. Security Considerations
  2087.  
  2088.    Security issues are not discussed in this memo.
  2089.  
  2090. Author's Address
  2091.  
  2092.    Bob Braden
  2093.    University of Southern California
  2094.    Information Sciences Institute
  2095.    4676 Admiralty Way
  2096.    Marina del Rey, CA 90292
  2097.  
  2098.    Phone: (310) 822-1511
  2099.    EMail: Braden@ISI.EDU
  2100.  
  2101.  
  2102.  
  2103.  
  2104.  
  2105.  
  2106.  
  2107.  
  2108.  
  2109.  
  2110.  
  2111.  
  2112.  
  2113.  
  2114.  
  2115.  
  2116.  
  2117.  
  2118.  
  2119.  
  2120.  
  2121.  
  2122.  
  2123.  
  2124.  
  2125.  
  2126.  
  2127.  
  2128.  
  2129.  
  2130. Braden                                                         [Page 38]
  2131.  
  2132.