Articulo de referencia

Notificación explícita de congestión

La Notificación Explícita de Congestión ( ECN ) es una extensión del Protocolo de Internet y del Protocolo de Control de Transmisión , y se define en la RFC 3168 (2001). ECN per...

La Notificación Explícita de Congestión ( ECN ) es una extensión del Protocolo de Internet y del Protocolo de Control de Transmisión , y se define en la RFC 3168 (2001). ECN permite la notificación de congestión de red de extremo a extremo sin pérdida de paquetes. ECN es una función opcional que puede utilizarse entre dos puntos finales compatibles con ECN cuando la infraestructura de red subyacente también la admite. 

Tradicionalmente, las redes TCP/IP señalan la congestión descartando paquetes. Cuando se negocia correctamente la ECN, un enrutador compatible con ECN puede marcar la cabecera IP en lugar de descartar un paquete para indicar una posible congestión. El receptor del paquete reenvía la indicación de congestión al remitente, lo que reduce su velocidad de transmisión como si hubiera detectado un paquete descartado.

En lugar de responder correctamente o ignorar los bits, algunos equipos de red obsoletos o defectuosos históricamente han descartado o dañado paquetes que tienen bits ECN activados. [ 1 ] [ 2 ] [ 3 ] A partir de 2015Las mediciones sugirieron que la fracción de servidores web en Internet pública para los que la configuración ECN impide las conexiones de red se había reducido a menos del 1 %. [ 4 ]

El soporte pasivo existe en Ubuntu Linux desde la versión 12.04 y en Windows Server desde 2012. [ 5 ] El soporte pasivo en los sitios web más populares aumentó del 8,5 % en 2012 a más del 70 % en mayo de 2017. [ 5 ] La adopción en Internet ahora requiere que los clientes soliciten activamente ECN. En junio de 2015, Apple anunció que ECN se habilitará por defecto en sus productos compatibles y futuros, para ayudar a impulsar la adopción de la señalización ECN en toda la industria. [ 6 ]

Cabe señalar que este artículo describe el ECN clásico tal como se definió originalmente; el protocolo L4S , publicado en 2023 y descrito en el RFC 9330 , ha modificado la interpretación de los bits ECN y el tratamiento esperado del tráfico en comparación con el comportamiento del ECN clásico. 

Operación

ECN requiere soporte específico tanto en la capa de Internet como en la capa de transporte por las siguientes razones:

  • En TCP/IP, los enrutadores operan dentro de la capa de Internet, mientras que la velocidad de transmisión es gestionada por los puntos finales en la capa de transporte.
  • La congestión puede ser gestionada únicamente por el transmisor, pero como se sabe que ocurrió solo después de que se envió un paquete, debe haber un eco de la indicación de congestión por parte del receptor al transmisor.

Sin ECN, la indicación de congestión se obtiene indirectamente mediante la detección de paquetes perdidos. Con ECN, la congestión se indica configurando el campo ECN dentro de un paquete IP a CE (Congestión Experimentada) y el receptor la devuelve al transmisor configurando los bits correspondientes en la cabecera del protocolo de transporte. Por ejemplo, al usar TCP, la indicación de congestión se devuelve configurando el bit ECE.

Funcionamiento de ECN con IP

Nota: esto describe el funcionamiento de ECN antes de la definición de L4S en RFC 9330 , que reserva el uso del punto de código para el tráfico L4S. 01

ECN utiliza los dos bits menos significativos (los de más a la derecha) del campo Clase de tráfico en el encabezado IPv4 o IPv6 para codificar cuatro puntos de código diferentes:

  • 00  Transporte no compatible con ECN, no compatible con ECT
  • 01  Transporte con capacidad ECN(1), ECT(1)
  • 10  Transporte con capacidad ECN(0), ECT(0)
  • 11  Experimentó congestión, CE.

