Network Working Group                                          N. Spring
Request for Comments: 3540                                  D. Wetherall
Category: Experimental                                            D. Ely
                                               University of Washington
                                                              June 2003


            Robust Explicit Congestion Notification (ECN)
                        Signaling with Nonces

Status of this Memo

  This memo defines an Experimental Protocol for the Internet
  community.  It does not specify an Internet standard of any kind.
  Discussion and suggestions for improvement are requested.
  Distribution of this memo is unlimited.

Copyright Notice

  Copyright (C) The Internet Society (2003).  All Rights Reserved.

Abstract

  This note describes the Explicit Congestion Notification (ECN)-nonce,
  an optional addition to ECN that protects against accidental or
  malicious concealment of marked packets from the TCP sender.  It
  improves the robustness of congestion control by preventing receivers
  from exploiting ECN to gain an unfair share of network bandwidth.
  The ECN-nonce uses the two ECN-Capable Transport (ECT)codepoints in
  the ECN field of the IP header, and requires a flag in the TCP
  header.  It is computationally efficient for both routers and hosts.

1.  Introduction

  Statement of Intent

     This specification describes an optional addition to Explicit
     Congestion Notification [RFC3168] improving its robustness against
     malicious or accidental concealment of marked packets.  It has not
     been deployed widely.  One goal of publication as an Experimental
     RFC is to be prudent, and encourage use and deployment prior to
     publication in the standards track.  Another consideration is to
     give time for firewall developers to recognize and accept the
     pattern presented by the nonce.  It is the intent of the Transport
     Area Working Group to re-submit this specification as an IETF
     Proposed Standard in the future after more experience has been
     gained.




Spring, et. al.               Experimental                      [Page 1]

RFC 3540                  Robust ECN Signaling                 June 2003


  The correct operation of ECN requires the cooperation of the receiver
  to return Congestion Experienced signals to the sender, but the
  protocol lacks a mechanism to enforce this cooperation.  This raises
  the possibility that an unscrupulous or poorly implemented receiver
  could always clear ECN-Echo and simply not return congestion signals
  to the sender.  This would give the receiver a performance advantage
  at the expense of competing connections that behave properly.  More
  generally, any device along the path (NAT box, firewall, QOS
  bandwidth shapers, and so forth) could remove congestion marks with
  impunity.

  The above behaviors may or may not constitute a threat to the
  operation of congestion control in the Internet.  However, given the
  central role of congestion control, it is prudent to design the ECN
  signaling loop to be robust against as many threats as possible.  In
  this way, ECN can provide a clear incentive for improvement over the
  prior state-of-the-art without potential incentives for abuse.  The
  ECN-nonce is a simple, efficient mechanism to eliminate the potential
  abuse of ECN.

  The ECN-nonce enables the sender to verify the correct behavior of
  the ECN receiver and that there is no other interference that
  conceals marked (or dropped) packets in the signaling path.  The ECN-
  nonce protects against both implementation errors and deliberate
  abuse.  The ECN-nonce:

  -  catches a misbehaving receiver with a high probability, and never
     implicates an innocent receiver.

  -  does not change other aspects of ECN, nor does it reduce the
     benefits of ECN for behaving receivers.

  -  is cheap in both per-packet overhead (one TCP header flag) and
     processing requirements.

  -  is simple and, to the best of our knowledge, not prone to other
     attacks.

  We also note that use of the ECN-nonce has two additional benefits,
  even when only drop-tail routers are used.  First, packet drops
  cannot be concealed from the sender.  Second, it prevents optimistic
  acknowledgements [Savage], in which TCP segments are acknowledged
  before they have been received.  These benefits also serve to
  increase the robustness of congestion control from attacks.  We do
  not elaborate on these benefits in this document.

  The rest of this document describes the ECN-nonce.  We present an
  overview followed by detailed behavior at senders and receivers.



Spring, et. al.               Experimental                      [Page 2]

RFC 3540                  Robust ECN Signaling                 June 2003


  The keywords MUST, MUST NOT, REQUIRED, SHALL, SHALL NOT, SHOULD,
  SHOULD NOT, RECOMMENDED, MAY, and OPTIONAL, when they appear in this
  document, are to be interpreted as described in [RFC2119].

