home *** CD-ROM | disk | FTP | other *** search
/ Unix System Administration Handbook 1997 October / usah_oct97.iso / rfc / 2000s / rfc2018.txt < prev    next >
Text File  |  1996-10-15  |  26KB  |  676 lines

  1.  
  2.  
  3.  
  4.  
  5.  
  6.  
  7. Network Working Group                                        M. Mathis
  8. Request for Comments: 2018                                  J. Mahdavi
  9. Category: Standards Track                                          PSC
  10.                                                               S. Floyd
  11.                                                                   LBNL
  12.                                                             A. Romanow
  13.                                                       Sun Microsystems
  14.                                                           October 1996
  15.  
  16.  
  17.                   TCP Selective Acknowledgment Options
  18.  
  19. Status of this Memo
  20.  
  21.    This document specifies an Internet standards track protocol for the
  22.    Internet community, and requests discussion and suggestions for
  23.    improvements.  Please refer to the current edition of the "Internet
  24.    Official Protocol Standards" (STD 1) for the standardization state
  25.    and status of this protocol.  Distribution of this memo is unlimited.
  26.  
  27. Abstract
  28.  
  29.    TCP may experience poor performance when multiple packets are lost
  30.    from one window of data.   With the limited information available
  31.    from cumulative acknowledgments, a TCP sender can only learn about a
  32.    single lost packet per round trip time.  An aggressive sender could
  33.    choose to retransmit packets early, but such retransmitted segments
  34.    may have already been successfully received.
  35.  
  36.    A Selective Acknowledgment (SACK) mechanism, combined with a
  37.    selective repeat retransmission policy, can help to overcome these
  38.    limitations.  The receiving TCP sends back SACK packets to the sender
  39.    informing the sender of data that has been received. The sender can
  40.    then retransmit only the missing data segments.
  41.  
  42.    This memo proposes an implementation of SACK and discusses its
  43.    performance and related issues.
  44.  
  45. Acknowledgements
  46.  
  47.    Much of the text in this document is taken directly from RFC1072 "TCP
  48.    Extensions for Long-Delay Paths" by Bob Braden and Van Jacobson.  The
  49.    authors would like to thank Kevin Fall (LBNL), Christian Huitema
  50.    (INRIA), Van Jacobson (LBNL), Greg Miller (MITRE), Greg Minshall
  51.    (Ipsilon), Lixia Zhang (XEROX PARC and UCLA), Dave Borman (BSDI),
  52.    Allison Mankin (ISI) and others for their review and constructive
  53.    comments.
  54.  
  55.  
  56.  
  57.  
  58. Mathis, et. al.             Standards Track                     [Page 1]
  59.  
  60. RFC 2018         TCP Selective Acknowledgement Options      October 1996
  61.  
  62.  
  63. 1.  Introduction
  64.  
  65.    Multiple packet losses from a window of data can have a catastrophic
  66.    effect on TCP throughput. TCP [Postel81] uses a cumulative
  67.    acknowledgment scheme in which received segments that are not at the
  68.    left edge of the receive window are not acknowledged.  This forces
  69.    the sender to either wait a roundtrip time to find out about each
  70.    lost packet, or to unnecessarily retransmit segments which have been
  71.    correctly received [Fall95].  With the cumulative acknowledgment
  72.    scheme, multiple dropped segments generally cause TCP to lose its
  73.    ACK-based clock, reducing overall throughput.
  74.  
  75.    Selective Acknowledgment (SACK) is a strategy which corrects this
  76.    behavior in the face of multiple dropped segments.  With selective
  77.    acknowledgments, the data receiver can inform the sender about all
  78.    segments that have arrived successfully, so the sender need
  79.    retransmit only the segments that have actually been lost.
  80.  
  81.    Several transport protocols, including NETBLT [Clark87], XTP
  82.    [Strayer92], RDP [Velten84], NADIR [Huitema81], and VMTP [Cheriton88]
  83.    have used selective acknowledgment.  There is some empirical evidence
  84.    in favor of selective acknowledgments -- simple experiments with RDP
  85.    have shown that disabling the selective acknowledgment facility
  86.    greatly increases the number of retransmitted segments over a lossy,
  87.    high-delay Internet path [Partridge87]. A recent simulation study by
  88.    Kevin Fall and Sally Floyd [Fall95], demonstrates the strength of TCP
  89.    with SACK over the non-SACK Tahoe and Reno TCP implementations.
  90.  
  91.    RFC1072 [VJ88] describes one possible implementation of SACK options
  92.    for TCP.  Unfortunately, it has never been deployed in the Internet,
  93.    as there was disagreement about how SACK options should be used in
  94.    conjunction with the TCP window shift option (initially described
  95.    RFC1072 and revised in [Jacobson92]).
  96.  
  97.    We propose slight modifications to the SACK options as proposed in
  98.    RFC1072.  Specifically, sending a selective acknowledgment for the
  99.    most recently received data reduces the need for long SACK options
  100.    [Keshav94, Mathis95].  In addition, the SACK option now carries full
  101.    32 bit sequence numbers.  These two modifications represent the only
  102.    changes to the proposal in RFC1072.  They make SACK easier to
  103.    implement and address concerns about robustness.
  104.  
  105.    The selective acknowledgment extension uses two TCP options. The
  106.    first is an enabling option, "SACK-permitted", which may be sent in a
  107.    SYN segment to indicate that the SACK option can be used once the
  108.    connection is established.  The other is the SACK option itself,
  109.    which may be sent over an established connection once permission has
  110.    been given by SACK-permitted.
  111.  
  112.  
  113.  
  114. Mathis, et. al.             Standards Track                     [Page 2]
  115.  
  116. RFC 2018         TCP Selective Acknowledgement Options      October 1996
  117.  
  118.  
  119.    The SACK option is to be included in a segment sent from a TCP that
  120.    is receiving data to the TCP that is sending that data; we will refer
  121.    to these TCP's as the data receiver and the data sender,
  122.    respectively.  We will consider a particular simplex data flow; any
  123.    data flowing in the reverse direction over the same connection can be
  124.    treated independently.
  125.  
  126. 2.  Sack-Permitted Option
  127.  
  128.    This two-byte option may be sent in a SYN by a TCP that has been
  129.    extended to receive (and presumably process) the SACK option once the
  130.    connection has opened.  It MUST NOT be sent on non-SYN segments.
  131.  
  132.        TCP Sack-Permitted Option:
  133.  
  134.        Kind: 4
  135.  
  136.        +---------+---------+
  137.        | Kind=4  | Length=2|
  138.        +---------+---------+
  139.  
  140. 3.  Sack Option Format
  141.  
  142.    The SACK option is to be used to convey extended acknowledgment
  143.    information from the receiver to the sender over an established TCP
  144.    connection.
  145.  
  146.        TCP SACK Option:
  147.  
  148.        Kind: 5
  149.  
  150.        Length: Variable
  151.  
  152.                          +--------+--------+
  153.                          | Kind=5 | Length |
  154.        +--------+--------+--------+--------+
  155.        |      Left Edge of 1st Block       |
  156.        +--------+--------+--------+--------+
  157.        |      Right Edge of 1st Block      |
  158.        +--------+--------+--------+--------+
  159.        |                                   |
  160.        /            . . .                  /
  161.        |                                   |
  162.        +--------+--------+--------+--------+
  163.        |      Left Edge of nth Block       |
  164.        +--------+--------+--------+--------+
  165.        |      Right Edge of nth Block      |
  166.        +--------+--------+--------+--------+
  167.  
  168.  
  169.  
  170. Mathis, et. al.             Standards Track                     [Page 3]
  171.  
  172. RFC 2018         TCP Selective Acknowledgement Options      October 1996
  173.  
  174.  
  175.    The SACK option is to be sent by a data receiver to inform the data
  176.    sender of non-contiguous blocks of data that have been received and
  177.    queued.  The data receiver awaits the receipt of data (perhaps by
  178.    means of retransmissions) to fill the gaps in sequence space between
  179.    received blocks.  When missing segments are received, the data
  180.    receiver acknowledges the data normally by advancing the left window
  181.    edge in the Acknowledgement Number Field of the TCP header.  The SACK
  182.    option does not change the meaning of the Acknowledgement Number
  183.    field.
  184.  
  185.    This option contains a list of some of the blocks of contiguous
  186.    sequence space occupied by data that has been received and queued
  187.    within the window.
  188.  
  189.    Each contiguous block of data queued at the data receiver is defined
  190.    in the SACK option by two 32-bit unsigned integers in network byte
  191.    order:
  192.  
  193.    *    Left Edge of Block
  194.  
  195.         This is the first sequence number of this block.
  196.  
  197.    *    Right Edge of Block
  198.  
  199.         This is the sequence number immediately following the last
  200.         sequence number of this block.
  201.  
  202.    Each block represents received bytes of data that are contiguous and
  203.    isolated; that is, the bytes just below the block, (Left Edge of
  204.    Block - 1), and just above the block, (Right Edge of Block), have not
  205.    been received.
  206.  
  207.    A SACK option that specifies n blocks will have a length of 8*n+2
  208.    bytes, so the 40 bytes available for TCP options can specify a
  209.    maximum of 4 blocks.  It is expected that SACK will often be used in
  210.    conjunction with the Timestamp option used for RTTM [Jacobson92],
  211.    which takes an additional 10 bytes (plus two bytes of padding); thus
  212.    a maximum of 3 SACK blocks will be allowed in this case.
  213.  
  214.    The SACK option is advisory, in that, while it notifies the data
  215.    sender that the data receiver has received the indicated segments,
  216.    the data receiver is permitted to later discard data which have been
  217.    reported in a SACK option.  A discussion appears below in Section 8
  218.    of the consequences of advisory SACK, in particular that the data
  219.    receiver may renege, or drop already SACKed data.
  220.  
  221.  
  222.  
  223.  
  224.  
  225.  
  226. Mathis, et. al.             Standards Track                     [Page 4]
  227.  
  228. RFC 2018         TCP Selective Acknowledgement Options      October 1996
  229.  
  230.  
  231. 4.  Generating Sack Options: Data Receiver Behavior
  232.  
  233.    If the data receiver has received a SACK-Permitted option on the SYN
  234.    for this connection, the data receiver MAY elect to generate SACK
  235.    options as described below.  If the data receiver generates SACK
  236.    options under any circumstance, it SHOULD generate them under all
  237.    permitted circumstances.  If the data receiver has not received a
  238.    SACK-Permitted option for a given connection, it MUST NOT send SACK
  239.    options on that connection.
  240.  
  241.    If sent at all, SACK options SHOULD be included in all ACKs which do
  242.    not ACK the highest sequence number in the data receiver's queue.  In
  243.    this situation the network has lost or mis-ordered data, such that
  244.    the receiver holds non-contiguous data in its queue.  RFC 1122,
  245.    Section 4.2.2.21, discusses the reasons for the receiver to send ACKs
  246.    in response to additional segments received in this state.  The
  247.    receiver SHOULD send an ACK for every valid segment that arrives
  248.    containing new data, and each of these "duplicate" ACKs SHOULD bear a
  249.    SACK option.
  250.  
  251.    If the data receiver chooses to send a SACK option, the following
  252.    rules apply:
  253.  
  254.       * The first SACK block (i.e., the one immediately following the
  255.       kind and length fields in the option) MUST specify the contiguous
  256.       block of data containing the segment which triggered this ACK,
  257.       unless that segment advanced the Acknowledgment Number field in
  258.       the header.  This assures that the ACK with the SACK option
  259.       reflects the most recent change in the data receiver's buffer
  260.       queue.
  261.  
  262.       * The data receiver SHOULD include as many distinct SACK blocks as
  263.       possible in the SACK option.  Note that the maximum available
  264.       option space may not be sufficient to report all blocks present in
  265.       the receiver's queue.
  266.  
  267.       * The SACK option SHOULD be filled out by repeating the most
  268.       recently reported SACK blocks (based on first SACK blocks in
  269.       previous SACK options) that are not subsets of a SACK block
  270.       already included in the SACK option being constructed.  This
  271.       assures that in normal operation, any segment remaining part of a
  272.       non-contiguous block of data held by the data receiver is reported
  273.       in at least three successive SACK options, even for large-window
  274.       TCP implementations [RFC1323]).  After the first SACK block, the
  275.       following SACK blocks in the SACK option may be listed in
  276.       arbitrary order.
  277.  
  278.  
  279.  
  280.  
  281.  
  282. Mathis, et. al.             Standards Track                     [Page 5]
  283.  
  284. RFC 2018         TCP Selective Acknowledgement Options      October 1996
  285.  
  286.  
  287.    It is very important that the SACK option always reports the block
  288.    containing the most recently received segment, because this provides
  289.    the sender with the most up-to-date information about the state of
  290.    the network and the data receiver's queue.
  291.  
  292. 5.  Interpreting the Sack Option and Retransmission Strategy: Data
  293.    Sender Behavior
  294.  
  295.    When receiving an ACK containing a SACK option, the data sender
  296.    SHOULD record the selective acknowledgment for future reference.  The
  297.    data sender is assumed to have a retransmission queue that contains
  298.    the segments that have been transmitted but not yet acknowledged, in
  299.    sequence-number order.  If the data sender performs re-packetization
  300.    before retransmission, the block boundaries in a SACK option that it
  301.    receives may not fall on boundaries of segments in the retransmission
  302.    queue; however, this does not pose a serious difficulty for the
  303.    sender.
  304.  
  305.    One possible implementation of the sender's behavior is as follows.
  306.    Let us suppose that for each segment in the retransmission queue
  307.    there is a (new) flag bit "SACKed", to be used to indicate that this
  308.    particular segment has been reported in a SACK option.
  309.  
  310.    When an acknowledgment segment arrives containing a SACK option, the
  311.    data sender will turn on the SACKed bits for segments that have been
  312.    selectively acknowledged.  More specifically, for each block in the
  313.    SACK option, the data sender will turn on the SACKed flags for all
  314.    segments in the retransmission queue that are wholly contained within
  315.    that block.  This requires straightforward sequence number
  316.    comparisons.
  317.  
  318.    After the SACKed bit is turned on (as the result of processing a
  319.    received SACK option), the data sender will skip that segment during
  320.    any later retransmission.  Any segment that has the SACKed bit turned
  321.    off and is less than the highest SACKed segment is available for
  322.    retransmission.
  323.  
  324.    After a retransmit timeout the data sender SHOULD turn off all of the
  325.    SACKed bits, since the timeout might indicate that the data receiver
  326.    has reneged.  The data sender MUST retransmit the segment at the left
  327.    edge of the window after a retransmit timeout, whether or not the
  328.    SACKed bit is on for that segment.  A segment will not be dequeued
  329.    and its buffer freed until the left window edge is advanced over it.
  330.  
  331.  
  332.  
  333.  
  334.  
  335.  
  336.  
  337.  
  338. Mathis, et. al.             Standards Track                     [Page 6]
  339.  
  340. RFC 2018         TCP Selective Acknowledgement Options      October 1996
  341.  
  342.  
  343. 5.1  Congestion Control Issues
  344.  
  345.    This document does not attempt to specify in detail the congestion
  346.    control algorithms for implementations of TCP with SACK.  However,
  347.    the congestion control algorithms present in the de facto standard
  348.    TCP implementations MUST be preserved [Stevens94].  In particular, to
  349.    preserve robustness in the presence of packets reordered by the
  350.    network, recovery is not triggered by a single ACK reporting out-of-
  351.    order packets at the receiver.  Further, during recovery the data
  352.    sender limits the number of segments sent in response to each ACK.
  353.    Existing implementations limit the data sender to sending one segment
  354.    during Reno-style fast recovery, or to two segments during slow-start
  355.    [Jacobson88].  Other aspects of congestion control, such as reducing
  356.    the congestion window in response to congestion, must similarly be
  357.    preserved.
  358.  
  359.    The use of time-outs as a fall-back mechanism for detecting dropped
  360.    packets is unchanged by the SACK option.  Because the data receiver
  361.    is allowed to discard SACKed data, when a retransmit timeout occurs
  362.    the data sender MUST ignore prior SACK information in determining
  363.    which data to retransmit.
  364.  
  365.    Future research into congestion control algorithms may take advantage
  366.    of the additional information provided by SACK.  One such area for
  367.    future research concerns modifications to TCP for a wireless or
  368.    satellite environment where packet loss is not necessarily an
  369.    indication of congestion.
  370.  
  371. 6.  Efficiency and Worst Case Behavior
  372.  
  373.    If the return path carrying ACKs and SACK options were lossless, one
  374.    block per SACK option packet would always be sufficient.  Every
  375.    segment arriving while the data receiver holds discontinuous data
  376.    would cause the data receiver to send an ACK with a SACK option
  377.    containing the one altered block in the receiver's queue.  The data
  378.    sender is thus able to construct a precise replica of the receiver's
  379.    queue by taking the union of all the first SACK blocks.
  380.  
  381.  
  382.  
  383.  
  384.  
  385.  
  386.  
  387.  
  388.  
  389.  
  390.  
  391.  
  392.  
  393.  
  394. Mathis, et. al.             Standards Track                     [Page 7]
  395.  
  396. RFC 2018         TCP Selective Acknowledgement Options      October 1996
  397.  
  398.  
  399.    Since the return path is not lossless, the SACK option is defined to
  400.    include more than one SACK block in a single packet.  The redundant
  401.    blocks in the SACK option packet increase the robustness of SACK
  402.    delivery in the presence of lost ACKs.  For a receiver that is also
  403.    using the time stamp option [Jacobson92], the SACK option has room to
  404.    include three SACK blocks.  Thus each SACK block will generally be
  405.    repeated at least three times, if necessary, once in each of three
  406.    successive ACK packets.  However, if all of the ACK packets reporting
  407.    a particular SACK block are dropped, then the sender might assume
  408.    that the data in that SACK block has not been received, and
  409.    unnecessarily retransmit those segments.
  410.  
  411.    The deployment of other TCP options may reduce the number of
  412.    available SACK blocks to 2 or even to 1.  This will reduce the
  413.    redundancy of SACK delivery in the presence of lost ACKs.  Even so,
  414.    the exposure of TCP SACK in regard to the unnecessary retransmission
  415.    of packets is strictly less than the exposure of current
  416.    implementations of TCP.  The worst-case conditions necessary for the
  417.    sender to needlessly retransmit data is discussed in more detail in a
  418.    separate document [Floyd96].
  419.  
  420.    Older TCP implementations which do not have the SACK option will not
  421.    be unfairly disadvantaged when competing against SACK-capable TCPs.
  422.    This issue is discussed in more detail in [Floyd96].
  423.  
  424. 7.  Sack Option Examples
  425.  
  426.    The following examples attempt to demonstrate the proper behavior of
  427.    SACK generation by the data receiver.
  428.  
  429.    Assume the left window edge is 5000 and that the data transmitter
  430.    sends a burst of 8 segments, each containing 500 data bytes.
  431.  
  432.       Case 1: The first 4 segments are received but the last 4 are
  433.       dropped.
  434.  
  435.       The data receiver will return a normal TCP ACK segment
  436.       acknowledging sequence number 7000, with no SACK option.
  437.  
  438.  
  439.  
  440.  
  441.  
  442.  
  443.  
  444.  
  445.  
  446.  
  447.  
  448.  
  449.  
  450. Mathis, et. al.             Standards Track                     [Page 8]
  451.  
  452. RFC 2018         TCP Selective Acknowledgement Options      October 1996
  453.  
  454.  
  455.       Case 2:  The first segment is dropped but the remaining 7 are
  456.       received.
  457.  
  458.          Upon receiving each of the last seven packets, the data
  459.          receiver will return a TCP ACK segment that acknowledges
  460.          sequence number 5000 and contains a SACK option specifying
  461.          one block of queued data:
  462.  
  463.              Triggering    ACK      Left Edge   Right Edge
  464.              Segment
  465.  
  466.              5000         (lost)
  467.              5500         5000     5500       6000
  468.              6000         5000     5500       6500
  469.              6500         5000     5500       7000
  470.              7000         5000     5500       7500
  471.              7500         5000     5500       8000
  472.              8000         5000     5500       8500
  473.              8500         5000     5500       9000
  474.  
  475.  
  476.       Case 3:  The 2nd, 4th, 6th, and 8th (last) segments are
  477.       dropped.
  478.  
  479.       The data receiver ACKs the first packet normally.  The
  480.       third, fifth, and seventh packets trigger SACK options as
  481.       follows:
  482.  
  483.           Triggering  ACK    First Block   2nd Block     3rd Block
  484.           Segment            Left   Right  Left   Right  Left   Right
  485.                              Edge   Edge   Edge   Edge   Edge   Edge
  486.  
  487.           5000       5500
  488.           5500       (lost)
  489.           6000       5500    6000   6500
  490.           6500       (lost)
  491.           7000       5500    7000   7500   6000   6500
  492.           7500       (lost)
  493.           8000       5500    8000   8500   7000   7500   6000   6500
  494.           8500       (lost)
  495.  
  496.  
  497.  
  498.  
  499.  
  500.  
  501.  
  502.  
  503.  
  504.  
  505.  
  506. Mathis, et. al.             Standards Track                     [Page 9]
  507.  
  508. RFC 2018         TCP Selective Acknowledgement Options      October 1996
  509.  
  510.  
  511.       Suppose at this point, the 4th packet is received out of order.
  512.       (This could either be because the data was badly misordered in the
  513.       network, or because the 2nd packet was retransmitted and lost, and
  514.       then the 4th packet was retransmitted). At this point the data
  515.       receiver has only two SACK blocks to report.  The data receiver
  516.       replies with the following Selective Acknowledgment:
  517.  
  518.           Triggering  ACK    First Block   2nd Block     3rd Block
  519.           Segment            Left   Right  Left   Right  Left   Right
  520.                              Edge   Edge   Edge   Edge   Edge   Edge
  521.  
  522.           6500       5500    6000   7500   8000   8500
  523.  
  524.       Suppose at this point, the 2nd segment is received.  The data
  525.       receiver then replies with the following Selective Acknowledgment:
  526.  
  527.           Triggering  ACK    First Block   2nd Block     3rd Block
  528.           Segment            Left   Right  Left   Right  Left   Right
  529.                              Edge   Edge   Edge   Edge   Edge   Edge
  530.  
  531.           5500       7500    8000   8500
  532.  
  533. 8.  Data Receiver Reneging
  534.  
  535.    Note that the data receiver is permitted to discard data in its queue
  536.    that has not been acknowledged to the data sender, even if the data
  537.    has already been reported in a SACK option.  Such discarding of
  538.    SACKed packets is discouraged, but may be used if the receiver runs
  539.    out of buffer space.
  540.  
  541.    The data receiver MAY elect not to keep data which it has reported in
  542.    a SACK option.  In this case, the receiver SACK generation is
  543.    additionally qualified:
  544.  
  545.       * The first SACK block MUST reflect the newest segment.  Even if
  546.       the newest segment is going to be discarded and the receiver has
  547.       already discarded adjacent segments, the first SACK block MUST
  548.       report, at a minimum, the left and right edges of the newest
  549.       segment.
  550.  
  551.       * Except for the newest segment, all SACK blocks MUST NOT report
  552.       any old data which is no longer actually held by the receiver.
  553.  
  554.    Since the data receiver may later discard data reported in a SACK
  555.    option, the sender MUST NOT discard data before it is acknowledged by
  556.    the Acknowledgment Number field in the TCP header.
  557.  
  558.  
  559.  
  560.  
  561.  
  562. Mathis, et. al.             Standards Track                    [Page 10]
  563.  
  564. RFC 2018         TCP Selective Acknowledgement Options      October 1996
  565.  
  566.  
  567. 9.  Security Considerations
  568.  
  569.    This document neither strengthens nor weakens TCP's current security
  570.    properties.
  571.  
  572. 10. References
  573.  
  574.    [Cheriton88]  Cheriton, D., "VMTP: Versatile Message Transaction
  575.    Protocol", RFC 1045, Stanford University, February 1988.
  576.  
  577.    [Clark87] Clark, D., Lambert, M., and L. Zhang, "NETBLT: A Bulk Data
  578.    Transfer Protocol", RFC 998, MIT, March 1987.
  579.  
  580.    [Fall95]  Fall, K. and Floyd, S., "Comparisons of Tahoe, Reno, and
  581.    Sack TCP", ftp://ftp.ee.lbl.gov/papers/sacks.ps.Z, December 1995.
  582.  
  583.    [Floyd96]  Floyd, S.,  "Issues of TCP with SACK",
  584.    ftp://ftp.ee.lbl.gov/papers/issues_sa.ps.Z, January 1996.
  585.  
  586.    [Huitema81] Huitema, C., and Valet, I., An Experiment on High Speed
  587.    File Transfer using Satellite Links, 7th Data Communication
  588.    Symposium, Mexico, October 1981.
  589.  
  590.    [Jacobson88] Jacobson, V., "Congestion Avoidance and Control",
  591.    Proceedings of SIGCOMM '88, Stanford, CA., August 1988.
  592.  
  593.    [Jacobson88}, Jacobson, V. and R. Braden, "TCP Extensions for Long-
  594.    Delay Paths", RFC 1072, October 1988.
  595.  
  596.    [Jacobson92] Jacobson, V., Braden, R., and D. Borman, "TCP Extensions
  597.    for High Performance", RFC 1323, May 1992.
  598.  
  599.    [Keshav94]  Keshav, presentation to the Internet End-to-End Research
  600.    Group, November 1994.
  601.  
  602.    [Mathis95]  Mathis, M., and Mahdavi, J., TCP Forward Acknowledgment
  603.    Option, presentation to the Internet End-to-End Research Group, June
  604.    1995.
  605.  
  606.    [Partridge87]  Partridge, C., "Private Communication", February 1987.
  607.  
  608.    [Postel81]  Postel, J., "Transmission Control Protocol - DARPA
  609.    Internet Program Protocol Specification", RFC 793, DARPA, September
  610.    1981.
  611.  
  612.    [Stevens94] Stevens, W., TCP/IP Illustrated, Volume 1: The Protocols,
  613.    Addison-Wesley, 1994.
  614.  
  615.  
  616.  
  617.  
  618. Mathis, et. al.             Standards Track                    [Page 11]
  619.  
  620. RFC 2018         TCP Selective Acknowledgement Options      October 1996
  621.  
  622.  
  623.    [Strayer92] Strayer, T., Dempsey, B., and Weaver, A., XTP -- the
  624.    xpress transfer protocol. Addison-Wesley Publishing Company, 1992.
  625.  
  626.    [Velten84] Velten, D., Hinden, R., and J. Sax, "Reliable Data
  627.    Protocol", RFC 908, BBN, July 1984.
  628.  
  629. 11. Authors' Addresses
  630.  
  631.     Matt Mathis and Jamshid Mahdavi
  632.     Pittsburgh Supercomputing Center
  633.     4400 Fifth Ave
  634.     Pittsburgh, PA 15213
  635.     mathis@psc.edu
  636.     mahdavi@psc.edu
  637.  
  638.     Sally Floyd
  639.     Lawrence Berkeley National Laboratory
  640.     One Cyclotron Road
  641.     Berkeley, CA 94720
  642.     floyd@ee.lbl.gov
  643.  
  644.     Allyn Romanow
  645.     Sun Microsystems, Inc.
  646.     2550 Garcia Ave., MPK17-202
  647.     Mountain View, CA 94043
  648.     allyn@eng.sun.com
  649.  
  650.  
  651.  
  652.  
  653.  
  654.  
  655.  
  656.  
  657.  
  658.  
  659.  
  660.  
  661.  
  662.  
  663.  
  664.  
  665.  
  666.  
  667.  
  668.  
  669.  
  670.  
  671.  
  672.  
  673.  
  674. Mathis, et. al.             Standards Track                    [Page 12]
  675.  
  676.