Cuando ambos extremos admiten ECN, marcan sus paquetes con ECT(0) o ECT(1). Los enrutadores tratan los puntos de código ECT(0) y ECT(1) como equivalentes. Si el paquete atraviesa una cola de gestión de cola activa (AQM) (por ejemplo, una cola que utiliza detección temprana aleatoria (RED)) que está experimentando congestión y el enrutador correspondiente admite ECN, puede cambiar el punto de código a CEen lugar de descartar el paquete . Esta acción se denomina marcado y su propósito es informar al extremo receptor de la inminente congestión . En el extremo receptor, esta indicación de congestión es manejada por el protocolo de capa superior ( protocolo de capa de transporte ) y debe ser devuelta al nodo transmisor para indicarle que reduzca su tasa de transmisión.

Dado que la indicación CE solo puede ser manejada eficazmente por un protocolo de capa superior que la admita, ECN solo se utiliza junto con protocolos de capa superior, como TCP , que admiten el control de congestión y tienen un método para hacer eco de la indicación CE al punto final transmisor.

Funcionamiento de ECN con TCP

TCP admite ECN mediante dos indicadores en la cabecera TCP. El primero, ECN-Echo (ECE), se utiliza para devolver la indicación de congestión (es decir, para indicar al remitente que reduzca la velocidad de transmisión). El segundo, Congestion Window Reduced (CWR), confirma la recepción de la indicación de congestión. El uso de ECN en una conexión TCP es opcional; para que se utilice, debe negociarse al establecer la conexión incluyendo las opciones adecuadas en los segmentos SYN y SYN-ACK.

Cuando se negocia ECN en una conexión TCP, el remitente indica que los paquetes IP que contienen segmentos TCP de dicha conexión transportan tráfico de un transporte compatible con ECN, marcándolos con un código ECT. Esto permite que los enrutadores intermedios compatibles con ECN marquen esos paquetes IP con el código CE en lugar de descartarlos, para así señalar una posible congestión.

Al recibir un paquete IP con el código de Congestión Experimentada ( CWR), el receptor TCP devuelve esta indicación de congestión mediante el indicador ECE en la cabecera TCP. Cuando un extremo recibe un segmento TCP con el bit ECE, reduce su ventana de congestión como si se tratara de un paquete descartado. A continuación, confirma la indicación de congestión enviando un segmento con el bit CWR activado.

Un nodo sigue transmitiendo segmentos TCP con el bit ECE activado hasta que recibe un segmento con el bit CWR activado.

Para ver los paquetes afectados con tcpdump , utilice el predicado de filtro .(tcp[13] & 0xc0 != 0)

Paquetes de control ECN y TCP

Dado que el Protocolo de Control de Transmisión (TCP) no realiza control de congestión en los paquetes de control (ACK puros, segmentos SYN y FIN), los paquetes de control generalmente no se marcan como compatibles con ECN.

Una propuesta de 2009 [ 7 ] sugiere marcar los paquetes SYN-ACK como compatibles con ECN. Se ha demostrado que esta mejora, conocida como ECN+, proporciona mejoras drásticas en el rendimiento de las conexiones TCP de corta duración. [ 8 ]

Funcionamiento de ECN con otros protocolos de transporte

ECN también se define para otros protocolos de la capa de transporte que realizan control de congestión, en particular DCCP y el Protocolo de Transmisión de Control de Flujo (SCTP). El principio general es similar al de TCP, aunque los detalles de la codificación en la red difieren.

Es posible utilizar ECN con protocolos que se superponen a UDP . Sin embargo, UDP requiere que la aplicación realice el control de congestión, y los primeros protocolos basados ​​en UDP, como DNS, no utilizaban ECN. Los protocolos basados ​​en UDP más recientes, como QUIC, sí utilizan ECN para el control de congestión.

Efectos sobre el rendimiento

Dado que ECN solo es eficaz en combinación con una política de gestión activa de colas (AQM), los beneficios de ECN dependen de la AQM específica que se utilice. Sin embargo, algunas observaciones parecen ser válidas para diferentes AQM.

