Определение полосы пропускания веб-браузера

Можно ли оценить скорость загрузки и/или загрузки веб-браузеров, отслеживая обычные HTTP-запросы? В идеале веб-приложение сможет рассказать скорость клиента без каких-либо изменений и без сценариев на стороне клиента, таких как JavaScript/Java/Flash. Таким образом, даже если клиент получал доступ к службе с помощью библиотеки Curl, она все равно будет работать. Если это возможно, как? Если это невозможно, почему? Насколько точным может быть этот метод?

(Если это помогает предположить PHP/Apache, но на самом деле это вопрос, не зависящий от платформы, а также возможность оценить скорость загрузки для меня важнее.)

Ответ 1

Обзор

Вы просите, что обычно называют "пассивной" доступной шириной полосы пропускания (ABW) по пути (по сравнению с измерением одиночной ссылки ABW). Существует несколько различных методов 1 которые оценивают пропускную способность с использованием пассивного наблюдения или низкочастотные "активные" методы зондирования ABW. Однако наиболее распространенными алгоритмами, используемыми в производственных услугах, являются активные методы ABW; они наблюдают потоки пакетов из двух разных конечных точек.

Я больше всего знаком с yaz, который отправляет пакеты с одной стороны и измеряет изменение задержки на другой стороне. Методы измерения односторонней пассивной траектории ABW считаются более экспериментальными; нет твердых реализаций алгоритмов AFAIK.

Обсуждение

Проблема с запрошенной вами задачей заключается в том, что все неинтрузивные методы измерения ABW 2 зависят от времени. К сожалению, выбор времени очень сложный при работе с http...

  • Вам нужно иметь дело с реализацией кэширования объектов (например, akamai) и http proxies (которые преждевременно завершают ваш сеанс TCP и часто обманывают IP-адрес веб-сервера клиенту).
  • Вам нужно иметь дело с веб-хостами, которые могут периодически прерываться.

Наконец, активные методы ABW основаны на структурированном потоке пакетов (по размеру и времени пакета), в отличие от того, что вы видите в стандартной передаче http.

Резюме

Таким образом, если вы не настроили выделенный клиент/сервер/протокол только для измерения ABW, я думаю, что вы будете разочарованы результатами. Вы можете сохранить свои соединения сокетов ABW на TCP/80, но инструменты, которые я видел, не будут использовать http 3.

От редакции: Мой оригинальный ответ показал, что ABW с http возможно. На дальнейших размышлениях я передумал.


END-ПРИМЕЧАНИЯ:

  • См. Архив Sally Floyd для сквозных средств оценки пропускной способности TCP/IP
  • Наиболее распространенные навязчивые методы (такие как speedtest.net) используют флэш-или java-апплет в браузере для отправки и получения 3-5 параллельных потоков TCP для каждой конечной точки в течение 20-30 секунд. Добавьте среднюю пропускную способность потоков (не включая потерянные пакеты, требующие повторной передачи) со временем, и вы получите этот путь tx и rx ABW. Это, очевидно, довольно разрушительно для VoIP-звонков или любых загрузок. Разрушающие издевательства называются объемной пропускной способностью (BTC). См. RFC 3148: Рамки для определения показателей эмпирической емкости пропускной способности. Измерения BTC часто используют HTTP, но BTC, похоже, не то, что вам нужно.
  • Это хорошо, поскольку он устраняет риск встроенного кэширования, отрицая, что http кэширует объект для кэширования; хотя некоторые инструменты (например, yaz) являются udp-only.

Ответ 2

Из-за способ подключения TCP к доступной полосе пропускания, это невозможно. Запросы небольшие и обычно помещаются в один или два пакета. Вам понадобится не менее десятка полноразмерных пакетов, чтобы получить даже приблизительную оценку полосы пропускания, поскольку TCP сначала должен масштабироваться до доступной полосы пропускания ( "медленный запуск TCP" ), и вам нужно усреднить эффекты дрожания. Если вы хотите какой-либо точности, вы, вероятно, говорите, что требуется сотни пакетов. Поэтому сценарии оценки скорости загрузки обычно передают несколько мегабайт данных.

OTOH, вы можете оценить задержку в оба конца от трехстороннего рукопожатия и время отсчета. Но скорость загрузки имеет как минимум такое же влияние, как скорость загрузки.

Ответ 3

Нет поддержки в javascript или любом компоненте браузера для измерения производительности загрузки.

Единственный способ, которым я могу думать, - это загрузить загрузчик страницы /http, и страница получает входящие байты, он может измерять количество байтов, которое он получает в секунду. Затем сохраните это в словаре приложений широкого применения с идентификатором сеанса.

Затем из браузера вы можете периодически опросить сервер, чтобы получить значение в словаре, используя идентификатор сеанса, и показать его пользователю. Таким образом вы можете определить скорость загрузки.

Ответ 4

Вы можете использовать AJAXOMeter, библиотеку JavaScript, которая повышает скорость загрузки и загрузки. Здесь вы можете увидеть живое демо здесь.

Ответ 5

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