home *** CD-ROM | disk | FTP | other *** search
/ Internet Info 1997 December / Internet_Info_CD-ROM_Walnut_Creek_December_1997.iso / drafts / draft_s_z / draft-touch-tcp-interdep-00.txt < prev    next >
Text File  |  1996-06-12  |  22KB  |  601 lines

  1. INTERNET-DRAFT                                                 Joe Touch
  2. draft-touch-tcp-interdep-00.txt                                      ISI
  3.                                                            June 11, 1996
  4.                                                   Expires: Dec. 11, 1996
  5.  
  6.                    TCP Control Block Interdependence
  7.  
  8. Status of this Memo
  9.  
  10.    This document is an Internet-Draft.  Internet-Drafts are working
  11.    documents of the Internet Engineering Task Force (IETF), its areas,
  12.    and its working groups.  Note that other groups may also distribute
  13.    working documents as Internet-Drafts.
  14.  
  15.    Internet-Drafts are draft documents valid for a maximum of six months
  16.    and may be updated, replaced, or obsoleted by other documents at any
  17.    time.  It is inappropriate to use Internet- Drafts as reference
  18.    material or to cite them other than as ``work in progress.''
  19.  
  20.    Please check the I-D abstract listing contained in each Internet
  21.    Draft directory to learn the current status of this or any other
  22.    Internet Draft.
  23.  
  24.    The distribution of this document is unlimited.
  25.  
  26. Abstract
  27.  
  28.    This draft makes the case for interdependent TCP control blocks,
  29.    where part of the TCP state is shared among similar concurrent
  30.    connections, or across similar connection instances. TCP state
  31.    includes a combination of parameters, such as connection state,
  32.    current round-trip time estimates, congestion control information,
  33.    and process information.  This state is currently maintained on a
  34.    per-connection basis in the TCP control block, but should be shared
  35.    across connections using to the same host. The goal is to improve
  36.    transient transport performance, while maintaining backward-
  37.    compatibility with existing implementations.
  38.  
  39.    This document is a product of the LSAM project at ISI.  Comments are
  40.    solicited and should be addressed to the author.
  41.  
  42. Introduction
  43.  
  44.    TCP is a connection-oriented reliable transport protocol layered over
  45.    IP [9]. Each TCP connection maintains state, usually in a data
  46.    structure called the TCP Control Block (TCB). The TCB contains
  47.    information about the connection state, its associated local process,
  48.    and feedback parameters about the connection's transmission
  49.    properties. As originally specified and usually implemented, the TCB
  50.    is maintained on a per-connection basis. This document discusses the
  51.    implications of that decision, and argues for an alternate
  52.    implementation that shares some of this state across similar
  53.    connection instances and among similar simultaneous connections. The
  54.    resulting implementation can have better transient performance,
  55.    especially for numerous short-lived and simultaneous connections, as
  56.    often used in the World-Wide Web [1]. These changes affect only the
  57.    TCB initialization, and so have no effect on the long-term behavior
  58.    of TCP after a connection has been established.
  59.  
  60. The TCP Control Block (TCB)
  61.  
  62.    A TCB is associated with each connection, i.e., with each association
  63.    of a pair of applications across the network. The TCB can be
  64.    summarized as containing [9]:
  65.  
  66.         Local process state
  67.  
  68.             pointers to send and receive buffers
  69.             pointers to retransmission queue and current segment
  70.             pointers to Internet Protocol (IP) PCB
  71.  
  72.         Per-connection shared state
  73.  
  74.             macro-state
  75.  
  76.                 connection state
  77.                 timers
  78.                 flags
  79.                 local and remote host numbers and ports
  80.  
  81.             micro-state
  82.  
  83.                 send and receive window state (size*, current number)
  84.                 round-trip time and variance
  85.                 cong. window size*
  86.                 cong. window size threshold*
  87.                 max windows seen*
  88.                 MSS#
  89.                 round-trip time and variance#
  90.  
  91.    The per-connection information is shown as split into macro-state and
  92.    micro-state, terminology borrowed from [5]. Macro-state describes the
  93.    finite state machine; we include the endpoint numbers and components
  94.    (timers, flags) used to help maintain that state. This includes the
  95.    protocol for establishing and maintaining shared state about the
  96.    connection. Micro-state describes the protocol after a connection has
  97.    been established, to maintain the reliability and congestion control
  98.    of the data transferred in the connection.
  99.  
  100.    We further distinguish two other classes of shared micro-state that
  101.    are associated more with host-pairs than with application pairs. One
  102.    class is clearly host-pair dependent (#, e.g., MSS, RTT), and the
  103.    other is host-pair dependent in its aggregate (*, e.g., cong. window
  104.    info., curr. window sizes).
  105.  
  106. TCB Interdependence
  107.  
  108.    The observation that some TCB state is host-pair specific rather than
  109.    application-pair dependent is not new, and is a common engineering
  110.    decision in layered protocol implementations. A discussion of sharing
  111.    RTT information among protocols layered over IP, including UDP and
  112.    TCP, occurred in [8]. T/TCP uses caches to maintain TCB information
  113.    across instances, e.g., smoothed RTT, RTT variance, congestion
  114.    avoidance threshold, and MSS [3].  These values are in addition to
  115.    connection counts used by T/TCP to accelerate data delivery prior to
  116.    the full three-way handshake during an OPEN. The goal is to aggregate
  117.    TCB components where they reflect one association - that of the
  118.    host-pair, rather than artificially separating those components by
  119.    connection.
  120.  
  121.    At least one current T/TCP implementation saves the MSS and
  122.    aggregates the RTT parameters across multiple connections, but omits
  123.    caching the congestion window information [4], as originally
  124.    specified in [2]. There may be other values that may be cached, such
  125.    as current window size, to permit new connections full access to
  126.    accumulated channel resources.
  127.  
  128.    We observe that there are two cases of TCB interdependence. Temporal
  129.    sharing occurs when the TCB of an earlier (now CLOSED) connection to
  130.    a host is used to initialize some parameters of a new connection to
  131.    that same host. Ensemble sharing occurs when a currently active
  132.    connection to a host is used to initialize another (concurrent)
  133.    connection to that host. T/TCP documents considered the temporal
  134.    case; we consider both.
  135.  
  136. An Example of Temporal Sharing
  137.  
  138.    Temporal sharing of cached TCB data has been implemented in the SunOS
  139.    4.1.3 T/TCP extensions [4] and the FreeBSD port of same [7]. As
  140.    mentioned before, only the MSS and RTT parameters are cached, as
  141.    originally specified in [2]. Later discussion of T/TCP suggested
  142.    including congestion control parameters in this cache [3].
  143.  
  144.  
  145.  
  146.  
  147.  
  148.  
  149.  
  150.  
  151.  
  152.  
  153.  
  154.  
  155.  
  156.  
  157.  
  158.  
  159.  
  160.  
  161.  
  162.  
  163.  
  164.  
  165.  
  166.  
  167.  
  168.  
  169.  
  170.  
  171.  
  172.  
  173.  
  174.  
  175.  
  176.  
  177.  
  178.  
  179.  
  180.  
  181.    The cache is accessed in two ways: it is read to initialize new TCBs,
  182.    and written when more current per-host state is available. New TCBs
  183.    are initialized as follows; snd_cwnd reuse is not yet implemented,
  184.    although discussed in the T/TCP concepts [2]:
  185.  
  186.                TEMPORAL SHARING - TCB Initialization
  187.  
  188.              Cached TCB           New TCB
  189.              ----------------------------------------
  190.              old-MSS              old-MSS
  191.  
  192.              old-RTT              old-RTT
  193.  
  194.              old-RTTvar           old-RTTvar
  195.  
  196.              old-snd_cwnd         old-snd_cwnd    (not yet impl.)
  197.  
  198.    Most cached TCB values are updated when a connection closes.  An
  199.    exception is MSS, which is updated whenever the MSS option is
  200.    received in a TCP header.
  201.  
  202.                  TEMPORAL SHARING - Cache Updates
  203.  
  204.     Cached TCB   Current TCB     when?   New Cached TCB
  205.     ---------------------------------------------------------------
  206.     old-MSS      curr-MSS        MSSopt  curr-MSS
  207.  
  208.     old-RTT      curr-RTT        CLOSE   old += (curr - old) >> 2
  209.  
  210.     old-RTTvar   curr-RTTvar     CLOSE   old += (curr - old) >> 2
  211.  
  212.     old-snd_cwnd curr-snd_cwnd   CLOSE   curr-snd_cwnd   (not yet impl.)
  213.  
  214.    MSS caching is trivial; reported values are cached, and the most
  215.    recent value is used. The cache is updated when the MSS option is
  216.    received, so the cache always has the most recent MSS value from any
  217.    connection. The cache is consulted only at connection establishment,
  218.    and not otherwise updated, which means that MSS options do not affect
  219.    current connections. The default MSS is never saved; only reported
  220.    MSS values update the cache, so an explicit override is required to
  221.    reduce the MSS.
  222.  
  223.    RTT values are updated by a more complicated mechanism [3], [8].
  224.    Dynamic RTT estimation requires a sequence of RTT measurements, even
  225.    though a single T/TCP transaction may not accumulate enough samples.
  226.    As a result, the cached RTT (and its variance) is an average of its
  227.    previous value with the contents of the currently active TCB for that
  228.    host, when a TCB is closed. RTT values are updated only when a
  229.    connection is closed. Further, the method for averaging the RTT
  230.    values is not the same as the method for computing the RTT values
  231.    within a connection, so that the cached value may not be appropriate.
  232.  
  233.    For temporal sharing, the cache requires updating only when a
  234.    connection closes, because the cached values will not yet be used to
  235.    initialize a new TCB. For the ensemble sharing, this is not the case,
  236.    as discussed below.
  237.  
  238.    Other TCB variables may also be cached between sequential instances,
  239.    such as the congestion control window information. Old cache values
  240.    can be overwritten with the current TCB estimates, or a MAX or MIN
  241.    function can be used to merge the results, depending on the optimism
  242.    or pessimism of the reused values. For example, the congestion window
  243.    can be reused if there are no concurrent connections.
  244.  
  245. An Example of Ensemble Sharing
  246.  
  247.    Sharing cached TCB data across concurrent connections requires
  248.    attention to the aggregate nature of some of the shared state.
  249.    Although MSS and RTT values can be shared by copying, it may not be
  250.    appropriate to copy congestion window information. At this point, we
  251.    present only the MSS and RTT rules:
  252.  
  253.                ENSEMBLE SHARING - TCB Initialization
  254.  
  255.                Cached TCB           New TCB
  256.                ----------------------------------
  257.                old-MSS              old-MSS
  258.  
  259.                old-RTT              old-MSS
  260.  
  261.                old-RTTvar           old-RTTvar
  262.  
  263.  
  264.                     ENSEMBLE SHARING - Cache Updates
  265.  
  266.       Cached TCB   Current TCB     when?   New Cached TCB
  267.       -----------------------------------------------------------
  268.       old-MSS      curr-MSS        MSSopt  curr-MSS
  269.  
  270.       old-RTT      curr-RTT        update  rtt_update(old,curr)
  271.  
  272.       old-RTTvar   curr-RTTvar     update  rtt_update(old,curr)
  273.  
  274.    For ensemble sharing, TCB information should be cached as early as
  275.    possible, sometimes before a connection is closed. Otherwise, opening
  276.    multiple concurrent connections may not result in TCB data sharing if
  277.    no connection closes before others open. An optimistic solution would
  278.    be to update cached data as early as possible, rather than only when
  279.    a connection is closing. Some T/TCP implementations do this for MSS
  280.    when the TCP MSS header option is received [4], although it is not
  281.    addressed specifically in the concepts or functional specification
  282.    [2][3].
  283.  
  284.    In current T/TCP, RTT values are updated only after a CLOSE, which
  285.    does not benefit concurrent sessions. As mentioned in the temporal
  286.    case, averaging values between concurrent connections requires
  287.    incorporating new RTT measurements. The amount of work involved in
  288.    updating the aggregate average should be minimized, but the resulting
  289.    value should be equivalent to having all values measured within a
  290.    single connection. The function "rtt_update" in the ensemble sharing
  291.    table indicates this operation, which occurs whenever the RTT would
  292.    have been updated in the individual TCP connection. As a result, the
  293.    cache contains the shared RTT variables, which no longer need to
  294.    reside in the TCB [8].
  295.  
  296.    Congestion window size aggregation is more complicated in the
  297.    concurrent case.  When there is an ensemble of connections, we need
  298.    to decide how that ensemble would have shared the congestion window,
  299.    in order to derive initial values for new TCBs. Because concurrent
  300.    connections between two hosts share network paths (usually), they
  301.    also share whatever capacity exists along that path.  With regard to
  302.    congestion, the set of connections might behave as if it were
  303.    multiplexed prior to TCP, as if all data were part of a single
  304.    connection. As a result, the current window sizes would maintain a
  305.    constant sum, presuming sufficient offered load. This would go beyond
  306.    caching to truly sharing state, as in the RTT case.
  307.  
  308.    We pause to note that any assumption of this sharing can be
  309.    incorrect, including this one. In current implementations, new
  310.    congestion windows are set at an initial value of one segment, so
  311.    that the sum of the current windows is increased for any new
  312.    connection. This can have detrimental consequences where several
  313.    connections share a highly congested link, such as in trans-Atlantic
  314.    Web access.
  315.  
  316.    There are several ways to initialize the congestion window in a new
  317.    TCB among an ensemble of current connections to a host, as shown
  318.    below. Current TCP implementations initialize it to one segment [9],
  319.    and T/TCP hinted that it should be initialized to the old window size
  320.    [3]. In the former, the assumption is that new connections should
  321.    behave as conservatively as possible. In the latter, no accommodation
  322.    is made to concurrent aggregate behavior.
  323.  
  324.  
  325.  
  326.  
  327.  
  328.  
  329.  
  330.  
  331.  
  332.  
  333.  
  334.  
  335.  
  336.  
  337.  
  338.  
  339.  
  340.  
  341.  
  342.  
  343.  
  344.  
  345.  
  346.  
  347.  
  348.  
  349.  
  350.  
  351.  
  352.  
  353.  
  354.  
  355.  
  356.  
  357.  
  358.  
  359.  
  360.  
  361.    In either case, the sum of window sizes can increase, rather than
  362.    remain constant. Another solution is to give each pending connection
  363.    its "fair share" of the available congestion window, and let the
  364.    connections balance from there. The assumption we make here is that
  365.    new connections are implicit requests for an equal share of available
  366.    link bandwidth which should be granted at the expense of current
  367.    connections. This may or may not be the appropriate function; we
  368.    propose that it be examined further.
  369.  
  370.                 ENSEMBLE SHARING - TCB Initialization
  371.                 Some Options for Sharing Window-size
  372.  
  373.     Cached TCB                           New TCB
  374.     -----------------------------------------------------------------
  375.     old-snd_cwnd         (current)       one segment
  376.  
  377.                          (T/TCP hint)    old-snd_cwnd
  378.  
  379.                          (proposed)      old-snd_cwnd/(N+1)
  380.                                          subtract old-snd_cwnd/(N+1)/N
  381.                                          from each concurrent
  382.  
  383.  
  384.                  ENSEMBLE SHARING - Cache Updates
  385.  
  386.     Cached TCB   Current TCB     when?   New Cached TCB
  387.     ----------------------------------------------------------------
  388.     old-snd_cwnd curr-snd_cwnd   update  (adjust sum as appropriate)
  389.  
  390. Compatibility Issues
  391.  
  392.    Current TCP implementations do not use TCB caching, with the
  393.    exception of T/TCP variants [4][7]. New connections use the default
  394.    initial values of all non-instantiated TCB variables. As a result,
  395.    each connection calculates its own RTT measurements, MSS value, and
  396.    congestion information. Eventually these values are updated for each
  397.    connection.
  398.  
  399.    For the congestion and current window information, the initial values
  400.    may not be consistent with the long-term aggregate behavior of a set
  401.    of concurrent connections. If a single connection has a window of 4
  402.    segments, new connections assume initial windows of 1 segment (the
  403.    minimum), although the current connection's window doesn't decrease
  404.    to accommodate this additional load. As a result, connections can
  405.    mutually interfere. One example of this has been seen on trans-
  406.    Atlantic links, where concurrent connections supporting Web traffic
  407.    can collide because their initial windows are too large, even when
  408.    set at one segment.
  409.  
  410.    Because this proposal attempts to anticipate the aggregate steady-
  411.    state values of TCB state among a group or over time, it should avoid
  412.    the transient effects of new connections. In addition, because it
  413.    considers the ensemble and temporal properties of those aggregates,
  414.    it should also prevent the transients of short-lived or multiple
  415.    concurrent connections from adversely affecting the overall network
  416.    performance. We are performing analysis and experiments to validate
  417.    these assumptions.
  418.  
  419. Performance Considerations
  420.  
  421.    Here we attempt to optimize transient behavior of TCP without
  422.    modifying its long-term properties. The predominant expense is in
  423.    maintaining the cached values, or in using per-host state rather than
  424.    per-connection state. In cases where performance is affected,
  425.    however, we note that the per-host information can be kept in per-
  426.    connection copies (as done now), because with higher performance
  427.    should come less interference between concurrent connections.
  428.  
  429.    Sharing TCB state can occur only at connection establishment and
  430.    close (to update the cache), to minimize overhead, optimize transient
  431.    behavior, and minimize the effect on the steady-state. It is possible
  432.    that sharing state during a connection, as in the RTT or window-size
  433.    variables, may be of benefit, provided its implementation cost is not
  434.    high.
  435.  
  436. Implications
  437.  
  438.    There are several implications to incorporating TCB interdependence
  439.    in TCP implementations. First, it may prevent the need for
  440.    application-layer multiplexing for performance enhancement [6].
  441.    Protocols like persistent-HTTP avoid connection reestablishment costs
  442.    by serializing or multiplexing a set of per-host connections across a
  443.    single TCP connection. This avoids TCP's per-connection OPEN
  444.    handshake, and also avoids recomputing MSS, RTT, and congestion
  445.    windows. By avoiding the so-called, "slow-start restart," performance
  446.    can be optimized. Our proposal provides the MSS, RTT, and OPEN
  447.    handshake avoidance of T/TCP, and the "slow-start restart avoidance"
  448.    of multiplexing, without requiring a multiplexing mechanism at the
  449.    application layer. This multiplexing will be complicated when
  450.    quality-of-service mechanisms (e.g., "integrated services
  451.    scheduling") are provided later.
  452.  
  453.    Second, we are attempting to push some of the TCP implementation from
  454.    the traditional transport layer (in the ISO model [10]), to the
  455.    network layer. This acknowledges that some state currently maintained
  456.    as per-connection is in fact per-path, which we simplify as per-
  457.    host-pair. Transport protocols typically manage per-application-pair
  458.    associations (per stream), and network protocols manage per-path
  459.    associations (routing). Round-trip time, MSS, and congestion
  460.    information is more appropriately handled in a network-layer fashion,
  461.    aggregated among concurrent connections, and shared across connection
  462.    instances.
  463.  
  464.    An earlier version of RTT sharing suggested implementing RTT state at
  465.    the IP layer, rather than at the TCP layer [8]. Our observations are
  466.    for sharing state among TCP connections, which avoids some of the
  467.    difficulties in an IP-layer solution. One such problem is determining
  468.    the associated prior outgoing packet for an incoming packet, to infer
  469.    RTT from the exchange. Because RTTs are still determined inside the
  470.    TCP layer, this is simpler than at the IP layer. This is a case where
  471.    information should be computed at the transport layer, but shared at
  472.    the network layer.
  473.  
  474.    We also note that per-host-pair associations are not the limit of
  475.    these techniques. It is possible that TCBs could be similarly shared
  476.    between hosts on a LAN, because the predominant path can be LAN-LAN,
  477.    rather than host-host.
  478.  
  479.    There may be other information that can be shared between concurrent
  480.    connections. For example, knowing that another connection has just
  481.    tried to expand its window size and failed, a connection may not
  482.    attempt to do the same for some period. The idea is that existing TCP
  483.    implementations infer the behavior of all competing connections,
  484.    including those within the same host or LAN. One possible
  485.    optimization is to make that implicit feedback explicit, via extended
  486.    information in the per-host TCP area.
  487.  
  488. Security Considerations
  489.  
  490.    Security considerations are not addressed here.
  491.  
  492. Acknowledgements
  493.  
  494.    The author would like to thank the members of the High-Performance
  495.    Computing and Communications Division at ISI, notably Bill Manning,
  496.    Bob Braden, Jon Postel, and Ted Faber for their assistance in the
  497.    development of this draft.
  498.  
  499. References
  500.  
  501.  
  502.    [1] Berners-Lee, T., et al., "The World-Wide Web," Communications of
  503.        the ACM, V37, Aug. 1994, pp. 76-82.
  504.  
  505.    [2] Braden, R., "Transaction TCP -- Concepts," RFC-1379,
  506.        USC/Information Sciences Institute, September 1992.
  507.  
  508.    [3] Braden, R., "T/TCP -- TCP Extensions for Transactions Functional
  509.        Specification," RFC-1644, USC/Information Sciences Institute,
  510.        July 1994.
  511.  
  512.    [4] Braden, B., "T/TCP -- Transaction TCP: Source Changes for Sun OS
  513.        4.1.3,", Release 1.0, USC/ISI, September 14, 1994.
  514.  
  515.    [5] Comer, D., and Stevens, D., Internetworking with TCP/IP, V2,
  516.        Prentice-Hall, NJ, 1991.
  517.  
  518.    [6] Fielding, R., et al., "Hypertext Transfer Protocol -- HTTP/1.1,"
  519.        (work in progress), 06/04/1996, <draft-ietf-http-v11-spec-04.
  520.  
  521.    [7] FreeBSD source code, Release 2.10, <http://www.freebsd.org/>.
  522.  
  523.    [8] Jacobson, V., (mail to public list "tcp-ip", no archive found),
  524.        1986.
  525.  
  526.    [9] Postel, Jon, "Transmission Control Protocol," Network Working
  527.        Group RFC-793/STD-7, ISI, Sept. 1981.
  528.  
  529.    [10] Tannenbaum, A., Computer Networks, Prentice-Hall, NJ, 1988.
  530.  
  531. Author's Address
  532.  
  533.    Joe Touch
  534.    University of Southern California/Information Sciences Institute
  535.    4676 Admiralty Way
  536.    Marina del Rey, CA 90292-6695
  537.    USA
  538.    Phone: +1 310-822-1511 x151
  539.    Fax:   +1 310-823-6714
  540.    URL:   http://www.isi.edu/~touch
  541.    Email: touch@isi.edu
  542.  
  543.  
  544.  
  545.  
  546.  
  547.  
  548.  
  549.  
  550.  
  551.  
  552.  
  553.  
  554.  
  555.  
  556.  
  557.  
  558.  
  559.  
  560.  
  561.  
  562.  
  563.  
  564.  
  565.  
  566.  
  567.  
  568.  
  569.  
  570.  
  571.  
  572.  
  573.  
  574.  
  575.  
  576.  
  577.  
  578.  
  579.  
  580.  
  581.  
  582.  
  583.  
  584.  
  585.  
  586.  
  587.  
  588.  
  589.  
  590.  
  591.  
  592.  
  593.  
  594.  
  595.  
  596.  
  597.  
  598.  
  599.  
  600.  
  601.