Como era de esperar, ECN reduce la cantidad de paquetes descartados por una conexión TCP, lo que, al evitar la retransmisión, reduce la latencia y, sobre todo, la fluctuación (jitter). Este efecto es más drástico cuando la conexión TCP tiene un único segmento pendiente [ 9 ] , cuando puede evitar un tiempo de espera de RTO ; esto suele ocurrir con las conexiones interactivas, como los inicios de sesión remotos, y los protocolos transaccionales, como las solicitudes HTTP, la fase conversacional de SMTP o las solicitudes SQL.

Los efectos de ECN en el rendimiento masivo son menos claros [ 10 ] porque las implementaciones modernas de TCP son bastante buenas para reenviar segmentos perdidos de manera oportuna cuando la ventana del remitente es grande.

Se ha comprobado que el uso de ECN perjudica el rendimiento en redes muy congestionadas cuando se utilizan algoritmos AQM que nunca descartan paquetes. [ 8 ] Las implementaciones modernas de AQM evitan este inconveniente descartando, en lugar de marcando, los paquetes cuando la carga es muy alta.

Implementaciones

Muchas implementaciones modernas del conjunto de protocolos TCP/IP ofrecen cierto soporte para ECN; sin embargo, suelen venir con ECN deshabilitado.

Soporte ECN en TCP por parte de los hosts

Microsoft Windows

Las versiones de Windows posteriores a Windows Server 2008 y Windows Vista admiten ECN para TCP. [ 11 ] Desde Windows Server 2012, está habilitado de forma predeterminada en las versiones de Windows Server, porque se utiliza el Protocolo de control de transmisión del centro de datos (DCTCP). [ 12 ] En versiones anteriores de Windows y versiones que no son de servidor, está deshabilitado de forma predeterminada.

La compatibilidad con ECN se puede habilitar mediante un comando de shell como netsh interface tcp set global ecncapability=enabled.

BSD

En FreeBSD , ECN para TCP se puede configurar mediante net.inet.tcp.ecn.enablesysctl . Por defecto, solo está habilitado para las conexiones entrantes que lo solicitan. También se puede habilitar para todas las conexiones o deshabilitar por completo. [ 13 ]

NetBSD  4.0 implementa soporte ECN para TCP; se puede activar a través de la interfaz sysctl estableciendo 1 como valor para el parámetro sysctl net.inet.tcp.ecn.enable. [ 14 ]

Asimismo, en OpenBSDnet.inet.tcp.ecn se puede utilizar sysctl . [ 15 ]

Linux

Desde la versión 2.4.20 del kernel de Linux , publicada en noviembre de 2002, [ 16 ] Linux admite tres modos de funcionamiento de la ECN para TCP, configurados a través de la interfaz sysctl estableciendo el parámetro /proc/sys/net/ipv4/tcp_ecn en uno de los siguientes valores: [ 17 ]

  • 0 deshabilitar ECN y no iniciarlo ni aceptarlo. 
  • 1 Habilitar ECN cuando lo soliciten las conexiones entrantes, y también solicitar ECN en los intentos de conexión salientes. 
  • 2 (predeterminado) habilitar ECN cuando lo soliciten las conexiones entrantes, pero no solicitar ECN en las conexiones salientes. 

A partir de la versión 4.1 del kernel de Linux, publicada en junio de 2015, el mecanismo tcp_ecn_fallback [ 18 ] : §6.1.1.1 está habilitado por defecto [ 19 ] cuando ECN está habilitado (valor de 1). El mecanismo de reserva intenta la conectividad ECN en la configuración inicial de las conexiones salientes, con una reserva elegante para las transmisiones sin capacidad ECN, mitigando problemas con hosts o cortafuegos intolerantes a ECN.

Mac OS X

