<?xml version="1.0" encoding="US-ASCII"?>
<!DOCTYPE rfc SYSTEM "rfc2629.dtd">
<?xml-stylesheet type='text/xsl' href='rfc2629.xslt' ?>
<?rfc toc="yes" ?>
<?rfc symrefs="yes" ?>
<?rfc strict="no" ?>
<rfc category="exp" docName="draft-bagnulo-tcpm-generalized-ecn-01"
     ipr="trust200902" obsoletes="" updates="">
  <front>
    <title abbrev="ECN and TCP control packets">Adding Explicit Congestion
    Notification (ECN) to TCP control packets and TCP retransmissions</title>

    <author fullname="Marcelo Bagnulo" initials="M." surname="Bagnulo">
      <organization abbrev="UC3M">Universidad Carlos III de
      Madrid</organization>

      <address>
        <postal>
          <street>Av. Universidad 30</street>

          <city>Leganes</city>

          <region>Madrid</region>

          <code>28911</code>

          <country>SPAIN</country>
        </postal>

        <phone>34 91 6249500</phone>

        <email>marcelo@it.uc3m.es</email>

        <uri>http://www.it.uc3m.es</uri>
      </address>
    </author>

    <author fullname="Bob Briscoe" initials="B." surname="Briscoe">
      <organization>Simula Research Lab</organization>

      <address>
        <postal>
          <street/>
        </postal>

        <email>ietf@bobbriscoe.net</email>

        <uri>http://bobbriscoe.net/</uri>
      </address>
    </author>

    <date year="2017"/>

    <abstract>
      <t>This document describes an experimental modification to ECN when used
      with TCP. It allows the use of ECN on the following TCP packets: SYNs,
      Pure ACKs, Window probes, FINs, RSTs and retransmissions.</t>
    </abstract>
  </front>

  <middle>
    <section title="Introduction">
      <t>RFC 3168 <xref target="RFC3168"/> specifies support of Explicit
      Congestion Notification (ECN) in IP (v4 and v6). By using the ECN
      capability, switches performing Active Queue Management (AQM) can use
      ECN marks instead of packet drops to signal congestion to the endpoints
      of a communication. This results in lower packet loss and increased
      performance. RFC 3168 also specifies support for ECN in TCP, but solely
      on data packets. For various reasons it precludes the use of ECN on TCP
      control packets (TCP SYN, TCP SYN-ACK, pure ACKs, Window probes) and on
      retransmitted packets. RFC 3168 is silent about the use of ECN on RST
      and FIN packets. RFC 5562 <xref target="RFC5562"/> is an experimental
      modification to ECN that enables ECN support for TCP SYN-ACK
      packets.</t>

      <t>This document defines an experimental modification to ECN <xref
      target="RFC3168"/> that enables ECN support on all the aforementioned
      types of TCP packet. <xref target="I-D.ietf-tsvwg-ecn-experimentation"/>
      is a standards track procedural device that updates RFC 3168 to allow
      the present experiment, which RFC 3168 would otherwise prohibit.</t>

      <section title="Motivation">
        <t>The absence of ECN support on TCP control packets and
        retransmissions has a potential harmful effect. In any ECN deployment,
        non-ECN-capable packets suffer a penalty when they traverse a
        congested bottleneck. For instance, with a drop probability of 1%, 1%
        of connection attempts suffer a timeout of about 1 second before the
        SYN is retransmitted, which is highly detrimental to the performance
        of short flows. TCP control packets, such as TCP SYNs and pure ACKs,
        are important for performance, so dropping them is best avoided.</t>

        <t>Non-ECN control packets particularly harm performance in
        environments where the ECN marking level is high. For example, <xref
        target="judd-nsdi"/> shows that in a data centre (DC) environment
        where ECN is used (in conjunction with DCTCP), the probability of
        being able to establish a new connection using a non-ECN SYN packet
        drops to close to zero even when there are only 16 ongoing TCP flows
        transmitting at full speed. In this data centre context, the issue is
        that DCTCP's aggressive response to packet marking leads to a high
        marking probability for ECN-capable packets, and in turn a high drop
        probability for non-ECN packets. Therefore non-ECN SYNs are dropped
        aggressively, rendering it nearly impossible to establish a new
        connection in the presence of even mild traffic load.</t>

        <t>Finally, there are ongoing experimental efforts to promote the
        adoption of a slightly modified variant of DCTCP (and similar
        congestion controls) over the Internet to achieve low latency, low
        loss and scalable throughput (L4S) for all communications <xref
        target="I-D.briscoe-tsvwg-l4s-arch"/>. In such an approach, L4S
        packets identify themselves using an ECN codepoint. Preventing TCP
        control packets from obtaining the benefits of ECN would not only
        expose them to the prevailing level of congestion loss, but it would
        also stop them from being classified into the low latency (L4S) queue,
        which would greatly degrade L4S performance.</t>
      </section>

      <section title="Experiment goals">
        <t>The goal of the experimental modifications defined in this document
        is to allow the use of ECN (both ECT and CE codepoints) on all TCP
        packets. Experiments are expected in the public Internet as well as in
        controlled environments to understand the following issues: <list
            style="symbols">
            <t>How SYNs, Window probes, pure ACKs, FINs, RSTs and
            retransmissions that carry the ECT(0), ECT(1) or CE codepoints are
            processed by the TCP endpoints and the network (including routers,
            firewalls and other middleboxes). In particular we would like to
            learn if these packets are frequently blocked or if these packets
            are usually forwarded and processed.</t>

            <t>The scale of deployment of the different flavours of ECN,
            including <xref target="RFC3168"/>, <xref target="RFC5562"/>,
            <xref target="RFC3540"/> and <xref
            target="I-D.ietf-tcpm-accurate-ecn"/>.</t>

            <t>How much the performance of TCP communications is improved by
            allowing ECN marking of each packet type.</t>

            <t>To identify any issues (including security issues) raised by
            enabling ECN marking of these packets.</t>
          </list></t>

        <t>The data gathered through the experiments described in this
        document, particularly under the first 2 bullets above, will help in
        the design of the final mechanism (if any) for adding ECN support to
        the different packet types considered in this document. Whenever data
        input is needed to assist in a design choice, it is spelled out
        throughout the document.</t>

        <t>Success criteria: The experiment will be a success if we obtain
        enough data to have a clearer view of the deployability and benefits
        of ECN marking all TCP packets, as well as any issues. If the results
        of the experiment show that it is feasible to deploy such changes;
        that there are gains to be achieved though the changes described in
        this specification; and that no other major issues may interfere with
        the deployment of the proposed changes; then it would be reasonable to
        adopt the proposed changes in a standards track specification that
        would update RFC 3168.</t>
      </section>

      <section title="Document structure">
        <t>The remainder of this document is structured as follows. In <xref
        target="term"/>, we present the terminology used in the rest of the
        document. In <xref target="spec"/>, we specify the modifications to
        provide ECN support to TCP SYNs, pure ACKs, Window probes, FINs, RSTs
        and retransmissions. We describe both the network behaviour and the
        endpoint behaviour. <xref target="genecn_sec_variants"/> discusses
        variations of the specification that will be necessary to interwork
        with a number of popular variants or derivatives of TCP. RFC 3168
        provides a number of specific reasons why ECN support is not
        appropriate for each packet type. In <xref target="arguments"/>, we
        revisit each of these arguments and explore the possibility of
        enabling the ECN capability for each packet type in turn.</t>
      </section>
    </section>

    <section anchor="term" title="Terminology">
      <t>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 <xref
      target="RFC2119"/>.</t>

      <t>Pure ACK: A TCP segment with the ACK flag set and no data
      payload.</t>

      <t>SYN: A TCP segment with the SYN (synchronize) flag set. It may carry
      data if TCP Fast Open is used.</t>

      <t>Window probe: Defined in <xref target="RFC1122"/>, a window probe is
      a TCP segment with only one byte of data sent to learn if the receive
      window is still zero.</t>

      <t>FIN: A TCP segment with the FIN (finish) flag set.</t>

      <t>RST: A TCP segment with the RST (reset) flag set.</t>

      <t>Retransmission: A TCP segment that has been retransmitted by the TCP
      sender because it determined that the original segment was lost, which
      may or may not be the case.</t>

      <t>ECT: ECN-Capable Transport. One of the two codepoints ECT(0) or
      ECT(1) in the ECN field <xref target="RFC3168"/> of the IP header (v4 or
      v6). An ECN-capable sender sets one of these to indicate that both
      transport end-points support ECN. When this specification says the
      sender sets an ECT codepoint, by default it means ECT(0). Optionally, it
      could mean ECT(1), which is in the process of being redefined for use by
      L4S experiments <xref target="I-D.ietf-tsvwg-ecn-experimentation"/>
      <xref target="I-D.briscoe-tsvwg-ecn-l4s-id"/>.</t>

      <t>Not-ECT: The ECN codepoint that indicates that the transport is not
      ECN-capable.</t>

      <t>CE: Congestion Experienced. The ECN codepoint that an intermediate
      node sets to indicate congestion <xref target="RFC3168"/>. A node sets
      an increasing proportion of ECT packets to CE as the level of congestion
      increases.</t>
    </section>

    <section anchor="spec" title="Specification">
      <section title="Network behaviour">
        <t>Previously the specification of ECN for TCP <xref
        target="RFC3168"/> required the sender to set not-ECT on TCP control
        packets and retransmissions. Some readers might have erroneously
        interpreted this as a requirement for firewalls, intrusion detection
        systems, etc. to check and enforce this behaviour. Now that the
        present experimental specification allows TCP senders to set ECT on
        all TCP packets (control and data), it needs to be clear that a
        firewall (or any network node) SHOULD NOT treat any ECN-capable packet
        differently dependent on what type of TCP packet it is.</t>

        <t>The previous sentence says "SHOULD NOT" rather than "MUST NOT"
        because one potential exception is envisaged. A security function that
        has detected an ongoing attack MAY drop more ECT marked SYNs than
        not-ECT marked SYNs. Such a policy MUST NOT be applied routinely. It
        can only be applied if an attack is detected, and preferably only if
        it is determined that the ECT capability is intensifying the
        attack.</t>
      </section>

      <section title="Endpoint behaviour">
        <t>The changes to the specification of TCP over ECN <xref
        target="RFC3168"/> defined here solely alter the behaviour of a
        sending host.</t>

        <t>The feedback behaviour at the receiver depends on whether classic
        ECN TCP feedback <xref target="RFC3168"/> or Accurate ECN (AccECN) TCP
        feedback <xref target="I-D.ietf-tcpm-accurate-ecn"/> has been
        negotiated. Nonetheless, neither receiver feedback behaviour is
        altered by the present specification.</t>

        <t>For each type of control packet or retransmission, the following
        sections detail changes to the sender's behaviour in two respects: i)
        whether it sets ECT; and ii) its response to congestion feedback.
        <xref target="genecn_tab_summary"/> summarises these two behaviours
        for each type of packet, but the relevant subsection below should be
        referred to for the detailed behaviour. The subsection on the SYN is
        more complex than the others, because it has to include fall-back
        behaviour if the ECT packet appears not to have got through, and
        caching of the outcome to detect persistent failures.</t>

        <texttable anchor="genecn_tab_summary" suppress-title="false"
                   title="Summary of sender behaviour. In each case the relevant section below should be referred to for the detailed behaviour">
          <ttcol>TCP packet type</ttcol>

          <ttcol>ECN field if AccECN f/b negotiated*</ttcol>

          <ttcol>ECN field if RFC 3168 f/b negotiated*</ttcol>

          <ttcol>Congestion Response</ttcol>

          <c>SYN</c>

          <c>ECT</c>

          <c>not-ECT</c>

          <c>Reduce IW</c>

          <c>SYN-ACK</c>

          <c>ECT</c>

          <c>ECT</c>

          <c>Reduce IW as in <xref target="RFC5562"/></c>

          <c>Pure ACK</c>

          <c>ECT</c>

          <c>ECT</c>

          <c>None or optionally <xref target="RFC5690"/></c>

          <c>W Probe</c>

          <c>ECT</c>

          <c>ECT</c>

          <c>Usual response</c>

          <c>FIN</c>

          <c>ECT</c>

          <c>ECT</c>

          <c>None or optionally <xref target="RFC5690"/></c>

          <c>RST</c>

          <c>ECT</c>

          <c>ECT</c>

          <c>N/A</c>

          <c>Re-XMT</c>

          <c>ECT</c>

          <c>ECT</c>

          <c>Usual response</c>

          <postamble>Window probe and retransmission are abbreviated to W
          Probe an Re-XMT. * For a SYN, "negotiated" means
          "requested".</postamble>
        </texttable>

        <t>It can be seen that the sender can set ECT in all cases, except if
        it is not requesting AccECN feedback on the SYN. Therefore it is
        RECOMMENDED that the experimental AccECN specification <xref
        target="I-D.ietf-tcpm-accurate-ecn"/> is implemented, because it is
        expected that ECT on the SYN will give the most significant
        performance gain, particularly for short flows. Nonetheless, this
        specification also caters for the case where AccECN feedback is not
        implemented.</t>

        <section anchor="genecn_sec_SYN" title="SYN">
          <section anchor="genecn_sec_ECT_SYN" title="Setting ECT on the SYN">
            <t>With classic <xref target="RFC3168"/> ECN feedback, the SYN was
            never expected to be ECN-capable, so the flag provided to feed
            back congestion was put to another use (it is used in combination
            with other flags to indicate that the responder supports ECN). In
            contrast, Accurate ECN (AccECN) feedback <xref
            target="I-D.ietf-tcpm-accurate-ecn"/> provides a codepoint in the
            SYN-ACK for the responder to feed back that the SYN arrived marked
            CE.</t>

            <t>Therefore, a TCP initiator MUST NOT set ECT on a SYN unless it
            also attempts to negotiate Accurate ECN feedback in the same
            SYN.</t>

            <t>For the experiments proposed here, if the SYN is requesting
            AccECN feedback, the TCP sender will also set ECT on the SYN. It
            can ignore the prohibition in section 6.1.1 of RFC 3168 against
            setting ECT on such a SYN.</t>

            <t>The following subsections about the SYN solely apply to this
            case where the initiator sent an ECT SYN.</t>
          </section>

          <section title="Caching Failed Connection Attempts">
            <t>Until AccECN servers become widely deployed, a TCP initiator
            that implements AccECN and sets ECT on a SYN SHOULD also maintain
            a cache per server to record any failure of the previous attempt.
            It SHOULD record whether a server does not support AccECN and MAY
            record whether the ECT SYN is persistently lost (see fall-back
            below). The TCP initiator will not subsequently attempt any
            behaviour recorded as persistently problematic. However, the cache
            should be arranged to expire so that the initiator will
            infrequently attempt to check whether each problem has been
            resolved.</t>

            <t>There is no need to cache successful attempts, because the
            default ECT SYN behaviour performs optimally on success.</t>

            <t>Servers that do not support ECN as a whole can be recorded as
            non-support of AccECN and do not need to be distinguished, because
            there is no performance penalty in always attempting to negotiate
            classic <xref target="RFC3168"/> ECN support.</t>
          </section>

          <section title="SYN Congestion Response">
            <t>Here, we use IW0 to denote the initial window of the TCP
            initiator <xref target="RFC5681"/>.</t>

            <t>If the SYN-ACK returned to the TCP initiator confirms that the
            server supports AccECN, it will also indicate whether or not the
            SYN was CE-marked. If the SYN was CE-marked, the initiator MUST
            reduce its Initial Window (IW) and SHOULD reduce it to 1 SMSS
            (sender maximum segment size).</t>

            <t>If the SYN-ACK shows that the server does not support AccECN,
            the TCP initiator MUST conservatively reduce its Initial Window
            and SHOULD reduce it to 1 SMSS. A reduction to greater than 1 SMSS
            MAY be appropriate (see discussion below). Conservatism is
            necessary because a non-AccECN SYN-ACK cannot show whether the SYN
            was CE-marked.</t>

            <t>If the TCP initiator (host A) receives a SYN from the remote
            end (host B) after it has sent a SYN to B, it indicates the
            (unusual) case of a simultaneous open. Host A will respond with a
            SYN-ACK. Host A will probably then receive a SYN-ACK in response
            to its own SYN, after which it can follow the appropriate one of
            the two paragraphs above.</t>

            <t>In all the above cases, the initiator does not have to back off
            its retransmission timer as it would in response to a timeout
            following no response to its SYN <xref target="RFC6298"/>, because
            both the SYN and the SYN-ACK have been successfully delivered
            through the network. Also, the initiator does not need to exit
            slow start or reduce ssthresh, which is not even required when a
            SYN is lost <xref target="RFC5681"/>,</t>

            <t><list style="empty">
                <t>DISCUSSION: In the case where the server does not support
                AccECN, because we impose a conservative reduction in initial
                window, we are penalizing those that deploy AccECN with ECT
                SYNs, rather than improving performance as intended.
                Nonetheless, if such cases are cached, performance will only
                suffer on the first attempt to access a non-AccECN server.
                Also, the data sent initially by a TCP client is often a small
                request that usually fits within 1 SMSS anyway {ToDo:
                reference? (this information was given informally by Yuchung
                Cheng)}.</t>
              </list></t>

            <t>See <xref target="genecn_sec_variants"/> for cases where TCP
            Fast Open (TFO <xref target="RFC7413"/>) or an initial window of
            10 (IW10 <xref target="RFC6928"/>) are also implemented.</t>
          </section>

          <section title="Fall-back Following a Lost ECT SYN (or SYN-ACK))">
            <t>An ECT SYN might be lost due to an over-zealous path element
            (or server) blocking ECT packets that do not conform to RFC 3168.
            However, loss is commonplace for numerous other reasons, e.g.
            congestion loss at a non-ECN queue on the forward or reverse path,
            transmission errors, etc. Alternatively, the cause of the blockage
            might be the attempt to negotiate AccECN, or possibly other
            unrelated options on the SYN.</t>

            <t>To expedite connection set-up if, after sending an ECT SYN, the
            retransmission timer expires, the TCP initiator SHOULD send a SYN
            with the not-ECT codepoint in the IP header and not attempt to
            negotiate AccECN. It would make sense to also remove any other
            experimental fields or options on the SYN, but that will depend on
            the specification of the other option(s). Other fall-back
            strategies that are considered to improve performance MAY be
            adopted.</t>

            <t>If the TCP initiator is caching failed connection attempts, it
            SHOULD NOT give up using ECT on the first SYN of subsequent
            connection attempts until it is clear that the blockage
            persistently and specifically affects ECT on SYNs. This is because
            loss is so commonplace for other reasons.</t>

            <t><list style="empty">
                <t>DISCUSSION: If initial experiments show that blocking of
                ECT on SYNs is widespread, it MAY be necessary to cache
                successful attempts as well as failures. Then, if there is no
                entry in the cache for a particular server, the TCP initiator
                could send a not-ECT SYN soon after the first ECT SYN. This
                would reduce the performance penalty for those deploying ECT
                SYN support.</t>
              </list></t>
          </section>
        </section>

        <section title="SYN-ACK">
          <t>To comply with the present specification, the responder (server)
          part of a TCP implementation MUST also comply with <xref
          target="RFC5562"/>, which defines the use of ECT on a SYN-ACK and
          the congestion response of the TCP listener if a SYN-ACK is
          CE-marked.</t>

          <t>Feedback by the initiator in response to a CE-marked SYN-ACK from
          the responder depends on whether classic ECN feedback or AccECN
          feedback <xref target="I-D.ietf-tcpm-accurate-ecn"/> has been
          negotiated. In either case no change is required to RFC 5562 or the
          AccECN specification respectively.</t>
        </section>

        <section anchor="acks" title="Pure ACK">
          <t>For the experiments proposed here, the TCP implementation will
          set ECT on Pure ACKs. It can ignore the requirement in section 6.1.4
          of RFC 3168 to set not-ECT on a Pure ACK.</t>

          <t>TCP does not normally detect or respond to loss of pure ACKs.
          Therefore, any response to CE markings on Pure ACKs is not required
          in order to comply with the present specification. Nonetheless, a
          congestion response is not precluded either. It could be arranged
          using any one of the following approaches.</t>

          <t>TCP never acknowledges Pure ACKs. So classic <xref
          target="RFC3168"/> ECN provides no mechanism to feed back a CE
          marking on a Pure ACK, unless the feedback is added to the ACK of a
          later data packet (if one arises).</t>

          <t>In contrast, an AccECN receiver <xref
          target="I-D.ietf-tcpm-accurate-ecn"/> continually feeds back a count
          of the number of CE-marked packets that it has received (and, if
          possible, a count of CE-marked bytes). So a TCP sender that has
          negotiated AccECN and is setting ECT on pure ACKs will receive
          congestion feedback if any Pure ACKs are CE-marked in transit.</t>

          <t>In either case (classic or AccECN feedback), if the TCP sender
          does receive feedback about CE-markings on Pure ACKs, it will react
          in the usual way by reducing its congestion window accordingly. This
          will regulate the rate of any data packets it is sending amongst the
          Pure ACKs. However, reducing the congestion window will have no
          effect on the rate of Pure ACKs. So while it is only sending Pure
          ACKs the sender will not be responding to congestion.</t>

          <t>Any pair of TCP end-points can already choose to regulate the
          rate of Pure ACKs by agreeing to regulate the delayed ACK ratio in
          response to loss or CE-marking of Pure ACKs, using the
          Acknowledgement Congestion Control (AckCC) techniques documented in
          <xref target="RFC5690"/> (informational). However, AckCC is not
          required.</t>

          <t>RFC 5690 proposed new TCP options to address the problems that
          TCP had no mechanism to allow ECT to be set on Pure ACKs and no
          mechanism to feed back loss or CE-marking of Pure ACKs. A
          combination of the present specification and AccECN addresses both
          these problems, at least for ECN marking. So it might now be
          possible to design an ECN-specific ACK congestion control scheme
          without the extra TCP options proposed in RFC 5690. However, such a
          mechanism is out of scope of the present document.</t>
        </section>

        <section title="Window Probe">
          <t>For the experiments proposed here, the TCP sender will set ECT on
          window probes. It can ignore the prohibition in section 6.1.6 of RFC
          3168 against setting ECT on a window probe.</t>

          <t>A window probe contains a single octet, so it is no different
          from a regular TCP data segment. Therefore a TCP receiver will feed
          back any CE marking on a window probe as normal (either using
          classic ECN feedback or AccECN feedback). The sender of the probe
          will then reduce its congestion window as normal.</t>

          <t>A receive window of zero indicates that the application is not
          consuming data fast enough and does not imply anything about network
          congestion. Once the receive window opens, the congestion window
          might become the limiting factor, so it is correct that CE-marked
          probes reduce the congestion window. However, CE-marking on window
          probes does not reduce the rate of the probes themselves. This is
          unlikely to present a problem, given a window probe is sent only
          every 2 minutes <xref target="RFC0793"/> as long as the receiver is
          advertising a zero window.</t>
        </section>

        <section title="FIN">
          <t>A TCP implementation can set ECT on a FIN.</t>

          <t>A congestion response to a CE-marking on a FIN is not
          required.</t>

          <t>After sending a FIN, the endpoint will not send any more data in
          the connection. Therefore, even if the FIN-ACK indicates that the
          FIN was CE-marked (whether using classic or AccECN feedback),
          reducing the congestion window will not affect anything.</t>

          <t>After sending a FIN, a host might send one or more pure ACKs. If
          it is using one of the techniques in <xref target="acks"/> to
          regulate the delayed ACK ratio for Pure ACKs, it could equally be
          applied after a FIN. But this is not required.</t>
        </section>

        <section anchor="genecn_sec_ECT_RST" title="RST">
          <t>A TCP implementation can set ECT on a RST.</t>

          <t>A congestion response to a CE-marking on a RST is not required
          (and actually not possible).</t>

          <t>The host generating the RST message does not have an open
          connection after sending it (either because there was no such
          connection when the packet that triggered the RST message was
          received or because the packet that triggered the RST message also
          triggered the closure of the connection).</t>

          <t>Moreover, the receiver of a CE-marked RST message can either: i)
          accept the RST message and close the connection; ii) emit a
          so-called challenge ACK in response (with suitable throttling) <xref
          target="RFC5961"/> and otherwise ignore the RST (e.g. because the
          sequence number is in-window but not the precise number expected
          next); or iii) discard the RST message (e.g. because the sequence
          number is out-of-window). In the first two cases there is no point
          in echoing any CE mark received because the sender closed its
          connection when it sent the RST. In the third case it makes sense to
          discard the CE signal as well as the RST. So, in all these cases it
          does not make sense to generate feedback about a CE mark on a RST
          message.</t>

          <t>The following factors have been considered before deciding
          whether ECT ought to be allowed on a RST message:<list
              style="symbols">
              <t>As explained above, a congestion response by the sender of a
              CE-marked RST message is not possible;</t>

              <t>So the only reason for the sender setting ECT on a RST would
              be to improve the reliability of the message's delivery;</t>

              <t>RST messages are used to both mount and mitigate
              attacks:<list style="symbols">
                  <t>Spoofed RST messages are used by attackers to terminate
                  ongoing connections, although the mitigations in RFC 5961
                  have considerably raised the bar against off-path RST
                  attacks;</t>

                  <t>Legitimate RST messages allow endpoints to inform their
                  peers to eliminate existing state that correspond to non
                  existing connections, liberating resources e.g. in DoS
                  attacks scenarios;</t>
                </list></t>

              <t>AQMs are advised to disable ECN marking during persistent
              overload, so:<list style="symbols">
                  <t>it is harder for an attacker to exploit ECN to intensify
                  an attack;</t>

                  <t>it is harder for a legitimate user to exploit ECN to more
                  reliably mitigate an attack</t>
                </list></t>

              <t>Prohibiting ECT on a RST would deny the benefit of ECN to
              legitimate RST messages, but not to attackers who can disregard
              RFCs;</t>

              <t>If ECT were prohibited on RSTs, security middleboxes could
              discard any RSTs that were exploiting ECN to intensify an
              attack;</t>

              <t>However, unlike a SYN flood, a RST flood is easier to
              distinguish from legitimate traffic, so it is easier to ignore
              or eliminate without harming legitimate traffic.</t>
            </list>So, on balance, it has been decided that it is not
          necessary to prohibit ECT on RSTs. However, there is always the
          possibility that someone might demonstrate a new RST attack that
          proves this decision to be unwise.</t>
        </section>

        <section title="Retransmissions">
          <t>For the experiments proposed here, the TCP sender will set ECT on
          retransmitted segments. It can ignore the prohibition in section
          6.1.5 of RFC 3168 against setting ECT on retransmissions.
          Nonetheless, the requirement in RFC 3168 that "the TCP data receiver
          SHOULD ignore the CE codepoint on out-of-window packets" still
          holds.</t>

          <t>If the TCP sender receives feedback that a retransmitted packet
          was CE-marked, it will react as it would to any feedback of
          CE-marking on a data packet.</t>
        </section>
      </section>
    </section>

    <section anchor="genecn_sec_variants"
             title="Interaction with popular variants or derivatives of TCP">
      <t>The following subsections specify additional behaviour necessary when
      setting ECT on all data and control packets while using the following
      popular variants or derivatives of TCP: SCTP, TFO, IW10. The subsection
      on IW10 discusses changes to specifications but does not recommend any,
      because the specification as it stands is safe, and there is only a
      corner-case where performance could be occasionally improved.</t>

      <t>TCP variants that have been assessed and found not to interact
      adversely with ECT on TCP control packets are: SYN cookies (see Appendix
      A of <xref target="RFC4987"/>) and L4S <xref
      target="I-D.briscoe-tsvwg-l4s-arch"/>.</t>

      <section title="SCTP">
        <t>Stream Control Transmission Protocol (SCTP <xref
        target="RFC4960"/>) is a standards track protocol derived from TCP.
        SCTP currently does not include ECN support, but a draft on the
        addition of ECN to SCTP has been produced <xref
        target="I-D.stewart-tsvwg-sctpecn"/>. This draft avoids setting ECT on
        control packets and retransmissions, closely following the arguments
        in RFC 3168. When ECN is finally added to SCTP, experience from
        experiments on adding ECN support to all TCP packets ought to be
        directly transferable to SCTP.</t>
      </section>

      <section title="TFO">
        <t>TCP Fast Open (TFO <xref target="RFC7413"/>) is an experiment to
        remove the round trip delay of TCP's 3-way hand-shake (3WHS). A TFO
        initiator caches a cookie from a previous connection with a
        TFO-enabled server. Then, for subsequent connections to the same
        server, any data included on the SYN and any other data segments sent
        directly after the SYN (up to the initial window limit) can be passed
        directly to the server application, which can then return response
        data with the SYN-ACK (again, up to the initial window limit).</t>

        <t>If a TFO initiator has cached that the server supported ECN in the
        previous connection, it would be safe to set ECT on any data segments
        it sends before a SYN-ACK returns from the responder (server). Note
        that there is no space in the SYN-ACK itself (whether classic or
        AccECN feedback has been negotiated) to include feedback about any CE
        on data packets. Nonetheless, it is safe to set ECT on data packets
        within the handshake because any CE-marking on these data segments can
        be fed back by the responder on the first data segment it sends after
        the SYN-ACK (or on an additional Pure ACK if it has no more data to
        send).</t>

        <t>Note that the prohibition in <xref target="genecn_sec_ECT_SYN"/>
        against setting ECT on the SYN if the same SYN is not requesting
        AccECN feedback still applies.</t>

        <t>Strictly even a non-TFO TCP initiator can send up to an initial
        window of data segments straight after the SYN. However, this is rare
        because a non-TFO TCP server will not deliver them to the application
        until the 3WHS completes. Therefore the question of ECT on data
        segments within the handshake only becomes important with TFO. A TFO
        initiator's first ever connection with a server never uses a fast
        open, so the initiator always has a chance to cache whether a server
        supports ECN before it uses a fast open.</t>

        <!--Of course, a server might actually be implemented as a set of replicas, and conceivably the  replicas might not all be consistently configured where ECN is concerned. 
