MODEM AL 100%

Optimización de la Conexión

NOTAS INICIALES

La mayor parte de los usuarios de Internet nos conectamos por módem desde casa. Y la mayor parte hacemos lo mismo... pinchamos o conectamos el módem a nuestro ordenador, enchufamos un cable del conector del módem a la clavija telefónica, instalamos el 'Acceso telefónico a redes' y a funcionar.

Con un poco de suerte conseguiremos conectar con nuestro ISP a una velocidad que oscilará entre 48.000 y 52.000 bps, lo que se debería traducir en un ancho de banda de descarga de algo más de 5 Kb/s.

La cruda realidad es que la mayor parte de los usuarios pasan difícilmente de 3.5 Kb/s... ¿qué pasa?, ¿dónde se quedan los bits que faltan?.

La respuesta es.. 'en mucho sitios'. Veamos si podemos hacer que se pierda menos y en menos sitios.

ENTRAMOS EN MATERIA

Antes de empezar debo hacer una aclaración. Que nadie se piense que esto es la panacea de la conexión a Internet por módem. La calidad de nuestra línea telefónica, y la de las conexiones que unen las máquinas de Internet, son las que condicionan en mayor medida el ancho de banda del que podemos llegar a disponer. Estos 'trucos' intentan adaptar nuestra configuración de la mejor manera posible para sacar lo máximo de nuestra conexión teniendo en cuenta esas limitaciones de las líneas de comunicaciones. Nada más.

Antes de tocar nada

Me parece que la mejor manera de empezar es viendo los puntos por los que tiene que pasar la información de Internet para llegar hasta nuestra máquina. Creo que viendo esto es más fácil entender por qué tocamos las cosas que tocamos.

Supongamos que estás descargando un archivo desde un servidor cualquiera. El archivo recorrerá, más o menos, este camino:

Nota: Insisto en lo de que esto es "más o menos" el camino que sigue la información de Internet hasta llegar a nuestra máquina. Que me perdonen los purista y entendidos por la torpe simplificación que he querido hacer.

No es difícil imaginar que la parte de la comunicación que no está en nuestra máquina no podremos configurarla. A lo que si que tenemos acceso es a lo siguiente:

Con unos pequeños ajustes en estos tres puntos podemos mejorar significativamente el rendimiento de nuestra conexión a Internet... al menos eso espero.

Configuración del módem y del puerto

Los ajustes que propongo deben hacerse en la ventana de 'Propiedades del módem' y en cada una de las conexiones de 'Acceso telefónico a redes' que tengas creadas y quieras 'afinar'. La razón de tener que hacer esto es que Windows mantiene varias configuraciones para el módem. Por un lado una global (o predeterminada) que se usa para las nuevas conexiones de acceso telefónico, y por otro una personalizada para cada conexión existente. Casi todos los parámetros configurables son independientes entre todas estas configuraciones, así que la única forma de asegurarse de que los cambios se reflejan en todas partes es hacerlos en todas partes... así es la vida.

Para abrir la ventana de 'Propiedades del módem' de la configuración global puedes seguir esta secuencia:

Para abrir la ventana de 'Propiedades del módem' de la configuración personalizada para cada conexión de acceso telefónico puedes seguir esta secuencia:

En cualquiera de los dos casos deberías ver una ventana más o menos como esta...

Desde la pestaña 'General' se pueden hacer unos cuantos ajustes:

Volumen del altavoz

Lo más cómodo es dejarlo desactivado para no molestar a nadie cuando nos conectamos a las tantas de la madrugada.

Velocidad máxima

Este parámetro especifica la velocidad de conexión del módem al equipo, no la de conexión al módem de nuestro ISP. Es decir, la velocidad del puerto de comunicaciones (COMx) por el que el módem se conecta a nuestro ordenador.

Debes seleccionar uno de los valores de la lista siguiendo estos criterios:

La razón de todas estas recomendaciones es sencilla. Se tiene que preparar un 'camino' tan amplio como sea posible para que el módem pueda entregar los datos que recibe. Si ponemos una velocidad inferior a la de conexión de nuestro módem, este tendrá que retener los datos porque el puerto COMx por el que tiene que entregarlos al equipo no podrá asimilar la avalancha de bits.