Mac OS X 10.5 y 10.6 implementan soporte ECN para TCP. Se controla mediante las variables sysctl booleanas net.inet.tcp.ecn_negotiate_in y net.inet.tcp.ecn_initiate_out . [ 20 ] La primera variable habilita ECN en conexiones entrantes que ya tienen las banderas ECN establecidas; la segunda intenta iniciar conexiones salientes con ECN habilitado. Ambas variables tienen un valor predeterminado de 0 , pero se pueden establecer en 1 para habilitar el comportamiento correspondiente.

En junio de 2015, Apple Inc. anunció que OS X 10.11 tendría ECN activado por defecto, [ 6 ] pero el sistema operativo se lanzó sin ese comportamiento predeterminado. En macOS Sierra, ECN está habilitado para la mitad de las sesiones TCP. [ 21 ]

iOS

En junio de 2015, Apple Inc. anunció que iOS 9 , su siguiente versión de iOS, sería compatible con ECN y lo tendría activado por defecto. [ 6 ] La negociación TCP ECN está habilitada en el 5% de las conexiones seleccionadas aleatoriamente a través de Wi-Fi/Ethernet en iOS 9 y en el 50% de las conexiones seleccionadas aleatoriamente a través de Wi-Fi/Ethernet y algunos operadores celulares en iOS 10 [ 22 ] [ 23 ] y en el 100% para iOS 11 [ 24 ]

Solaris

El kernel de Solaris admite tres estados de ECN para TCP: [ 25 ]

  • nunca no ECN 
  • activo usar ECN 
  • pasivo : solo se anuncia la compatibilidad con ECN cuando se solicita. 

A partir de Solaris 11.4, el comportamiento predeterminado es activo . El uso de ECN se puede modificar mediante ipadm set-prop -p ecn=active tcp . [ 26 ]

Soporte ECN en IP por parte de los enrutadores

Dado que el marcado ECN en los enrutadores depende de algún tipo de gestión activa de colas , los enrutadores deben configurarse con una disciplina de cola adecuada para poder realizar el marcado ECN.

Los routers Cisco IOS realizan el marcado ECN si están configurados con la disciplina de cola WRED desde la versión 12.2(8)T.

Los enrutadores Linux realizan el marcado ECN si están configurados con una de las disciplinas de cola RED o GRED con un parámetro ecn explícito, mediante el uso de la disciplina sfb , mediante el uso de la disciplina CoDel Fair Queuing (fq_codel) o la disciplina de cola CAKE [ 27 ] .

Las implementaciones modernas de BSD, como FreeBSD , NetBSD y OpenBSD , admiten el marcado ECN en la implementación de colas ALTQ para varias disciplinas de colas , especialmente RED y Blue . FreeBSD 11 incluyó la implementación de las disciplinas de colas CoDel , PIE, FQ-CoDel y FQ-PIE en un marco con capacidad de marcado ECN. [ 28 ]ipfwdummynet

Centro de datos TCP

El Protocolo de Control de Transmisión de Centros de Datos ( TCP de Centros de Datos o DCTCP ) utiliza ECN para mejorar el algoritmo de control de congestión del Protocolo de Control de Transmisión . [ 29 ] Se utiliza en redes de centros de datos . Mientras que el algoritmo de control de congestión TCP estándar solo puede detectar la presencia de congestión, DCTCP, mediante ECN, puede medir el grado de congestión. [ 30 ]

DCTCP modifica el receptor TCP para que siempre retransmita la marcación ECN exacta de los paquetes entrantes, a costa de ignorar una función destinada a preservar la fiabilidad de la señalización. Esto hace que un emisor DCTCP sea vulnerable a la pérdida de ACKs del receptor, para lo cual no tiene ningún mecanismo que pueda detectar o gestionar. [ 31 ] A partir de julio de 2014 Los algoritmos que proporcionan una retroalimentación al receptor equivalente o mejor en un enfoque más fiable son un tema de investigación activo. [ 31 ]

Véase también