2.  Overview

  The ECN-nonce builds on the existing ECN-Echo and Congestion Window
  Reduced (CWR) signaling mechanism.  Familiarity with ECN [ECN] is
  assumed.  For simplicity, we describe the ECN-nonce in one direction
  only, though it is run in both directions in parallel.

  The ECN protocol for TCP remains unchanged, except for the definition
  of a new field in the TCP header.  As in [RFC3168], ECT(0) or ECT(1)
  (ECN-Capable Transport) is set in the ECN field of the IP header on
  outgoing packets.  Congested routers change this field to CE
  (Congestion Experienced).  When TCP receivers notice CE, the ECE
  (ECN-Echo) flag is set in subsequent acknowledgements until receiving
  a CWR flag.  The CWR flag is sent on new data whenever the sender
  reacts to congestion.

  The ECN-nonce adds to this protocol, and enables the receiver to
  demonstrate to the sender that segments being acknowledged were
  received unmarked.  A random one-bit value (a nonce) is encoded in
  the two ECT codepoints.  The one-bit sum of these nonces is returned
  in a TCP header flag, the nonce sum (NS) bit.  Packet marking erases
  the nonce value in the ECT codepoints because CE overwrites both ECN
  IP header bits.  Since each nonce is required to calculate the sum,
  the correct nonce sum implies receipt of only unmarked packets.  Not
  only are receivers prevented from concealing marked packets, middle-
  boxes along the network path cannot unmark a packet without
  successfully guessing the value of the original nonce.

  The sender can verify the nonce sum returned by the receiver to
  ensure that congestion indications in the form of marked (or dropped)
  packets are not being concealed.  Because the nonce sum is only one
  bit long, senders have a 50-50 chance of catching a lying receiver
  whenever an acknowledgement conceals a mark.  Because each
  acknowledgement is an independent trial, cheaters will be caught
  quickly if there are repeated congestion signals.

  The following paragraphs describe aspects of the ECN-nonce protocol
  in greater detail.









Spring, et. al.               Experimental                      [Page 3]

RFC 3540                  Robust ECN Signaling                 June 2003


  Each acknowledgement carries a nonce sum, which is the one bit sum
  (exclusive-or, or parity) of nonces over the byte range represented
  by the acknowledgement.  The sum is used because not every packet is
  acknowledged individually, nor are packets acknowledged reliably.  If
  a sum were not used, the nonce in an unmarked packet could be echoed
  to prove to the sender that the individual packet arrived unmarked.
  However, since these acks are not reliably delivered, the sender
  could not distinguish a lost ACK from one that was never sent in
  order to conceal a marked packet.  The nonce sum prevents the
  receiver from concealing individual marked packets by not
  acknowledging them.  Because the nonce and nonce sum are both one bit
  quantities, the sum is no easier to guess than the individual nonces.
  We show the nonce sum calculation below in Figure 1.

   Sender             Receiver
                        initial sum = 1
     -- 1:4 ECT(0)  --> NS = 1 + 0(1:4) = 1(:4)
     <- ACK 4, NS=1 ---
     -- 4:8 ECT(1)  --> NS = 1(:4) + 1(4:8) = 0(:8)
     <- ACK 8, NS=0 ---
     -- 8:12 ECT(1)  -> NS = 0(:8) + 1(8:12) = 1(:12)
     <- ACK 12, NS=1 --
     -- 12:16 ECT(1) -> NS = 1(:12) + 1(12:16) = 0(:16)
     <- ACK 16, NS=0 --

  Figure 1: The calculation of nonce sums at the receiver.

  After congestion has occurred and packets have been marked or lost,
  resynchronization of the sender and receiver nonce sums is needed.
  When packets are marked, the nonce is cleared, and the sum of the
  nonces at the receiver will no longer match the sum at the sender.
  Once nonces have been lost, the difference between sender and
  receiver nonce sums is constant until there is further loss.  This
  means that it is possible to resynchronize the sender and receiver
  after congestion by having the sender set its nonce sum to that of
  the receiver.  Because congestion indications do not need to be
  conveyed more frequently than once per round trip, the sender
  suspends checking while the CWR signal is being delivered and resets
  its nonce sum to the receiver's when new data is acknowledged.  This
  has the benefit that the receiver is not explicitly involved in the
  re-synchronization process.  The resynchronization process is shown
  in Figure 2 below.  Note that the nonce sum returned in ACK 12 (NS=0)
  differs from that in the previous example (NS=1), and it continues to
  differ for ACK 16.







Spring, et. al.               Experimental                      [Page 4]