Poner una velocidad doble (o mayor) de la máxima del módem tendrá utilidad en el caso de poder utilizar la compresión hardware. Si nuestro módem y el del ISP lo soportan, la información que se transmite puede comprimirse y descomprimirse de forma transparente para nosotros (a nivel hardware entre ambos módems). En este caso la cantidad de información que el módem intentará entregar a través del puerto de comunicaciones puede ser muy superior a la máxima velocidad de conexión, del orden de 1.5 a 2.5 veces esa velocidad máxima. En el caso de una conexión a 53000 bps (el máximo para las líneas y centrales telefónicas de España) la transferencia a través del puerto de comunicaciones podría superar fácilmente los 100000 bps.

Te parece una exageración... pues mira esto...

... y eso que la conexión con el ISP no ha sido a la máxima velocidad.

Nota: Si el módem deja de responder después de cambiar este valor prueba con el inmediatamente inferior y ve bajando hasta que el módem responda otra vez.

...

Si ahora pulsas la pestaña 'Conexión' deberías ver algo como esto...

Preferencias de conexión

Lo normal es que estén como se ven aquí.

Bits de datos: 8
Paridad: ninguno
Bits de parada: 1

Preferencias de llamada

'Esperar el tono de marcado antes de marcar' debería estar marcado. Las dos opciones restantes puedes ponerlas a tu gusto.

...

Una vez ajustados los valores anteriores pulsa en botón 'Configuración de puerto...' y aparecerá una ventana como esta...

Configuración avanzada de puerto

Si tu módem lo permite marca la casilla de 'Usar búferes FIFO' y coloca las dos barras deslizables en el valor máximo. Esto ajusta el tamaño de la memoria intermedia del puerto COMx, que conecta el módem con el equipo, en sus valores de máximo rendimiento.

Nota: Es muy posible que para algunos modelos de módem del tipo Winmodem al pulsar sobre 'Configuración de puerto...' no aparezca esta ventana.

...

Pulsa el botón 'Aceptar' y regresa a la pestaña 'Conexión'. Ahora pulsa el botón 'Avanzada...'. Aparecerá algo como esto...

Si tu módem lo permite deberías poner todas las opciones como están aquí.

Utilizar control de errores: si
Requerido para conectar: no
Comprimir datos: si
Utilizar control de flujo: si
Control de flujo por hardware: si
Tipo de modulación: estándar

Configuraciones adicionales

Esta casilla es para poner comandos que se mandan directamente al módem en el momento de establecer la comunicación. Normalmente estos comandos se ajustarán a la norma Hayes y tendrán la forma 'ATcomando'. De entre todo lo que se puede poner en esta casilla (ver lista de comandos Hayes) tenemos tres cosas realmente interesantes:

Acelerar la marcación del módem

ATS11=50

Esto reduce unos segundos el tiempo que se tarda en marcar el número del ISP.

Ver la velocidad real de conexión entre nuestro módem y el del ISP

ATS95=45

Con esto se muestra la velocidad de conexión negociada entre nuestro módem y el del ISP, en lugar de la velocidad del puerto COMx que une nuestro módem con el sistema.

Evitar cortes de conexión

AT&FS0=0S7=120S10=180

De esta manera se reducen considerablemente los cortes de conexión producidos por ruido en la línea.

No es todo lo que se puede poner, pero es lo que más cosas soluciona.

Nota: Los comandos Hayes se pueden concatenar sin el menor problema. Lo único que se debe tener en cuenta es que la secuencia debe comenzar con las letras 'AT'.

...

Cuando termines con todo esto pulsa el botón 'Aceptar' de todas las ventanas que tengas abiertas. Con esto deberías tener afinada al máximo la configuración del módem y del puerto de comunicaciones que lo une al equipo.

Recuerda que debes hacer estos cambios en el icono 'Modems' del 'Panel de control' y en cada conexión de 'Acceso telefónico a redes' que tengas configurada y pretendas afinar.

Configuración de TCP/IP

Los ajustes al protocolo TCP/IP se tienen que hacer a mano directamente en el registro. Si no tienes muy claro como moverte por las tripitas de Windows te recomiendo que no lo hagas. Será mejor que utilices uno de los mil programas que hacen estos ajustes automáticamente.

Después de probar una docenas de estos programas me quedo con este...

