Технологии

Транспорты XHTTP, gRPC и TCP: чем отличаются и что выбрать

6 мин чтения

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

Протокол и транспорт — это разные вещи

Протокол (например, VLESS) отвечает за то, как клиент представляется серверу и как шифруются данные. Транспорт — за то, в какую форму эти данные упаковываются перед отправкой. Один и тот же протокол можно везти поверх разных транспортов, и снаружи такие соединения выглядят по-разному, хотя внутри всё одинаково.

TCP — прямой и самый простой

Данные идут одним потоком поверх обычного TCP-соединения. Это самый экономный вариант: нет промежуточных слоёв, нет лишних заголовков, минимальная задержка на установку. Именно поэтому он используется по умолчанию почти везде.

Слабое место — предсказуемость. Соединение живёт долго, поток непрерывный, и его поведение довольно однообразно. Плюс чисто техническое: одно TCP-соединение на всё означает, что потеря одного пакета придерживает всю очередь целиком.

gRPC — поверх HTTP/2

Данные едут внутри gRPC-вызовов поверх HTTP/2. Снаружи это выглядит как обычный обмен современного веб-приложения с сервером. Практические плюсы: соединение мультиплексируется, промежуточные узлы и балансировщики обращаются с ним привычным образом, а восстановление после обрыва обычно проходит мягче.

Плата — накладные расходы. Заголовки HTTP/2 и обёртка gRPC добавляют байты к каждому обмену, а установка соединения занимает чуть больше времени. На быстром канале разница незаметна, на медленном мобильном — уже ощутима.

XHTTP — обмен отдельными запросами

XHTTP — более новый транспорт: вместо одного длинного потока он передаёт данные серией обычных HTTP-запросов и ответов. Главное следствие — соединение перестаёт быть непрерывным, а значит хуже описывается через «долгоживущий поток фиксированной формы».

Второе следствие практичнее: обрыв одного запроса не рушит сессию целиком, потому что следующий запрос уходит независимо. На нестабильной сети это заметно — там, где TCP-поток пришлось бы поднимать заново, XHTTP продолжает работу.

Что выбирать

  • Стабильный домашний интернет, важна максимальная скорость — TCP. Меньше всего накладных расходов.
  • Мобильная сеть, частые переключения между вышками — XHTTP или gRPC: они переживают обрывы мягче.
  • Слабое устройство или очень медленный канал — TCP: остальные варианты тратят чуть больше и процессора, и трафика.
  • Не уверены — оставьте то, что предлагает сервис по умолчанию. Транспорт должен совпадать на клиенте и сервере, произвольно поменять его в одном месте нельзя.
Транспорт задаётся на сервере и приходит в клиент вместе с подпиской. Менять его вручную в настройках клиента не нужно и обычно вредно: параметры перестанут совпадать, и соединение не установится.

Про разницу между самими протоколами — в разборе VLESS Reality против Hysteria2. Как устроено ядро, которое всё это исполняет, описано в гайде что такое VPN простыми словами.

XHTTP быстрее, чем TCP?

На хорошем канале — нет, скорее чуть медленнее из-за накладных расходов. Его преимущество не в скорости, а в устойчивости на нестабильной сети.

Можно ли переключить транспорт прямо в клиенте?

Технически поле есть, но менять его в одиночку бессмысленно: сервер ждёт конкретный транспорт, и при несовпадении соединение просто не установится.

Какой транспорт используется у меня сейчас?

Посмотрите параметры сервера в клиенте: там есть поле типа соединения — tcp, grpc или xhttp. Оно приходит из подписки.

Помогла статья?

Ответ ни к чему не обязывает и виден только нам.

Переслать статью

Пригодится тому, у кого та же проблема.

TelegramWhatsAppVK