RFC 3540                  Robust ECN Signaling                 June 2003


   Sender              Receiver
                           initial sum = 1
     -- 1:4 ECT(0)       -> NS = 1 + 0(1:4) = 1(:4)
     <- ACK 4, NS=1      --
     -- 4:8 ECT(1) -> CE -> NS = 1(:4) + ?(4:8) = 1(:8)
     <- ACK 8, ECE NS=1  --
     -- 8:12 ECT(1), CWR -> NS = 1(:8) + 1(8:12) = 0(:12)
     <- ACK 12, NS=0     --
     -- 12:16 ECT(1)     -> NS = 0(:12) + 1(12:16) = 1(:16)
     <- ACK 16, NS=1     --

  Figure 2: The calculation of nonce sums at the receiver when a
     packet (4:8) is marked.  The receiver may calculate the wrong
     nonce sum when the original nonce information is lost after a
     packet is marked.

  Third, we need to reconcile that nonces are sent with packets but
  acknowledgements cover byte ranges.  Acknowledged byte boundaries
  need not match the transmitted boundaries, and information can be
  retransmitted in packets with different byte boundaries.  We discuss
  the first issue, how a receiver sets a nonce when acknowledging part
  of a segment, in Section 6.1. The second question, what nonce to send
  when retransmitting smaller segments as a large segment, has a simple
  answer: ECN is disabled for retransmissions, so can carry no nonce.
  Because retransmissions are associated with congestion events, nonce
  checking is suspended until after CWR is acknowledged and the
  congestion event is over.

  The next sections describe the detailed behavior of senders, routers
  and receivers, starting with sender transmit behavior, then around
  the ECN signaling loop, and finish with sender acknowledgement
  processing.

3.  Sender Behavior (Transmit)

  Senders manage CWR and ECN-Echo as before.  In addition, they must
  place nonces on packets as they are transmitted and check the
  validity of the nonce sums in acknowledgments as they are received.
  This section describes the transmit process.

  To place a one bit nonce value on every ECN-capable IP packet, the
  sender uses the two ECT codepoints: ECT(0) represents a nonce of 0,
  and ECT(1) a nonce of 1.  As in ECN, retransmissions are not ECN-
  capable, so carry no nonce.

  The sender maintains a mapping from each packet's end sequence number
  to the expected nonce sum (not the nonce placed in the original
  transmission) in the acknowledgement bearing that sequence number.



Spring, et. al.               Experimental                      [Page 5]

RFC 3540                  Robust ECN Signaling                 June 2003


4.  Router Behavior

  Routers behave as specified in [RFC3168].  By marking packets to
  signal congestion, the original value of the nonce, in ECT(0) or
  ECT(1), is removed.  Neither the receiver nor any other party can
  unmark the packet without successfully guessing the value of the
  original nonce.

5.  Receiver Behavior (Receive and Transmit)

  ECN-nonce receivers maintain the nonce sum as in-order packets arrive
  and return the current nonce sum in each acknowledgement.  Receiver
  behavior is otherwise unchanged from [RFC3168].  Returning the nonce
  sum is optional, but recommended, as senders are allowed to
  discontinue sending ECN-capable packets to receivers that do not
  support the ECN-nonce.

  As packets are removed from the queue of out-of-order packets to be
  acknowledged, the nonce is recovered from the IP header.  The nonce
  is added to the current nonce sum as the acknowledgement sequence
  number is advanced for the recent packet.

  In the case of marked packets, one or more nonce values may be
  unknown to the receiver.  In this case the missing nonce values are
  ignored when calculating the sum (or equivalently a value of zero is
  assumed) and ECN-Echo will be set to signal congestion to the sender.

  Returning the nonce sum corresponding to a given acknowledgement is
  straightforward.  It is carried in a single "NS" (Nonce Sum) bit in
  the TCP header.  This bit is adjacent to the CWR and ECN-Echo bits,
  set as Bit 7 in byte 13 of the TCP header, as shown below:

    0   1   2   3   4   5   6   7   8   9  10  11  12  13  14  15
  +---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+
  |               |           | N | C | E | U | A | P | R | S | F |
  | Header Length | Reserved  | S | W | C | R | C | S | S | Y | I |
  |               |           |   | R | E | G | K | H | T | N | N |
  +---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+

  Figure 3: The new definition of bytes 13 and 14 of the TCP Header.

  The initial nonce sum is 1, and is included in the SYN/ACK and ACK of
  the three way TCP handshake.  This allows the other endpoint to infer
  nonce support, but is not a negotiation, in that the receiver of the
  SYN/ACK need not check if NS is set to decide whether to set NS in
  the subsequent ACK.





