Skip to content

Transport — Xray-core

Xray 的传输选择位于 streamSettings 之下,模式如下:

json
"streamSettings": {
  "network": "<transport>",
  "security": "<tls|reality|none>",
  "<transport>Settings": { ... }
}

network 可取 tcpwshttpupgradegrpcmkcpsplithttp(现也称 XHTTP)。对应的 <transport>Settings 块会被 读取。

network: tcp

字段类型默认值允许值描述
headerjson.RawMessage{type: "none"}{type: "none"} | {type: "http", request: {...}, response: {...}}可选的头部混淆。默认 `none` 是普通 TCP。HTTP 头部形式会发送伪 HTTP 请求 / 响应以模仿普通 web 流量。
acceptProxyProtocolboolfalsetrue | false入站 —— 接受上游负载均衡器前置的 PROXY 协议 v1 / v2 头部。

源码: infra/conf/transport_internet.go:108-111 · 锚定版本 v26.6.1 (94ffd50)

tcpSettings 是默认 —— 多数场景使用普通 TCP 配合 TLS 作为安全层。

network: ws —— WebSocket

字段类型默认值允许值描述
hoststring(server address)<hostname>WebSocket 升级时发送的 HTTP Host 头。客户端优先级:host > serverName > address。
pathstring//<path>[?ed=<bytes>]WebSocket 路径。`?ed=N` 查询参数启用 0-RTT 早数据,最多 N 字节。
headersmap[string]string{}{<header>: <value>}附加 HTTP 头。在此放置 `host` 已弃用;请使用顶层 `host` 字段。
acceptProxyProtocolboolfalsetrue | false入站 —— 在底层 TCP 连接上接受 PROXY 协议。
heartbeatPerioduint320 (disabled)<seconds>按该间隔发送 WebSocket ping 帧以维持 NAT 映射。0 关闭。

源码: infra/conf/transport_internet.go:133-139 · 锚定版本 v26.6.1 (94ffd50)

network: httpupgrade

WebSocket 的轻量兄弟 —— 使用 HTTP-upgrade 握手,但 沿用完整 的 WebSocket 帧。握手后流为纯字节,节省几个百分点 CPU,代价是失去 WS 帧特性(如关闭码)。

字段类型默认值允许值描述
hoststring(server address)<hostname>HTTP Host 头。
pathstring//<path>[?ed=<bytes>]服务路径。`?ed=N` 启用早数据。
headersmap[string]string{}{<header>: <value>}附加请求头。此处 **不允许** `host` —— 请使用顶层 `host` 字段。
acceptProxyProtocolboolfalsetrue | false在底层 TCP 连接上接受 PROXY 协议。

源码: infra/conf/transport_internet.go:175-180 · 锚定版本 v26.6.1 (94ffd50)

network: grpc

字段类型默认值允许值描述
authoritystring(server address)<authority>gRPC 请求中发送的 HTTP/2 :authority 伪头。
serviceNamestring(required)<service path>gRPC 服务名。完整请求路径为 `/{serviceName}/Tun` 或 `/{serviceName}/TunMulti`,取决于 `multiMode`。
multiModeboolfalsetrue | false在一条 gRPC 双向流上复用多条逻辑流。可降低短连接的延迟。
idle_timeoutint3260<seconds>gRPC 连接的空闲超时。超过该间隔会向对端发送 ping,无响应则关闭连接。
health_check_timeoutint3220<seconds>ping 响应的超时。
permit_without_streamboolfalsetrue | false即使没有活跃流也允许 gRPC keepalive ping。
initial_windows_sizeint320 (lib default)<bytes>HTTP/2 流级窗口的初始大小。对高 BDP 链路有用。
user_agentstring(lib default)<UA string>底层 HTTP/2 连接上发送的 User-Agent。

源码: infra/conf/grpc.go:8-17 · 锚定版本 v26.6.1 (94ffd50)

network: mkcp

字段类型默认值允许值描述
mtu*uint321350>= 21mKCP 最大段大小(字节)。至少为 21。
tti*uint325010-1000 ms传输时间间隔,毫秒(10–1000)。值越小重传越快,但 CPU 占用越高。
uplinkCapacity*uint325<MB/s>估算的上行带宽(MB/s)。mKCP 用它来设定发送窗口。
downlinkCapacity*uint3220<MB/s>估算的下行带宽(MB/s)。
cwndMultiplier*uint32(default)>= 1拥塞窗口倍率 —— 调节 mKCP 增长窗口的激进程度。至少为 1。取代旧的布尔开关 `congestion`。
maxSendingWindow*uint32(default)>= mtu发送窗口的上界。必须大于或等于 `mtu`,否则配置在构建时被拒绝。
headerjson.RawMessage(removed)(use finalmask)已移除。设置 `header` 或 `seed` 都会在构建时失败,并指向新的 finalmask 头部传输。
seed*string(removed)(use finalmask)已移除。与 `header` 相同。

源码: infra/conf/transport_internet.go:53-63 · 锚定版本 v26.6.1 (94ffd50)

network: splithttp (XHTTP)

