stringtranslate.com

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 RFC 3168 (2001). ECN permite la notificación de un extremo a otro de la congestión de la red sin perder paquetes. ECN es una característica opcional que se puede utilizar entre dos puntos finales habilitados para ECN cuando la infraestructura de red subyacente también lo admite.

Convencionalmente, las redes TCP/IP señalan la congestión descartando paquetes. Cuando ECN se negocia con éxito, un enrutador compatible con ECN puede establecer una marca en el encabezado IP en lugar de descartar un paquete para señalar una congestión inminente. El receptor del paquete transmite la indicación de congestión al remitente, lo que reduce su velocidad de transmisión como si detectara un paquete perdido.

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

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

Operación

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

Sin ECN, el eco de indicación de congestión se logra indirectamente mediante la detección de paquetes perdidos. Con ECN, la congestión se indica configurando el campo ECN dentro de un paquete IP en CE (Congestión experimentada) y el receptor la devuelve al transmisor configurando los bits adecuados en el encabezado del protocolo de transporte. Por ejemplo, cuando se utiliza TCP, la indicación de congestión se repite configurando el bit ECE.

Funcionamiento de ECN con IP

ECN utiliza los dos bits menos significativos (el 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:

Cuando ambos puntos finales 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 administració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 . Este acto se conoce como "marcado" y su propósito es informar al punto final receptor de una congestión inminente . En el punto final receptor, esta indicación de congestión es manejada por el protocolo de capa superior ( protocolo de capa de transporte ) y debe enviarse de vuelta al nodo transmisor para indicarle que reduzca su velocidad de transmisión.

Debido a que la indicación CE solo puede ser manejada de manera efectiva por un protocolo de capa superior que la admita, ECN solo se usa 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. .

Operación de ECN con TCP

TCP admite ECN usando dos indicadores en el encabezado TCP. El primero, ECN-Echo (ECE) se utiliza para devolver la indicación de congestión (es decir, indicar al remitente que reduzca la velocidad de transmisión). El segundo, Ventana de congestión reducida (CWR), para reconocer que se recibió el eco de la indicación de congestión. El uso de ECN en una conexión TCP es opcional; para que se utilice ECN, se debe negociar en el establecimiento de la conexión incluyendo opciones adecuadas en los segmentos SYN y SYN-ACK.

Cuando se ha negociado ECN en una conexión TCP, el remitente indica que los paquetes IP que transportan segmentos TCP de esa conexión transportan tráfico desde un transporte con capacidad ECN marcándolos con un punto de código ECT. Esto permite a los enrutadores intermedios que admiten ECN marcar esos paquetes IP con el punto de código CE en lugar de descartarlos para señalar una congestión inminente.

Al recibir un paquete IP con el punto de código de congestión experimentada , el receptor TCP devuelve esta indicación de congestión utilizando el indicador ECE en el encabezado TCP. Cuando un punto final recibe un segmento TCP con el bit ECE, reduce su ventana de congestión como si se tratara de una caída de paquetes. Luego reconoce la indicación de congestión enviando un segmento con el bit CWR establecido.

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

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 (segmentos ACK puros, SYN, 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 espectaculares en el rendimiento de las conexiones TCP de corta duración. [8]

Operación de ECN con otros protocolos de transporte

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

Es posible utilizar ECN con protocolos superpuestos a UDP . Sin embargo, UDP requiere que la aplicación realice el control de la congestión, y los primeros protocolos basados ​​en UDP, como DNS , no utilizaban ECN. Los protocolos basados ​​en UDP más recientes, como QUIC, utilizan ECN para el control de la 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 del AQM preciso que se utilice. Sin embargo, algunas observaciones parecen ser válidas en diferentes AQM.

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

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

Se ha descubierto que el uso de ECN es perjudicial para el rendimiento en redes muy congestionadas cuando se utilizan algoritmos AQM que nunca descartan paquetes. [8] Las implementaciones modernas de AQM evitan este problema al descartar paquetes en lugar de marcarlos con una carga muy alta.

Implementaciones

Muchas implementaciones modernas del conjunto de protocolos TCP/IP tienen cierto soporte para ECN; sin embargo, normalmente se envían con ECN desactivado.

Soporte ECN en TCP por parte de hosts

Microsoft Windows

Las versiones de Windows desde 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 (DTCCP). [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 usando el sysctl net.inet.tcp.ecn.enable . De forma predeterminada, está habilitado solo para conexiones entrantes que lo soliciten. También se puede habilitar para todas las conexiones o deshabilitarlo por completo. [13]

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

Asimismo, el sysctl net.inet.tcp.ecn se puede utilizar en OpenBSD . [15]

linux

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

A partir de la versión 4.1 del kernel de Linux, lanzada en junio de 2015, el mecanismo tcp_ecn_fallback , como se especifica en la sección 6.1.1.1 de RFC 3168, [18] está habilitado de forma predeterminada [19] cuando ECN está habilitado (el valor de 1). El mecanismo de respaldo intenta la conectividad ECN en la configuración inicial de las conexiones salientes, con un respaldo elegante para transmisiones sin capacidad ECN, mitigando problemas con hosts o firewalls intolerantes a ECN.

Mac OS X

Mac OS X 10.5 y 10.6 implementan soporte ECN para TCP. Se controla mediante las variables booleanas sysctl 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 indicadores ECN configurados; el segundo intenta iniciar conexiones salientes con ECN habilitado. Ambas variables tienen el valor predeterminado 0 , pero se pueden establecer en 1 para habilitar el comportamiento respectivo.

En junio de 2015, Apple Inc. anunció que OS X 10.11 tendría ECN activado de forma predeterminada, [6] pero el sistema operativo se envió 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 próxima versión de iOS, sería compatible con ECN y lo tendría activado de forma predeterminada. [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 de telefonía celular en iOS 10 [22] [23 ] y 100% para iOS 11 [24]

Solaris

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

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

Soporte ECN en IP por routers

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

Los enrutadores 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 , usando la disciplina sfb , usando la disciplina CoDel Fair Queuing (fq_codel) o la disciplina de cola CAKE [27] .

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

TCP del centro de datos

El Protocolo de control de transmisión del centro de datos ( TCP del centro 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, utilizando ECN, puede medir el alcance de la congestión. [30]

DCTCP modifica el receptor TCP para transmitir siempre la marca ECN exacta de los paquetes entrantes a costa de ignorar una función destinada a preservar la confiabilidad de la señalización. Esto hace que un remitente DCTCP sea vulnerable a la pérdida de ACK del receptor, que no tiene ningún mecanismo para detectar o afrontar. [31] A partir de julio de 2014 , los algoritmos que proporcionan una retroalimentación del receptor equivalente o mejor en un enfoque más confiable son un tema de investigación activo. [31]

Ver también

Referencias

  1. ^ Steven Bauer; Robert Beverly; Arturo 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) desde el original el 22 de marzo de 2014.
  2. ^ Alberto Medina; Mark Allman; Sally Floyd. "Medición de las interacciones entre protocolos de transporte y cajas intermedias" (PDF) . Conferencia de medición de Internet 2004. Archivado (PDF) desde el original el 4 de marzo de 2016.
  3. ^ "TBIT, la herramienta de inferencia de comportamiento de TCP: ECN". Icir.org. Archivado desde el 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 de la implementación en Internet de notificaciones explícitas de congestión" (PDF) . Actas de la Conferencia de Medición Pasiva y Activa 2015. Archivado desde el original (PDF) el 15 de junio de 2015 . Consultado el 14 de junio de 2015 .
  5. ^ ab David Murray; Terry Koziniec; Sebastián Zander; Michael Dixon; Polichronis Koutsakis (2017). "Un análisis de las características cambiantes del tráfico de la red empresarial" (PDF) . La 23ª Conferencia de Comunicaciones de Asia y el Pacífico (APCC 2017). Archivado (PDF) desde el original el 3 de octubre de 2017 . Consultado el 3 de octubre de 2017 .
  6. ^ abc "Su aplicación y redes de próxima generación". Apple Inc. 2015. Archivado desde el original el 15 de junio de 2015.
  7. ^ Kuzmanovic, A.; Mondal, A.; Floyd, S.; Ramakrishnan, K. (junio de 2009). Agregar capacidad de notificación explícita de congestión a los paquetes SYN/ACK de TCP. doi : 10.17487/RFC5562 . RFC 5562.
  8. ^ ab 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. ^ Jamal Hadi Salim y Uvaiz Ahmed. Evaluación del desempeño de la Notificación Explícita de Congestión (ECN) en Redes IP. RFC 2884. Julio de 2000
  10. ^ Marek Malowidzki, Estudio basado en simulación del rendimiento de ECN en redes RED, en proceso. ESPECTACULARES'03 . 2003.
  11. ^ "Nuevas funciones de red en Windows Server 2008 y Windows Vista". Archivado desde el original el 15 de enero de 2010.
  12. ^ "Protocolo de control de transmisión del centro de datos (DCTCP) (Windows Server 2012)". Archivado desde el 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". 2007-12-19. Archivado desde el original el 31 de octubre de 2014 . Consultado el 13 de octubre de 2014 .
  15. ^ Michael Lucas (2013). Absolute OpenBSD: UNIX para los paranoicos prácticos. Sin prensa de almidón. ISBN 9781593274764. Consultado el 22 de marzo de 2014 .
  16. ^ "Un 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) desde el 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 desde el original el 5 de marzo de 2016 . Consultado el 15 de febrero de 2016 .
  18. ^ La adición de notificación explícita de congestión (ECN) a IP. Septiembre de 2001. doi : 10.17487/RFC3168 . RFC 3168 . Consultado el 15 de febrero de 2016 .
  19. ^ "Páginas de manual de Linux". man7.org . 2015-12-05. Archivado desde el 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 desde el original el 19 de junio de 2012.
  21. ^ "macOS 10.12 Sierra: revisión de Ars Technica". Ars Técnica . 20 de septiembre de 2016. Archivado desde el original el 26 de abril de 2018 . Consultado el 25 de abril de 2018 .
  22. ^ Inc., manzana. "Redes para la Internet moderna - WWDC 2016 - Vídeos - Desarrollador de Apple". Desarrollador de Apple . Archivado desde el original el 18 de abril de 2018 . Consultado el 18 de abril de 2018 . {{cite web}}: |last=tiene nombre genérico ( ayuda )
  23. ^ Bhooma, Padma (marzo de 2017). "TCP ECN: experiencia en la habilitación de ECN en Internet" (PDF) . Archivado (PDF) desde el original el 9 de mayo de 2018 . Consultado el 3 de mayo de 2017 .
  24. ^ Inc., manzana. "Avances en redes, parte 1 - WWDC 2017 - Vídeos - Desarrollador de Apple". Desarrollador de Apple . Archivado desde el 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 . Oráculo . Consultado el 6 de mayo de 2021 .
  26. ^ "Administración de redes TCP/IP, IPMP y túneles IP en Oracle® Solaris 11.4, utilizando la función TCP ECN". Biblioteca de información de Oracle Solaris 11.4 . Oráculo . Consultado el 6 de mayo de 2021 .
  27. ^ Høiland-Jørgensen, Toke; Eso es, Dave; Morton, Jonathan (2018). "Pieza de pastel: una solución integral de gestión de colas para puertas de enlace domésticas". 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. ^ "Centro de datos TCP (DTCCP)". Archivado desde el original el 31 de octubre de 2014 . Consultado el 7 de marzo de 2023 .
  30. ^ Data Center TCP (DTCCP): control de congestión de TCP para centros de datos. doi : 10.17487/RFC8257 . RFC 8257 . Consultado el 21 de agosto de 2021 .
  31. ^ ab Declaración del problema y requisitos para una mayor precisión en los comentarios sobre notificaciones explícitas de congestión (ECN). 26 de agosto de 2015. doi : 10.17487/RFC7560 . RFC 7560 . Consultado el 21 de agosto de 2021 .

enlaces externos