MTUSpeed Pro v4.10
Copyright Mike Sutherland 1997
Autor: Mike Sutherland
Mail: mike@mjs.u-net.com
Homepage: http://www.mjs.u-net.com/mtuspeed.htm

Hace lo que tiene que hacer de forma clara y totalmente transparente. Tiene buena documentación y no engorrina con una de esas instalaciones que dejan restos por todas partes.

Nota: Puedes descargar "MTUSpeed Pro" desde la sección de "Software - Internet - Optimizar"

MTUSpeed Pro v4.10

La instalación del programa no tiene ningún misterio. Una vez descargado el paquete se descomprime en la carpeta de tu elección y se inicia el único ejecutable que contiene. Aparecerá una ventana como esta...

Lo único que tienes que hacer es marcar la casilla 'RWIN enabled' (abajo a la derecha), pulsar el botón 'Optimum Settings' y para terminar 'Update Registry'.

Una vez hecho esto puedes cerrar el programa y reiniciar Windows para que los cambios en el registro tengan efecto... no he encontrado nada más fácil de usar y que sea más efectivo.

Nota: He detectado que este programa comete un error al asignar el valor de 'NDI Cache Size'. Si la clave no existe previamente en el registro el valor no es asignado. Para solucionar este pequeño contratiempo localiza la clave editando el registro y créala manualmente con valor '16'.

Si lo prefieres puedes usar este archivo REG para hacerlo automáticamente...

NDICACHESIZE.ZIP

Ajuste manual de TCP/IP

Esto es más fácil de hacer que de explicar. Intentaré aclarar las diversas opciones sin meterme en un jardín muy denso... espero que me salga bien.

...

Abre el registro (ejecuta REGEDIT.EXE) y localiza estas claves (si es que existen):

HKEY_LOCAL_MACHINE
    System
        CurrentControlSet
            Services
                Class
                    NetTrans
                        00xx (donde 'xx' puede ser un valor entre 00 y 30)
                        valor: MaxMTU

Nota: Localizar la rama '00xx' que corresponde al protocolo TCP/IP que enlaza con el 'Adaptador de Acceso telefónico a redes'.

HKEY_LOCAL_MACHINE
    System
        CurrentControlSet
            Services
                VxD
                    MSTCP
                    valor: DefaultRcvWindow
                    valor: DefaultTTL
                    valor: PMTUDiscovery
                    valor: PMTUBlackHoleDetect

HKEY_LOCAL_MACHINE
    System
        CurrentControlSet
            Services
                VxD
                    NWLink
                    valor: cachesize
                        Ndi
                            params
                                cachesize
                                valor: (Predeterminado)
                                valor: default (escrito así, no el que pone 'Predeterminado')

Desde estas claves se controla buena parte del funcionamiento del protocolo TCP/IP. En Windows 98 (es el que he utilizado para las pruebas) todas ellas son claves de tipo cadena de texto. Veamos que significan y cual es su valor óptimo.

Nota: Si quieres conocer el resto de las claves del registro relacionadas con el protocolo TCP/IP te recomiendo que leas el documento de Microsoft Q158474 (Windows TCP/IP Registry Entries).
MaxMTU

Esta es la madre del cordero. Lo de 'MaxMTU' viene de tamaño máximo de 'MTU' (Maximum Transmission Unit), y su razón de ser sale de aquí...

La información en Internet se transmite en paquetes que pueden ser de un tamaño variable. Es decir, que un archivo o una página web no se transmiten del servidor a tu máquina tal cual está. El archivo en cuestión se trocea en pequeñas porciones, se numeran, se marcan con la dirección del remitente y del destinatario y se sueltan al mundo con la esperanza de que lleguen hasta tu equipo.

Como ya he mencionado, el tamaño de cada uno de estos paquetes (el nombre técnico es 'datagrama') puede ser variable (entre 68 y 65535 bytes), pero se suele usar un valor máximo de 576 bytes. Este número no es un capricho, es una recomendación del RFC-791 (uno de los documentos técnicos en los que se define el funcionamiento de Internet). En el apartado que describe el formato de la cabecera de un datagrama, este documento dice así...

Longitud Total: 16 bits

