Can It Survive? #1 · Контролируемый эксперимент

Как VPN-протоколы справляются с потерей пакетов

Четыре VPN-протокола между двумя серверами, пока сеть теряет 0, 1, 5 и 10 % пакетов в обе стороны. Скорость скачивания и время загрузки страницы, по три прогона.

Опубликовано 4 окт. 2026 г.Сырые данные (JSON Lines)Скрипты на GitHub
Коротко. При потерях 1 % в каждую сторону WireGuard сохранил 48 %, а OpenVPN — 28 % собственной скорости скачивания в чистой сети, тогда как VLESS Reality (97 %) и Hysteria2 (96 %) сохранили почти столько же, сколько соединение без VPN (97 %). При потерях 10 % VLESS Reality всё ещё не уступал варианту без VPN (78 % против 77 %), Hysteria2 сохранил 47 %, а два IP-туннеля — 4 %. Это один маршрут при одном наборе условий; прочитайте ограничениями, прежде чем цитировать.

Скорость скачивания при потере пакетов

Медиана 3 прогонов, как доля от собственной скорости протокола при 0 % потерь. Наведите курсор или используйте стрелки, чтобы увидеть значения.

Сырые данные

Ось 0–100 %Уровни потерь: категории

0%25%50%75%100%0 %1 %5 %10 %Потеря пакетов, в каждую сторону
Таблица данных
Сохранённая скоростьпотери 0 %потери 1 %потери 5 %потери 10 %
Без VPN100%97%88%77%
Hysteria2100%96%91%47%
VLESS Reality100%97%90%78%
WireGuard100%48%15%4%
OpenVPN (UDP)100%28%12%4%

Скорость скачивания

Мбит/с, медиана 3 прогонов; в скобках — доля от собственной скорости протокола при 0 % потерь.

Потери, в каждую сторонуБез VPNHysteria2VLESS RealityWireGuardOpenVPN (UDP)
0 %86,480,685,175,775,3
1 %83,8 (97 %)77,7 (96 %)82,9 (97 %)36,3 (48 %)20,8 (28 %)
5 %75,8 (88 %)73,6 (91 %)76,4 (90 %)11,2 (15 %)9,3 (12 %)
10 %66,3 (77 %)37,9 (47 %)66,8 (78 %)2,9 (4 %)2,9 (4 %)

Загрузка страницы, 100 КБ

Медиана в секундах по 60 запросам (по 20 за прогон). Чем меньше, тем лучше.

Потери, в каждую сторонуБез VPNHysteria2VLESS RealityWireGuardOpenVPN (UDP)
0 %0,39 с0,08 с0,48 с0,53 с0,56 с
1 %0,40 с0,15 с0,51 с0,59 с0,61 с
5 %0,52 с0,16 с0,67 с0,65 с0,72 с
10 %0,60 с0,23 с0,80 с0,90 с1,08 с

Установка

Германия ↔ Нидерланды (около 36 мс между ними), +20 мс задержки в каждую сторону, ограничение 100 Мбит/с, случайные потери в обе стороны; тестовый сайт на BBR (по умолчанию на хосте); по 3 прогона на уровень потерь в случайном порядке; загрузка страницы = 60 запросов по 100 КБ.

Два сервера Linux: один — клиент, на другом работают VPN-серверы и небольшой тестовый сайт. Плохая сеть создаётся средствами Linux tc netem на клиенте: одинаковые потери, задержка и ограничение скорости применяются в обе стороны и только к пакетам, которыми обмениваются с сервером лаборатории. Потери заданы на направление, так что по 5 % в каждую сторону — это примерно 10 % на круговом пути.

ПротоколПоверх чегоКак переносит трафик
WireGuardUDPIP-туннель: ваши собственные TCP-соединения идут внутри него от начала до конца.
OpenVPN (режим UDP)UDPIP-туннель, та же идея, что и у WireGuard.
VLESS RealityTCPПрокси: TCP завершается на VPN-сервере и пересылается по одному TCP-соединению, похожему на TLS.
Hysteria2QUIC (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 автоматически переключаются между протоколами, когда сеть ухудшается, поэтому нам важно, как переживает каждый из них. О том, что это значит для наших результатов, см. методика.