<?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-ietf-tcpm-generalized-ecn-01"
     ipr="trust200902" obsoletes="5562" updates="">
  <front>
    <title abbrev="ECN++">ECN++: Adding Explicit Congestion Notification (ECN)
    to TCP Control Packets</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>CableLabs</organization>

      <address>
        <postal>
          <street/>

          <country>UK</country>
        </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, network elements (e.g. routers, 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 shall be called ECN++. It enables ECN support on
      all the aforementioned types of TCP packet.</t>

      <t>ECN++ is a sender-side change. It works whether the two ends of the
      TCP connection use classic ECN feedback <xref target="RFC3168"/> or
      experimental Accurate ECN feedback (AccECN <xref
      target="I-D.ietf-tcpm-accurate-ecn"/>). Nonetheless, if the client does
      not implement AccECN, it cannot use ECN++ on the one packet that offers
      most benefit from it - the initial SYN. Therefore, implementers of ECN++
      are RECOMMENDED to also implement AccECN.</t>

      <t>ECN++ is designed for compatibility with a number of latency
      improvements to TCP such as TCP Fast Open (TFO <xref
      target="RFC7413"/>), initial window of 10 SMSS (IW10 <xref
      target="RFC6928"/>) and Low latency Low Loss Scalable Transport (L4S
      <xref target="I-D.ietf-tsvwg-l4s-arch"/>), but they can all be
      implemented and deployed independently. <xref
      target="I-D.ietf-tsvwg-ecn-experimentation"/> is a standards track
      procedural device that relaxes requirements in RFC 3168 and other
      standards track RFCs that would otherwise preclude the experimental
      modifications needed for ECN++ and other ECN experiments.</t>

      <section anchor="genecn_sec_motivation" 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, particularly TCP SYNs and
        SYN-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 controlled private data centre
        (DC) environment where ECN is used (in conjunction with DCTCP <xref
        target="I-D.ietf-tcpm-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. The issue is that DCTCP exhibits a much more aggressive
        response to packet marking (which is why it is only applicable in
        controlled environments). This 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.ietf-tsvwg-l4s-arch"/>. In such an approach, L4S packets
        identify themselves using an ECN codepoint <xref
        target="I-D.ietf-tsvwg-ecn-l4s-id"/>. With L4S and potentially other
        similar cases, 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 classify control packets into a
        different queue with different network treatment, which may also lead
        to reordering, further degrading TCP 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 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 enabling ECN on 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 through 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 for each packet type to justify why it
        is reasonable to conduct this experiment.</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.</t>

      <t>Window probe: Defined in <xref target="RFC0793"/>, 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.</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.ietf-tsvwg-ecn-l4s-id"/>.</t>

      <t>Not-ECT: The ECN codepoint set by senders 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 (e.g. Firewall) 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 of RFC 3168 might have
        erroneously interpreted this as a requirement for firewalls, intrusion
        detection systems, etc. to check and enforce this behaviour. Section
        4.3 of <xref target="I-D.ietf-tsvwg-ecn-experimentation"/> updates RFC
        3168 to remove this ambiguity. It require firewalls or any
        intermediate nodes not to treat certain types of ECN-capable TCP
        segment differently (except potentially in one attack scenario). This
        is likely to only involve a firewall rule change in a fraction of
        cases (at most 0.4% of paths according to the tests reported in <xref
        target="genecn_sec_unexpected_ECN"/>).</t>

        <t>In case a TCP sender encounters a middlebox blocking ECT on certain
        TCP segments, the specification below includes behaviour to fall back
        to non-ECN. However, this loses the benefit of ECN on control packets.
        So operators are RECOMMENDED to alter their firewall rules to comply
        with the requirement referred to above (section 4.3 of <xref
        target="I-D.ietf-tsvwg-ecn-experimentation"/>).</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 the
        sending host for each half-connection. All changes can be deployed at
        each end-point independently of others and independent of any network
        behaviour.</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 RFC3168 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</c>

          <c>Pure ACK</c>

          <c>ECT</c>

          <c>ECT</c>

          <c>Usual cwnd response and optionally <xref target="RFC5690"/></c>

          <c>W Probe</c>

          <c>ECT</c>

          <c>ECT</c>

          <c>Usual cwnd 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 cwnd 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 (as well as the
        present specification), 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 two codepoints in
            the SYN-ACK for the responder to feed back whether or not 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 Lack of AccECN Support for ECT on SYNs">
            <t>Until AccECN servers become widely deployed, a TCP initiator
            that sets ECT on a SYN (which implies the same SYN also requests
            AccECN, as required above) SHOULD also maintain a cache entry per
            server to record that the server does not support AccECN and
            therefore has no logic for congestion markings on the SYN. Mobile
            hosts MAY maintain a cache entry per access network to record lack
            of AccECN support by proxies (see <xref
            target="genecn_sec_CE-missed"/>).</t>

            <t>The initiator will record any server's SYN-ACK response that
            does not support AccECN. Subsequently the initiator will not set
            ECT on a SYN to such a server, but it can still always request
            AccECN support (because the response will state any earlier stage
            of ECN evolution that the server supports with no performance
            penalty). The initiator will discover a server that has upgraded
            to support AccECN as soon as it next connects, then it can remove
            the server from its cache and subsequently always set ECT for that
            server.</t>

            <t>If the initiator times out without seeing a SYN-ACK, it will
            also cache this fact (see fall-back in <xref
            target="genect_sec_fall-back-SYN"/> for details).</t>

            <t>There is no need to cache successful attempts, because the
            default ECT SYN behaviour performs optimally on success anyway.
            Servers that do not support ECN as a whole probably do not need to
            be recorded separately from non-support of AccECN because the
            response to a request for AccECN immediately states which stage in
            the evolution of ECN the server supports (AccECN <xref
            target="I-D.ietf-tcpm-accurate-ecn"/>, classic ECN <xref
            target="RFC3168"/> or no ECN).</t>

            <t>The above strategy is named "optimistic ECT and cache
            failures". It is believed to be sufficient based on initial
            measurements and assumptions detailed in <xref
            target="genecn_sec_CE-missed"/>, which also gives alternative
            strategies in case larger scale measurements uncover different
            scenarios.</t>
          </section>

          <section title="SYN Congestion Response">
            <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 ECT has been set on the SYN and 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
            <xref target="genecn_sec_CE-missed"/>). 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>If an initial window of 10 (IW10 <xref target="RFC6928"/>) is
            implemented, <xref target="genecn_sec_variants"/> gives additional
            recommendations.</t>
          </section>

          <section anchor="genect_sec_fall-back-SYN"
                   title="Fall-Back Following No Response to an ECT SYN">
            <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.
            Some evidence of this was found in a 2014 study <xref
            target="ecn-pam"/>, but in a more recent 2017 study {ToDo: Add
            reference (under submission)} extensive measurements found no case
            where ECT on TCP control packets was treated any differently from
            ECT on TCP data packets. 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 loss might be the attempt to negotiate AccECN, or possibly
            other unrelated options on the SYN.</t>

            <t>Therefore, if the timer expires after the TCP initiator has
            sent the first ECT SYN, it SHOULD make one more attempt to
            retransmit the SYN with ECT set (backing off the timer as usual).
            If the retransmission timer expires again, it SHOULD retransmit
            the SYN with the not-ECT codepoint in the IP header, to expedite
            connection set-up. If other experimental fields or options were on
            the SYN, it will also be necessary to follow their specifications
            for fall-back too. It would make sense to coordinate all the
            strategies for fall-back in order to isolate the specific cause of
            the problem.</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 a blockage persistently
            and specifically affects ECT on SYNs. This is because loss is so
            commonplace for other reasons. Even if it does eventually decide
            to give up setting ECT on the SYN, it will probably not need to
            give up on AccECN on the SYN. In any case, if a cache is used, it
            SHOULD be arranged to expire so that the initiator will
            infrequently attempt to check whether the problem has been
            resolved.</t>

            <t>Other fall-back strategies MAY be adopted where applicable (see
            <xref target="genecn_sec_unexpected_ECN"/> for suggestions, and
            the conditions under which they would apply).</t>
          </section>
        </section>

        <section anchor="genecn_sec_SYN-ACK" title="SYN-ACK">
          <t/>

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

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

            <t>Some classic ECN implementations might ignore a CE-mark on a
            SYN-ACK, or even ignore a SYN-ACK packet entirely if it is set to
            ECT or CE. This is a possibility because an RFC 3168
            implementation would not necessarily expect a SYN-ACK to be
            ECN-capable.<list style="empty">
                <t>FOR DISCUSSION: To eliminate this problem, the WG could
                decide to prohibit setting ECT on SYN-ACKs unless AccECN has
                been negotiated. However, this issue already came up when the
                IETF first decided to experiment with ECN on SYN-ACKs <xref
                target="RFC5562"/> and it was decided to go ahead without any
                extra precautionary measures because the risk was low. This
                was because the probability of encountering the problem was
                believed to be low and the harm if the problem arose was also
                low (see Appendix B of RFC 5562).</t>

                <t>MEASUREMENTS NEEDED: Server-side experiments could
                determine whether this specific problem is indeed rare across
                the current installed base of clients that support ECN.</t>
              </list></t>
          </section>

          <section anchor="genecn_sec_SYN-ACK_response"
                   title="SYN-ACK Congestion Response">
            <t>A host that sets ECT on SYN-ACKs MUST reduce its initial window
            in response to any congestion feedback, whether using classic ECN
            or AccECN. It SHOULD reduce it to 1 SMSS. This is different to the
            behaviour specified in an earlier experiment that set ECT on the
            SYN-ACK <xref target="RFC5562"/>. This is justified in <xref
            target="genecn_sec_argue_SYN-ACK"/>.</t>

            <t>The responder does not have to back off its retransmission
            timer because the ECN feedback proves that the network is
            delivering packets successfully and is not severely overloaded.
            Also the responder does not have to leave slow start or reduce
            ssthresh, which is not even required when a SYN-ACK has been
            lost.</t>

            <t>The congestion response to CE-marking on a SYN-ACK for a server
            that implements either the TCP Fast Open experiment (TFO <xref
            target="RFC7413"/>) or the initial window of 10 experiment (IW10
            <xref target="RFC6928"/>) is discussed in <xref
            target="genecn_sec_variants"/>.</t>
          </section>

          <section anchor="genect_sec_fall-back-SYN-ACK"
                   title="Fall-Back Following No Response to an ECT SYN-ACK">
            <t>After the responder sends a SYN-ACK with ECT set, if its
            retransmission timer expires it SHOULD retransmit one more SYN-ACK
            with ECT set (and back-off its timer as usual). If the timer
            expires again, it SHOULD retransmit the SYN-ACK with not-ECT in
            the IP header. If other experimental fields or options were on the
            initial SYN-ACK, it will also be necessary to follow their
            specifications for fall-back. It would make sense to co-ordinate
            all the strategies for fall-back in order to isolate the specific
            cause of the problem.</t>

            <t>This fall-back strategy attempts to use ECT one more time than
            the strategy for ECT SYN-ACKs in <xref target="RFC5562"/> (which
            is made obsolete, being superseded by the present specification).
            Other fall-back strategies MAY be adopted if found to be more
            effective, e.g. fall-back to not-ECT on the first retransmission
            attempt.</t>

            <t>The server MAY cache failed connection attempts, e.g. per
            client access network. An client-based alternative to caching at
            the server is given in <xref
            target="genecn_sec_Fall-Back_SYN-ACK"/>. If the TCP server is
            caching failed connection attempts, it SHOULD NOT give up using
            ECT on the first SYN-ACK of subsequent connection attempts until
            it is clear that the blockage persistently and specifically
            affects ECT on SYN-ACKs. This is because loss is so commonplace
            for other reasons (see <xref target="genect_sec_fall-back-SYN"/>).
            If a cache is used, it SHOULD be arranged to expire so that the
            server will infrequently attempt to check whether the problem has
            been resolved.</t>
          </section>
        </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>A host that sets ECT on pure ACKs MUST reduce its congestion
          window in response to any congestion feedback, in order to regulate
          any data segments it might be sending amongst the pure ACKs. {ToDo:
          Reconsider this requirement in the light of WG comments.} It MAY
          also implement AckCC <xref target="RFC5690"/> to regulate the pure
          ACK rate, but this is not required. Note that, in comparison, TCP
          Congestion Control <xref target="RFC5681"/> does not require a TCP
          to detect or respond to loss of pure ACKs at all; it requires no
          reduction in congestion window or ACK rate.</t>

          <t>The question of whether the receiver of pure ACKs is required to
          feed back any CE marks on them is a matter for the relevant feedback
          specification (<xref target="RFC3168"/> or <xref
          target="I-D.ietf-tcpm-accurate-ecn"/>). It is outside the scope of
          the present specification. Currently AccECN feedback is required to
          count CE marking of any control packet including pure ACKs. Whereas
          RFC 3168 is silent on this point, so feedback of CE-markings might
          be implementation specific (see <xref
          target="genecn_sec_cwnd_response_pure_ACK"/>).<list style="empty">
              <t>DISCUSSION: An AccECN deployment or an implementation of RFC
              3168 that feeds back CE on pure ACKs will be at a disadvantage
              compared to an RFC 3168 implementation that does not. To solve
              this, the WG could decide to prohibit setting ECT on pure ACKs
              unless AccECN has been negotiated. If it does, the penultimate
              sentence of the Introduction will need to be modified.</t>

              <t>MEASUREMENTS NEEDED: Measurements are needed to learn how the
              deployed base of network elements and RFC 3168 servers react to
              pure ACKs marked with the ECT(0)/ECT(1)/CE codepoints, i.e.
              whether they are dropped, codepoint cleared or processed and the
              congestion indication fed back on a subsequent packet.</t>
            </list></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. This complements cwnd
          validation <xref target="RFC7661"/>, which reduces cwnd as more time
          elapses without having used available capacity. However, CE-marking
          on window probes does not reduce the rate of the probes themselves.
          This is unlikely to present a problem, given the duration between
          window probes doubles <xref target="RFC1122"/> as long as the
          receiver is advertising a zero window (currently minimum 1 second,
          maximum at least 1 minute <xref target="RFC6298"/>).</t>

          <t><list style="empty">
              <t>MEASUREMENTS NEEDED: Measurements are needed to learn how the
              deployed base of network elements and servers react to Window
              probes marked with the ECT(0)/ECT(1)/CE codepoints, i.e. whether
              they are dropped, codepoint cleared or processed.</t>
            </list></t>
        </section>

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

          <t>The TCP data receiver MUST ignore the CE codepoint on incoming
          FINs that fail any validity check. The validity check in section 5.2
          of <xref target="RFC5961"/> is RECOMMENDED.</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>

          <t><list style="empty">
              <t>MEASUREMENTS NEEDED: Measurements are needed to learn how the
              deployed base of network elements and servers react to FIN
              packets marked with the ECT(0)/ECT(1)/CE codepoints, i.e.
              whether they are dropped, codepoint cleared or processed.</t>
            </list></t>
        </section>

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

          <t>The "challenge ACK" approach to checking the validity of RSTs
          (section 3.2 of <xref target="RFC5961"/> is RECOMMENDED at the data
          receiver.</t>

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

          <t><list style="empty">
              <t>MEASUREMENTS NEEDED: Measurements are needed to learn how the
              deployed base of network elements and servers react to RST
              packets marked with the ECT(0)/ECT(1)/CE codepoints, i.e.
              whether they are dropped, codepoint cleared or processed.</t>
            </list></t>
        </section>

        <section anchor="genect_sec_ECT_reXMT" 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.</t>

          <t>Nonetheless, the TCP data receiver MUST ignore the CE codepoint
          on incoming segments that fail any validity check. The validity
          check in section 5.2 of <xref target="RFC5961"/> is RECOMMENDED.
          This will effectively mitigate an attack that uses spoofed data
          packets to fool the receiver into feeding back spoofed congestion
          indications to the sender, which in turn would be fooled into
          continually halving its congestion window.</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>

          <t><list style="empty">
              <t>MEASUREMENTS NEEDED: Measurements are needed to learn how the
              deployed base of network elements and servers react to
              retransmissions marked with the ECT(0)/ECT(1)/CE codepoints,
              i.e. whether they are dropped, codepoint cleared or
              processed.</t>
            </list></t>
        </section>

        <section anchor="genect_sec_gen_fall-back"
                 title="General Fall-back for any Control Packet or Retransmission">
          <t>Extensive measurements in fixed and mobile networks {ToDo:
          reference (under submission)} have found no evidence of blockages
          due to ECT being set on any type of TCP control packet.</t>

          <t>In case traversal problems arise in future, fall-back measures
          have been specified above, but only for the cases where ECT on the
          initial packet of a half-connection (SYN or SYN-ACK) is persistently
          failing to get through.</t>

          <t>Fall-back measures for blockage of ECT on other TCP control
          packets MAY be implemented. However they are not specified here
          given the lack of any evidence they will be needed. <xref
          target="genect_sec_gen_fall-back_justify"/> justifies this advice in
          more detail.</t>
        </section>
      </section>
    </section>

    <section anchor="arguments" title="Rationale">
      <t>This section is informative, not normative. It presents
      counter-arguments against the justifications in the RFC series for
      disabling ECN on TCP control segments and retransmissions. It also gives
      rationale for why ECT is safe on control segments that have not, so far,
      been mentioned in the RFC series. 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 misplaced. TCP does not deliver most
        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 (see motivation in <xref
        target="genecn_sec_motivation"/>). ECN also improves the reliability
        and latency of delivery of any congestion notification on control
        packets, particularly because TCP does not detect the loss of most
        types of control packet anyway. Both these points outweigh by far the
        concern that a CE marking applied to a control packet by one node
        might subsequently be dropped by another node.</t>

        <!--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>The principle to determine whether a packet can be 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 that would otherwise have been dropped 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>The concern about a CE marking being dropped at a subsequent node
        might be motivated by the idea that ECN-marking a packet at the first
        node does not remove the packet, so it could go on to worsen
        congestion at a subsequent node. However, it is not useful to reason
        about congestion by considering single packets. The departure rate
        from the first node will generally be the same (fully utilized) with
        or without ECN, so this argument does not apply.</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 anchor="genecn_sec_CE-missed"
                 title="Argument 1a: Unrecognized CE 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 and cache successes: 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>No cache: The optimistic ECT strategy ought to work
                  fairly well without caching any responses.</t>

                  <t>Cache failures: 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.<vspace blankLines="1"/>Where
                  an access network operator mediates Internet access via a
                  proxy that does not support AccECN, the optimistic ECT
                  strategy will always fail. This scenario is more likely in
                  mobile networks. Therefore, a mobile host could cache lack
                  of AccECN support per attached access network operator.
                  Whenever it attached to a new operator, it could check a
                  well-known AccECN test server and, if it found no AccECN
                  support, it would add a cache entry for the attached
                  operator. It would only use ECT when neither network nor
                  server were cached. It would only populate its per server
                  cache when not attached to a non-AccECN proxy.</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 it is assumed that each
              tenant mostly communicates with its own VMs.</t>
            </list></t>

          <t>For unmanaged environments like the public Internet,
          pragmatically the choice is between strategies (S1) and (S2B):<list
              style="symbols">
              <t>The "pessimistic ECT and cache successes" 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 and cache failures" 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 {ToDo: reference? (this information was given informally
              by Yuchung Cheng)}.</t>
            </list></t>

          <t>The normative specification for ECT on a SYN in <xref
          target="genecn_sec_SYN"/> uses the "optimistic ECT and cache
          failures" strategy (S2B) on the assumption that an initial window of
          1 SMSS is usually sufficient for client requests anyway. Clients
          that often initially send more than 1 SMSS of data could use
          strategy (S1) 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, caching successes (S1) starts off small then grows, while
          caching failures (S2B) becomes large at first, then shrinks.</t>

          <t><list style="empty">
              <t>MEASUREMENTS NEEDED: Measurements are needed to determine
              whether one or the other strategy would be sufficient for any
              particular client, or whether a particular client would need
              both strategies in different circumstances.</t>
            </list></t>
        </section>

        <section anchor="genecn_sec_unexpected_ECN"
                 title="Argument 1b: Unrecognized ECT on the SYN">
          <t>Given, until now, ECT-marked SYN packets have been prohibited, it
          cannot be assumed they will be accepted.</t>

          <t>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>In a study using 2017 data from a wider range of fixed and mobile
          vantage points to the top 500k Alexa servers, no case was found
          where adding the ECN capability to a SYN increased the likelihood of
          connection establishment failure {ToDo: reference (under
          submission)}.</t>

          <t><list style="empty">
              <t>MEASUREMENTS NEEDED: More investigation is needed to
              understand the different outcomes of the 2014 and 2017
              studies.</t>
            </list></t>

          <t>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, in the 2014 study, perhaps some responder
          implementations were checking that the SYN complied with RFC 3168,
          then silently ignoring non-compliant SYNs (or perhaps returning a
          RST). Also some middleboxes (e.g. firewalls) might have been
          discarding non-compliant SYNs. For the future, <xref
          target="I-D.ietf-tsvwg-ecn-experimentation"/> updates RFC 3168 to
          clarify 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, if there is any discard of
          ECN-capable SYNs 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. This further
          justifies the use of the "optimistic ECT and cache failures"
          strategy in <xref target="genecn_sec_SYN"/>.</t>

          <t><list style="empty">
              <t>MEASUREMENTS NEEDED: Experiments are needed to determine
              whether blocking of ECT on SYNs is widespread, and how many
              occurrences of problems would be masked by how few cache
              entries.</t>
            </list>If blocking is too widespread for the "optimistic ECT and
          cache failures" strategy (S2B), the "pessimistic ECT and cache
          successes" strategy (<xref target="genecn_sec_CE-missed"/>) would be
          better.</t>

          <t><list style="empty">
              <t>MEASUREMENTS NEEDED: Then measurements would be needed on
              whether failures were still widespread on the third connection
              attempt after the more careful ("pessimistic") first and second
              attempts.</t>
            </list></t>

          <t>If so, it might be necessary to send a not-ECT SYN a short delay
          after an ECT SYN and only accept the non-ECT connection if it
          returned first. This would reduce the performance penalty for those
          deploying ECT SYN support. <list style="empty">
              <t>FOR DISCUSSION: If this becomes necessary, how much delay
              ought to be required before the second SYN? Certainly less than
              the standard RTO (1 second). But more or less than the maximum
              RTT expected over the surface of the earth (roughly 250ms)? Or
              even back-to-back?</t>
            </list></t>

          <t>However, based on the data above from <xref target="ecn-pam"/>,
          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 sending two SYNs will be necessary,
          particularly given failures at well-maintained sites could reduce
          further once 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 anchor="genecn_sec_argue_SYN-ACK" title="SYN-ACKs">
        <t>The proposed approach in <xref target="genecn_sec_SYN-ACK"/> for
        experimenting with ECN-capable SYN-ACKs is effectively identical to
        the scheme called ECN+ <xref target="ECN-PLUS"/>. In 2005, the ECN+
        paper demonstrated that it could reduce the average Web response time
        by an order of magnitude. It also argued that adding ECT to SYN-ACKs
        did not raise any new security vulnerabilities.</t>

        <section title="Response to Congestion on a SYN-ACK">
          <t>The IETF has already specified an experiment with ECN-capable
          SYN-ACK packets <xref target="RFC5562"/>. It was inspired by the
          ECN+ paper, but it specified a much more conservative congestion
          response to a CE-marked SYN-ACK, called ECN+/TryOnce. This required
          the server to reduce its initial window to 1 segment (like ECN+),
          but then the server had to send a second SYN-ACK and wait for its
          ACK before it could continue with its initial window of 1 SMSS. The
          second SYN-ACK of this 5-way handshake had to carry no data, and had
          to disable ECN, but no justification was given for these last two
          aspects.</t>

          <t>The present ECN experiment obsoletes RFC 5562 because it uses the
          ECN+ congestion response, not ECN+/TryOnce. First we argue against
          the rationale for ECN+/TryOnce given in sections 4.4 and 6.2 of
          <xref target="RFC5562"/>. It starts with a rather too literal
          interpretation of the requirement in RFC 3168 that says TCP's
          response to a single CE mark has to be "essentially the same as the
          congestion control response to a *single* dropped packet." TCP's
          response to a dropped initial (SYN or SYN-ACK) packet is to wait for
          the retransmission timer to expire (currently 1s). However, this
          long delay assumes the worst case between two possible causes of the
          loss: a) heavy overload; or b) the normal capacity-seeking behaviour
          of other TCP flows. When the network is still delivering CE-marked
          packets, it implies that there is an AQM at the bottleneck and that
          it is not overloaded. This is because an AQM under overload will
          disable ECN (as recommended in section 7 of RFC 3168 and repeated in
          section 4.2.1 of RFC 7567). So scenario (a) can be ruled out.
          Therefore, TCP's response to a CE-marked SYN-ACK can be similar to
          its response to the loss of <spanx style="emph">any</spanx> packet,
          rather than backing off as if the special <spanx style="emph">initial</spanx>
          packet of a flow has been lost.</t>

          <t>How TCP responds to the loss of any single packet depends what it
          has just been doing. But there is not really a precedent for TCP's
          response when it experiences a CE mark having sent only one (small)
          packet. If TCP had been adding one segment per RTT, it would have
          halved its congestion window, but it hasn't established a congestion
          window yet. If it had been exponentially increasing it would have
          exited slow start, but it hasn't started exponentially increasing
          yet so it hasn't established a slow-start threshold.</t>

          <t>Therefore, we have to work out a reasoned argument for what to
          do. If an AQM is CE-marking packets, it implies there is already a
          queue and it is probably already somewhere around the AQM's
          operating point - it is unlikely to be well below and it might be
          well above. So, it does not seem sensible to add a number of packets
          at once. On the other hand, it is highly unlikely that the SYN-ACK
          itself pushed the AQM into congestion, so it will be safe to
          introduce another single segment immediately (1 RTT after the
          SYN-ACK). Therefore, starting to probe for capacity with a slow
          start from an initial window of 1 segment seems appropriate to the
          circumstances. This is the approach adopted in <xref
          target="genecn_sec_SYN-ACK"/>.</t>
        </section>

        <section anchor="genecn_sec_Fall-Back_SYN-ACK"
                 title="Fall-Back if ECT SYN-ACK Fails">
          <t>An alternative to the server caching failed connection attempts
          would be for the server to rely on the client caching failed
          attempts (on the basis that the client would cache a failure whether
          ECT was blocked on the SYN or the SYN-ACK). This strategy cannot be
          used if the SYN does not request AccECN support. It works as
          follows: if the server receives a SYN that requests AccECN support
          but is set to not-ECT, it replies with a SYN-ACK also set to
          not-ECT. If a middlebox only blocks ECT on SYNs, not SYN-ACKs, this
          strategy might disable ECN on a SYN-ACK when it did not need to, but
          at least it saves the server from maintaining a cache.</t>
        </section>
      </section>

      <section anchor="genecn_sec_argue_pure_ACK" title="Pure ACKs">
        <t>Section 5.2 of RFC 3168 gives the following arguments for not
        allowing the ECT marking of pure ACKs (ACKs not piggy-backed on data):
        <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>

        <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 says that ECN ought not to be enabled unless
        there is a mechanism to respond to it. However, actually there <spanx
        style="emph">is</spanx> a mechanism to respond to congestion on a pure
        ACK that RFC 3168 has overlooked - the congestion window mechanism.
        When data segments and pure ACKs are interspersed, congestion
        notifications ought to regulate the congestion window, whether they
        are on data segments or on pure ACKs. Otherwise, if ECN is disabled on
        Pure ACKs, and if (say) 70% of the segments in one direction are Pure
        ACKs, about 70% of the congestion notifications will be missed and the
        data segments will not be correctly regulated.</t>

        <t>So RFC 3168 ought to have considered two congestion response
        mechanisms - reducing the congestion window (cwnd) and reducing the
        ACK rate - and only the latter was missing. Further, RFC 3168 was
        incorrect to assume that, if one ACK was a pure ACK, all segments in
        the same direction would be pure ACKs. Admittedly a continual stream
        of pure ACKs in one direction is quite a common case (e.g. a file
        download). However, it is also common for the pure ACKs to be
        interspersed with data segments (e.g. HTTP/2 browser requests
        controlling a web application). Indeed, it is more likely that any
        congestion experienced by pure ACKs will be due to mixing with data
        segments, either within the same flow, or within competing flows.</t>

        <t>This insight swings the argument towards enabling ECN on pure ACKs
        so that CE marks can drive the cwnd response to congestion (whenever
        data segments are interspersed with the pure ACKs). Then to separately
        decide whether an ACK rate response is also required (when they are
        ECN-enabled). The two types of response are addressed separately in
        the following two subsections, then a final subsection draws
        conclusions.</t>

        <section anchor="genecn_sec_cwnd_response_pure_ACK"
                 title="Cwnd Response to CE-Marked Pure ACKs">
          <t>If the sender of pure ACKs sets them to ECT, the bullets below
          assess whether the three stages of the congestion response mechanism
          will all work for each type of congestion feedback (classic ECN
          <xref target="RFC3168"/> and AccECN <xref
          target="I-D.ietf-tcpm-accurate-ecn"/>): <list style="hanging">
              <t hangText="Detection:">The receiver of a pure ACK can detect a
              CE marking on it:<list style="symbols">
                  <t>Classic feedback: the receiver will not expect CE marks
                  on pure ACKs, so it will be implementation-dependent whether
                  it happens to check for CE marks on all packets.</t>

                  <t>AccECN feedback: the AccECN specification requires the
                  receiver of any TCP packets to count any CE marks on them
                  (whether or not control packets are ECN-capable).</t>
                </list></t>

              <t hangText="Feedback:">TCP never ACKs a pure ACK, but the
              receiver of a CE-mark on a pure ACK can feed it back when it
              sends a subsequent data segment (if it ever does):<list
                  style="symbols">
                  <t>Classic feedback: the receiver (of the pure ACKs) would
                  set the echo congestion experienced (ECE) flag in the TCP
                  header as normal.</t>

                  <t>AccECN feedback: the receiver 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).</t>
                </list></t>

              <t hangText="Congestion response:">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. Note that, while a host has no application data to send,
              any congestion window it has attained might also be reduced by
              the congestion window validation mechanism <xref
              target="RFC7661"/>.</t>
            </list></t>
        </section>

        <section title="ACK Rate Response to CE-Marked Pure ACKs">
          <t>Reducing the congestion window will have no effect on the rate of
          pure ACKs. The worst case here is if the bottleneck is congested
          solely with pure ACKs, but it could also be problematic if a large
          fraction of the load was from unresponsive ACKs, leaving little or
          no capacity for the load from responsive data.</t>

          <t>Since RFC 3168 was published, Acknowledgement Congestion Control
          (AckCC) techniques have been documented in <xref target="RFC5690"/>
          (informational). So any pair of TCP end-points can choose to agree
          to regulate the delayed ACK ratio in response to lost or CE-marked
          pure ACKs. However, the protocol has a number of open deployment
          issues (e.g. it relies on two new TCP options, one of which is
          required on the SYN where option space is at a premium and, if
          either option is blocked by a middlebox, no fall-back behaviour is
          specified). The new TCP options addressed two problems, namely that
          TCP had: i) no mechanism to allow ECT to be set on pure ACKs; and
          ii) 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>

          <t>Setting aside the practicality of RFC 5690, the need for AckCC
          has not been conclusively demonstrated. It has been argued that the
          Internet has survived so far with no mechanism to even detect loss
          of pure ACKs. However, it has also been argued that ECN is not the
          same as loss. Packet discard can naturally thin the ACK load to
          whatever the bottleneck can support, whereas ECN marking does not
          (it queues the ACKs instead). Nonetheless, RFC 3168 (section 7)
          recommends that an AQM switches over from ECN marking to discard
          when the marking probability becomes high. Therefore discard can
          still be relied on to thin out ECN-enabled pure ACKs as a last
          resort.</t>
        </section>

        <section title="Summary: Enabling ECN on Pure ACKs">
          <t>In the case when AccECN has been negotiated, the arguments for
          ECT (and CE) on pure ACKs heavily outweigh those against. ECN is
          always more and never less reliable for delivery of congestion
          notification. The cwnd response has been overlooked as a mechanism
          for responding to congestion on pure ACKs, so it is incorrect not to
          set ECT on pure ACKs when they are interspersed with data segments.
          And when they are not, packet discard still acts as the "congestion
          response of last resort". 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. Separately, AckCC (or
          perhaps an improved variant exploiting AccECN) could optionally be
          used to regulate the spacing between pure ACKs. However, it is not
          clear whether AckCC is justified.</t>

          <t>In the case when Classic ECN has been negotiated, there is still
          an argument for ECT (and CE) on pure ACKs, but it is less clear-cut.
          Some existing RFC 3168 implementations might happen to
          (unintentionally) provide the correct feedback to support a cwnd
          response. Even for those that did not, setting ECT on pure ACKs
          would still be better for performance than not setting it and do no
          extra harm. If AckCC was required, it is designed to work with RFC
          3168 ECN.</t>
        </section>
      </section>

      <section title="Window Probes">
        <t>Section 6.1.6 of RFC 3168 presents only the reliability argument
        for prohibiting ECT on Window probes:<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, once the receive window has reopened, if a window
        probe is lost the sender will stall until the next window probe
        reaches the receiver, which might be after the maximum retransmission
        timeout (at least 1 minute <xref target="RFC6928"/>).</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 title="FINs">
        <t>RFC 3168 is silent on whether a TCP sender can set ECT on a FIN. A
        FIN is considered as part of the sequence of data, and the rate of
        pure ACKs sent after a FIN could be controlled by a CE marking on the
        FIN. Therefore there is no reason not to set ECT on a FIN.</t>
      </section>

      <section title="RSTs">
        <t>RFC 3168 is silent on whether a TCP sender can set ECT on a RST.
        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.</t>

        <t>Although a congestion response following a CE-marking on a RST does
        not appear to make sense, the following factors have been considered
        before deciding whether the sender ought to set ECT 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<list style="symbols">
                <t>it would be easy for security middleboxes to discard all
                ECN-capable RSTs;</t>

                <t>However, unlike a SYN flood, it is already easy for a
                security middlebox (or host) to distinguish a RST flood from
                legitimate traffic <xref target="RFC5961"/>, and even if a
                some legitimate RSTs are accidentally removed as well,
                legitimate connections still function.</t>
              </list></t>
          </list>So, on balance, it has been decided that it is worth
        experimenting with ECT on RSTs. During experiments, if the ECN
        capability on RSTs is found to open a vulnerability that is hard to
        close, this decision can be reversed, before it is specified for the
        standards track.</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 section 6.1.5 of RFC 3168 is
        solely afforded by the requirement that "the TCP data receiver SHOULD
        ignore the CE codepoint on out-of-window packets". Therefore in <xref
        target="genect_sec_ECT_reXMT"/> the sender is allowed to set ECT on
        retransmitted packets, in order to reduce the chance of them being
        dropped. We also strengthen the receiver's requirement from "SHOULD
        ignore" to "MUST ignore". And we generalize the receiver's requirement
        to include failure of any validity check, not just out-of-window
        checks, in order to include the more stringent validity checks in RFC
        5961 that have been developed since RFC 3168.</t>

        <t>A consequence is that, for those retransmitted packets that arrive
        at the receiver after the original packet has been properly received
        (so-called spurious retransmissions), any CE marking will be ignored.
        There is no problem with that because the fact that the original
        packet has been delivered implies that the sender's original
        congestion response (when it deemed the packet lost and retransmitted
        it) was unnecessary.</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 anchor="genect_sec_gen_fall-back_justify"
               title="General Fall-back for any Control Packet">
        <t>Extensive experiments have found no evidence of any traversal
        problems with ECT on any TCP control packet {ToDo: reference (under
        submission)}. Nonetheless, Sections <xref format="counter"
        target="genect_sec_fall-back-SYN"/> and <xref format="counter"
        target="genect_sec_fall-back-SYN-ACK"/> specify fall-back measures if
        ECT on the first packet of each half-connection (SYN or SYN-ACK)
        appears to be blocking progress. Here, the question of fall-back
        measures for ECT on other control packets is explored. It supports the
        advice given in <xref target="genect_sec_gen_fall-back"/>; until
        there's evidence that something's broken, don't fix it.</t>

        <t>If an implementation has had to disable ECT to ensure the first
        packet of a flow (SYN or SYN-ACK) gets through, the question arises
        whether it ought to disable ECT on all subsequent control packets
        within the same TCP connection. Without evidence of any such problems,
        this seems unnecessarily cautious. Particularly given it would be hard
        to detect loss of most other types of TCP control packets that are not
        ACK'd. And particularly given that unnecessarily removing ECT from
        other control packets could lead to performance problems, e.g. by
        directing them into an inferior queue <xref
        target="I-D.ietf-tsvwg-ecn-l4s-id"/> or over a different path, because
        some broken multipath equipment (erroneously) routes based on all 8
        bits of the Diffserv field.</t>

        <t>In the case where a connection starts without ECT on the SYN
        (perhaps because problems with previous connections had been cached),
        there will have been no test for ECT traversal in the client-server
        direction until the pure ACK that completes the handshake. It is
        possible that some middlebox might block ECT on this pure ACK or on
        later retransmissions of lost packets. Similarly, after a route
        change, the new path might include some middlebox that blocks ECT on
        some or all TCP control packets. However, without evidence of such
        problems, the complexity of a fix does not seem worthwhile.<list
            style="empty">
            <t>MORE MEASUREMENTS NEEDED (?): If further two-ended measurements
            do find evidence for these traversal problems, measurements would
            be needed to check for correlation of ECT traversal problems
            between different control packets. It might then be necessary to
            introduce a catch-all fall-back rule that disables ECT on certain
            subsequent TCP control packets based on some criteria developed
            from these measurements.</t>
          </list></t>
      </section>
    </section>

    <section anchor="genecn_sec_variants"
             title="Interaction with popular variants or derivatives of TCP">
      <t>The following subsections discuss any interactions between setting
      ECT on all packets and using the following popular variants of TCP: IW10
      and TFO. It also briefly notes the possibility that the principles
      applied here should translate to protocols derived from TCP. This
      section is informative not normative, because no interactions have been
      identified that require any change to specifications. The subsection on
      IW10 discusses potential changes to specifications but recommends that
      no changes are needed.</t>

      <t>The designs of the following TCP variants have also been assessed and
      found not to interact adversely with ECT on TCP control packets: SYN
      cookies (see Appendix A of <xref target="RFC4987"/> and section 3.1 of
      <xref target="RFC5562"/>), TCP Fast Open (TFO <xref target="RFC7413"/>)
      and L4S <xref target="I-D.ietf-tsvwg-l4s-arch"/>.</t>

      <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 with ECT on the
        SYN 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 from 10 to 1 just in case a congestion marking was
        missed. Nonetheless, the reduction to 1 SMSS will rarely harm
        performance, 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 data segment to send {ToDo: evidence/reference?} -
            IW10 is primarily exploited by TCP servers.</t>
          </list></t>

        <t>If a responder receives feedback that the SYN-ACK was CE-marked,
        <xref target="genecn_sec_SYN-ACK_response"/> mandates that it reduces
        its initial window to 1 SMSS. When the responder also implements IW10,
        it is particularly important to adhere to this requirement in order to
        avoid overflowing a queue that is clearly already congested.</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 can be passed directly to the
        server application, which can then return up to an initial window of
        response data on the SYN-ACK and on data segments straight after it,
        without waiting for the ACK that completes the 3WHS.</t>

        <t>The TFO experiment and the present experiment to add ECN-support
        for TCP control packets can be combined without altering either
        specification, which is justified as follows:<list style="symbols">
            <t>The handling of ECN marking on a SYN is no different whether or
            not it carries data.</t>

            <t>In response to any CE-marking on the SYN-ACK, the responder
            adopts the normal response to congestion, as discussed in Section
            7.2 of <xref target="RFC7413"/>.</t>
          </list></t>
      </section>

      <section title="TCP Derivatives">
        <t>Stream Control Transmission Protocol (SCTP <xref
        target="RFC4960"/>) is a standards track transport protocol derived
        from TCP. SCTP currently does not include ECN support, but Appendix A
        of RFC 4960 broadly describes how it would be supported and a
        (long-expired) draft on the addition of ECN to SCTP has been produced
        <xref target="I-D.stewart-tsvwg-sctpecn"/>. This draft avoided setting
        ECT on control packets and retransmissions, closely following the
        arguments in RFC 3168.</t>

        <t>QUIC <xref target="I-D.ietf-quic-transport"/> is another standards
        track transport protocol offering similar services to TCP but intended
        to exploit some of the benefits of running over UDP. A way to add ECN
        support to QUIC has been proposed <xref
        target="I-D.johansson-quic-ecn"/>.</t>

        <t>Experience from experiments on adding ECN support to all TCP
        packets ought to be directly transferable to derivatives of TCP, like
        SCTP or QUIC.</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, David Black, Padma Bhooma and Gorry
      Fairhurst for their useful reviews.</t>

      <t>The work of Marcelo Bagnulo has been performed in the framework of
      the H2020-ICT-2014-2 project 5G NORMA. His contribution reflects the
      consortium's view, but the consortium is not liable for any use that may
      be made of any of the information contained therein.</t>
    </section>
  </middle>

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

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

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

      <?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.5562'?>

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

      <?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.RFC.7661'?>

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

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

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

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

      <?rfc include='reference.I-D.johansson-quic-ecn'?>

      <?rfc include='reference.I-D.ietf-quic-transport'?>

      <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 month="May" year="2015"/>
        </front>

        <seriesInfo name="USENIX Symposium on Networked Systems Design and Implementation (NSDI'15)"
                    value="pp.145-157"/>

        <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>ETHZ</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 Passive and Active Network Measurement (PAM'15)"
                    value="pp193-205"/>

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

      <reference anchor="ECN-PLUS">
        <front>
          <title>The Power of Explicit Congestion Notification</title>

          <author fullname="Aleksander Kuzmanovic" initials="A."
                  surname="Kuzmanovic">
            <organization/>
          </author>

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

        <seriesInfo name="ACM SIGCOMM" value="35(4):61--72"/>

        <format target="http://dl.acm.org/citation.cfm?id=1080100" type="PDF"/>
      </reference>
    </references>
  </back>
</rfc>