However, such unlikely cases will not be considered further here. [Commented out: Too much detail.]-->
      </section>

      <section anchor="genecn_sec_IW10" title="IW10">
        <t>IW10 is an experiment to determine whether it is safe for TCP to
        use an initial window of 10 SMSS <xref target="RFC6928"/>.</t>

        <t>This subsection does not recommend any additions to the present
        specification in order to interwork with IW10. The specifications as
        they stand are safe, and there is only a corner-case where performance
        could be occasionally improved, as explained below.</t>

        <t>As specified in <xref target="genecn_sec_ECT_SYN"/>, a TCP
        initiator can only set ECT on the SYN if it requests AccECN support.
        If, however, the SYN-ACK tells the initiator that the responder does
        not support AccECN, <xref target="genecn_sec_ECT_SYN"/> advises the
        initiator to conservatively reduce its initial window to 1 SMSS
        because, if the SYN was CE-marked, the SYN-ACK has no way to feed that
        back.</t>

        <t>If the initiator implements IW10, it seems rather over-conservative
        to reduce IW to 1 in this scenario. Nonetheless, it will rarely hit
        performance if we leave the advice at 1 SMSS, because:<list
            style="symbols">
            <t>as long as the initiator is caching failures to negotiate
            AccECN, subsequent attempts to access the same server will not use
            ECT on the SYN anyway, so there will no longer be any need to
            conservatively reduce IW;</t>

            <t>currently it is not common for a TCP initiator (client) to have
            more than one segment to send {ToDo: evidence/reference?} - IW10
            is primarily exploited by TCP servers.</t>
          </list></t>
      </section>
    </section>

    <section anchor="arguments"
             title="Discussion of the arguments in RFC 3168">
      <t>This section is informative, not normative. It presents
      counter-arguments against the justifications in the RFC series for
      disabling ECN marking on each type of packet. First it addresses
      over-arching arguments used for most packet types, then it addresses the
      specific arguments for each packet type in turn.</t>

      <section anchor="reliability" title="The reliability argument">
        <t>Section 5.2 of RFC 3168 states: <list style="empty">
            <t>"To ensure the reliable delivery of the congestion indication
            of the CE codepoint, an ECT codepoint MUST NOT be set in a packet
            unless the loss of that packet [at a subsequent node] in the
            network would be detected by the end nodes and interpreted as an
            indication of congestion."</t>
          </list></t>

        <t>We believe this argument is overly conservative. The principle to
        determine whether a packet is ECN-capable ought to be "do no extra
        harm", meaning that the reliability of a congestion signal's delivery
        ought to be no worse with ECN than without. In particular, setting the
        CE codepoint on the very same packet fulfills this criterion, since
        either the packet is delivered and the CE signal is delivered to the
        endpoint, or the packet is dropped and the original congestion signal
        (packet loss) is delivered to the endpoint.</t>

        <t>TCP does not deliver control packets reliably. So it is more
        important to allow control packets to be ECN-capable, which greatly
        improves reliable delivery of the control packets themselves. This
        outweighs by far the concern that a CE marking applied to a control
        packet by one node might subsequently be dropped by another node.
        Particularly given that, without ECN, the transport does not attempt
        to detect the drop of most control packets anyway.<!--Perversely, by prohibiting ECT on control packets, RFC 3168 compromises reliable delivery of control packets themselves 
