ietf-corpus

rfc-9768

More Accurate Explicit Congestion Notification (AccECN) Feedback in TCP

B. Briscoe, M. Kühlewind, R. Scheffenegger
date2026-04 streamIETF areawit wgtcpm statusPROPOSED STANDARD pages58 canonicalhttps://www.rfc-editor.org/rfc/rfc9768 doi10.17487/RFC9768
Explicit Congestion Notification (ECN) is a mechanism by which network nodes can mark IP packets instead of dropping them to indicate incipient congestion to the endpoints. Receivers with an ECN-capable transport protocol feed back this information to the sender. ECN was originally specified for TCP in such a way that only one feedback signal can be transmitted per Round-Trip Time (RTT). More recently defined mechanisms like Congestion Exposure (ConEx), Data Center TCP (DCTCP), or Low Latency, Low Loss, and Scalable Throughput (L4S) need more accurate ECN feedback information whenever more than one marking is received in one RTT. This document updates the original ECN specification defined in RFC 3168 by specifying a scheme that provides more than one feedback signal per RTT in the TCP header, called More Accurate ECN (AccECN). Given TCP header space is scarce, it allocates a reserved header bit previously assigned to the ECN-nonce. It also overloads the two existing ECN flags in the TCP header. The resulting extra space is additionally exploited to feed back the IP-ECN field received during the TCP connection establishment. Supplementary feedback information can optionally be provided in two new TCP Option alternatives, which are never used on the TCP SYN. The document also specifies the treatment of this updated TCP wire protocol by middleboxes.

updates

Extracted elements (30)

design-rationale §2

AccECN deliberately overloads and replaces the Classic ECN flags (CWR, ECE) and the formerly reserved NS bit rather than adding feedback alongside Classic ECN. This reuses scarce TCP header space, avoids a protocol fork, eliminates conflicting feedback signals from both schemes, and is more likely to traverse middleboxes faithfully than newly defined header areas.

tcp, congestion, ecn

design-rationale §3.2.1

Counter initialization uses non-zero values (r.cep=5, r.e0b=r.e1b=1, r.ceb=0) to support stateless handshakes (SYN cookies) — values 0b000 and 0b001 in the ACE field on the ACK of the SYN/ACK signal that AccECN was not negotiated — and to distinguish normal operation from middlebox zeroing of the fields.

tcp, congestion, ecn

design-rationale §3.2.3

Two alternative AccECN Option orderings (Kind=172 and Kind=174) are defined so the receiver can place the most recently changed counter field first and truncate unchanged tail fields, reducing option space consumption. The 24-bit counter width was chosen to prevent rollover within a single TSO event while fitting within available TCP option space.

tcp, congestion, ecn

interoperability-note §2.3

If the AccECN Option is stripped by a middlebox, AccECN degrades gracefully to CE-only feedback via the 3-bit ACE field. The design ensures the protocol remains functional without the option, though with reduced resilience against ACK loss and no ECT(0)/ECT(1) byte feedback.

tcp, congestion, ecn

interoperability-note §3.3

TCP Proxies, transparent middleboxes, ACK filtering elements, TCP Segmentation Offload (TSO), and Large Receive Offload (LRO) engines each have specific AccECN compliance requirements in Section 3.3 concerning how they must preserve or translate the ACE field and AccECN Options.

tcp, congestion, ecn

interoperability-note §3.1.2

When an AccECN TCP Client receives a SYN/ACK from a Classic ECN server (AE,CWR,ECE)=(0,0,1), it MUST fall back to Classic ECN feedback mode and comply with RFC 3168. When the server is not ECN-capable (0,0,0), ECN is disabled for the connection.

tcp, congestion, ecn

normative-requirement §3.2 MUST

A Data Receiver MUST increment the CE packet counter (r.cep) for every Acceptable packet received with CE in the IP-ECN field, including CE-marked control packets and retransmissions, but excluding CE on SYN packets (SYN=1; ACK=0).

tcp, congestion, ecn

normative-requirement §3.2.2 MUST

After AccECN negotiation, a Data Receiver MUST encode the 3 least significant bits of its r.cep counter into the ACE field on every ACK with SYN=0, except when the special handshake encoding applies on the ACK of the SYN/ACK. The LSB is at TCP header bit offset 9.

tcp, congestion, ecn

normative-requirement §3.2.2.5.1 MUST

An AccECN Data Receiver MUST emit an ACK (Increment-Triggered ACK) if 'n' CE marks have arrived since the previous ACK: n SHOULD be 2 when unacknowledged data exists; otherwise n SHOULD be 3 and MUST be at least 3. In both cases n MUST NOT exceed 7.

tcp, congestion, ecn

normative-requirement §3.2.2.5.1 SHOULD

An AccECN Data Receiver SHOULD emit a Change-Triggered ACK whenever a data packet marked CE arrives after the previous packet was not CE. This rule exists so the sender can detect queue growth as early as possible.

tcp, congestion, ecn

normative-requirement §3.1.5 MUST NOT

An AccECN implementation MUST NOT switch into a different feedback mode from the one it first entered per Table 2, regardless of subsequently received SYNs or SYN/ACKs. It MUST reset the connection with RST if it receives both a Classic ECN-setup SYN and an AccECN-requesting SYN during the same handshake.

tcp, congestion, ecn

normative-requirement §3.1.3 MUST

If a TCP Server receives a SYN with (AE,CWR,ECE) not in {(0,0,0),(0,1,1),(1,1,1)} and lacks specific logic for that combination, it MUST negotiate AccECN as if the flags were (1,1,1). However, an AccECN Client MUST NOT send a SYN with any combination other than those three.

tcp, congestion, ecn

