ECN is an extension to IP which allows end-to-end notification of congestion without dropping packets. ECN is an optional feature, and is only used when both endpoints signal that they want to use it. Traditionally, TCP/IP networks signal congestion by dropping packets. When ECN is successfully negotiated, an ECN-aware router may set a bit in the IP header instead of dropping a packet in order to signal the beginning of congestion. The receiver of the packet echoes the congestion indication to the sender, which must react as though a packet drop were detected. ECN uses two bits in the Differentiated Services field in the IP header, in the IPv4 TOS Byte or the IPv6 Traffic Class Octet. These two bits can be used to encode one of the values ECN-unaware transport, ECN-aware transport or congestion experienced. Some outdated or buggy network equipment drops packets with the ECN bit set, rather than ignoring the bit.
Contents |
Use of ECN with TCP
While ECN may in principle be used with any congestion-avoiding transport protocol, it is usually deployed with TCP only. In addition to the two ECN bits in the IP header, TCP uses two flags in the TCP header to signal the sender to reduce the amount of information it sends. These are the ECN-echo and Congestion Window Reduced bits. When an ECN-aware router detects impending congestion, and a packet is marked as ECN-aware, it may choose to set the congestion experienced bit in the IP header rather than dropping the packet altogether. Upon reveiving a TCP segment with the CE codepoint, the receiver echoes the information back to the sender with its next ACK segment (by using the flag ECN-echo). Upon receiving an ECN-echo flag, the sender reacts as though to a packet drop (by reducing its congestion window) and acknowledges the congestion indication by sending a segment with the Congestion Window Reduced flag.
ECN Support on various Operating Systems
Windows Server 2008 enables ECN by default. Windows Vista supports ECN but it is disabled by default. ECN support can be enabled with the following shell command: netsh interface tcp set global ecncapability=enabled The Linux kernel has supported ECN for some time now; however most distributions disable it by default, as faulty internet hosts are still frequently encountered. In versions 2.6 and later, it can be activated through the sysctl interface: sysctl net.ipv4.tcp_ecn=1 Rui Paulo has prepared TCP ECN support patch for inclusion in FreeBSD[1], it can be activated through the sysctl interface: sysctl net.inet.tcp.ecn.enable=1 Cisco IOS started supporting ECN in 2005 (Version 12.2(8)T). By default it is disabled. [2]
See also
References
- ^ Paulo, Rui (November 26 2007). TCP ECN patch for review. Retrieved on 2007-11-26.
- ^ http://cco.cisco.com/en/US/products/ps6350/products_configuration_guide_chapter09186a0080443160.html
External links
- RFC 3168 – The Addition of Explicit Congestion Notification (ECN) to IP
- RFC 4774 – Specifying Alternate Semantics for the Explicit Congestion Notification (ECN) Field
- http://www.icir.org/floyd/ecn.html – Sally Floyd's ECN page


