La opción de escala de ventana 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 TCP, junto con varias otras, se define en RFC 7323, que trata sobre redes largas y pesadas (LFN).
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 desbordado por los datos si, por ejemplo, está muy ocupado (como un servidor web). Cada segmento TCP contiene el valor actual de la ventana de recepción. Si, por ejemplo, un remitente recibe un ACK 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.
La opción de escala de ventana TCP es necesaria para una transferencia eficiente de datos cuando el producto de retardo de ancho de banda (BDP) es mayor que 64 KB [1] . Por ejemplo, si se utilizó una línea de transmisión T1 de 1,5 Mbit/s en un enlace satelital con un tiempo de ida y vuelta (RTT) de 513 milisegundos, el producto de retardo de ancho de banda es de bits o aproximadamente 96.187 bytes. El uso de un tamaño de búfer máximo de 64 KB [1] solo permite que el búfer se llene hasta (65.535 / 96.187) = 68% de la velocidad máxima teórica de 1,5 Mbit/s, o 1,02 Mbit/s.
Al utilizar 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, o aproximadamente 1 GiB. [2] Esto se hace especificando un recuento de desplazamiento de dos bytes en el campo de opciones de encabezado. El tamaño real de la ventana de recepción se desplaza a la izquierda según el valor del recuento de desplazamiento. Se puede utilizar un valor máximo de 14 para el valor del recuento de desplazamiento. Esto permitiría que una única conexión TCP transfiera datos a través del enlace satelital de ejemplo a 1,5 Mbit/s utilizando todo el ancho de banda disponible.
Básicamente, 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 única conexión TCP utilice por completo una 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.
Debido a que algunos firewalls no implementan correctamente el escalamiento de ventana TCP, esto puede provocar que la conexión a Internet de un usuario funcione mal de manera intermitente durante unos minutos y luego parezca que vuelve a funcionar sin motivo. También existe un problema si un firewall no admite las extensiones TCP. [3]
El escalado de ventana TCP se implementa en Windows desde Windows 2000. [ 4] [5] Está habilitado de forma predeterminada en Windows Vista/Server 2008 y posteriores, pero se puede desactivar manualmente si es necesario. [6] Windows Vista y Windows 7 tienen un búfer de recepción TCP predeterminado fijo de 64 kB, que se escala hasta 16 MB mediante "ajuste automático", lo que limita el ajuste manual de TCP en redes largas y pesadas . [7]
Los núcleos Linux (a partir de la versión 2.6.8, agosto de 2004) tienen habilitado el escalado de ventanas TCP de forma predeterminada. Los parámetros de configuración se encuentran en el sistema de archivos /proc , consulte el pseudoarchivo /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: , sección sysctl). [8]man tcp
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).
La configuración predeterminada para FreeBSD , OpenBSD , NetBSD y Mac OS X es tener habilitada la escala de ventanas (y otras funciones relacionadas con RFC 1323).
Para verificar su estado, un usuario puede verificar el valor de la variable " net.inet.tcp.rfc1323 " mediante el comando sysctl :
$ sysctl net.inet.tcp.rfc1323
Un valor de 1 (salida "net.inet.tcp.rfc1323=1") significa que el escalamiento está habilitado, 0 significa "deshabilitado". Si está habilitado, se puede desactivar emitiendo el comando:
$ sudo sysctl -w net.inet.tcp.rfc1323 = 0
Esta configuración se pierde al reiniciar el sistema. Para garantizar que se configure 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 genera un error
sysctl: oid desconocido 'net.inet.tcp.rfc1323'