normative-requirement §3.1.2 MUST

If an AccECN TCP Client receives a SYN/ACK with (AE,CWR,ECE)=(1,1,1) — indicating a broken server that reflects SYN flags — it MUST fall back to Not ECN mode for both its half-connections and continue with ECN disabled.

tcp, congestion, ecn

normative-requirement §3.1.5 MUST NOT

In AccECN mode, a Data Sender MUST NOT set CWR to indicate that it has received and responded to congestion indications, unlike an RFC 3168 sender. The continuously repeated counter approach replaces the CWR mechanism.

tcp, congestion, ecn

normative-requirement §3.1.1 MUST

It is RECOMMENDED that AccECN be implemented alongside SACK (RFC 2018). If SACK is implemented with AccECN, D-SACK (RFC 2883) MUST also be implemented.

tcp, congestion

normative-requirement §3.1.1 MUST

Once an AccECN TCP Client receives a SYN/ACK confirming AccECN support (one of the four combinations in Table 2), it MUST set both its half-connections into AccECN mode. The Client MUST NOT enter AccECN mode before receiving the first SYN/ACK.

tcp, congestion, ecn

normative-requirement §3.1.1 MUST

To request AccECN feedback, a TCP Client MUST set the TCP flags (AE,CWR,ECE)=(1,1,1) in the initial SYN segment. An AccECN-enabled TCP Server that receives such a SYN MUST set both its half-connections into AccECN mode and MUST NOT set one of the four AccECN SYN/ACK combinations unless the preceding SYN requested AccECN.

tcp, congestion, ecn

normative-requirement §3.2.2.1 MUST

When a TCP Client in AccECN mode uses a pure ACK with no SACK blocks to acknowledge the SYN/ACK, it MUST use the handshake encoding from Table 3 to feed back the IP-ECN field received on the SYN/ACK — the only exception to the standard ACE counter encoding rule on SYN=0 packets.

tcp, congestion, ecn

privacy-consideration §8

Section 8 addresses privacy considerations: AccECN feedback fields reveal congestion information on the path which could expose routing or network topology details to on-path observers, since the feedback is not encrypted in the TCP header.

privacy, tcp, congestion

protocol-element §3.2

Each Data Receiver maintains four counters: r.cep (CE packet count), r.ceb (CE byte count), r.e0b (ECT(0) byte count), and r.e1b (ECT(1) byte count). Byte counters reflect only TCP payload length, excluding TCP header and options.

tcp, congestion, ecn

protocol-element §3.2.2

The Accurate ECN (ACE) field is a 3-bit field formed by overloading the AE (bit 7), CWR (bit 8), and ECE (bit 9) flags in the TCP header once AccECN is negotiated. On non-SYN packets it carries the 3 LSBs of the CE packet counter r.cep from the Data Receiver.

tcp, congestion, ecn

protocol-element §3.1.1

The previously reserved NS (Nonce Sum) TCP header flag at bit offset 7 is renamed to AE (Accurate ECN). During the handshake it participates in ECN capability negotiation; after the handshake it forms the most significant bit of the 3-bit ACE counter field.

tcp, congestion, registry

protocol-element §2.5

The TCP Server encodes the IP-ECN codepoint it received on the SYN into the (AE,CWR,ECE) bits of the SYN/ACK per Table 2, providing feedback of the SYN's IP-ECN field. This allows both endpoints to detect middlebox mangling of the ECN field during the handshake.

tcp, congestion, ecn

registry §7

The previously reserved TCP header flag at bit offset 7 (formerly NS/Nonce Sum, reclassified as Historic in RFC 8311) is officially renamed to AE (Accurate ECN) and assigned to AccECN use.

tcp, registry

registry §7

Two new TCP Option Kinds are registered: AccECN0 with Kind=172 (field order: EE0B, ECEB, EE1B) and AccECN1 with Kind=174 (field order: EE1B, ECEB, EE0B). These options MUST NOT be used on TCP SYN segments.

tcp, registry, congestion

security-consideration §3.2.2.3

AccECN provides mechanisms to detect middlebox mangling of the IP-ECN field by comparing the ECN field set on the SYN/SYN/ACK with what the peer fed back. Detection of invalid ECN transitions advises the sender to revert to non-ECN-capable packets while continuing to mechanistically feed back any markings it receives.

tcp, security, ecn, congestion

security-consideration §2.4

AccECN uses byte-based counters (r.ceb, r.e0b, r.e1b) to protect against ACK-Division attacks where a middlebox or receiver splits acknowledgements to artificially inflate the congestion window, following RFC 5681's recommendation to count acknowledged bytes rather than packets.

tcp, security, congestion

state-machine §3.1.2

AccECN negotiation via the three-way handshake produces one of three feedback modes: AccECN mode, Classic ECN feedback mode, or Not ECN mode. The Client enters the mode indicated by the first SYN/ACK it receives per Table 2; the Server enters the mode indicated by the first SYN. Mode cannot change once entered.

tcp, congestion, ecn

wire-format §3.2.3

AccECN0 Option (Kind=172, Length=11): three consecutive 24-bit fields in network byte order — EE0B (24 LSBs of r.e0b), ECEB (24 LSBs of r.ceb), EE1B (24 LSBs of r.e1b). Unchanged tail fields may be omitted; the Length field indicates which fields are present (minimum Length=3 for just EE0B).

tcp, congestion, ecn

wire-format §3.2.3

AccECN1 Option (Kind=174, Length=11): same three 24-bit fields as AccECN0 but in reversed order — EE1B, ECEB, EE0B — allowing the receiver to select the ordering that places the most recently changed counter field first for efficient truncation.

tcp, congestion, ecn