La Longitud Total es la longitud del datagrama, medida en octetos, incluyendo la cabecera y los datos. Este campo permite que la longitud máxima de un datagrama sea de 65,535 octetos. Los datagramas de tal longitud no son prácticos para la mayoría de hosts y redes. Todos los hosts deben estar preparados para aceptar datagramas de hasta 576 octetos (tanto si llegan completos como en fragmentos). Se recomienda que los hosts envíen datagramas mayores de 576 octetos sólo si tienen la seguridad de que el destinatario está preparado para aceptarlos.

El número 576 se ha seleccionado para permitir que un bloque de datos de tamaño razonable sea transmitido junto a la información de cabecera necesaria. Por ejemplo, este tamaño permite que un bloque de datos de 512 octetos más 64 octetos de cabecera quepa en un datagrama . La cabecera internet de tamaño máximo son 60 octetos, y una cabecera internet típica son 20 octetos, admitiendo así un margen para cabeceras de protocolos de nivel superior.

Esto es una recomendación, no una obligación, y de hecho se puede poner el valor que a uno le parezca dentro de los límites admitidos. Sin embargo, poner un valor muy alto tiene algunos inconvenientes:

Y es igual de malo poner un valor demasiado pequeño:

Atendiendo a esa recomendación del RFC-791 el valor de 'MaxMTU' debería ser '576'.

IPMTU

Windows 98 y 98SE (y supongo que M.E.) permiten ajustar un valor aparentemente equivalente a 'MaxMTU' (al que parece hacer más caso), pero que no coincide en el registro con 'MaxMTU'. Este valor se llama 'IPMTU' y se ajusta desde la siguiente ventana de configuración:

Por si tienes curiosidad:

Pequeño equivale a 576 bytes
Medio equivale a 1000 bytes
Grande equivale a 1500 bytes
Automático equivale a 576 bytes para una conexión por módem

Si lo quieres localizar en el registro, se encuentra aquí...

HKEY_LOCAL_MACHINE
    System
        CurrentControlSet
            Services
                Class
                    Net
                        00xx (donde 'xx' puede ser un valor entre 00 y 30)
                            Ndi
                                params
                                    IPMTU
                                    valor: (Predeterminado)

Nota: Localizar la rama '00xx' que corresponde al 'Adaptador de Acceso telefónico a redes'
MTU del ISP

Rizando el rizo se podría ajustar el valor de 'MaxMTU' para que coincidiera con el que usa el ISP mediante el que te conectas a Internet. En teoría esto garantizaría una conexión módem a módem óptima. La realidad es que este proceso no tiene efectos significativos sobre el rendimiento de la conexión a Internet, principalmente por estas razones:

De todas formas puede ser interesante ver como se hace, y comprobar que el tamaño de paquete que usa tu ISP es el que se usa en todo el mundo... 576 bytes.

Se hace así...

Siguiendo las instrucciones que he descrito antes sobre el valor 'IPMTU' abre las 'Propiedades del Adaptador de Acceso telefónico a redes' y pones el 'Tamaño del paquete IP' en 'Automático'. Si es necesario, reinicia Windows para que los cambios tengan efecto.

Conéctate a Internet con el procedimiento que sigues siempre.

Abre una ventana de MS-DOS y teclea...

PING -f -l <tamaño> <dirección>

donde '-f' es un parámetro que indica que el paquete no debe ser fragmentado, '-l <tamaño>' señala el tamaño del paquete de datos que quieres enviar y '<dirección>' es una dirección cualquiera de Internet, por ejemplo la página web de tu ISP (esto es lo más recomendable).

Prueba directamente con el valor '548' (576 de MTU menos 28 de cabecera) y seguramente conseguirás una lista de tiempos de respuesta o 'Tiempo de respuesta agotado'... eso es lo normal y quiere decir que ese tamaño de paquete ha sido admitido por tu ISP "sin fragmentarlo".

Ahora intenta aumentar en '1' ese valor y comprobarás como recibes una respuesta diciendo que el paquete no ha podido ser transmitido porque es necesario fragmentarlo y se ha especificado el parámetro 'DF' (la -f). Eso quiere decir que ese tamaño de paquete es mayor que el que está establecido entre tu ISP y tú máquina.

