Skip to content

Transport — Xray-core ​

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

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

network 可取 tcp、ws、httpupgrade、grpc、mkcp、splithttp(也称 XHTTP)。对应的 <transport>Settings 块会被读取。method 可作为 network 的别名 —— 两者同时设置时以 method 为准。

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_method.go:231-234 · 锚定版本 v26.9.9 (52a412d)

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_method.go:608-614 · 锚定版本 v26.9.9 (52a412d)

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_method.go:650-655 · 锚定版本 v26.9.9 (52a412d)

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/transport_method.go:573-582 · 锚定版本 v26.9.9 (52a412d)

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。
maxSendingWindow*uint32(default)>= mtu发送窗口的上界。必须大于或等于 mtu,否则配置在构建时被拒绝。
headerjson.RawMessage(ignored)(use finalmask mkcp-legacy)会被解析但被忽略 —— 请改用 finalmask.udp 中的 mkcp-legacy 条目(见“说明”)。
seed*string(ignored)(use finalmask mkcp-legacy)与 header 一样会被解析但被忽略。seed 写在 mkcp-legacy finalmask 条目的 value 中。

源码: infra/conf/transport_method.go:522-532 · 锚定版本 v26.9.9 (52a412d)

network: splithttp (XHTTP) ​

XHTTP 是 Xray 的现代 HTTP-2/3 感知传输,共 30 个字段 —— 本页覆盖最常用的部分,其余字段见 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_method.go:256-287 · 锚定版本 v26.9.9 (52a412d)

剩余字段覆盖高级流量整形(xPaddingObfsMode、xPaddingKey、sessionIDKey、sessionIDPlacement、seqPlacement、uplinkDataKey 等)以及 X-Mux 连接池(maxConcurrency、maxConnections、cMaxReuseTimes 等)。

示例 ​

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": { /* ... */ }
  }
}

说明 ​

  • Xray-core 没有 network: "http"(HTTP/2)传输。请改用 splithttp(XHTTP),它涵盖 HTTP/2 与 HTTP/3。
  • WebSocket path 接受 ?ed=<bytes> 查询参数,用于编码最大早数据字节数。该参数在线路上的 path 中会被剥除,并在配置构建时作为传输设置应用。
  • HttpUpgrade 对 headers 里出现 host 报错(infra/conf/transport_method.go:672-674)。WebSocket 对同样的写法仅给出弃用警告。
  • mKCP 没有布尔字段 congestion,也没有 readBufferSize / writeBufferSize 字段;其拥塞行为通过 cwndMultiplier(窗口增长倍率,≥ 1)与 maxSendingWindow(窗口上界,≥ mtu)调节。
  • mKCP 的 header 与 seed 字段会被解析但被忽略。等价配置是 streamSettings.finalmask.udp 中的 mkcp-legacy 条目:settings.header 选择头部伪装(dns、dtls、srtp、utp、wechat、wireguard;为 dns 时 value 是域名);不设 header 时,settings.value 即 seed —— 为空时是普通 mKCP 混淆,非空时是以其为密钥的 AES-128-GCM(infra/conf/transport_finalmask.go:598-631)。
  • finalmask 是 Xray 的数据包掩码子系统(transport/internet/finalmask/*)。它提供按 type 选择的可插拔构件 —— TCP 掩码:header-custom、fragment、sudoku、xmc;UDP 掩码:header-custom、mkcp-legacy、noise、salamander、sudoku、xdns、xicmp、realm、udphop(infra/conf/transport_finalmask.go:72-89)—— 还包含一个用于字节级改写的小型 transform 表达式 DSL。udphop 是客户端端口跳变掩码,见 Hysteria2 页面。这属于高级领域;完整的按 type schema 见上游 finalmask 包。
  • XHTTP 的 downloadSettings 启用 非对称 传输 —— 客户端用一种传输上行,用另一种下行。可用于规避对 HTTP 请求 / 响应对称性做指纹的 DPI。
  • gRPC 的 idle_timeout 与 health_check_timeout 使用 protobuf 中的 snake_case 拼写,而非 Xray 其它面板上的 camelCase。

跨内核说明 ​

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

源码: infra/conf/transport_method.go:231-655 · v26.9.9 (52a412d)

由 Argsment 出品的 Core Tutorial