Spring, et. al.               Experimental                      [Page 6]

RFC 3540                  Robust ECN Signaling                 June 2003


6.  Sender Behavior (Receive)

  This section completes the description of sender behavior by
  describing how senders check the validity of the nonce sums.

  The nonce sum is checked when an acknowledgement of new data is
  received, except during congestion recovery when additional ECN-Echo
  signals would be ignored.  Checking consists of comparing the correct
  nonce sum stored in a buffer to that carried in the acknowledgement,
  with a correction described in the following subsection.

  If ECN-Echo is not set, the receiver claims to have received no
  marked packets, and can therefore compute and return the correct
  nonce sum.  To conceal a mark, the receiver must successfully guess
  the sum of the nonces that it did not receive, because at least one
  packet was marked and the corresponding nonce was erased.  Provided
  the individual nonces are equally likely to be 0 or 1, their sum is
  equally likely to be 0 or 1.  In other words, any guess is equally
  likely to be wrong and has a 50-50 chance of being caught by the
  sender.  Because each new acknowledgement is an independent trial, a
  cheating receiver is likely to be caught after a small number of
  lies.

  If ECN-Echo is set, the receiver is sending a congestion signal and
  it is not necessary to check the nonce sum.  The congestion window
  will be halved, CWR will be set on the next packet with new data
  sent, and ECN-Echo will be cleared once the CWR signal is received,
  as in [RFC3168].  During this recovery process, the sum may be
  incorrect because one or more nonces were not received.  This does
  not matter during recovery, because TCP invokes congestion mechanisms
  at most once per RTT, whether there are one or more losses during
  that period.

6.1.  Resynchronization After Loss or Mark

  After recovery, it is necessary to re-synchronize the sender and
  receiver nonce sums so that further acknowledgments can be checked.
  When the receiver's sum is incorrect, it will remain incorrect until
  further loss.

  This leads to a simple re-synchronization mechanism where the sender
  resets its nonce sum to that of the receiver when it receives an
  acknowledgment for new data sent after the congestion window was
  reduced.  When responding to explicit congestion signals, this will
  be the first acknowledgement without the ECN-Echo flag set: the
  acknowledgement of the packet containing the CWR flag.





Spring, et. al.               Experimental                      [Page 7]

RFC 3540                  Robust ECN Signaling                 June 2003


   Sender              Receiver
                            initial sum = 1
     -- 1:4 ECT(0)       -> NS = 1 + 0(1:4) = 1(:4)
     <- ACK 4, NS=1      --
     -- 4:8 ECT(1) -> LOST
     -- 8:12 ECT(1)      -> nonce sum calculation deferred
                              until in-order data received
     <- ACK 4, NS=0      --
     -- 12:16 ECT(1)     -> nonce sum calculation deferred
     <- ACK 4, NS=0      --
     -- 4:8 retransmit   -> NS = 1(:4) + ?(4:8) +
                                 1(8:12) + 1(12:16) = 1(:16)
     <- ACK 16, NS=1     --
     -- 16:20 ECT(1) CWR ->
     <- ACK 20, NS=0     -- NS = 1(:16) + 1(16:20) = 0(:20)

  Figure 4: The calculation of nonce sums at the receiver when a
     packet is lost, and resynchronization after loss.  The nonce sum
     is not changed until the cumulative acknowledgement is advanced.

  In practice, resynchronization can be accomplished by storing a bit
  that has the value one if the expected nonce sum stored by the sender
  and the received nonce sum in the acknowledgement of CWR differ, and
  zero otherwise.  This synchronization offset bit can then be used in
  the comparison between expected nonce sum and received nonce sum.

  The sender should ignore the nonce sum returned on any
  acknowledgements bearing the ECN-echo flag.

  When an acknowledgment covers only a portion of a segment, such as
  when a middlebox resegments at the TCP layer instead of fragmenting
  IP packets, the sender should accept the nonce sum expected at the
  next segment boundary.  In other words, an acknowledgement covering
  part of an original segment will include the nonce sum expected when
  the entire segment is acknowledged.

  Finally, in ECN, senders can choose not to indicate ECN capability on
  some packets for any reason.  An ECN-nonce sender must resynchronize
  after sending such ECN-incapable packets, as though a CWR had been
  sent with the first new data after the ECN-incapable packets.  The
  sender loses protection for any unacknowledged packets until
  resynchronization occurs.









Spring, et. al.               Experimental                      [Page 8]

RFC 3540                  Robust ECN Signaling                 June 2003


