miércoles, 29 de agosto de 2007

¿Problemas de red en Linux?

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...

martes, 28 de agosto de 2007

Compilando con Ubuntu

Estaba probando algunas cosas en un Ubuntu 7.04 que instalé hace algunos días en un PC, y me encuentro con un problema para compilar un pequeño programilla en C.

Es un fallo muy tonto. Al tratar de compilar aparecen unos cuantos menajes, y el primero (realmente el único error) de ellos es:

error: stdio.h: No such file or directory

Bien. Está claro que el compilador no encuentra las librerías estándar de C. Lo que me choca es que en la distribución, tal y como viene inicialmente (DVD Ubuntu 7.04 Desktop i386) es que se instale el gcc pero no sus librerías, de modo que es completamente inútil.

Me choca un poco más lo difícil que es encontrar información en foros. Mucha gente tiene ese mismo problema, y se les recomienda instalar librerías que nada tienen que ver (y lógicamente no resuelven el problema), como "build-essential".

Basta con instalar "libc6-dev" y gcc ya podrá encontrar las librerías estándar y compilar sin errores (salvo los que cada uno haya introducido en su código) :-) Leer más...