home *** CD-ROM | disk | FTP | other *** search
/ Internet Info 1997 December / Internet_Info_CD-ROM_Walnut_Creek_December_1997.iso / rfc / rfc2140 < prev    next >
Text File  |  1997-04-28  |  26KB  |  620 lines

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