6.2.  Sender Behavior - Incorrect Nonce Received

  The sender's response to an incorrect nonce is a matter of policy.
  It is separate from the checking mechanism and does not need to be
  handled uniformly by senders.  Further, checking received nonce sums
  at all is optional, and may be disabled.

  If the receiver has never sent a non-zero nonce sum, the sender can
  infer that the receiver does not understand the nonce, and rate limit
  the connection, place it in a lower-priority queue, or cease setting
  ECT in outgoing segments.

  If the received nonce sum has been set in a previous acknowledgement,
  the sender might infer that a network device has interfered with
  correct ECN signaling between ECN-nonce supporting endpoints.  The
  minimum response to an incorrect nonce is the same as the response to
  a received ECE.  However, to compensate for hidden congestion
  signals, the sender might reduce the congestion window to one segment
  and cease setting ECT in outgoing segments.  An incorrect nonce sum
  is a sign of misbehavior or error between ECN-nonce supporting
  endpoints.

6.2.1.  Using the ECN-nonce to Protect Against Other Misbehaviors

  The ECN-nonce can provide robustness beyond checking that marked
  packets are signaled to the sender.  It also ensures that dropped
  packets cannot be concealed from the sender (because their nonces
  have been lost).  Drops could potentially be concealed by a faulty
  TCP implementation, certain attacks, or even a hypothetical TCP
  accelerator.  Such an accelerator could gamble that it can either
  successfully "fast start" to a preset bandwidth quickly, retry with
  another connection, or provide reliability at the application level.
  If robustness against these faults is also desired, then the ECN-
  nonce should not be disabled.  Instead, reducing the congestion
  window to one, or using a low-priority queue, would penalize faulty
  operation while providing continued checking.

  The ECN-nonce can also detect misbehavior in Eifel [Eifel], a
  recently proposed mechanism for removing the retransmission ambiguity
  to improve TCP performance.  A misbehaving receiver might claim to
  have received only original transmissions to convince the sender to
  undo congestion actions.  Since retransmissions are sent without ECT,
  and thus no nonce, returning the correct nonce sum confirms that only
  original transmissions were received.







Spring, et. al.               Experimental                      [Page 9]

RFC 3540                  Robust ECN Signaling                 June 2003


7.  Interactions

7.1.  Path MTU Discovery

  As described in RFC3168, use of the Don't Fragment bit with ECN is
  recommended.  Receivers that receive unmarked fragments can
  reconstruct the original nonce to conceal a marked fragment.  The
  ECN-nonce cannot protect against misbehaving receivers that conceal
  marked fragments, so some protection is lost in situations where Path
  MTU discovery is disabled.

  When responding to a small path MTU, the sender will retransmit a
  smaller frame in place of a larger one.  Since these smaller packets
  are retransmissions, they will be ECN-incapable and bear no nonce.
  The sender should resynchronize on the first newly transmitted
  packet.

7.2.  SACK

  Selective acknowledgements allow receivers to acknowledge out of
  order segments as an optimization.  It is not necessary to modify the
  selective acknowledgment option to fit per-range nonce sums, because
  SACKs cannot be used by a receiver to hide a congestion signal.  The
  nonce sum corresponds only to the data acknowledged by the cumulative
  acknowledgement.

7.3.  IPv6

  Although the IPv4 header is protected by a checksum, this is not the
  case with IPv6, making undetected bit errors in the IPv6 header more
  likely.  Bit errors that compromise the integrity of the congestion
  notification fields may cause an incorrect nonce to be received, and
  an incorrect nonce sum to be returned.

8.  Security Considerations

  The random one-bit nonces need not be from a cryptographic-quality
  pseudo-random number generator.  A strong random number generator
  would compromise performance.  Consequently, the sequence of random
  nonces should not be used for any other purpose.

  Conversely, the pseudo-random bit sequence should not be generated by
  a linear feedback shift register [Schneier], or similar scheme that
  would allow an adversary who has seen several previous bits to infer
  the generation function and thus its future output.






Spring, et. al.               Experimental                     [Page 10]

RFC 3540                  Robust ECN Signaling                 June 2003


  Although the ECN-nonce protects against concealment of congestion
  signals and optimistic acknowledgement, it provides no additional
  protection for the integrity of the connection.

