Te voy a explicar un poco como funciona internamente SpeedTest (sin revelar nada de rutinas internas). Lo primero de todo, speedtest tiene una base de datos de servidores con ficheros para poder realizar el test de velocidad. Esta base de datos se puede descargar de este enlace.
Si tenéis curiosidad de donde demonios he sacado esa lista de servidores, haciendo una simple búsqueda en Google con la frase "speedtest server list" (sin las comillas) muestra como primer resultado esa URL.
Esa URL devuelve un fichero XML que no es ni más ni menos que la base de datos de servidores mundial de speedtest. Cada linea representada por server url, es un servidor desde donde se puede realizar un test de velocidad. Como verás también en la base de datos, cada test está geoposicionado, de forma que cuando tu entras a speedtest, la propia página geoposiciona tu IP y busca los servidores que estén más cerca de tu IP (si tu ISP está listado también lo muestra y es el primero que se pone en la lista).
Ahora bien, tener una lista de servidores no nos sirve de nada sin datos que poder descargar para hacer el test. Esos datos provienen de los ficheros almacenados en dichos servidores. ¿Y cuales son? Pues es curioso, porque son imágenes de puntos aleatorios de unas determinadas dimensiones y archivos de texto enormes.
No se deberían ver esos archivos pero, en algún servidor si es posible ver los archivos a los cuales se accede. Un ejemplo es el de este servidor.
Como veis hay varios archivos JPG y TXT. Los archivos JPG se utilizarán probablemente para medir velocidades menores ya que los archivos grandes que pueden medir una velocidad de conexión grande (de 100 Mbps en adelante) serán probablemente los TXT (El JPG más grande es de 30 MB mientras que el TXT más grande es de 858 MB suficiente para medir cualquier conexión doméstica actual).
Bueno, pues teniendo el servidor y los archivos, únicamente queda medir el ping (es lo primero que mide speedtest) y luego la descarga y subida desde y hacia ese servidor. Los archivos de descarga ya los tenemos (en el párrafo anterior) y nos quedaría la subida, que sería generar un buffer en el cliente y desde ahí lanzarlo en bucle hacia el servidor del test de forma que mida la velocidad de subida.
A grandes rasgos, y sin desvelar rutinas internas de speedtest, esa es la forma en que se realizan los test de velocidad de speedtest. No es ningún misterio ya que se sabía de sobra que tienen un montón de servidores a nivel mundial y sólo quedaba saber como podían hacerlo (que visto lo visto, era lo previsible).
Un saludo 😊
PD: Todo lo que pongo en este hilo es accesible mediante URL's públicas y de acceso público, por lo que por si acaso alguien se lo pregunta, no estoy vulnerando nada (en todo caso, el orgullo de algún administrador de red, que se ha dejado algo abierto cuando debería estar cerrado, y que supongo que se cerrará en breve 😋).