Thursday, March 13, 2014

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


Speedtest.net действует полностью через HTTP для максимальной совместимости. 
Это тесты ping (задержка), измерения скорости download и upload.

Тест Ping


1. Во время этого теста посылается HTTP запрос к выбраному серверу и измеряет время которое требуется для получения ответа.

Тест скорости Download



1. Клиентский компьютер скачивает маленькие бинарные файлы с сервера и измеряется скорсоть скачивани, что бы оценить скорость соединения.
2. Базируясь на этом результате, выбирается объем данных который будет скачивается во время реального теста. Целью есть определение правильного количества данных которые может быть скачано за 10 секунд. Это считается достаточно для определения скорости канала и не занимает много времени.
3. Для предотвращения кеширования браузером полученных бинарных файлов, файлы наполняются случайно сгенерироваными данными.
4. Во время теста используется до четырех HTTP потоков, этого достаточно для насыщения  соединения, что в теории обеспечивает более-менее точное измерение.
5. Контрольные пакеты, клиент получает до 30 раз в секунду.
6. Эти контрольные пакеты затем агрегируются в 20 частей (каждая из которых содержит 5% образцов от общей выборки)
7. 10% частей с самой большой скоростью и 30% частей с саммой медленной скоростью удаляются, почему это делается будет объяснено более подробноя далее.
8. Оставышиеся части усредняются и выводится финальный результат, который считается итоговой скоростью.

Так как измеряется транспортирование данных через HTTP (через flash), проявляются следующие факторы которые могут оказать влияние на скорость: проявляется влияние межуровневой буферизации (см. сетевая модель OSI), также пропускная способность зависит от возможных сторонних прерываний, которые получает процессор во время теста. Эти факторы приводят к необходимости отбрасывания первых 10% и последних 10% результатов как те котрые подверглись вмешательству.

Поскольку тесты достаточно коротки, это сделано для удобства использования сервисом Speedtest.net, существует такое влияние как "время разгона", в это время закачка "набирает обороты", а поскольку время теста мало - этот разгон вносит существенную долю низко-скоростнного трафика в итоговый результат, что вызвало необходимость отбросить других наименьших 20% результатов измерений.

Upload тест


1. Маленькое количество случайных данных генерируется в клиенте и пересылается на web сервер для оценки скорости соединения.
2. Базируясь на этом результате, выбирается необходимый размере частей, который будет случайно сгенерирован для проведения теста upload.
3. После чего по HTTP с помощью функционала POST сгенерированые пакеты данных отправляются на сервер, и таким образом измеряется скорость upload
4. Во время upload теста используется до четырех HTTP потоков.
5. Части сортируются по скорости, быстрая половина результато усредняется и выдается как итоговый результат.

Определение количества потоков.


Speedtest.net использует четыре HTTP потока для тестов download и upload. Больше чем два потока нужны для точного измерения скорости так как минимизирует эфект от HTTP задержек на низкоскоростных соединениях. После предварительного теста, если скорость соединения меньше 4 Mb/s, Speedtest.net будет использовать четыре поток, в противном случае, потоков останется два.

Однако есть препятствие на старых браузерах: на Interner Explorer 7, Firefox 2 и ранее. Эти браузеры строго придерживаются спецификациям HTTP, работая только в два потока на один host. И так как необходимо измерять скорость в четыре потока, то старые браузеры должны открыть трети и четвертый URL, который ссылается на тот же сервер. Таким образом, можно обойти ограничения старых браузеров и измерять скорость соединения на низко-скоростных линиях. Но иногда во время взаимодействия с старыми браузерами происходят сбои и два дополнительных потока не формируются. 

Все таки необходимо отметит, что большинство хостов работают в два потока, но если тестирование происходит на старых браузера то Speedtest.net может получить ограничен в два потока в связи с некорректным взаимодействием со старыми браузерами. Это одна из причин, почему мы рекомендуем, чтобы все посетители использовали актуальные браузеры.