just because there is a (much smaller) possibility that a CE marking might not be reliably delivered. Even though, without ECN, 
the loss of the same packet would not have been detected anyway.--></t>
      </section>

      <section title="SYNs">
        <!--	Motivation for setting the ECT codepoint in SYN packets: If the ECT codepoint
	is not set in SYN packets, the SYN packets are much more likely to be dropped
	in congestion episodes. Because the only way to detect that a SYN packet has
	been lost is to wait for the retransmission timer to expire, this imposes a
	significant performance penalty. The situation is especially bad in the case
	where all traffic is ECN capable (such as a DC where ECN is used by default),
	because this means that all the rest of the traffic will be ECT marked and the
	first packets to be dropped will be the ones without the ECT bit set, in
	particular SYNs. See Judd's paper for specific experiments.-->

        <t>RFC 5562 presents two arguments against ECT marking of SYN packets
        (quoted verbatim): <list style="empty">
            <t>"First, when the TCP SYN packet is sent, there are no
            guarantees that the other TCP endpoint (node B in Figure 2) is
            ECN-Capable, or that it would be able to understand and react if
            the ECN CE codepoint was set by a congested router.</t>

            <t>Second, the ECN-Capable codepoint in TCP SYN packets could be
            misused by malicious clients to "improve" the well-known TCP SYN
            attack. By setting an ECN-Capable codepoint in TCP SYN packets, a
            malicious host might be able to inject a large number of TCP SYN
            packets through a potentially congested ECN-enabled router,
            congesting it even further."</t>
          </list>The first point actually describes two subtly different
        issues. So below three arguments are countered in turn.</t>

        <section title="Argument 1a: Loss of congestion notification on the SYN">
          <t>This argument certainly applied at the time RFC 5562 was written,
          when no ECN responder mechanism had any logic to recognize or feed
          back a CE marking on a SYN. The problem was that, during the 3WHS,
          the flag in the TCP header for ECN feedback (called Echo Congestion
          Experienced) had been overloaded to negotiate the use of ECN itself.
          So there was no space for feedback in a SYN-ACK.</t>

          <t>The accurate ECN (AccECN) protocol <xref
          target="I-D.ietf-tcpm-accurate-ecn"/> has since been designed to
          solve this problem, using a two-pronged approach. First AccECN uses
          the 3 ECN bits in the TCP header as 8 codepoints, so there is space
          for the responder to feed back whether there was CE on the SYN.
          Second a TCP initiator can always request AccECN support on every
          SYN, and any responder reveals its level of ECN support: AccECN,
          classic ECN, or no ECN. Therefore, if a responder does indicate that
          it supports AccECN, the initiator can be sure that, if there is no
          CE feedback on the SYN-ACK, then there really was no CE on the
          SYN.</t>

          <t>An initiator can combine AccECN with three possible strategies
          for setting ECT on a SYN:<list style="format (S%d):">
              <t>Pessimistic ECT with positive cache: The initiator always
              requests AccECN in the SYN, but without setting ECT. Then it
              records those servers that confirm that they support AccECN in a
              cache. On a subsequent connection to any server that supports
              AccECN, the initiator can then set ECT on the SYN.</t>

              <t>Optimistic ECT: The initiator always sets ECT optimistically
              on the initial SYN and it always requests AccECN support. Then,
              if the server response shows it has no AccECN logic (so it
              cannot feed back a CE mark), the initiator conservatively
              behaves as if the SYN was CE-marked, by reducing its initial
              window.<list style="letters">
                  <t>With no cache: The optimistic ECT strategy ought to work
                  pretty well without caching any responses.</t>

                  <t>With negative cache: The optimistic ECT strategy can be
                  improved by recording solely those servers that do not
                  support AccECN. On subsequent connections to these
                  non-AccECN servers, the initiator will still request AccECN
                  but not set ECT on the SYN. Then, the initiator can use its
                  full initial window (if it has enough request data to need
                  it). Longer term, as servers upgrade to AccECN, the
                  initiator will remove them from the cache and use ECT on
                  subsequent SYNs to that server.</t>
                </list></t>

              <t>ECT by configuration: In a controlled environment, the
              administrator can make sure that servers support ECN-capable SYN
              packets. Examples of controlled environments are single-tenant
              DCs, and possibly multi-tenant DCs if we assume that each tenant
              mostly communicates with its own VMs.</t>
            </list></t>

          <t>For unmanaged environments like the public Internet, the choice
          is between strategies (S1) and (S2B):<list style="symbols">
              <t>The "pessimistic ECT with positive cache" strategy (S1)
              suffers from exposing the initial SYN to the prevailing loss
              level, even if the server supports ECT on SYNs, but only on the
              first connection to each AccECN server.</t>

              <t>The "optimistic ECT with negative cache" strategy (S2B)
              exploits a server's support for ECT on SYNs from the very first
              attempt. But if the server turns out not to support AccECN, the
              initiator has to conservatively limit its initial window -
              usually unnecessarily. Nonetheless, initiator request data (as
              opposed to server response data) is rarely larger than 1 SMSS
              anyway (see <xref target="genecn_sec_IW10"/>).</t>
            </list></t>

          <t>The normative specification for ECT on a SYN in <xref
          target="genecn_sec_SYN"/> uses the "optimistic ECT with negative
          cache" strategy on the assumption that an initial window of 1 SMSS
          is usually sufficient for client requests anyway. For clients that
          often initially send more than 1 SMSS of data, strategy (S1) could
          be used during initial deployment and strategy (S2B) later (when the
          probability of servers supporting AccECN and the likelihood of
          seeing some CE marking is higher). Also, as deployment proceeds a
          positive cache (S1) starts off small then grows, while a negative
          cache (S2B) becomes large at first, then shrinks.</t>
        </section>

        <section title="Argument 1b: Unknown Handling of Unexpected ECN">
          <t>GIven ECT-marked SYN packets have previously been prohibited, it
          cannot be assumed they will be accepted. According to a study using
          2014 data <xref target="ecn-pam"/> from a limited range of vantage
          points, out of the top 1M Alexa web sites, 4791 (0.82%) IPv4 sites
          and 104 (0.61%) IPv6 sites failed to establish a connection when
          they received a TCP SYN with any ECN codepoint set in the IP header
          and the appropriate ECN flags in the TCP header. Of these, about 41%
          failed to establish a connection due to the ECN flags in the TCP
          header even with a Not-ECT ECN field in the IP header (i.e. despite
          full compliance with RFC 3168). Therefore adding the ECN-capability
          to SYNs was increasing connection establishment failures by about
          0.4%.</t>

          <t>We will need to investigate which of numerous possible causes is
          leading to these failures. RFC 3168 says "a host MUST NOT set ECT on
          SYN [...] packets", but it does not say what the responder should do
          if an ECN-capable SYN arrives. So perhaps some responder
          implementations are checking that the SYN complies with RFC 3168,
          then silently ignoring non-compliant SYNs (or perhaps returning a
          RST). Also some middleboxes (e.g. firewalls) might be discarding
          non-compliant SYNs themselves. For the future, <xref
          target="I-D.ietf-tsvwg-ecn-experimentation"/> clarifies that
          middleboxes "SHOULD NOT" do this, but that does not alter the
          past.</t>

          <t>Whereas RSTs can be dealt with immediately, silent failures
          introduce a retransmission timeout delay (default 1 second) at the
          initiator before it attempts any fall back strategy. Ironically,
          making SYNs ECN-capable is intended to avoid the timeout when a SYN
          is lost due to congestion. Fortunately, where discard of ECN-capable
          SYNs is due to policy it will occur predictably, not randomly like
          congestion. So the initiator can avoid it by caching those sites
          that do not support ECN-capable SYNs.</t>

          <t>This further justifies the use of the "optimistic ECT with
          negative cache" strategy in <xref target="genecn_sec_SYN"/>.</t>

          <t>It might seem tempting to first send an ECT SYN and then a
          non-ECT SYN (possibly with a small delay between them) and only
          accept the non-ECT connection if it returned first. However, even a
          cache of a dozen or so sites ought to avoid all ECN-related
          performance problems with roughly the Alexa top thousand. So it is
          questionable whether the level of failure of ECT on SYNs warrants
          always sending two SYNs, particularly given failures at
          well-maintained sites could reduce if ECT SYNs are standardized.</t>
        </section>

        <section anchor="genecn_sec_SYN_DOS" title="Argument 2: DoS attacks.">
          <t><xref target="RFC5562"/> says that ECT SYN packets could be
          misused by malicious clients to augment "the well-known TCP SYN
          attack". It goes on to say "a malicious host might be able to inject
          a large number of TCP SYN packets through a potentially congested
          ECN-enabled router, congesting it even further."</t>

          <t>We assume this is a reference to the TCP SYN flood attack (see
          https://en.wikipedia.org/wiki/SYN_flood), which is an attack against
          a responder end point. We assume the idea of this attack is to use
          ECT to get more packets through an ECN-enabled router in preference
          to other non-ECN traffic so that they can go on to use the SYN
          flooding attack to inflict more damage on the responder end point.
          This argument could apply to flooding with any type of packet, but
          we assume SYNs are singled out because their source address is
          easier to spoof, whereas floods of other types of packets are easier
          to block.</t>

          <t>Mandating Not-ECT in an RFC does not stop attackers using ECT for
          flooding. Nonetheless, if a standard says SYNs are not meant to be
          ECT it would make it legitimate for firewalls to discard them.
          However this would negate the considerable benefit of ECT SYNs for
          compliant transports and seems unnecessary because RFC 3168 already
          provides the means to address this concern. In section 7, RFC 3168
          says "During periods where ... the potential packet marking rate
          would be high, our recommendation is that routers drop packets
          rather then set the CE codepoint..." and this advice is repeated in
          <xref target="RFC7567"/> (section 4.2.1). This makes it harder for
          flooding packets to gain from ECT.</t>

          <t>Further experiments are needed to test how much malicious hosts
          can use ECT to augment flooding attacks without triggering AQMs to
          turn off ECN support (flying "just under the radar"). If it is found
          that ECT can only slightly augment flooding attacks, the risk of
          such attacks will need to be weighed against the performance
          benefits of ECT SYNs.</t>
        </section>
      </section>

      <section title="Pure ACKs.">
        <t>RFC 3168 gives the following arguments for not allowing the ECT
        marking of pure ACKs (ACKs not piggy-backed on data). In section 5.2
        it reads: <list style="empty">
            <t>"To ensure the reliable delivery of the congestion indication
            of the CE codepoint, an ECT codepoint MUST NOT be set in a packet
            unless the loss of that packet in the network would be detected by
            the end nodes and interpreted as an indication of congestion.</t>

            <t>Transport protocols such as TCP do not necessarily detect all
            packet drops, such as the drop of a "pure" ACK packet; for
            example, TCP does not reduce the arrival rate of subsequent ACK
            packets in response to an earlier dropped ACK packet. Any proposal
            for extending ECN- Capability to such packets would have to
            address issues such as the case of an ACK packet that was marked
            with the CE codepoint but was later dropped in the network. We
            believe that this aspect is still the subject of research, so this
            document specifies that at this time, "pure" ACK packets MUST NOT
            indicate ECN-Capability."</t>
          </list></t>

        <t>Later on, in section 6.1.4 it reads: <list style="empty">
            <t>"For the current generation of TCP congestion control
            algorithms, pure acknowledgement packets (e.g., packets that do
            not contain any accompanying data) MUST be sent with the not-ECT
            codepoint. Current TCP receivers have no mechanisms for reducing
            traffic on the ACK-path in response to congestion notification.
            Mechanisms for responding to congestion on the ACK-path are areas
            for current and future research. (One simple possibility would be
            for the sender to reduce its congestion window when it receives a
            pure ACK packet with the CE codepoint set). For current TCP
            implementations, a single dropped ACK generally has only a very
            small effect on the TCP's sending rate."</t>
          </list></t>

        <!--	The motivation for marking pure ACK packets with the ECT codepoint is that
	failing to do so in a network where ECN is widely used, increases
	significantly the chances for pure ACKs of getting dropped. This has an
	overall negative effect in the communication performance.-->

        <t>We next address each of the arguments presented above.</t>

        <t>The first argument is a specific instance of the reliability
        argument for the case of pure ACKs. This has already been addressed by
        countering the general reliability argument in <xref
        target="reliability"/>.</t>

        <t>The second argument mentions that a sender does not reduce the load
        of a stream of pure ACKs even if they are contributing to congestion.
        Again, given that current TCP does not respond to pure ACK loss,
        setting ECT on pure ACKs to allow them to carry congestion marks would
        be no worse than not doing so (and not doing so would be detrimental
        from a performance perspective).</t>

        <t>The proposed AccECN modification to TCP feedback <xref
        target="I-D.ietf-tcpm-accurate-ecn"/> involves a data receiver
        repeatedly sending a count of received congestion marks. So AccECN
        could include marks on pure ACKs in this count, even though it does
        not ACK pure ACKs themselves. Then the sender of the pure ACKs will
        reduce its congestion window, which will (correctly) reduce the rate
        at which it sends any subsequent data. Nonetheless, even if the
        original sender of the pure ACK does not respond to this feedback, or
        if it is decided that AccECN will not provide this information, it
        will still make sense to set ECT on pure ACKs, because the congestion
        situation will be no worse than it is today with non-ECT pure
        ACKs.</t>

        <t>In summary, allowing ECT (and CE) to be set on pure ACKs is no
        worse than not doing so (and dropping the pure ACK). In contrast, not
        setting ECT on pure ACKs is certainly detrimental to performance
        because when a pure ACK is lost it can prevent the release of new
        data.</t>
      </section>

      <section title="Window probes">
        <t>RFC 3168 presents only the reliability argument for preventing
        setting the ECT codepoint in Window Probe packets. Specifically,
        Section 6.1.6 states: <list style="empty">
            <t>"If a window probe packet is dropped in the network, this loss
            is not detected by the receiver. Therefore, the TCP data sender
            MUST NOT set either an ECT codepoint or the CWR bit on window
            probe packets.</t>

            <t>However, because window probes use exact sequence numbers, they
            cannot be easily spoofed in denial-of-service attacks. Therefore,
            if a window probe arrives with the CE codepoint set, then the
            receiver SHOULD respond to the ECN indications."</t>
          </list></t>

        <t>The reliability argument has already been addressed in <xref
        target="reliability"/>.</t>

        <t>Allowing ECT on window probes could considerably improve
        performance because, if a window probe is lost in conditions when the
        Silly Window Syndrome applies, the sender will stall until the next
        window probe reaches the receiver (at least 2 minutes later).</t>

        <t>On the bright side, RFC 3168 at least specifies the receiver
        behaviour if a CE-marked window probe arrives, so changing the
        behaviour ought to be less painful than for other packet types.</t>
      </section>

      <section anchor="genecn_sec_reXMT" title="Retransmitted packets.">
        <t>RFC 3168 says the sender "MUST NOT" set ECT on retransmitted
        packets. The rationale for this consumes nearly 2 pages of RFC 3168,
        so the reader is referred to section 6.1.5 of RFC 3168, rather than
        quoting it all here. There are essentially three arguments namely,
        reliability, DoS attacks and over-reaction to congestion. We address
        them in order below.</t>

        <t>The reliability argument has already been addressed in <xref
        target="reliability"/>.</t>

        <t>Protection against DoS attacks is not afforded by prohibiting ECT
        on retransmitted packets. An attacker can set CE on spoofed
        retransmissions whether or not it is prohibited by an RFC. Protection
        against the DoS attack described in RFC 3168 is solely afforded by the
        requirement that "the TCP data receiver SHOULD ignore the CE codepoint
        on out-of-window packets". Therefore we propose to allow ECT marking
        of retransmitted packets, in order to reduce the chance of them being
        dropped.</t>

        <t>Nonetheless, it is important to keep the RFC 3168 advice to ignore
        the CE codepoint in out-of-window packets. This means that, for those
        retransmitted packets that arrive at the receiver after the original
        packet has been properly received, any CE marking will be ignored.
        There is no problem with that because the delivery of the original
        packet implies that the sender's original congestion response (when it
        deemed the packet lost and retransmitted it) was unnecessary. The data
        receiver is also advised to use the more stringent input check for
        incoming segments in section 5.2 of <xref target="RFC5961"/>.</t>

        <t>Finally, the third argument is about over-reacting to congestion.
        The argument goes that, if a retransmitted packet is dropped, the
        sender will not detect it, so it will not react again to congestion
        (it would have reduced its congestion window already when it
        retransmitted the packet). Whereas, if retransmitted packets can be CE
        tagged instead of dropped, senders could potentially react more than
        once to congestion. However, we argue that it is legitimate to respond
        again to congestion if it still persists in subsequent round
        trip(s).</t>

        <t>Therefore, in all three cases, it is not incorrect to set ECT on
        retransmissions.</t>
      </section>
    </section>

    <section title="Security considerations">
      <t><xref target="genecn_sec_ECT_RST"/> considers the question of whether
      ECT on RSTs will allow RST attacks to be intensified. There are several
      security arguments presented in RFC 3168 for preventing the ECN marking
      of TCP control packets and retransmitted segments. We believe all of
      them have been properly addressed in <xref target="arguments"/>,
      particularly <xref target="genecn_sec_SYN_DOS"/> and <xref
      target="genecn_sec_reXMT"/> on DoS attacks using spoofed ECT-marked SYNs
      and spoofed CE-marked retransmissions.</t>
    </section>

    <section title="IANA Considerations">
      <t>There are no IANA considerations in this memo.</t>
    </section>

    <section title="Acknowledgments">
      <t>Thanks to Mirja K&uuml;hlewind and David Black for their useful
      reviews.</t>
    </section>
  </middle>

  <back>
    <references title="Normative References">
      <?rfc include='reference.RFC.2119'?>

      <?rfc include='reference.RFC.3168'?>

      <?rfc include='reference.RFC.5562'?>

      <?rfc include='reference.I-D.ietf-tcpm-accurate-ecn'?>

      <?rfc include='reference.I-D.ietf-tsvwg-ecn-experimentation'?>
    </references>

    <references title="Informative References">
      <?rfc include='reference.RFC.0793'?>

      <?rfc include='reference.RFC.1122'?>

      <?rfc include='reference.RFC.3540'?>

      <?rfc include='reference.RFC.4960'?>

      <?rfc include='reference.RFC.4987'?>

      <?rfc include='reference.RFC.5681'?>

      <?rfc include='reference.RFC.5961'?>

      <?rfc include='reference.RFC.5690'?>

      <?rfc include='reference.RFC.6298'?>

      <?rfc include='reference.RFC.6928'?>

      <?rfc include='reference.RFC.7413'?>

      <?rfc include='reference.RFC.7567'?>

      <?rfc include='reference.I-D.briscoe-tsvwg-ecn-l4s-id'?>

      <?rfc include='reference.I-D.briscoe-tsvwg-l4s-arch'?>

      <?rfc include='reference.I-D.stewart-tsvwg-sctpecn'?>

      <reference anchor="judd-nsdi">
        <front>
          <title>Attaining the promise and avoiding the pitfalls of TCP in the
          Datacenter</title>

          <author fullname="Glenn" initials="G.J." surname="Judd">
            <organization/>
          </author>

          <date year="2015"/>
        </front>

        <seriesInfo name="NSDI" value="2015"/>

        <format type="TXT"/>
      </reference>

      <reference anchor="ecn-pam">
        <front>
          <title>Enabling Internet-Wide Deployment of Explicit Congestion
          Notification</title>

          <author fullname="Brian Trammell" initials="B." surname="Trammell">
            <organization/>
          </author>

          <author fullname="Mirja K&uuml;hlewind" initials="M."
                  surname="K&uuml;hlewind">
            <organization>&uuml;&uuml;&uuml;&uuml;&uuml;</organization>
          </author>

          <author fullname="Damiano Boppart" initials="D." surname="Boppart">
            <organization/>
          </author>

          <author fullname="Iain Learmonth" initials="I." surname="Learmonth">
            <organization/>
          </author>

          <author fullname="Gorry Fairhurst" initials="G" surname="Fairhurst">
            <organization/>
          </author>

          <author fullname="Richard Scheffenegger" initials="R."
                  surname="Scheffenegger">
            <organization/>
          </author>

          <date year="2015"/>
        </front>

        <seriesInfo name="Int'l Conf. on on Passive and Active Network Measurement (PAM'15)"
                    value="pp193-205"/>

        <format target="http://ecn.ethz.ch/ecn-pam15.pdf" type="PDF"/>
      </reference>
    </references>
  </back>
</rfc>