Referencias

  1. Steven Bauer; Robert Beverly; Arthur Berger (2011). "Medición del estado de preparación de ECN en servidores, clientes y enrutadores" (PDF) . Conferencia de medición de Internet 2011. Archivado (PDF) del original el 22 de marzo de 2014.
  2. Alberto Medina; Mark Allman; Sally Floyd. "Medición de las interacciones entre protocolos de transporte y dispositivos intermedios" (PDF) . Conferencia de Medición de Internet 2004. Archivado (PDF) del original el 4 de marzo de 2016.
  3. "TBIT, la herramienta de inferencia de comportamiento TCP: ECN" . Icir.org. Archivado del original el 11 de marzo de 2013. Consultado el 22 de marzo de 2014 .
  4. Brian Trammell; Mirja Kühlewind; Damiano Boppart; Iain Learmonth; Gorry Fairhurst; Richard Scheffenegger (2015). "Habilitación del despliegue en Internet de la notificación explícita de congestión" (PDF) . Actas de la Conferencia de Medición Pasiva y Activa 2015. Archivado del original (PDF) el 15 de junio de 2015. Recuperado el 14 de junio de 2015 .
  5. 1 2 David Murray; Terry Koziniec; Sebastian Zander; Michael Dixon; Polychronis Koutsakis (2017). "Análisis de las características cambiantes del tráfico de red empresarial" (PDF) . XXIII Conferencia Asia-Pacífico sobre Comunicaciones (APCC 2017). Archivado (PDF) del original el 3 de octubre de 2017. Recuperado el 3 de octubre de 2017 .
  6. 1 2 3 "Tu aplicación y las redes de próxima generación" . Apple Inc. 2015. Archivado del original el 15 de junio de 2015.
  7. A. Kuzmanovic; A. Mondal; S. Floyd ; K. Ramakrishnan (junio de 2009). Adding Explicit Congestion Notification (ECN) Capability to TCP's SYN/ACK Packets . Internet Engineering Task Force Networking Working Group. doi : 10.17487/RFC5562 . RFC 5562 .Experimental.
  8. 1 2 Aleksandar Kuzmanovic. El poder de la notificación explícita de congestión. En Actas de la conferencia de 2005 sobre aplicaciones, tecnologías, arquitecturas y protocolos para comunicaciones informáticas . 2005.
  9. J. Hadi Salim; U. Ahmed (julio de 2000). Evaluación del rendimiento de la notificación explícita de congestión (ECN) en redes IP . Grupo de trabajo de redes. doi : 10.17487/RFC2884 . RFC 2884 .Informativo.
  10. Marek Małowidzki, Estudio basado en simulación del rendimiento de ECN en redes RED, En Proc. SPECTS'03 . 2003.
  11. "Nuevas funciones de red en Windows Server 2008 y Windows Vista" . Archivado del original el 15 de enero de 2010.
  12. "Protocolo de control de transmisión del centro de datos (DCTCP) (Windows Server 2012)" . Archivado del original el 26 de agosto de 2017.
  13. "tcp(4) - Protocolo de control de transmisión de Internet" . Manual de interfaces del kernel de FreeBSD . Consultado el 3 de abril de 2020 .
  14. "Anuncio de NetBSD 4.0" . 19 de diciembre de 2007. Archivado del original el 31 de octubre de 2014. Consultado el 13 de octubre de 2014 .
  15. Michael Lucas (2013). Absolute OpenBSD: UNIX para el paranoico práctico . No Starch Press. ISBN 9781593274764. Consultado el 22 de marzo de 2014 .
  16. "Mapa del código de red en el kernel de Linux 2.4.20, Informe técnico DataTAG-2004-1, Proyecto FP5/IST DataTAG" (PDF) . datatag.web.cern.ch . Marzo de 2004. Archivado (PDF) del original el 27 de octubre de 2015. Consultado el 1 de septiembre de 2015 .
  17. "Documentación/redes/ip-sysctl.txt: /proc/sys/net/ipv4/* Variables" . kernel.org . Archivado del original el 5 de marzo de 2016. Consultado el 15 de febrero de 2016 .
  18. K. Ramakrishnan; S. Floyd; D. Black (septiembre de 2001). La adición de notificación explícita de congestión (ECN) a IP . Grupo de trabajo de redes. doi : 10.17487/RFC3168 . RFC 3168 .Estándar propuesto. Deja obsoleto el RFC 2481. Actualiza los RFC 2474 , 2401 y 793. Actualizado por los RFC 4301 , 6040 y 8311 .   
  19. "Páginas man de Linux" . man7.org . 5 de diciembre de 2015. Archivado del original el 16 de febrero de 2016. Consultado el 15 de febrero de 2016 .
  20. "ECN (Notificación explícita de congestión) en TCP/IP" . Archivado del original el 19 de junio de 2012.
  21. "macOS 10.12 Sierra: Reseña de Ars Technica" . Ars Technica . 20 de septiembre de 2016. Archivado del original el 26 de abril de 2018. Consultado el 25 de abril de 2018 .
  22. Inc., Apple. "Redes para la Internet moderna - WWDC 2016 - Vídeos - Apple Developer" . Apple Developer . Archivado del original el 18 de abril de 2018. Recuperado el 18 de abril de 2018 .{{cite web}}: |last=tiene nombre genérico ( ayuda )
  23. Bhooma, Padma (marzo de 2017). "TCP ECN: experiencia con la habilitación de ECN en Internet" (PDF) . Archivado (PDF) del original el 9 de mayo de 2018. Recuperado el 3 de mayo de 2017 .
  24. Inc., Apple. "Avances en redes, parte 1 - WWDC 2017 - Vídeos - Apple Developer" . Apple Developer . Archivado del original el 31 de enero de 2018. Consultado el 18 de abril de 2018 .{{cite web}}: |last=tiene nombre genérico ( ayuda )
  25. "ipadm(8)" . Biblioteca de información de Oracle Solaris 11.4 . Oracle . Consultado el 6 de mayo de 2021 .
  26. "Administración de redes TCP/IP, IPMP y túneles IP en Oracle® Solaris 11.4, mediante la función TCP ECN" . Biblioteca de información de Oracle Solaris 11.4 . Oracle . Consultado el 6 de mayo de 2021 .
  27. Høiland-Jørgensen, Toke; Täht, Dave; Morton, Jonathan (2018). "Piece of CAKE: A Comprehensive Queue Management Solution for Home Gateways". arXiv : 1804.07617v2 [ cs.NI ].
  28. "Importar Dummynet AQM versión 0.2.1 (CoDel, FQ-CoDel, PIE y FQ-PIE) a FreeBSD 11" . El Proyecto FreeBSD, FreeBSD r300779 . Consultado el 5 de agosto de 2016 .
  29. "Data Center TCP (DCTCP)" . Archivado del original el 31 de octubre de 2014. Consultado el 7 de marzo de 2023 .
  30. TCP para centros de datos (DCTCP): Control de congestión TCP para centros de datos . IETF . doi : 10.17487/RFC8257 . RFC 8257. Consultado el 21 de agosto de 2021 .
  31. 1 2 Declaración del problema y requisitos para una mayor precisión en la retroalimentación de notificación explícita de congestión (ECN) . IETF . 26 de agosto de 2015. doi : 10.17487/RFC7560 . RFC 7560. Recuperado el 21 de agosto de 2021 .
  • Página web de ECN por Sally Floyd
  • RFC 4774 (BCP 124), Especificación de semántica alternativa para el campo de notificación explícita de congestión (ECN) , S. Floyd, (noviembre de 2006) 
  • Compatibilidad del kernel de Linux para definir un algoritmo de control de congestión por ruta/destino (integrado en el kernel de Linux 4.0)