Nota: Lo que está pasando aquí realmente es que al dejar el valor de IPMTU en automático Windows está usando el valor predeterminado (576) para una conexión por módem, y al conectarnos al ISP este se está adaptando a ese valor de MTU. Una prueba más efectiva consistiría en seleccionar el valor de IPMTU más alto posible y verificar el valor real de MTU que ha aceptado el ISP. Lamentablemente esta prueba no aporta datos concluyentes ya que parece que la mayor parte de los ISP españoles se adaptan al valor IPMTU del cliente.

Para calcular el valor de 'MaxMTU' debes tener en cuenta un pequeño detalle. El valor que estás poniendo en '-l <tamaño>' indica la cantidad de datos que contiene el paquete que estás enviando, pero no se está teniendo en cuenta el tamaño de la cabecera TCP/IP que obligatoriamente debe llevar ese 'datagrama'. En este caso la cabecera es de 28 bytes, que sumados a los 548 bytes de datos nos dan los 576 bytes de 'MaxMTU'.

Nota: He comentado que la cabecera del comando PING es de 28 bytes. Esto es lo que la compone... type: 1 byte, code: 1 byte, checksum: 2 bytes, identifier: 2 bytes, sequence nº: 2 bytes, original header: 12 bytes, y 8 bytes no usados.
Nota: Estoy dando por supuesto que tu ISP utiliza un tamaño de paquete estándar de 576 bytes. Podría darse el caso de que tu ISP sea una excepción a la regla y utilice cualquier otro valor. Con estas pruebas podrás determinar cual es ese valor y hacer los ajustes pertinentes a la configuración de tu sistema.
DefaultRcvWindow

Con este valor se pretende crea un búfer para almacenar la parte de datos que contienen los paquetes (mejor dicho 'datagramas') que se reciben de Internet.

Ya hemos visto que el tamaño máximo de esos paquetes se define con 'MaxMTU'. Si a esos paquetes les quitamos la cabecera nos quedan sólo los datos que nos interesan. La pega es que la cabecera puede tener un tamaño variable que suele estar entre 20 y 60 bytes. Para poder hacer los cálculos se considera que el tamaño medio de una cabecera es de 40 bytes, y con esto se obtiene un valor que se llama 'MSS' (Maximum Segment Size):

MSS = MaxMTU - 40

Con el valor de 'MSS' resultante se calcula el valor de 'DefaultRcvWindow' multiplicándolo por el número de paquetes que se quieren almacenar en ese búfer (típicamente 4, 6, 8 o 10).

DefaultRcvWindow = MSS x búferes

Para el caso de 'MaxMTU' igual a 576 y un búfer para 8 paquetes, la cosa quedaría así:

MSS = 576 - 40 = 536

DefaultRcvWindow = 536 x 8 = 4288

DefaultTTL

Este valor determina el tiempo de vida de los paquetes en Internet. El valor está expresado en segundos, pero realmente no muestra un tiempo... la explicación está nuevamente en el RFC-791.

Tiempo de Vida: 8 bits

Este campo indica el tiempo máximo que el datagrama tiene permitido permanecer en el sistema internet. Si este campo contiene el valor cero, entonces el datagrama debe ser destruido. Este campo es modificado durante el procesamiento de la cabecera internet. El tiempo es medido en segundos, pero como todo módulo que procese un datagrama debe decrementar el TTL (Time To Live: Tiempo de Vida) al menos en uno, incluso si procesa el datagrama en menos de un segundo, se debe pensar en el TTL sólo como un límite superior del tiempo durante el cual un datagrama puede existir. La intención es hacer que los datagramas imposibles de entregar sean descartados, y limitar el máximo periodo de vida de un datagrama.

Para mi gusto el mejor valor es 64. Si un paquete no ha llegado a su destino en un minuto, o 64 saltos, lo más probable es que ya no lo consiga o que no merezca la pena esperar. Si te parece poco tendrás que saltar al siguiente valor, es decir 128.

PMTUDiscovery

