Народный

Сеть

TCP Multiplexing — несколько streams в одном TCP-connection

Техника передачи нескольких логических потоков (streams) через один TCP-connection. Используется в smux/yamux/v2ray-mux для уменьшения handshake-overhead и обхода SYN-rate-limit DPI.

Определение

TCP Multiplexing (mux) — техника передачи нескольких независимых логических потоков (streams) через единственный TCP-connection. Каждый stream имеет свой ID и буфера; данные разных streams чередуются (interleaved) на проводе, но логически изолированы. Юзер открывает 10 параллельных HTTP-запросов — все идут через один TCP-сокет вместо 10 отдельных.

В VPN-туннелях mux решает три задачи: (1) уменьшение TCP handshake overhead, (2) сокрытие количества параллельных подключений от DPI, (3) обход SYN-rate-limit на провайдерской стороне.

Зачем нужен

Без mux — типичная сессия открытия 10 сайтов:

  • 10 TCP-handshake к VPN-серверу.
  • 10 TLS-handshake поверх каждого.
  • 10 параллельных потоков на VPN-сервере.
  • DPI видит «всплеск SYN-пакетов» — характерная сигнатура VPN.

С mux:

  • 1 TCP-handshake к VPN-серверу.
  • 1 TLS-handshake.
  • Множество streams внутри.
  • DPI видит «один долгий устойчивый коннект».

Реализации

  • smux (xtaci/smux) — самая популярная в xray/v2ray. Версии smux v1, smux v2.
  • yamux (HashiCorp) — изначально для Consul, используется в sing-box.
  • HTTP/2 multiplexing — стандартный в HTTP/2 transport, built-in.
  • HTTP/3 streams — на уровне QUIC, не нужно отдельное mux.
  • v2ray mux.cool — собственное v2ray-расширение, скоро deprecated.

Конфиг в Xray-core

{
  "mux": {
    "enabled": true,
    "concurrency": 8,
    "xudpConcurrency": 0,
    "xudpProxyUDP443": "reject"
  }
}

concurrency: 8 — максимум 8 параллельных streams в одном connection. После 8 mux откроет второй connection. Меньше — меньше детектируемости, больше — лучше throughput.

Mux и DPI

Плюс для обхода: меньше TCP-handshakes → меньше шансов попасть под SYN-rate-limit или ALG-fingerprinting.

Минус: размер encrypted blobs может содержать паттерны (request size + response size одной операции), которые легче статистически анализировать на одном long-lived connection. Padding частично решает.

В России 2026: ТСПУ не показывала специфической детекции mux. Mux работает «прозрачно» — DPI видит обычный TCP-stream с трафиком. Если базовый TLS/Reality проходит — с mux тоже пройдёт.

Когда отключать mux

  • Hysteria 2 / TUIC (QUIC) — встроенный streams-уровень, mux над ним избыточен и ломает производительность.
  • WireGuard — UDP-based, mux неприменим.
  • Real-time трафик (голос, gaming) — задержка в одном stream блокирует head-of-line для других (TCP-уровень). Лучше отдельный connection.

Связь с другими transports

TransportВстроенный mux?
Raw TCPНет, mux прикручивается отдельно
WebSocketНет; нужен smux/yamux сверху
gRPC (HTTP/2)Да, через HTTP/2 streams
HTTPUpgradeНет
SplitHTTPНе нужен — само построение из chunked-streams
QUIC/Hysteria 2Да, на уровне транспорта

Анти-fingerprint роль

DPI может пытаться отличать mux-трафик от обычного TLS по таким сигналам:

  • Размер ClientHello: одинаковый — mux не вносит ничего.
  • Long-lived connection без TLS-renegotiation — некоторая аномалия для обычного HTTPS-серфинга (там connection short-lived).
  • TLS-record размеры: mux отправляет много small records подряд — паттерн не как у браузера.

Smart-padding (DAITA-style) маскирует эти сигналы.

Источники

  • xtaci/smux — Go implementation.
  • HashiCorp yamux docs.
  • v2ray.com — Mux.Cool spec.

Связанные термины

  • xray-core — основной потребитель mux.
  • sing-box — альтернативный движок, тоже поддерживает.
  • WebSocket transport — часто комбинируется с mux.
  • gRPC transport — встроенный mux через HTTP/2.
  • TCP Fast Open — другой transport-optimization.