Transport — Xray-core
انتخابهای ترابرد Xray زیر streamSettings قرار میگیرند. الگو به این شکل است:
"streamSettings": {
"network": "<transport>",
"security": "<tls|reality|none>",
"<transport>Settings": { ... }
}network یکی از tcp، ws، httpupgrade، grpc، mkcp، splithttp (که XHTTP نیز نامیده میشود) است. بلوک متناظر <transport>Settings خوانده میشود. method بهعنوان نام مستعار network پذیرفته میشود — وقتی هر دو تنظیم شده باشند، method برنده است.
network: tcp
| فیلد | نوع | پیشفرض | مقادیر مجاز | توضیحات |
|---|---|---|---|---|
header | json.RawMessage | {type: "none"} | {type: "none"} | {type: "http", request: {...}, response: {...}} | ابهامسازی هدر اختیاری. پیشفرض none یعنی TCP ساده. شکل هدر HTTP یک درخواست/پاسخ HTTP جعلی ارسال میکند تا ترافیک وب ساده را تقلید کند. |
acceptProxyProtocol | bool | false | true | false | ورودی — پذیرش هدر PROXY-protocol v1/v2 که توسط یک متعادلکنندهٔ بار بالادست پیشافزوده شده است. |
منبع: infra/conf/transport_method.go:231-234 · ثابتشده در v26.9.9 (52a412d)
tcpSettings پیشفرض است — بیشتر تنظیمات از TCP ساده با TLS بهعنوان لایهٔ امنیتی استفاده میکنند.
network: ws — WebSocket
| فیلد | نوع | پیشفرض | مقادیر مجاز | توضیحات |
|---|---|---|---|---|
host | string | (server address) | <hostname> | هدر Host HTTP که در ارتقای WebSocket ارسال میشود. اولویت کلاینت: 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 | ورودی — پذیرش PROXY-protocol روی اتصال TCP زیرین. |
heartbeatPeriod | uint32 | 0 (disabled) | <seconds> | ارسال قابهای ping WebSocket در این بازه برای زنده نگه داشتن نگاشتهای NAT. 0 غیرفعال میکند. |
منبع: infra/conf/transport_method.go:608-614 · ثابتشده در v26.9.9 (52a412d)
network: httpupgrade
یک خویشاوند سبکتر WebSocket — از دستدهی HTTP-upgrade استفاده میکند اما از قاببندی کامل WebSocket پس از آن استفاده نمیکند. جریان پس از دستدهی بایت ساده است که چند درصد CPU صرفهجویی میکند به قیمت مزایای قاببندی WS (مثلاً کدهای بستن).
| فیلد | نوع | پیشفرض | مقادیر مجاز | توضیحات |
|---|---|---|---|---|
host | string | (server address) | <hostname> | هدر Host HTTP. |
path | string | / | /<path>[?ed=<bytes>] | مسیر ارائهشده. ?ed=N دادهٔ زودهنگام را فعال میکند. |
headers | map[string]string | {} | {<header>: <value>} | هدرهای درخواست اضافی. host اینجا مجاز نیست — آن را از طریق فیلد host سطح بالا تنظیم کنید. |
acceptProxyProtocol | bool | false | true | false | پذیرش PROXY-protocol روی اتصال TCP زیرین. |
منبع: infra/conf/transport_method.go:650-655 · ثابتشده در v26.9.9 (52a412d)
network: grpc
| فیلد | نوع | پیشفرض | مقادیر مجاز | توضیحات |
|---|---|---|---|---|
authority | string | (server address) | <authority> | شبههدر HTTP/2 :authority که در درخواست gRPC ارسال میشود. |
serviceName | string | (required) | <service path> | نام سرویس gRPC. مسیر کامل درخواست بسته به multiMode برابر با /{serviceName}/Tun یا /{serviceName}/TunMulti است. |
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 | اجازهٔ ping زندهنگهدارندهٔ gRPC حتی بدون جریان فعال. |
initial_windows_size | int32 | 0 (lib default) | <bytes> | اندازهٔ پنجرهٔ سطحجریان اولیهٔ HTTP/2. برای پیوندهای BDP بالا مفید است. |
user_agent | string | (lib default) | <UA string> | User-Agent ارسالشده روی اتصال HTTP/2 زیرین. |
منبع: infra/conf/transport_method.go:573-582 · ثابتشده در v26.9.9 (52a412d)
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 باشد. |
maxSendingWindow | *uint32 | (default) | >= mtu | کران بالای پنجرهٔ ارسال. باید بزرگتر یا مساوی mtu باشد، در غیر این صورت پیکربندی در زمان ساخت رد میشود. |
header | json.RawMessage | (ignored) | (use finalmask mkcp-legacy) | تجزیه میشود اما نادیده گرفته میشود — بهجای آن از یک مدخل mkcp-legacy در finalmask.udp استفاده کنید (بخش «نکات» را ببینید). |
seed | *string | (ignored) | (use finalmask mkcp-legacy) | مانند header تجزیه اما نادیده گرفته میشود. seed در value یک مدخل finalmask از نوع mkcp-legacy قرار میگیرد. |
منبع: infra/conf/transport_method.go:522-532 · ثابتشده در v26.9.9 (52a412d)
network: splithttp (XHTTP)
XHTTP ترابرد مدرن HTTP-2/3-aware Xray است. دارای ۳۰ فیلد است — این صفحه پراستفادهترینها را مستند میکند؛ بقیه در صفحهٔ جداگانهٔ SplitHTTP پوشش داده میشوند.
| فیلد | نوع | پیشفرض | مقادیر مجاز | توضیحات |
|---|---|---|---|---|
host | string | (server address) | <hostname> | هدر Host HTTP. |
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_method.go:256-287 · ثابتشده در v26.9.9 (52a412d)
فیلدهای باقیمانده شکلدهی ترافیک پیشرفته (xPaddingObfsMode, xPaddingKey, sessionIDKey, sessionIDPlacement, 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": { /* ... */ }
}
}نکات
- Xray-core ترابرد
network: "http"(HTTP/2) ندارد. بهجای آن ازsplithttp(XHTTP) استفاده کنید — HTTP/2 و HTTP/3 را پوشش میدهد. - مسیر WebSocket یک پارامتر پرسوجوی
?ed=<bytes>میپذیرد که حداکثر اندازهٔ دادهٔ زودهنگام را کدگذاری میکند. پارامتر از مسیر روی سیم حذف و در زمان ساخت پیکربندی بهعنوان تنظیم ترابرد اعمال میشود. - HttpUpgrade
hostداخلheadersرا با یک خطای صریح رد میکند (infra/conf/transport_method.go:672-674). WebSocket صرفاً یک هشدار منسوخ برای همان الگو منتشر میکند. - mKCP کلید بولی
congestionو فیلدهایreadBufferSize/writeBufferSizeندارد؛ رفتار ازدحام آن باcwndMultiplier(ضریب رشد پنجره، ≥ 1) وmaxSendingWindow(سقف پنجره، ≥mtu) تنظیم میشود. - فیلدهای
headerوseedدر mKCP تجزیه اما نادیده گرفته میشوند. معادل آنها یک مدخلmkcp-legacyدرstreamSettings.finalmask.udpاست: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/*). این زیرسیستم بلوکهای ساختمانی قابلاتصالی فراهم میکند که بر اساس نوع انتخاب میگردند — ماسکهای 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) — از جمله یک DSL کوچک عبارتtransformبرای بازنویسی در سطح بایت.udphopماسک پرش پورت سمت کلاینت است که در صفحهٔ Hysteria2 توضیح داده شده است. این یک حوزهٔ پیشرفته است؛ برای شِمای کامل هر نوع به بستهٔfinalmaskبالادست رجوع کنید. downloadSettingsدر XHTTP ترابرد نامتقارن را فعال میکند — کلاینت از طریق یک ترابرد آپلود میکند و از طریق دیگری دانلود میکند. برای فرار از DPI که تقارن درخواست/پاسخ HTTP را اثرانگشت میکند استفاده میشود.idle_timeoutوhealth_check_timeoutدر gRPC از املای snake_case پروتوباف استفاده میکنند، نه camelCase مانند بقیهٔ سطح Xray.
نکات بینهستهای
- sing-box از یک بلوک چندریختی
transport: { type: "ws|http|grpc|httpupgrade|quic", ... }استفاده میکند که در هر ورودی/خروجی توانمند به TLS تعبیه میشود. ببینید Transport — sing-box. - mihomo گزینههای ترابرد را در بلوکهای
*-optsper-protocol (ws-opts,h2-opts,grpc-opts,xhttp-opts) روی هر ورودی پراکسی توزیع میکند. ببینید Transport — mihomo.
منبع: infra/conf/transport_method.go:231-655 · v26.9.9 (52a412d)