El funcionamiento de 'PMTUDiscovery' (Path Maximum Transmission Unit Discovery) se define en el documento RFC-1191. La activación de este parámetro habilita un método que debería permitir a las máquina de Internet negociar el valor óptimo de 'MaxMTU' mediante el intercambio de sus respectivos valor de 'MSS' (Maximum Segment Size), o haciendo pruebas automáticas con distintos tamaños de MTU y el bit de cabecera de datagrama 'DF' (Don't Fragment).

En mis pruebas no he conseguido apreciar la diferencia de esta opción automática con el valor manual de 'MaxMTU', supongo que porque este método no está muy extendido y la mayor parte de las máquinas de Internet usan un MTU de 576 bytes.

En teoría, para activar este parámetro debes poner su valor a '1' y eliminar las claves 'MaxMTU' y 'DefaultRcvWindow'. Para desactivarlo debes poner el valor a '0'. Inexplicablemente la documentación de Microsoft dice que el valor por defecto de este parámetro es '1', lo que quiere decir que la detección automática de 'MaxMTU' está activada a la vez que el valor manual de 'MaxMTU' ¿...?.

PMTUBlackHoleDetect

La clave 'PMTUBlackHoleDetect' está relacionada con 'PMTUDiscovery'. Con esta opción se modifica el funcionamiento de 'PMTUDiscovery' para que pueda detectar routers que no envían la correspondiente notificación cuando eliminan un paquete al no poder ser fragmentado. El envío de este tipo de notificaciones está descrito en el documentos RFC-792, que trata sobre los mensajes ICMP (Internet Control Messagee Protocol). Los detalles del funcionamiento de 'PMTUDiscovery' están descritos en el documento RFC-1191.

Si activas 'PMTUDiscovery' puedes activar también este parámetro poniendo su valor a '1'. Para desactivarlo debes poner el valor a '0'.

NDICachesize

Sobre este parámetro no he encontrado ninguna explicación clara y convincente. Aparentemente el valor óptimo está en '16' y bajo ningún concepto se deben usar 32 o 64 ya que la cosa tiende a funcionar mucho peor ¿...?.

Por lo que he podido ver, este valor está relacionado con las redes Netware, y por más que busco no encuentro la relación entre esto y la conexión por módem a Internet. Otro detalle contradictorio es el lugar exacto del registro donde se debe poner ese '16'. He encontrado tres sitios diferentes, dos de ellos en documentos de Microsoft ¿...?.

Resumiendo

Por si te has perdido entre tantos datos, esto es lo que podría darte buenos resultados:

MaxMTU 576
IPMTU 576 (en la lista aparece como 'Pequeño')
DefaultRcvWindow 4288 (MSS x 8, pero puedes intentar con valores mayores)
DefaultTTL 64 (si recibes muchos errores de tiempo agotado auméntalo a 128)
PMTUDiscovery 1 (Microsoft dice que este es el valor por defecto)
PMTUBlackHoleDetect 0 (Microsoft advierte que activar este parámetro sin ser necesario puede degradar el rendimiento)
NDICacheSize 16

Recuerda reiniciar Windows después de modificar estos valores para que los cambios tengan efecto.

Nota: Si no te ves capaz de hacer los cambios manualmente puedes usar este truco de mi colección.

NOTAS FINALES

Se pueden encontrar infinidad de programas que con 'cuatro sencillos ajustes' prometen aceleraciones del 200% y del 300%... no nos engañemos, Internet es lo que es y está como está. La masificación de usuarios accediendo a la red mediante una infraestructura obsoleta no puede dar para mucho más de lo que tenemos. Eso no quita para que tengamos nuestro sistema 'afinado' lo máximo posible para poder aprovechar ese pobre ancho de banda del que disponemos la mayor parte de los mortales.

Ya he comentado que hacer todos estos ajustes es mucho más fácil que explicarlo (que me lo digan a mi). No pierdes nada por aplicar estos pequeños trucos, y comparar la calidad de la conexión antes y después de los cambios. En mis pruebas la mejoría de rendimiento a oscilado entre un 20% y un 70%. Creo que por esto bien merece la pena perder un poco de tiempo.

Toma nota de las horas de las pruebas (que no son iguales todas). Haz las pruebas siempre con los mismos servidores y no te dejes engañar por el caché de las páginas visitadas recientemente que suelen hacer los navegadores. Mantén cada configuración durante unos días para poder sacar una media de su comportamiento... y ten paciencia, afinar el acceso a Internet lleva su tiempo.

Elisoft © 07-12-2000


¿Has encontrado este documento interesante?... entonces tal vez quieras hacer una donación en agradecimiento.
¿Quieres tener una copia de este documento en los formatos MS-Word y PDF?... pues pasa por la página de descarga.




La Web de ELISOFT
Copyright © Elisoft - Septiembre 2000