Resumen
Youtube tiene servidores de video en muchas ciudades del mundo. En teoría uno tendría que poder descargar videos de cualquiera de estos servidores sin notar un cambio significativo en la velocidad. El problema de velocidad que tiene Youtube con varios proveedores de internet en Argentina (Arnet y otros) se debe a que sólo se puede descargar a velocidades razonables de servidores de unas pocas ciudades y a veces de una ciudad sola. La razón de esto es desconocida, pero personalmente sospecho de los proveedores de internet argentinos. A continuación se describe el problema junto con una "solución" temporal para usuarios avanzados que consiste en forzar la descarga desde un servidor de nuestra preferencia.

Síntomas
• Baja muy lento durante horas pico (30 KB/s o menos) mejorando a la madrugada
• A veces si le das a F5 varias veces empieza a bajar rápido

Lo que hace la "solución":
• Permite bajar a velocidades razonables durante horas picos para que no se pare el video.
• Para poder ver el video hay que cargar la página dos veces, por lo que no es una solución permanente. Además es para usuarios avanzados
Lo que NO hace la "solución":
• Si tenés una conexión de 10Mb los videos no te van a bajar a esa velocidad. Esto se debe a que para la mayoría de los videos Youtube solamente te permite bajar a la velocidad necesaria para que no se pare y nada más. Esto es igual en todo el mundo y hasta donde sé no hay forma de forzar una mayor velocidad.
• Si tenés una conexión de 56Kb no vas poder mágicamente aumentar la velocidad. Se supone que tu servicio de internet tiene un ancho de banda suficiente para ver los videos.

1. El problema (se puede saltear, ir a la parte 2 si no te interesa)

Tengo Arnet 1Mb y desde principios de este año tengo problemas de velocidad con Youtube y no soy el único. Controlé con varios amigos que tienen Arnet y a todos les pasaba lo mismo. Al principio pensé que era algún problema de Youtube causado por la gran cantidad de datos que tienen que mover y no le di mucha importancia, pero después de varias semanas me dí cuenta que había algo raro. Hace unos días me puse a investigar para tratar de determinar qué estaba causando el problema y ver si podía hacer algo al respecto.

Lo que descubrí es que Youtube está formado por una gran cantidad de servidores distribuidos en varias ciudades del mundo que están dedicados a servir los archivos de video. La carga monumental de datos se balancea entre todos estos servidores mediante un mecanismo complejo que incluye redirecciones entre varias capas de cache y DNS anycast que devuelven un IP diferente de acuerdo al lugar en el mundo donde estés. Por ejemplo el dominio del servidor v24.lscache3.c.youtube.com resuelve al IP 74.125.2.39 en Argentina y 173.194.8.18 en EEUU.

Algo que noté después de un tiempo de inspeccionar el tráfico de datos es que la mayoría de las veces bajaba lento pero había algunas veces que bajaba mucho más rápido cuando el video se bajaba de ciertos servidores. Entonces si podía hacer que siempre bajara de estos servidores el problema estaría solucionado. Además quería probar si este problema de velocidad existía solamente en Argentina o si era global.

Para eso lo único que hacía falta era bajar algún video usando proxys extranjeros. Pero había un problema: si bajaba un video con proxy cómo podía saber de qué servidor se estaba bajando? Si bajaba un video de v24.lscache3.c.youtube.com que iba lento sin usar proxy y rápido usando un proxy de EEUU a lo mejor era porque el servidor en 74.125.2.39 estaba lento y el servidor en 173.194.8.18 funcionaba bien. Tenía que encontrar la manera de hacer que siempre bajara del mismo servidor sin importar de qué parte del mundo se estuviera bajando.

Por suerte además de tener los dominios anycast Youtube tiene una serie de dominios unicast que resuelven siempre a la misma IP sin importar en qué parte del planeta estés. Estos dominios tienen el siguiente formato:

r[1-24].ciudad[01-16][s,g,t][00-16].c.youtube.com

donde 'ciudad' es un código de tres letras que representa la ciudad en donde se encuentra el servidor. Por ejemplo:

r6.bom03s03.c.youtube.com        bom = Bombay?
r6.hkg03s05.c.youtube.com         hkg = Hong Kong?
r6.syd05s01.c.youtube.com         syd = Sydney?

Ahora que tenía una forma de descargar desde un servidor específico podía empezar a hacer algunas pruebas. Los resultados demostraron mis sospechas de que había gato encerrado.

Tabla de verdad
Para la prueba descargué un video específico el domingo durante la hora pico con y sin proxy de servidores que Youtube tiene en varias ciudades. Las velocidades de descarga variaron entre Buena (90KB/s o más), Regular (entre 90KB/s y 40KB/s) y Mala (40KB/s o menos). También hubo algunos casos donde no se pudo descargar el archivo por alguna razón desconocida.

