Установка
Германия ↔ Нидерланды (около 36 мс между ними), +20 мс задержки в каждую сторону, ограничение 100 Мбит/с, случайные потери в обе стороны; тестовый сайт на BBR (по умолчанию на хосте); по 3 прогона на уровень потерь в случайном порядке; загрузка страницы = 60 запросов по 100 КБ.
Два сервера Linux: один — клиент, на другом работают VPN-серверы и небольшой тестовый сайт. Плохая сеть создаётся средствами Linux tc netem на клиенте: одинаковые потери, задержка и ограничение скорости применяются в обе стороны и только к пакетам, которыми обмениваются с сервером лаборатории. Потери заданы на направление, так что по 5 % в каждую сторону — это примерно 10 % на круговом пути.
| Протокол | Поверх чего | Как переносит трафик |
|---|---|---|
| WireGuard | UDP | IP-туннель: ваши собственные TCP-соединения идут внутри него от начала до конца. |
| OpenVPN (режим UDP) | UDP | IP-туннель, та же идея, что и у WireGuard. |
| VLESS Reality | TCP | Прокси: TCP завершается на VPN-сервере и пересылается по одному TCP-соединению, похожему на TLS. |
| Hysteria2 | QUIC (UDP) | Прокси поверх QUIC с собственным управлением перегрузкой. |
| Без VPN | — | Эталон: тот же запрос без туннеля. |
Все протоколы работают со стандартными документированными настройками; специальной настройки ни у одного нет. Hysteria2 работает без подсказок о полосе пропускания (по умолчанию), и тогда использует BBR.
Что измерялось
- Скорость скачивания: один файл 64 МБ, не дольше 20 секунд, средняя скорость в Мбит/с.
- Загрузка страниц: двадцать запросов по 100 КБ за прогон, у каждого таймаут 10 секунд. Время каждой загрузки записывается, сбои подсчитываются. Это ближе к ощущению от просмотра сайтов, чем тест скорости.
- Каждый уровень потерь и протокол запускался трижды, в случайном порядке; в таблицах — медианы.
Как читать результаты
Почему IP-туннели падают так сильно. WireGuard и OpenVPN не восстанавливают потерянные пакеты; это должно делать TCP-соединение внутри туннеля, от края до края, по всему пути с потерями. VLESS Reality завершает ваше TCP-соединение на VPN-сервере, поэтому восстановление происходит на собственном TCP-соединении сервера, а Hysteria2 восстанавливает потери внутри QUIC своим управлением перегрузкой.
Почему страницы Hysteria2 загружаются так быстро. В основном потому, что QUIC держит одно соединение открытым и открывает новый поток на каждый запрос, а остальные пути на каждый запрос устанавливают новое TCP-соединение, а для VLESS Reality — ещё и новое рукопожатие Reality. Это следствие повторного использования соединения не меньше, чем обработки потерь.
Hysteria2 при 10 %. Сохранил 91 % скорости при 5 % потерь, но 47 % при 10 %, тогда как VLESS Reality сохранил 78 %. Этот прогон показывает спад, но не его причину.
Ограничения — прочитайте перед цитированием
- Тестовый сайт использовал BBR (по умолчанию на хосте). Внутри WireGuard и OpenVPN ваше TCP-соединение управляется сервером сайта, а BBR переносит случайные потери гораздо лучше, чем CUBIC — алгоритм Linux по умолчанию. Это самый благоприятный случай для TCP внутри туннеля; с CUBIC результаты туннелей могут быть ниже.
- Потери были случайными и независимыми. Реальные потери в Wi-Fi и мобильных сетях часто идут пачками, что может изменить рейтинг.
- Один маршрут, одна пара серверов. Другие расстояния, процессоры и провайдеры дают другие абсолютные значения. Сравнивайте протоколы внутри этого прогона, а не с цифрами из другой установки.
- Это не тест на цензуру. Все протоколы были пропущены. Как они ведут себя при блокировке UDP или при инспекции трафика — предмет непрерывные измерения и следующих экспериментов.
- Скорость была ограничена 100 Мбит/с намеренно, чтобы тест измерял поведение, а не загрузку процессора сервера.
Неудавшиеся прогоны
Одна загрузка OpenVPN при 1 % потерь и одна загрузка VLESS Reality при 5 % потерь не стартовали. Они засчитаны как 0 Мбит/с; при трёх прогонах на ячейку медианы не меняются. Несколько запросов страниц не прошли при 1 % и 10 %; они есть в сырых данных.
Повторите
Скрипты устанавливают серверы, применяют сетевые условия, запускают цикл измерений и подводят итоги. Нужны два сервера Linux, лучше в разных городах; полный прогон занимает около часа. Всё находится на github.com/colitu/vpn-lab (скрипты под лицензией MIT), а сырые результаты этого прогона — в results/ep01-packet-loss.jsonl.
Эксперимент измеряет, как ведут себя протоколы, а не какой VPN-провайдер лучше. Приложения Colitu автоматически переключаются между протоколами, когда сеть ухудшается, поэтому нам важно, как переживает каждый из них. О том, что это значит для наших результатов, см. методика.