I was wondering how the receiver tells the sender that there was congestion. So I tried to figure it out, but it wasn't the easiest to find.<p>Essentially the details are documented in <a href="https://www.rfc-editor.org/info/rfc3168" rel="nofollow noreferrer">https://www.rfc-editor.org/info/rfc3168</a><p>The simple answer is that there are more than just one flag. From what i gather there are three flags. One flag that the sender sets to inform the routers that it can handle ECN. A second flag is used by the router to tell the recipient that the router was congested. And a third flag is set in by the recipient when it sends an ACK package back to the sender.<p>For more details, here is the relevant section:<p>* An ECT codepoint is set in packets transmitted by the sender to indicate that ECN is supported by the transport entities for these packets.<p>* An ECN-capable router detects impending congestion and detects that an ECT codepoint is set in the packet it is about to drop. Instead of dropping the packet, the router chooses to set the CE codepoint in the IP header and forwards the packet.<p>* The receiver receives the packet with the CE codepoint set, and sets the ECN-Echo flag in its next TCP ACK sent to the sender.<p>* The sender receives the TCP ACK with ECN-Echo set, and reacts to the congestion as if a packet had been dropped.<p>* The sender sets the CWR flag in the TCP header of the next packet sent to the receiver to acknowledge its receipt of and reaction to the ECN-Echo flag.