Transport — Xray-core
Xray 的传输选择位于 streamSettings 之下,模式如下:
"streamSettings": {
"network": "<transport>",
"security": "<tls|reality|none>",
"<transport>Settings": { ... }
}network 可取 tcp、ws、httpupgrade、grpc、mkcp、 splithttp(现也称 XHTTP)。对应的 <transport>Settings 块会被 读取。
network: tcp
| 字段 | 类型 | 默认值 | 允许值 | 描述 |
|---|---|---|---|---|
header | json.RawMessage | {type: "none"} | {type: "none"} | {type: "http", request: {...}, response: {...}} | 可选的头部混淆。默认 `none` 是普通 TCP。HTTP 头部形式会发送伪 HTTP 请求 / 响应以模仿普通 web 流量。 |
acceptProxyProtocol | bool | false | true | false | 入站 —— 接受上游负载均衡器前置的 PROXY 协议 v1 / v2 头部。 |
源码: infra/conf/transport_internet.go:108-111 · 锚定版本 v26.6.1 (94ffd50)
tcpSettings 是默认 —— 多数场景使用普通 TCP 配合 TLS 作为安全层。
network: ws —— WebSocket
| 字段 | 类型 | 默认值 | 允许值 | 描述 |
|---|---|---|---|---|
host | string | (server address) | <hostname> | WebSocket 升级时发送的 HTTP Host 头。客户端优先级:host > serverName > address。 |
path | string | / | /<path>[?ed=<bytes>] | WebSocket 路径。`?ed=N` 查询参数启用 0-RTT 早数据,最多 N 字节。 |
headers | map[string]string | {} | {<header>: <value>} | 附加 HTTP 头。在此放置 `host` 已弃用;请使用顶层 `host` 字段。 |
acceptProxyProtocol | bool | false | true | false | 入站 —— 在底层 TCP 连接上接受 PROXY 协议。 |
heartbeatPeriod | uint32 | 0 (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 帧特性(如关闭码)。
| 字段 | 类型 | 默认值 | 允许值 | 描述 |
|---|---|---|---|---|
host | string | (server address) | <hostname> | HTTP Host 头。 |
path | string | / | /<path>[?ed=<bytes>] | 服务路径。`?ed=N` 启用早数据。 |
headers | map[string]string | {} | {<header>: <value>} | 附加请求头。此处 **不允许** `host` —— 请使用顶层 `host` 字段。 |
acceptProxyProtocol | bool | false | true | false | 在底层 TCP 连接上接受 PROXY 协议。 |
源码: infra/conf/transport_internet.go:175-180 · 锚定版本 v26.6.1 (94ffd50)
network: grpc
| 字段 | 类型 | 默认值 | 允许值 | 描述 |
|---|---|---|---|---|
authority | string | (server address) | <authority> | gRPC 请求中发送的 HTTP/2 :authority 伪头。 |
serviceName | string | (required) | <service path> | gRPC 服务名。完整请求路径为 `/{serviceName}/Tun` 或 `/{serviceName}/TunMulti`,取决于 `multiMode`。 |
multiMode | bool | false | true | false | 在一条 gRPC 双向流上复用多条逻辑流。可降低短连接的延迟。 |
idle_timeout | int32 | 60 | <seconds> | gRPC 连接的空闲超时。超过该间隔会向对端发送 ping,无响应则关闭连接。 |
health_check_timeout | int32 | 20 | <seconds> | ping 响应的超时。 |
permit_without_stream | bool | false | true | false | 即使没有活跃流也允许 gRPC keepalive ping。 |
initial_windows_size | int32 | 0 (lib default) | <bytes> | HTTP/2 流级窗口的初始大小。对高 BDP 链路有用。 |
user_agent | string | (lib default) | <UA string> | 底层 HTTP/2 连接上发送的 User-Agent。 |
源码: infra/conf/grpc.go:8-17 · 锚定版本 v26.6.1 (94ffd50)
network: mkcp
| 字段 | 类型 | 默认值 | 允许值 | 描述 |
|---|---|---|---|---|
mtu | *uint32 | 1350 | >= 21 | mKCP 最大段大小(字节)。至少为 21。 |
tti | *uint32 | 50 | 10-1000 ms | 传输时间间隔,毫秒(10–1000)。值越小重传越快,但 CPU 占用越高。 |
uplinkCapacity | *uint32 | 5 | <MB/s> | 估算的上行带宽(MB/s)。mKCP 用它来设定发送窗口。 |
downlinkCapacity | *uint32 | 20 | <MB/s> | 估算的下行带宽(MB/s)。 |
cwndMultiplier | *uint32 | (default) | >= 1 | 拥塞窗口倍率 —— 调节 mKCP 增长窗口的激进程度。至少为 1。取代旧的布尔开关 `congestion`。 |
maxSendingWindow | *uint32 | (default) | >= mtu | 发送窗口的上界。必须大于或等于 `mtu`,否则配置在构建时被拒绝。 |
header | json.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 详情页。
| 字段 | 类型 | 默认值 | 允许值 | 描述 |
|---|---|---|---|---|
host | string | (server address) | <hostname> | HTTP Host 头。 |
path | string | / | /<path> | 路径前缀。 |
mode | string | auto | auto | packet-up | stream-up | stream-one | SplitHTTP 帧模式。`auto` 与服务端协商。`packet-up` 把每次应用层写出当作独立 POST;`stream-up` 使用单条长存 POST;`stream-one` 让响应继续保持在同一 TCP 连接上。 |
headers | map[string]string | {} | {<header>: <value>} | 每个请求附加的头。 |
xPaddingBytes | Int32Range | (unset) | {from, to} | 每个请求加入的随机 padding 字节范围。 |
xmux | XmuxConfig | (unset) | XmuxConfig | X-Mux 连接池调优。 |
downloadSettings | *StreamConfig | (unset) | StreamConfig | **下行** 一半的备用 stream-settings(非对称部署,如 SplitHTTP 上行 + 普通 TLS 下行)。 |
源码: infra/conf/transport_internet.go:211-240 · 锚定版本 v26.6.1 (94ffd50)
剩余字段覆盖高级流量整形(xPaddingObfsMode、xPaddingKey、 seqPlacement、uplinkDataKey 等)以及 X-Mux 连接池 (maxConcurrency、maxConnections、cMaxReuseTimes 等)。
示例
WebSocket + TLS:
{
"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:
{
"streamSettings": {
"network": "grpc",
"security": "reality",
"grpcSettings": {
"serviceName": "GunService",
"multiMode": true,
"idle_timeout": 60
},
"realitySettings": { /* ... */ }
}
}非对称下行的 XHTTP + REALITY:
{
"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 的拥塞模型发生了变化:布尔字段
congestion与readBufferSize/writeBufferSize字段已 移除,由cwndMultiplier(窗口增长倍率,≥ 1)与maxSendingWindow(窗口上界,≥mtu)取代。 - mKCP 的
header与seed字段已 移除。任何一个被设置都会在 配置构建时失败,并指向新的 finalmask 头部传输(或专用类型mkcp-original/mkcp-aes128gcm)。 - finalmask 是 Xray 重构后的 UDP 数据包掩码子系统 (
transport/internet/finalmask/*)。它以旧的 mKCP 头部混淆为基础 重做,改用按 type 选择的可插拔构件 ——header-custom、mkcp-original、mkcp-aes128gcm、mkcp-legacy、realm、salamander、noise、xdns、xicmp、sudoku、fragment—— 还包含一个用于字节级改写的小型transform表达式 DSL。这属于 高级领域;完整的按 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_internet.go:53-240 · v26.6.1 (94ffd50)
