Как работает Speedtest.net?

Как работает Speedtest.net, меряем скорость интернета

В своей работе я часто сталкиваюсь с необходимостью измерения скорости интернет подключений клиентов.
На данный момент нормально замерять скорость интернета достаточно сложно, специальными утилитами (типа iperf) можно померять пропускную способность «до узла». Можно провести тест заливкой от клиента на провайдерский FTP. НО! Клиенту нужно чтоб «скорость в мир» показало, да еще и красивый график намалевало, «а то вдруг вы чегой-то там подкрутили»…

Альтернатива, которой свято верит клиент — буржуйский сайт speedtest.net. И хотя зачастую он показывает погоду в Африке и как пройти к музею Ленина, причем одновременно, некоторое представление о толщине канала он все же предоставляет.

Сегодня мне захотелось разобраться как же работает speedtest.net?! Данный сайт меряет скорость основываясь на функционале протокола HTTP, что с одной стороны дает эпическую совместимость — софтина браузерная, все браузеры умеют HTTP, следовательно мерялка будет работать практически везде. А вот с другой — появляются грабли высокоуровневых протоколов, в данном случае на результат влияет производительность всей системы в целом с одной стороны и правильность межуровневых взаимодействий на каждой конкретной системе.

Спидтест оперирует тремя переменными: HTTP ping — измеряет задержку передачи между клиентской системой и выбранным сервером; Download и Upload — собственно меряют и показывают скорость канала на upstream и downstream.

HTTP ping посылает HTTP запрос на выбранный сервер и меряет время которое пройдет между отправкой запроса и получением ответа.

Скорость загрузки меряется по следующей процедуре:

  • Клиентский компьютер скачивает с выбранного сервера маленькие бинарные файлы. Измеряются параметры этих загрузок для определения скорости соединения.
    На основе результатов измерений определяется объем данных который будет скачиваться с сервера при реальном тесте. Целью является определение объема данных которые клиент может скачать за 10 секунд. Это считается достаточным для определения скорости канала и не занимает много времени.
  • Для каждого нового теста набор данных генерируется случайным образом, что в теории исключает влияние кэша браузера на конечный результат теста.
  • Для обеспечения корректности (в теории) результата тестовая закачка осуществляется в несколько (до четырех) потоков.
  • Контрольные пакеты прилетают клиенту до 30 раз в секунду.
  • Эти контрольные пакеты затем агрегируются в 20 сборок (каждая — 5% от общей выборки).
  • 10% сборок с смаой высокой скоростью и 30% с самой низкой отбрасываются и на результат не влияют.
  • Результат теста скорости по оставшимся сборкам усредняется и выводится как итоговая скорость канала.

Откуда берутся отбрасываемые 10 и 30 % трафика!?

Из-за использования высокоуровневого протокола (HTTP) проявляются эффекты межуровнефой буферизации и зависимость результата от загрузки процессора. Также в данном тесте имеется «время разгона» — когда закачка «набирает обороты». Поскольку время тества мало — этот разго вносит существенную долю низкоскоростного трафика в итоговый результат.

Тест на отдачу:

  • Как и в случае с тестом загрузки, вначале генерируется пакет случайных данных фиксированного размера но в этом случае уже на компьютере клиента. Этот пакет отправляется на сервер для замера скорости соединения.
  • На основании результатов этого замера определяется объем данных для тестирования скорости отдачи.
  • Затем при помощи HTTP функции POST сгенерированные пакеты данных отправляются на сервер, и замеряется скорость передачи.
  • Как и в случае с загрузкой, speedtest может использовать до четырех потоков для тестирования полосы.
  • Результаты замеров скорости передачи сортируются в порядке возрастания, затем берется половина с наивысшей скоростью, результат по данной выборке усредняется и выдается как итоговый.

С принципом работы speedtest.net теперь будем считать разобрались. Результат работы данного сервиса очень приблизительный. Его ни в коем случае нельзя использовать как 100% верный и истину в последней инстанции.

Более убедительным на мой взгляд будет результат скачивания/заливки данных на какой-нибудь быстрый публичный FTP/ А для теста скачивания прекрасно подходят торренты, тут и скачивание в несколько потоков, и полная загрузка доступной полосы, и отсутствие граблей высоких протоколов. Главное при проверке торрентами выбирать файлы с наибольшей популярностью и, соответственно с большим количеством раздающих.