Технологии
Транспорты VLESS: XHTTP, gRPC и TCP — чем отличаются и что выбрать
В настройках современных клиентов рядом с протоколом всегда стоит второй параметр — транспорт. Его часто оставляют по умолчанию, хотя на практике он влияет и на скорость, и на устойчивость соединения не меньше самого протокола. Разбираем три варианта, которые встречаются чаще всего.
Протокол и транспорт — это разные вещи
Протокол (например, VLESS) отвечает за то, как клиент представляется серверу и как шифруются данные. Транспорт — за то, в какую форму эти данные упаковываются перед отправкой. Один и тот же протокол можно везти поверх разных транспортов, и снаружи такие соединения выглядят по-разному, хотя внутри всё одинаково.
TCP — прямой и самый простой
Данные идут одним потоком поверх обычного TCP-соединения. Это самый экономный вариант: нет промежуточных слоёв, нет лишних заголовков, минимальная задержка на установку. Именно поэтому он используется по умолчанию почти везде.
Слабое место — предсказуемость. Соединение живёт долго, поток непрерывный, и его поведение довольно однообразно. Плюс чисто техническое: одно TCP-соединение на всё означает, что потеря одного пакета придерживает всю очередь целиком.
gRPC — поверх HTTP/2
Данные едут внутри gRPC-вызовов поверх HTTP/2. Снаружи это выглядит как обычный обмен современного веб-приложения с сервером. Практические плюсы: соединение мультиплексируется, промежуточные узлы и балансировщики обращаются с ним привычным образом, а восстановление после обрыва обычно проходит мягче.
Плата — накладные расходы. Заголовки HTTP/2 и обёртка gRPC добавляют байты к каждому обмену, а установка соединения занимает чуть больше времени. На быстром канале разница незаметна, на медленном мобильном — уже ощутима.
XHTTP — соединение в виде HTTP-запросов
XHTTP — более новый транспорт ядра Xray: он упаковывает соединение в обычные HTTP-запросы и ответы, а в связке с REALITY они идут внутри того же TLS, что и у сайта-прикрытия. Для сети это похоже на обмен браузера с сайтом, а не на сплошной поток одной и той же формы.
У XHTTP несколько режимов. В packet-up данные к серверу уходят серией коротких запросов, и обрыв одного из них не рушит сессию: следующий запрос уходит независимо. В stream-up и stream-one выгрузка идёт потоком внутри долгого запроса — это быстрее и по поведению ближе к TCP, но внешне остаётся HTTP-обменом. Режим выбирает сервис, он приходит в подписке.
Что выбирать
- Стабильный домашний интернет, важна максимальная скорость — TCP. Меньше всего накладных расходов.
- Мобильная сеть, частые переключения между вышками — XHTTP или gRPC: они переживают обрывы мягче.
- Слабое устройство или очень медленный канал — TCP: остальные варианты тратят чуть больше и процессора, и трафика.
- Не уверены — оставьте то, что предлагает сервис по умолчанию. Транспорт должен совпадать на клиенте и сервере, произвольно поменять его в одном месте нельзя.
XHTTP в ПроксисВпнович
На XHTTP у нас работают Британия и США: VLESS + XHTTP + REALITY в режиме stream-one. Какой вариант получит устройство, решает само приложение: клиенты на ядре Xray — Happ, INCY, v2RayTun и другие — подключаются по XHTTP автоматически, остальные получают ту же локацию по обычному TCP, тоже автоматически. Выбирать вручную не нужно; после смены клиента достаточно обновить подписку.
XHTTP сам по себе не быстрее и не надёжнее TCP — это то же соединение в другой форме, и от транспорта зависит, как трафик выглядит для сети, а не его скорость.
- Клиент на ядре Xray — например, Happ или INCY — сам подключает Британию и США по XHTTP.
- Клиенты на ядре sing-box (Hiddify и похожие) XHTTP не поддерживают: они автоматически получают ту же локацию по обычному TCP, второй линии для ручного переключения больше нет.
Про разницу между самими протоколами — в разборе VLESS Reality против Hysteria2. Как устроено ядро, которое всё это исполняет, описано в гайде что такое VPN простыми словами.
XHTTP быстрее, чем TCP?
На хорошем канале — нет, скорее чуть медленнее из-за накладных расходов. Его преимущество не в скорости, а в устойчивости на нестабильной сети.
Можно ли переключить транспорт прямо в клиенте?
Технически поле есть, но менять его в одиночку бессмысленно: сервер ждёт конкретный транспорт, и при несовпадении соединение просто не установится.
Какой транспорт используется у меня сейчас?
Посмотрите параметры сервера в клиенте: там есть поле типа соединения — tcp, grpc или xhttp. Оно приходит из подписки. У нас на ядре Xray Британия и США приходят как xhttp, у остальных клиентов и остальных серверов на VLESS — tcp.
Почему бы не перевести на XHTTP сразу все серверы?
Не все клиенты его понимают. Поэтому сервис сам решает по типу приложения: клиент на ядре Xray получает XHTTP, а остальные — привычный TCP той же локации, без выбора вручную.
Помогла статья?
Ответ ни к чему не обязывает и виден только нам.