9.  IANA Considerations

  The Nonce Sum (NS) is carried in a reserved TCP header bit that must
  be allocated.  This document describes the use of Bit 7, adjacent to
  the other header bits used by ECN.

  The codepoint for the NS flag in the TCP header is specified by the
  Standards Action of this RFC, as is required by RFC 2780.  The IANA
  has added the following to the registry for "TCP Header Flags":

  RFC 3540 defines bit 7 from the Reserved field to be used for the
  Nonce Sum, as follows:

    0   1   2   3   4   5   6   7   8   9  10  11  12  13  14  15
  +---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+
  |               |           | N | C | E | U | A | P | R | S | F |
  | Header Length | Reserved  | S | W | C | R | C | S | S | Y | I |
  |               |           |   | R | E | G | K | H | T | N | N |
  +---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+

  TCP Header Flags

  Bit      Name                                    Reference
  ---      ----                                    ---------
   7        NS (Nonce Sum)                         [RFC 3540]

10.  Conclusion

  The ECN-nonce is a simple modification to the ECN signaling mechanism
  that improves ECN's robustness by preventing receivers from
  concealing marked (or dropped) packets.  The intent of this work is
  to help improve the robustness of congestion control in the Internet.
  The modification retains the character and simplicity of existing ECN
  signaling.  It is also practical for deployment in the Internet.  It
  uses the ECT(0) and ECT(1) codepoints and one TCP header flag (as
  well as CWR and ECN-Echo) and has simple processing rules.











Spring, et. al.               Experimental                     [Page 11]

RFC 3540                  Robust ECN Signaling                 June 2003


11.  References

  [ECN]      "The ECN Web Page", URL
             "http://www.icir.org/floyd/ecn.html".

  [RFC3168]  Ramakrishnan, K., Floyd, S. and D. Black, "The addition of
             explicit congestion notification (ECN) to IP", RFC 3168,
             September 2001.

  [Eifel]    R. Ludwig and R. Katz. The Eifel Algorithm: Making TCP
             Robust Against Spurious Retransmissions. Computer
             Communications Review, January, 2000.

  [B97]      Bradner, S., "Key words for use in RFCs to Indicate
             Requirement Levels", BCP 14, RFC 2119, March 1997.

  [Savage]   S. Savage, N. Cardwell, D. Wetherall, T. Anderson.  TCP
             congestion control with a misbehaving receiver. SIGCOMM
             CCR, October 1999.

  [Schneier] Bruce Schneier. Applied Cryptography, 2nd ed., 1996

12.  Acknowledgements

  This note grew out of research done by Stefan Savage, David Ely,
  David Wetherall, Tom Anderson and Neil Spring.  We are very grateful
  for feedback and assistance from Sally Floyd.

13.  Authors' Addresses

  Neil Spring
  EMail: [email protected]


  David Wetherall
  Department of Computer Science and Engineering, Box 352350
  University of Washington
  Seattle WA 98195-2350
  EMail: [email protected]


  David Ely
  Computer Science and Engineering, 352350
  University of Washington
  Seattle, WA 98195-2350
  EMail: [email protected]





Spring, et. al.               Experimental                     [Page 12]

RFC 3540                  Robust ECN Signaling                 June 2003


14.  Full Copyright Statement

  Copyright (C) The Internet Society (2003).  All Rights Reserved.

  This document and translations of it may be copied and furnished to
  others, and derivative works that comment on or otherwise explain it
  or assist in its implementation may be prepared, copied, published
  and distributed, in whole or in part, without restriction of any
  kind, provided that the above copyright notice and this paragraph are
  included on all such copies and derivative works.  However, this
  document itself may not be modified in any way, such as by removing
  the copyright notice or references to the Internet Society or other
  Internet organizations, except as needed for the purpose of
  developing Internet standards in which case the procedures for
  copyrights defined in the Internet Standards process must be
  followed, or as required to translate it into languages other than
  English.

  The limited permissions granted above are perpetual and will not be
  revoked by the Internet Society or its successors or assigns.

  This document and the information contained herein is provided on an
  "AS IS" basis and THE INTERNET SOCIETY AND THE INTERNET ENGINEERING
  TASK FORCE DISCLAIMS ALL WARRANTIES, EXPRESS OR IMPLIED, INCLUDING
  BUT NOT LIMITED TO ANY WARRANTY THAT THE USE OF THE INFORMATION
  HEREIN WILL NOT INFRINGE ANY RIGHTS OR ANY IMPLIED WARRANTIES OF
  MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE.

Acknowledgement

  Funding for the RFC Editor function is currently provided by the
  Internet Society.



















Spring, et. al.               Experimental                     [Page 13]