La opción de escala de la ventana de TCP es una opción para aumentar el tamaño de la ventana de recepción permitido en el Protocolo de control de transmisión por encima de su valor máximo anterior de 65.535 bytes. Esta opción de TCP, junto con varias otras, se define en RFC 1323 que se ocupa de las redes largas y pesadas (LFN).
Ventanas TCP
El rendimiento de una comunicación TCP está limitado por dos ventanas: la ventana de congestión y la ventana de recepción. La ventana de congestión intenta no exceder la capacidad de la red ( control de congestión ); la ventana de recepción intenta no exceder la capacidad del receptor para procesar datos ( control de flujo ). El receptor puede verse abrumado por los datos si, por ejemplo, está muy ocupado (como un servidor web). Cada segmento de TCP contiene el valor actual de la ventana de recepción. Si, por ejemplo, un remitente recibe un acuse de recibo que reconoce el byte 4000 y especifica una ventana de recepción de 10000 (bytes), el remitente no enviará paquetes después del byte 14000, incluso si la ventana de congestión lo permite.
Teoría
La opción de escala de ventana de TCP es necesaria para una transferencia de datos eficiente cuando el producto de retardo de ancho de banda (BDP) es superior a 64K. Por ejemplo, si se utilizó una línea de transmisión T1 de 1,5 Mbit / segundo a través de un enlace por satélite con un tiempo de ida y vuelta (RTT) de 513 milisegundos , el producto de retardo de ancho de banda es bits o alrededor de 96,187 bytes. El uso de un tamaño máximo de búfer de 64 KiB solo permite que el búfer se llene hasta (65,535 / 96,187) = 68% de la velocidad máxima teórica de 1,5 Mbits / segundo, o 1,02 Mbit / s.
Al usar la opción de escala de ventana, el tamaño de la ventana de recepción se puede aumentar hasta un valor máximo de bytes. Esto se hace especificando un recuento de turnos de dos bytes en el campo de opciones del encabezado. El tamaño real de la ventana de recepción se desplaza a la izquierda por el valor en el recuento de turnos. Se puede utilizar un valor máximo de 14 para el valor de recuento de turnos. Esto permitiría que una sola conexión TCP transfiera datos a través del enlace satelital de ejemplo a 1,5 Mbit / segundo utilizando todo el ancho de banda disponible.
Esencialmente, no se puede transferir más de una ventana de transmisión completa dentro de un período de tiempo de ida y vuelta. La opción de escala de ventana permite que una sola conexión TCP utilice completamente un LFN con un BDP de hasta 1 GB, por ejemplo, un enlace de 10 Gbit / s con un tiempo de ida y vuelta de 800 ms.
Posibles efectos secundarios.
Debido a que algunos firewalls no implementan correctamente el escalado de ventanas TCP, puede causar que la conexión a Internet de un usuario funcione mal de manera intermitente durante unos minutos y luego parezca que comienza a funcionar nuevamente sin ningún motivo. También existe un problema si un firewall no admite las extensiones TCP. [1]
Configuración de sistemas operativos
Ventanas
El escalado de ventanas TCP se implementa en Windows desde Windows 2000 . [2] [3] Está habilitado de forma predeterminada en Windows Vista / Server 2008 y versiones posteriores, pero se puede desactivar manualmente si es necesario. [4] Windows Vista y Windows 7 tienen un búfer de recepción TCP predeterminado fijo de 64 kB, escalando hasta 16 MB a través del "autoajuste", lo que limita el ajuste manual de TCP en redes largas y pesadas . [5]
Linux
Los kernels de Linux (desde 2.6.8, agosto de 2004) han habilitado el escalado de ventana TCP de forma predeterminada. Los parámetros de configuración se encuentran en el sistema de archivos / proc , consulte pseudo-archivo / proc / sys / net / ipv4 / tcp_window_scaling y sus compañeros / proc / sys / net / ipv4 / tcp_rmem y / proc / sys / net / ipv4 / tcp_wmem (más información:, man tcp
sección sysctl). [6]
El escalado se puede desactivar emitiendo el siguiente comando.
$ sudo sysctl -w "net.ipv4.tcp_window_scaling = 0"
Para mantener los cambios después de un reinicio, incluya la línea "net.ipv4.tcp_window_scaling = 0" en /etc/sysctl.conf (o /etc/sysctl.d/99-sysctl.conf a partir de systemd 207).
FreeBSD, OpenBSD, NetBSD y Mac OS X
La configuración predeterminada para FreeBSD , OpenBSD , NetBSD y Mac OS X es tener activada la escala de ventana (y otras características relacionadas con RFC 1323).
Para verificar su estado, un usuario puede comprobar el valor de " net.inet.tcp.rfc1323 "variable a través del comando sysctl :
$ sysctl net.inet.tcp.rfc1323
Un valor de 1 (salida "net.inet.tcp.rfc1323 = 1") significa que el escalado está habilitado, 0 significa" deshabilitado ". Si está habilitado, puede desactivarse emitiendo el comando:
$ sudo sysctl -w net.inet.tcp.rfc1323 = 0
Esta configuración se pierde al reiniciar el sistema. Para asegurarse de que esté configurado en el momento del arranque, agregue la siguiente línea a /etc/sysctl.conf :net.inet.tcp.rfc1323=0
Sin embargo, en macOS 10.14 este comando proporciona un error
sysctl: oid desconocido 'net.inet.tcp.rfc1323'
Fuentes
- ^ "La conectividad de red puede fallar cuando intenta utilizar Windows Vista detrás de un dispositivo de firewall" . Support.microsoft.com . Consultado el 11 de julio de 2019 .
- ^ "Descripción de las características TCP de Windows 2000 y Windows Server 2003" . Support.microsoft.com . Consultado el 11 de julio de 2019 .
- ^ "Tamaño de la ventana de recepción de TCP y escala de la ventana" . Archivado desde el original el 1 de enero de 2008.
- ^ "La conectividad de red falla cuando intenta utilizar Windows Vista detrás de un dispositivo de firewall" . Microsoft . 8 de julio de 2009.
- ^ "MS Windows" . Fasterdata.es.net . Consultado el 11 de julio de 2019 .
- ^ "/ proc / sys / net / ipv4 / * Variables" .