# Explicit Congestion Notification

La notificació explícita de congestió (ECN) és una extensió del protocol d'Internet i del protocol de control de transmissió i es defineix a la RFC 3168 (2001). ECN permet la notificació d'extrem a extrem de la congestió de la xarxa sense deixar caure paquets. ECN és una característica opcional que es pot utilitzar entre dos punts finals habilitats per ECN quan la infraestructura de xarxa subjacent també ho admet.
Convencionalment, les xarxes TCP/IP senyalen la congestió deixant caure paquets. Quan l'ECN es negocia amb èxit, un encaminador conscient de l'ECN pot establir una marca a la capçalera IP en lloc de deixar caure un paquet per indicar una congestió imminent. El receptor del paquet fa ressò de la indicació de congestió a l'emissor, que redueix la seva velocitat de transmissió com si detectés un paquet perdut.
En lloc de respondre correctament o ignorar els bits, alguns equips de xarxa obsolets o defectuosos històricament han deixat caure o han alterat paquets que tenen bits ECN establerts. El 2015, les mesures van suggerir que la fracció de servidors web a Internet pública per als quals la configuració ECN impedeix les connexions de xarxa s'havia reduït a menys de l'1%.
El suport passiu existeix a Ubuntu Linux des de 12.04 i a Windows Server des de 2012. El suport passiu als llocs web més populars ha augmentat del 8,5% el 2012 a més del 70% el maig del 2017. L'adopció a través d'Internet ara requereix que els clients sol·licitin activament ECN. El juny de 2015, Apple va anunciar que ECN s'habilitarà de manera predeterminada als seus productes compatibles i futurs, per ajudar a impulsar l'adopció de la senyalització ECN a tot el sector.

## Funcionament

ECN requereix suport específic tant a la capa d'Internet com a la capa de transport pels motius següents:
* A TCP/IP, els encaminadors operen dins de la capa d'Internet, mentre que la velocitat de transmissió és gestionada pels punts finals de la capa de transport.
* La congestió només pot ser gestionada pel transmissor, però com que se sap que només ha passat després que s'hagi enviat un paquet, hi ha d'haver un ressò de la indicació de congestió del receptor al transmissor.
Sense ECN, l'eco d'indicació de congestió s'aconsegueix indirectament mitjançant la detecció de paquets perduts. Amb ECN, la congestió s'indica establint el camp ECN dins d'un paquet IP a CE (Congestion Experienced) i el receptor la fa ressò al transmissor establint els bits adequats a la capçalera del protocol de transport. Per exemple, quan s'utilitza TCP, la indicació de congestió es fa ressò configurant el bit ECE.

### Funcionament d'ECN amb IP

ECN utilitza els dos bits menys significatius (extrem a la dreta) del camp Classe de trànsit a la capçalera IPv4 o IPv6 per codificar quatre punts de codi diferents:
* 00 – transport no compatible amb ECN, no ECT
* 01 – ECN Capable Transport(1), ECT(1)
* 10 – ECN Capable Transport(0), ECT(0)
* 11 – Congestió experimentada, CE.
Quan els dos punts finals admeten ECN, marquen els seus paquets amb ECT(0) o ECT(1). Els encaminadors tracten els punts de codi ECT(0) i ECT(1) com a equivalents. Si el paquet travessa una cua de gestió de cues activa (AQM) (p. ex., una cua que utilitza detecció precoç aleatòria (RED)) que està experimentant congestió i l'encaminador corresponent admet ECN, pot canviar el punt de codi a CE en lloc de deixar anar el paquet.. Aquest acte s'anomena "marcatge" i el seu propòsit és informar el punt final receptor de la congestió imminent. Al punt final receptor, aquesta indicació de congestió la gestiona el protocol de la capa superior (protocol de la capa de transport) i s'ha de fer ressò al node de transmissió per tal de senyalitzar-lo per reduir la seva velocitat de transmissió.
Com que la indicació CE només es pot gestionar eficaçment per un protocol de capa superior que la admeti, ECN només s'utilitza juntament amb protocols de capa superior, com ara TCP, que admeten el control de la congestió i tenen un mètode per fer ressò de la indicació CE al punt final de transmissió.