"Solución" para Youtube lento con Arnet y otros


Acá queda demostrado claramente la verdad de lo que está pasando en Argentina con algunos proveedores de internet. Mientras que en la mayoría del mundo se puede bajar a alta velocidad desde cualquier servidor, en Argentina las personas con ciertos proveedores sólo pueden bajar bien desde un grupo limitado de servidores. Se destacan los clientes de Arnet y Prima como los más afectados por este problema.

NUQ quiero más este servidor
El problema que veo con Arnet es que Youtube me asigna principalmente servidores de tres ciudades: NUQ, LAX Y EZE. Como se puede ver en la tabla anterior el único que funciona correctamente es EZE (aunque NUQ y LAX pueden funcionar bien en algunos horarios), pero Youtube no ofrece alguna forma de hacer que baje siempre de esa ciudad. Esto también explica por qué a veces empieza a bajar rápido si le damos varias veces al F5: es porque Youtube esta vez nos asignó el servidor rápido.

EZE es mi amigo
Nuestro objetivo está claro ahora. Tenemos que hacer que nuestro navegador descargue los videos de una ciudad específica. En mi caso particular es EZE, pero tu servidor rápido puede variar dependiendo del proveedor que tengas y dónde vivas. Algo que noté es que los servidores EZE tienen un ping de 40ms lo que quiere decir que deben estar en Argentina. ¿Qué ciudad es EZE?
(actualización: me informaron que EZE puede ser Ezeiza)

Algunos tienen coronita
Como nota aparte quiero mencionar que además de estos servidores comunes Youtube tiene desplegados algunos servidores exclusivos para proveedores de internet específicos. Esto hace que los clientes de estos proveedores disfruten de una velocidad muy buena para la descarga de videos. Por ejemplo he visto los siguientes servidores:

o-o.preferred.cablevision-eze1.v7.lscache2.c.youtube.com (Cablevisión)
o-o.preferred.cabase-eze1.v7.lscache2.c.youtube.com (Cabase)
o-o.preferred.tiws-mia1.v9.lscache6.c.youtube.com (Telefónica)

Esto podría explicar por qué los clientes de algunos proveedores no sufren lo mismo que nosotros. Hasta donde sé Arnet no tiene uno de estos servidores.

2. La solución
Youtube solamente baja rápido desde los servidores que están en ciertas ciudades. La solución consiste en hacer que el navegador baje de un servidor de Youtube en una de estas ciudades. Como se mencionó antes los dominios de los servidores tienen este formato:

r[1-24].ciudad[01-16][s,g,t][00-16].c.youtube.com

donde 'ciudad' es un código de tres letras que representa la ciudad en donde se encuentra el servidor. No te puedo decir qué ciudad te conviene así que vas a tener que probar hasta que encuentres uno que funcione bien. En mi caso con Arnet tengo que elegir un servidor en la ciudad EZE.
Estos son algunos servidores de ejemplo de varias ciudades que funcionan:

r6.ams03s13.c.youtube.com r6.arn02s01.c.youtube.com r8.atl14s03.c.youtube.com r6.ber01s04.c.youtube.com r6.bom03s03.c.youtube.com r7.bru02t11.c.youtube.com r6.bud01s03.c.youtube.com r7.cbf01t01.c.youtube.com r5.dfw06s12.c.youtube.com r11.eze03s03.c.youtube.com r5.fra02s03.c.youtube.com r6.gru03s10.c.youtube.com r1.ham02s03.c.youtube.com r6.hkg03s05.c.youtube.com r6.iad09s14.c.youtube.com r17.kul06s01.c.youtube.com r6.lax02s05.c.youtube.com r6.lga15g01.c.youtube.com r6.lhr14s07.c.youtube.com r6.maa03s08.c.youtube.com r6.mad01s10.c.youtube.com r6.mia05s03.c.youtube.com r1.mil01s08.c.youtube.com r6.mrs02s06.c.youtube.com r6.nrt05s09.c.youtube.com r7.nuq04t13.c.youtube.com r6.ord12s14.c.youtube.com r6.par08s05.c.youtube.com r7.prg01s02.c.youtube.com r6.sea09s07.c.youtube.com r6.sin01s07.c.youtube.com r17.sjc07s15.c.youtube.com r6.syd05s01.c.youtube.com r6.tpe05s07.c.youtube.com r6.yyz08s01.c.youtube.com

