En las últimas distribuciones de Linux es cada vez más frecuente encontrarse con problemas a la hora de conseguir que la red funcione. Además se trata de problemas un tanto atípicos, como que "la red me funciona en casa pero no en el trabajo" o "puedo ver páginas de Google pero no de Barrapunto".
Los problemas se presentan en distribuciones que utilizan la versión 2.6.17 o posteriores del kernel Linux. El origen del problema es ya antiguo, pero no ha empezado a manifestarse hasta que las distribuciones recientes han empezado a incluir los kernels con modificaciones en el manejo de la pila TCP.
En algunos casos, los usuarios optan por mantener sus equipos con versiones no actualizadas del kernel, cosa que si bien permite salir del paso presenta muchos inconvenientes. Afortunadamente con esta ayuda espero que los problemas puedan ser subsanados (como ocurrió en mi caso).
El origen del problema hay que buscarlo en el manejo de los paquetes TCP, en particular en el concepto de TCP window scaling. Se trata de una optimización orientada a mejorar el rendimiento en la transferencia de grandes volúmenes de datos (videos online, descarga de imágenes .iso, redes p2p), pero que desgraciadamente algunos fabricantes de hardware no implementan correctamente, a pesar de estar reflejado en el documento RFC1323 (TCP Extensions for High Performance), que data del año 1992.
Una forma de evitar el problema es deshabilitar estas extensiones de alto rendimiento y seguir funcionando tal y como se hacía hasta la versión anterior. Basta con modificar el fichero (como usuario root) que contiene el valor de la ventana. El nombre de este fichero varía según distribuciones (tcp_window_scaling, tcp_default_win_scale). Ejemplo:
Fedora core / Red Hat:
su -
echo 0 > /proc/sys/net/ipv4/tcp_window_scaling
Debian / Ubuntu:
sudo bash
echo 0 > /proc/sys/net/ipv4/tcp_window_scaling
Para hacer los cambios permanentes de manera que en el siguiente arranque la red siga funcionando sin problemas , añadimos la línea:
net.ipv4.tcp_window_scaling = 0
al fichero /etc/sysctl.conf
La solución óptima sería poder aprovechar unas optimizaciones que fueron pensadas hace 15 años, pero como han sido ignoradas por algunos fabricantes, la solución más sencilla para el usuario final es renunciar a dichas optimizaciones.
Leer más...