16 KiB
Инструкция по использованию скрипта замера скорости интернета
Описание
speed_test.sh — это bash-скрипт для измерения скорости интернет-соединения путём последовательной загрузки файла с указанного URL.
Требования
Скрипт использует стандартные утилиты, которые обычно предустановлены в большинстве Unix-подобных систем:
bash— командная оболочкаcurl— утилита для загрузки данных по URLbc— калькулятор для вычислений с плавающей точкойawk,seq— стандартные утилиты
Установка зависимостей (если требуется)
- Ubuntu/Debian:
sudo apt-get install curl bc - macOS:
brew install curl bc - CentOS/RHEL:
sudo yum install curl bc - Fedora/RHEL:
sudo dnf install curl bc - Windows (через WSL):
sudo apt-get install curl bc
Использование
Базовое использование
bash speed_test.sh [ОПЦИИ] <URL>
Где <URL> — адрес файла для загрузки (например, большая картинка или другой файл).
Опции
-n, --count NUM— Количество запросов для тестирования (по умолчанию: 10)-q, --quiet— Тихий режим: выводит только скорость в МБ/с (без единиц измерения, просто число)-g, --gzip— Разрешить HTTP-сжатие (gzip/deflate) для измерения эффективной скорости-c, --no-color— Отключить цветной вывод (по умолчанию цвета включены)-h, --help— Показать справку по использованию
Режимы измерения
По умолчанию (без -g): Реальная скорость канала
Измеряет реальную пропускную способность интернет-канала:
- Отключает HTTP-сжатие (gzip/deflate)
- Показывает, сколько байт реально передаётся по сети
- Используйте для: тестирования скорости провайдера, VPN, выбора быстрого сервера
С опцией -g: Эффективная скорость
Измеряет эффективную скорость передачи данных:
- Разрешает серверу использовать HTTP-сжатие
- Показывает, сколько полезных данных получено (после распаковки)
- Может быть в 2-10 раз выше для текстовых данных (HTML, JSON, CSS)
- Используйте для: оценки производительности веб-приложений, API
Тихий режим особенно полезен для использования в других скриптах, где нужно получить только результат без дополнительного форматирования.
Примеры
Тест с использованием готового тестового файла selectel.ru (Санкт-Петербург):
./speed_test.sh https://speedtest.selectel.ru/10MB
Там же есть файлы других размеров, например:
- 100MB:
https://speedtest.selectel.ru/100MB - 1GB:
https://speedtest.selectel.ru/1GB - 10GB:
https://speedtest.selectel.ru/10GB
Как работает скрипт
- Проверка аргументов: Скрипт проверяет, что передан URL для тестирования
- Серия запросов: Выполняется 10 последовательных HTTP-запросов к указанному URL
- Замер параметров: Для каждого запроса измеряется:
- Время выполнения (в секундах)
- Объём скачанных данных (в байтах)
- Скорость загрузки (в МБ/с)
- Вычисление средних значений: После завершения всех запросов вычисляются:
- Среднее время запроса
- Общий и средний объём данных
- Средняя скорость интернет-соединения в МБ/с
Вывод скрипта
Обычный режим
Скрипт выводит:
- Цветной заголовок (можно отключить через
--no-color) - Информацию о каждом отдельном запросе с ✓ зелёной галочкой (время, объём, скорость)
- Итоговую статистику:
- Количество выполненных запросов
- Общее и среднее время
- Общий и средний объём данных
- Среднюю скорость в МБ/с
Тихий режим (-q или --quiet)
В тихом режиме скрипт выводит только одно число — среднюю скорость в МБ/с без единиц измерения.
Это полезно для:
- Использования результата в других скриптах.
- Автоматизации тестирования.
- Сравнения разных серверов, CDN и VPN-подключений.
- Логирования результатов.
Пример:
$ ./speed_test.sh -q -n 2 https://speedtest.selectel.ru/10MB
2.40
Пример вывода
==============================================
Замер скорости интернета
==============================================
URL: http://speedtest.ftp.otenet.gr/files/test10Mb.db
Количество запросов: 10
==============================================
Запрос 1/10... OK (11.039670s, 10.00 МБ, .90 МБ/с)
Запрос 2/10... OK (127.344702s, 10.00 МБ, .07 МБ/с)
...
Запрос 10/10... OK (3.832720s, 10.00 МБ, 2.60 МБ/с)
==============================================
Результаты измерения
==============================================
Выполнено запросов: 10
Общее время: 192.026102 сек
Среднее время запроса: 19.2026 сек
Общий объём данных: 100.00 МБ
Средний объём на запрос: 10.00 МБ
==============================================
СРЕДНЯЯ СКОРОСТЬ: .52 МБ/с
==============================================
Рекомендации по выбору URL для тестирования
Для точного измерения скорости интернета рекомендуется:
-
Размер файла: Используйте файлы размером от 5 МБ до 100 МБ
- Слишком маленькие файлы (< 1 МБ) дадут неточные результаты
- Слишком большие файлы (> 100 МБ) увеличат время тестирования
-
Стабильный сервер: Выбирайте серверы с хорошей пропускной способностью
- Speedtest-серверы
- CDN-сервисы (Cloudflare, Akamai)
- Известные хостинги изображений
-
Географическая близость: Для более точных результатов выбирайте серверы в вашем регионе
Рекомендуемые тестовые файлы
Selectel Speedtest (Россия):
# 10 МБ файл (быстро, хорошо для частых тестов)
./speed_test.sh -n 5 https://speedtest.selectel.ru/10MB
# 100 МБ файл (рекомендуется для точных измерений)
./speed_test.sh https://speedtest.selectel.ru/100MB
# 1000 МБ (1 ГБ) файл (для очень стабильных каналов)
./speed_test.sh -n 3 https://speedtest.selectel.ru/1000MB
Примечание: Для больших файлов (100 МБ+) рекомендуется использовать меньшее количество запросов (2-5) для экономии времени и трафика.
Устранение неполадок
Ошибка: "curl: command not found"
Решение: Установите curl (см. раздел "Установка зависимостей")
Ошибка: "bc: command not found"
Решение: Установите bc (см. раздел "Установка зависимостей")
Ошибка: "Не удалось выполнить запрос"
Возможные причины:
- Неверный или недоступный URL
- Отсутствие интернет-соединения
- Сервер не отвечает или перегружен
- Файл был удалён
Решение: Проверьте URL и подключение к интернету
Очень низкая скорость
Возможные причины:
- Медленный сервер источника
- Проблемы с вашим интернет-соединением
- Высокая загрузка сети
Решение: Попробуйте другой URL или проверьте соединение
Технические детали
Единицы измерения
- МБ (мегабайт) = 1 048 576 байт (1024 × 1024)
- Скрипт измеряет скорость в МБ/с (мегабайтах в секунду)
- Это отличается от Мбит/с (мегабит в секунду), которые часто используют провайдеры
- Конверсия: 1 МБ/с ≈ 8 Мбит/с
Метод расчёта
Средняя скорость вычисляется как:
Средняя скорость = (Общий объём данных в МБ) / (Общее время в секундах)
Этот метод даёт более точную картину реальной пропускной способности при последовательных запросах.
Защита от искажения результатов и режимы измерения
Проблема с HTTP-сжатием: Многие веб-серверы используют gzip/deflate сжатие для экономии трафика. Это создаёт две разные метрики скорости:
- Реальная скорость канала — сколько байт фактически передаётся по сети
- Эффективная скорость — сколько полезных данных получено после распаковки
Режим по умолчанию: Реальная скорость канала
Без опции -g скрипт измеряет реальную пропускную способность вашего интернет-канала:
- Что делает: Добавляет HTTP-заголовок
Accept-Encoding: identity - Эффект: Запрещает серверу отправлять сжатые данные
- Измеряет: Реальный объём байт, переданных по сети
- Используйте для:
- Тестирования скорости интернет-провайдера
- Сравнения VPN-серверов
- Выбора быстрого CDN или зеркала
- Диагностики проблем с каналом
Пример:
./speed_test.sh -n 5 https://speedtest.selectel.ru/10MB
# Результат: 2.5 МБ/с — реальная скорость вашего канала
Режим с опцией -g: Эффективная скорость
С опцией -g скрипт измеряет эффективную скорость передачи данных:
- Что делает: Разрешает серверу использовать gzip/deflate сжатие
- Эффект: Сервер сжимает данные перед отправкой, браузер распаковывает
- Измеряет: Объём полезных данных после распаковки
- Может быть выше в 2-10 раз для текстовых файлов (HTML, JSON, CSS, JS)
- Используйте для:
- Оценки производительности веб-приложений
- Тестирования API с JSON-ответами
- Понимания реальной скорости работы сайтов
Пример:
./speed_test.sh -g -n 5 https://www.wikipedia.org/
# Результат: 15.0 МБ/с — эффективная скорость с учётом сжатия
# (реальный канал 2.5 МБ/с, но благодаря gzip получили данных в 6 раз больше)
Сравнение режимов
Файл compare_modes.sh демонстрирует разницу:
./compare_modes.sh https://example.com/
Типичные результаты:
- Бинарные файлы (изображения, видео, архивы): разницы почти нет
- Текстовые данные (HTML, JSON, XML): эффективная скорость в 3-10 раз выше
- Speedtest-файлы (специально не сжимаются): режимы дают одинаковый результат
Вывод: Используйте режим по умолчанию для честного замера скорости интернета. Используйте -g для оценки реальной производительности веб-приложений.
Модификация скрипта
Вы можете легко изменить параметры в начале скрипта:
# Изменить количество запросов (по умолчанию 10)
NUM_REQUESTS=20
# Добавить таймаут для curl (например, 30 секунд)
curl --max-time 30 -s -o /dev/null ...
# Использовать другой метод HTTP (по умолчанию GET)
curl -X POST ...
Использование в автоматизации
Пример: Поиск лучшего сервера
В проекте включён пример скрипта compare_servers.sh, который показывает, как использовать тихий режим для сравнения скорости разных серверов:
./compare_servers.sh
Этот скрипт:
- Тестирует список серверов
- Использует
speed_test.sh -qдля получения скорости каждого - Находит и выводит самый быстрый сервер
Вы можете адаптировать этот пример для:
- Выбора лучшего VPN-сервера
- Тестирования разных CDN
- Мониторинга скорости интернета по расписанию
- Логирования производительности сети
Лицензия
Скрипт предоставляется "как есть" для образовательных целей.
Автор: Sergei Erjemin (+Claude Haiku 4.5 через CoPilot)
Создано как решение тестового задания для вакансии "Python-разработчик" в "Интерактивное агентство 'Это Легко'".