### Funcionament d'ECN amb TCP

TCP admet ECN mitjançant dos indicadors a la capçalera TCP. El primer, ECN-Echo (ECE) s'utilitza per fer ressò de la indicació de congestió (és a dir, indicar al remitent per reduir la velocitat de transmissió). El segon, Finestra de congestió reduïda (CWR), per reconèixer que s'ha rebut el ressò de la indicació de congestió. L'ús d'ECN en una connexió TCP és opcional; perquè l'ECN s'utilitzi, s'ha de negociar a l'establiment de la connexió mitjançant la inclusió d'opcions adequades als segments SYN i SYN-ACK.
Quan s'ha negociat ECN en una connexió TCP, el remitent indica que els paquets IP que porten segments TCP d'aquesta connexió transporten trànsit des d'un transport capaç d'ECN marcant-los amb un punt de codi ECT. Això permet als encaminadors intermedis que admeten ECN marcar aquests paquets IP amb el punt de codi CE en lloc de deixar-los caure per indicar una congestió imminent.

## Implementacions

Moltes implementacions modernes de la suite de protocols TCP/IP tenen cert suport per a ECN; no obstant això, normalment s'envien amb ECN desactivat.
Des de la versió 2.4.20 del nucli de Linux, publicada el novembre de 2002, Linux admet tres modes de treball de l'ECN per a TCP, tal com es configura mitjançant la interfície sysctl mitjançant la configuració del paràmetre/proc/sys/net/ipv4/tcp_ecn a un dels valors següents:
* 0 disable ECN and neither initiate nor accept it
* 1 enable ECN when requested by incoming connections, and also request ECN on outgoing connection attempts
* 2 (default) enable ECN when requested by incoming connections, but do not request ECN on outgoing connections

## Referències

* ↑ Steven Bauer. «Measuring the State of ECN Readiness in Servers, Clients, and Routers» (en anglès). Internet Measurement Conference 2011, 2011. Arxivat de l'original el 2014-03-22.
* ↑ Alberto Medina. «Measuring Interactions Between Transport Protocols and Middleboxes» (en anglès). Internet Measurement Conference 2004. Arxivat de l'original el 2016-03-04.
* ↑ «TBIT, the TCP Behavior Inference Tool: ECN» (en anglès). Icir.org. Arxivat de l'original el 2013-03-11. [Consulta: 22 març 2014].
* ↑ Brian Trammell. «Enabling Internet-Wide Deployment of Explicit Congestion Notification» (en anglès). Proceedings of the Passive and Active Measurement Conference 2015, 2015. Arxivat de l'original el 15 juny 2015. [Consulta: 14 juny 2015].
* 1 2 David Murray. «An Analysis of Changing Enterprise Network Traffic Characteristics» (en anglès). The 23rd Asia-Pacific Conference on Communications (APCC 2017), 2017. Arxivat de l'original el 3 octubre 2017. [Consulta: 3 octubre 2017].
* ↑ «Your App and Next Generation Networks» (en anglès). Apple Inc., 2015. Arxivat de l'original el 2015-06-15.
* ↑ «A Map of the Networking Code in Linux Kernel 2.4.20, Technical Report DataTAG-2004-1, FP5/IST DataTAG Project» (en anglès). datatag.web.cern.ch, 01-03-2004. Arxivat de l'original el 27 octubre 2015. [Consulta: 1r setembre 2015].
* ↑ «Documentation/networking/ip-sysctl.txt: /proc/sys/net/ipv4/* Variables» (en anglès). kernel.org. Arxivat de l'original el 2016-03-05. [Consulta: 15 febrer 2016].