Spiga

Ya soy Feisty Fawn (Parte 2)

No he podido contenerme y he decidido hacer un Copy/Paste del articulo completo de //.arce (turbo-r.blogspot.com) sobre un problema que "nos unió" (a él por su lado y a mi por el mio, se entiende hehe) en el desespero (por lo menos yo estuve a punto de desistir...)
Este escrito que a continuación pongo lo conocí gracias a un comentario hecho por el mismo //.arce (creador del escrito) a respuesta de mi problema "temporal" con Internet en las nuevas distros que iba probando, y puesto que el problema lo solucione, parcialmente, me alegro mucho saber que había una solución definitiva a dicho problema. Sin más:

.- Comienzo

sábado, junio 09, 2007
Escala de ventana de TCP en Linux

Allá por la pasada navidad se me ocurrió instalarme OpenSUSE 10.2 porque tenía un problema con el sonido en Kubuntu 6.10 que no conseguía solucionar. Me salía un mensaje diciéndome algo así como que se saturaba el buffer: lo solucioné más tarde cambiando el dispositivo de salida.

Para mi sorpresa, con el cambio a OpenSUSE me encontré con otro curiosísimo desaguisado: Me funcionaban sólo unas pocas páginas web, como Google o Ya.com. Las demás se quedaban en el intento de cargar, aunque cualquier ping llegaba perfectamente. El entuerto persistíó en Fedora Core 6 y más recientemente en el Kubuntu Feisty de mi hermano Juanjo (y no en el mio, inexplicablemente). Busqué y busqué, pregunté por foros y en las news (comp.os.linux.misc), pero nadie me supo decir nada.

Ayer por fin publicaron la solución en las news. Escribo esto con la esperanza de que le sirva a alguien más. Que me corrija el gran gurú del TCP/IP, Konamiman, si me equivoco en algo.

Por lo visto todo se debe a que desde el kernel 2.6.17 se ha modificado el valor por defecto de la escala de ventana de TCP (TCP window scaling), que era 0.

En los albores de Internet el número máximo de bytes que se transmitian antes de mandar una señal de acuse de recibo (ACKnowledgement) era de 64 KB, pero tal cantidad se ha quedado pequeña con las líneas de banda ancha actuales, así que ya en 1992 se inventó lo del TCP window scaling, que es un parámetro en las transaccciones que permite multiplicar los bytes enviados por una cifra de 8 bits.

El problema está en que existe un error en la mayoría de los routers de los servidores en Internet por el que machacan el valor de escala de ventana con un 0 si es superior, con lo que cliente y servidor no llegan a entenderse y se ralentiza la transferencia, o simplemente no funciona, como me pasaba a mi.

He aquí el remedio en cuestión:

Solución permanente editando /etc/sysctl.conf:

Añadir esto para un tamaño de ventana óptimo:

net.ipv4.tcp_wmem = 4096 16384 131072
net.ipv4.tcp_rmem = 4096 87380 174760

Y reiniciar

O añadir esto para dejar la ventana en 64KB:

net.ipv4.tcp_window_scaling = 0

Solucion temporal:

Escribir lo siguiente en un terminal:

sudo -s
echo "4096 16384 131072" > /proc/sys/net/ipv4/tcp_wmem
echo "4096 87380 174760" > /proc/sys/net/ipv4/tcp_rmem

ó:

sudo -s
echo 0 > /proc/sys/net/ipv4/tcp_window_scaling
.- Fin

NOTA: A diferencia de mi en su momento, él ha sabido explicar y buscar una solución al problema a la perfección, aparte de contar el por que (sucede), no solo el como (se arregla el problema).

Aún me queda mucho que aprender ;)

2 comentarios:

  //.arce

1 de agosto de 2007, 13:56

Gracias :o) Aunque aun queda saber por qué, con la misma distribución y red, el problema ocurre en unos ordenadores y en otros no.

Está muy bien tu blog. Lo sigo desde que lo encontré buscando información sobre el reproductor mp3 Zen.

  David Rodriguez

1 de agosto de 2007, 14:59

En mi caso creo que fue la combinación de router + tarjeta de red (creo) :D

Por cierto, tienes el mejor mp3 del mercado hehe