XHTTP 是 Xray 的现代 HTTP-2/3 感知传输,共 28 个字段 —— 本页 覆盖最常用的部分,其余字段见 SplitHTTP 详情页。

字段类型默认值允许值描述
hoststring(server address)<hostname>HTTP Host 头。
pathstring//<path>路径前缀。
modestringautoauto | packet-up | stream-up | stream-oneSplitHTTP 帧模式。`auto` 与服务端协商。`packet-up` 把每次应用层写出当作独立 POST;`stream-up` 使用单条长存 POST;`stream-one` 让响应继续保持在同一 TCP 连接上。
headersmap[string]string{}{<header>: <value>}每个请求附加的头。
xPaddingBytesInt32Range(unset){from, to}每个请求加入的随机 padding 字节范围。
xmuxXmuxConfig(unset)XmuxConfigX-Mux 连接池调优。
downloadSettings*StreamConfig(unset)StreamConfig**下行** 一半的备用 stream-settings(非对称部署,如 SplitHTTP 上行 + 普通 TLS 下行)。

源码: infra/conf/transport_internet.go:211-240 · 锚定版本 v26.6.1 (94ffd50)

剩余字段覆盖高级流量整形(xPaddingObfsModexPaddingKeyseqPlacementuplinkDataKey 等)以及 X-Mux 连接池 (maxConcurrencymaxConnectionscMaxReuseTimes 等)。

示例

WebSocket + TLS:

json
{
  "streamSettings": {
    "network": "ws",
    "security": "tls",
    "wsSettings": {
      "path": "/vl?ed=2048",
      "host": "example.com",
      "headers": { "User-Agent": "Mozilla/5.0..." }
    },
    "tlsSettings": { "serverName": "example.com" }
  }
}

gRPC + REALITY:

json
{
  "streamSettings": {
    "network": "grpc",
    "security": "reality",
    "grpcSettings": {
      "serviceName": "GunService",
      "multiMode": true,
      "idle_timeout": 60
    },
    "realitySettings": { /* ... */ }
  }
}

非对称下行的 XHTTP + REALITY:

json
{
  "streamSettings": {
    "network": "splithttp",
    "security": "reality",
    "splithttpSettings": {
      "mode": "auto",
      "path": "/xhttp",
      "host": "www.cloudflare.com",
      "xmux": {
        "maxConcurrency": { "from": 4, "to": 8 },
        "hMaxReusableSecs": { "from": 300, "to": 360 }
      },
      "downloadSettings": {
        "network": "splithttp",
        "security": "tls",
        "splithttpSettings": { "mode": "stream-one" }
      }
    },
    "realitySettings": { /* ... */ }
  }
}

说明

  • network: "http"(HTTP/2 传输)已从 Xray-core 移除。请改用 splithttp(XHTTP),它涵盖 HTTP/2 与 HTTP/3。
  • WebSocket path 接受 ?ed=<bytes> 查询参数,用于编码最大早数据 字节数。该参数在线路上的 path 中会被剥除,并在配置构建时作为 传输设置应用。
  • HttpUpgrade 对 headers 里出现 host 报错 (infra/conf/transport_internet.go:206-208)。WebSocket 对同样的 写法仅给出弃用警告。
  • mKCP 的拥塞模型发生了变化:布尔字段 congestionreadBufferSize / writeBufferSize 字段已 移除,由 cwndMultiplier(窗口增长倍率,≥ 1)与 maxSendingWindow (窗口上界,≥ mtu)取代。
  • mKCP 的 headerseed 字段已 移除。任何一个被设置都会在 配置构建时失败,并指向新的 finalmask 头部传输(或专用类型 mkcp-original / mkcp-aes128gcm)。
  • finalmask 是 Xray 重构后的 UDP 数据包掩码子系统 (transport/internet/finalmask/*)。它以旧的 mKCP 头部混淆为基础 重做,改用按 type 选择的可插拔构件 —— header-custommkcp-originalmkcp-aes128gcmmkcp-legacyrealmsalamandernoisexdnsxicmpsudokufragment —— 还包含一个用于字节级改写的小型 transform 表达式 DSL。这属于 高级领域;完整的按 type schema 见上游 finalmask 包。
  • XHTTP 的 downloadSettings 启用 非对称 传输 —— 客户端用一种 传输上行,用另一种下行。可用于规避对 HTTP 请求 / 响应对称性 做指纹的 DPI。
  • gRPC 的 idle_timeouthealth_check_timeout 使用 protobuf 中 的 snake_case 拼写,而非 Xray 其它面板上的 camelCase。

跨内核说明

  • sing-box 使用多态 transport: { type: "ws|http|grpc|httpupgrade|quic", ... } 块,内嵌在每个支持 TLS 的入站 / 出站上。参见 Transport — sing-box
  • mihomo 把传输选项按协议分散到每个 proxy 条目的 *-opts 块 (ws-optsh2-optsgrpc-optsxhttp-opts)中。参见 Transport — mihomo

源码: infra/conf/transport_internet.go:53-240 · v26.6.1 (94ffd50)

由 Argsment 出品的 Core Tutorial