Subí una lista más completa en https://gist.github.com/2886040 con todos los servidores que pude encontrar.
Nota 1: en esta lista no todos los servidores funcionan. Hay que probarlos.
Nota 2: cuando pruebes los servidores lo que importa es la última parte (lo que viene después de r[1-24]. Por ejemplo si r1.ams04s07.c.youtube.com no funciona entonces r2.ams04s07.c.youtube.com tampoco va a funcionar, pero r1.ams03s08.c.youtube.com a lo mejor sí.

Para forzar un servidor vamos a usar un programa llamada Privoxy que se puede descargar de la página http://www.privoxy.org/. Es un programa gratuito que está disponible para Windows, Linux y Mac. Yo estoy usando la versión 3.0.19 para Windows, pero cualquier versión más nueva debería funcionar también.

Una vez que el programa está instalado lo ejecutamos y vamos a Options->Edit Default Actions:

problema


Esto nos va a abrir un editor de texto con la configuración por defecto. Lo que vamos a hacer es borrar todo y guardar el archivo vacío. Esto es porque Privoxy hace un montón de cosas como bloquear propagandas y scripts de seguimiento. Si no te molesta esto entonces no borres nada.

Después vamos a Options->Edit User Filters:

arnet


Otra vez se abre un editor de texto. Borramos todo lo que haya en el archivo y después pegamos este texto:

https://gist.github.com/3148030 (entrar al link para ver el texto)

Ahora hay que reemplazar COD_CIUDAD (ojo! está dos veces) por el código de tres letras de la ciudad y SERVIDOR por el dominio del servidor que elegimos. Por ejemplo si elegimos r11.eze03s03.c.youtube.com el texto quedaría así:

https://gist.github.com/3148033 (entrar al link para ver el texto)

Después guardamos el archivo y lo cerramos. Ahora vamos a editar el último archivo yendo a Options->Edit User Actions:

youtube


Otra vez se abre el editor. Borramos todo lo que haya en el archivo y después pegamos este texto:

https://gist.github.com/2886352 (entrar al link para ver el texto)

Ahora hay que reemplazar SERVIDOR por el dominio del servidor que elegimos como hicimos antes. Siguiendo con el ejemplo anterior nuestro texto quedaría así:

https://gist.github.com/2886361 (entrar al link para ver el texto)

Guardamos el archivo y lo cerramos. Privoxy ya quedó configurado. Solamente falta hacer que el navegador use nuestro proxy en el IP 127.0.0.1 y puerto 8118. Esto depende de qué navegador y sistema operativo uses, acá van algunos ejemplos:

ADVERTENCIA: una vez que configures el navegador solamente podrás navegar en internet cuando el programa Privoxy esté arrancado. Para volver a la normalidad hay que deshacer la siguiente configuración.

Firefox:

internet

lento


Chrome:
"Solución" para Youtube lento con Arnet y otros

problema

arnet

youtube


Opera:

internet

lento


Ahora ya estamos listos para navegar, pero hay un problema...

Hay un problema
Si entramos a la página de un video de Youtube la primera vez el video no va a cargar. Para ver el video hay que volver a cargar la página con F5. Esto se debe a que la primera vez que le pedimos el video el servidor no lo tiene (porque es un servidor cache). Cuando se lo pedimos por segunda vez el servidor ya consiguió el video para poder descargarlo. Si alguien descubre cómo hacer para no tener que cargar la página dos veces que avise.

Deshabilitando Privoxy
Si querés deshabilitar temporalmente Privoxy se puede hacer desde Options->Enable:

"Solución" para Youtube lento con Arnet y otros


Esto te permite comparar la velocidad de descarga cuando la solución está activada y cuando está desactivada. Por ejemplo, cuando está desactivada esta es la velocidad de descarga en mi computadora:

problema


Y cuando está activada esta es la velocidad que obtengo para el mismo video:

arnet


3. Notas finales
Está claro que hay algo raro con Youtube en Argentina. Mientras que en otras partes del mundo se puede descargar desde la mayoría de los servidores sin problemas en Argentina sólo se pueden usar unos pocos servidores de algunas ciudades. Es como si Youtube o los proveedores de internet estuvieran haciendo la conexión más lenta intencionalmente. Personalmente sospecho de los proveedores. En el caso de Arnet, si estuviera reduciendo los costos por el tráfico hacia afuera del país eso explicaría por qué sólo funciona bien el servidor que se encuentra en Argentina.

Agradecimiento
Mucha de la información necesaria para mi investigación está sacada del paper How Do You “Tube”? de la universidad de Minnesota. Es un estudio muy bueno de la estructura de la red de Youtube y lo recomiendo si te interesan este tipo de cosas.


No se olviden de comentar!