Transport — sing-box
sing-box 的传输选项位于每个支持 TLS 的入站 / 出站内嵌的 transport 块。该块是 多态 的:type 字段选择五种传输变体之一,匹配的字段子集生效。
json
"transport": { "type": "<ws|http|grpc|quic|httpupgrade>", ...variant fields }type: "ws"
| 字段 | 类型 | 默认值 | 允许值 | 描述 |
|---|---|---|---|---|
path | string | / | /<path> | WebSocket 路径。 |
headers | badoption.HTTPHeader | {} | {<header>: <value or list>} | 附加 upgrade 请求头。 |
max_early_data | uint32 | 0 | <bytes> | WS 握手完成前缓冲的最大 0-RTT 早数据字节数。0 关闭。 |
early_data_header_name | string | Sec-WebSocket-Protocol | <header name> | 当服务端使用非标准头承载 base64 编码早数据时使用的 HTTP 头名。 |
源码: option/v2ray_transport.go:94-99 · 锚定版本 v1.14.2 (af6e64c)
type: "http"(HTTP/2)
| 字段 | 类型 | 默认值 | 允许值 | 描述 |
|---|---|---|---|---|
host | badoption.Listable[string] | [] | [<hostname>] | Host 头值列表。服务端用于 SNI 匹配;客户端每次请求随机选一个。 |
path | string | / | /<path> | HTTP 路径。 |
method | string | PUT | <HTTP method> | HTTP 方法。标准传输使用 PUT 以抑制缓存。 |
headers | badoption.HTTPHeader | {} | {<header>: <value or list>} | 附加请求头。 |
idle_timeout | badoption.Duration | 0 | <duration> | 服务端:空闲达到该时长的 HTTP/2 客户端会被关闭(GOAWAY)。客户端:在该时长内未收到任何帧时发送健康检查 PING。0 表示两者都禁用。 |
ping_timeout | badoption.Duration | 15s | <duration> | HTTP/2 客户端:发出 PING 后等待响应的时长,超时则关闭连接。0 表示使用默认的 15s;仅在设置了 idle_timeout 时才会发送 PING。 |
源码: option/v2ray_transport.go:85-92 · 锚定版本 v1.14.2 (af6e64c)
外层 TLS 块启用时,HTTP 传输使用 HTTP/2;TLS 不是强制的,未启用 TLS 时回落为明文 HTTP/1.1。不存在 HTTP/3 模式。
type: "grpc"
| 字段 | 类型 | 默认值 | 允许值 | 描述 |
|---|---|---|---|---|
service_name | string | (required) | <service path> | gRPC 服务名。 |
idle_timeout | badoption.Duration | 0 | <duration> | 空闲超时。0 关闭。 |
ping_timeout | badoption.Duration | 0 | <duration> | keepalive PING 超时。0 关闭 PING。 |
permit_without_stream | bool | false | true | false | 允许无活跃流时也发送 PING。 |
源码: option/v2ray_transport.go:103-109 · 锚定版本 v1.14.2 (af6e64c)
type: "quic"
QUIC 传输结构体 没有用户可见字段 —— 只是 { "type": "quic" }。所有 QUIC 调优都在协议层进行(Hysteria2 / TUIC 自带原生 QUIC 栈)。
type: "httpupgrade"
| 字段 | 类型 | 默认值 | 允许值 | 描述 |
|---|---|---|---|---|
host | string | (server address) | <hostname> | HTTP Host 头。 |
path | string | / | /<path> | HTTP 路径。 |
headers | badoption.HTTPHeader | {} | {<header>: <value or list>} | 附加请求头。 |
源码: option/v2ray_transport.go:111-115 · 锚定版本 v1.14.2 (af6e64c)
示例
WebSocket + TLS:
json
{
"outbounds": [{
"type": "vless",
"server": "example.com",
"server_port": 443,
"uuid": "...",
"tls": {
"enabled": true,
"server_name": "example.com"
},
"transport": {
"type": "ws",
"path": "/vl",
"headers": { "Host": "example.com" }
}
}]
}gRPC + REALITY:
json
{
"outbounds": [{
"type": "vless",
"server": "example.com",
"server_port": 443,
"uuid": "...",
"tls": {
"enabled": true,
"server_name": "www.cloudflare.com",
"utls": { "enabled": true, "fingerprint": "chrome" },
"reality": { "enabled": true, "public_key": "...", "short_id": "..." }
},
"transport": {
"type": "grpc",
"service_name": "GunService",
"idle_timeout": "60s",
"ping_timeout": "20s",
"permit_without_stream": true
}
}]
}HTTP/2(HTTP 传输走 TLS):
json
{
"outbounds": [{
"type": "vless",
"server": "example.com",
"server_port": 443,
"uuid": "...",
"tls": {
"enabled": true,
"server_name": "example.com",
"alpn": ["h2"]
},
"transport": {
"type": "http",
"host": ["example.com"],
"path": "/h2",
"method": "PUT"
}
}]
}说明
- sing-box 不 提供独立的 SplitHTTP / XHTTP 传输。最接近的等价是
type: "http"(TLS 上的 HTTP/2);HTTP 传输没有 HTTP/3 模式。 - keepalive PING 只由
idle_timeout决定:为0(默认)时不发送,ping_timeout: 0只表示使用默认的 15s。对位于 NAT 之后的长连接,建议设idle_timeout为"30s"之类,让底层 TCP 连接看到周期性活动。 type: "http"的host字段是 列表。服务端用于 SNI 匹配(任一值匹配即可);客户端每次请求随机选一个,便于按 Host 头路由的上游负载均衡器。- WebSocket
early_data_header_name默认Sec-WebSocket-Protocol—— 与 V2Ray 使用的头一致。仅在上游代理剥离该头时才需覆盖。
跨内核说明
- Xray-core 使用
streamSettings.network+ 每个传输的*Settings块,并额外提供 sing-box 没有的 TCP、mKCP 与 SplitHTTP/XHTTP 变体。参见 Transport — Xray-core。 - mihomo 把传输设置按协议分散到每个 proxy 条目的
*-opts块。参见 Transport — mihomo。
源码: option/v2ray_transport.go:85-115 · v1.14.2 (af6e64c)
