Технологии
Транспорты XHTTP, gRPC и TCP: чем отличаются и что выбрать
В настройках современных клиентов рядом с протоколом всегда стоит второй параметр — транспорт. Его часто оставляют по умолчанию, хотя на практике он влияет и на скорость, и на устойчивость соединения не меньше самого протокола. Разбираем три варианта, которые встречаются чаще всего.
Протокол и транспорт — это разные вещи
Протокол (например, 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. Оно приходит из подписки.
Помогла статья?
Ответ ни к чему не обязывает и виден только нам.