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 جعلی ارسال میکند تا ترافیک وب ساده را تقلید کند. |
acceptProxyProtocol | bool | false | true | false | ورودی — پذیرش هدر PROXY-protocol v1/v2 که توسط یک متعادلکنندهٔ بار بالادست پیشافزوده شده است. |
منبع: infra/conf/transport_internet.go:117-120 · ثابتشده در v1.260327.0 (d2758a0)
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_internet.go:142-148 · ثابتشده در v1.260327.0 (d2758a0)
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_internet.go:184-189 · ثابتشده در v1.260327.0 (d2758a0)
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/grpc.go:8-17 · ثابتشده در v1.260327.0 (d2758a0)
network: mkcp
| فیلد | نوع | پیشفرض | مقادیر مجاز | توضیحات |
|---|---|---|---|---|
mtu | *uint32 | 1350 | <bytes> | حداکثر اندازهٔ قطعهٔ mKCP، به بایت. مرزهای اعتبارسنجی قدیمی (576..1460) سست شدهاند اما مقادیر معمول حدود 1350 هستند. |
tti | *uint32 | 50 | 10-5000 ms | بازهٔ زمان ارسال به میلیثانیه. مقادیر کمتر یعنی ارسالهای مجدد سریعتر به قیمت CPU. |
uplinkCapacity | *uint32 | 5 | <MB/s> | پهنایباند آپلینک تخمینی به MB/s. mKCP از این برای اندازهگیری پنجرهٔ ارسال خود استفاده میکند. |
downlinkCapacity | *uint32 | 20 | <MB/s> | پهنایباند دانلینک تخمینی به MB/s. |
congestion | *bool | false | true | false | فعال کردن کنترل ازدحام mKCP. وقتی false باشد، mKCP بهعنوان یک ترابرد UDP با پنجرهٔ ثابت رفتار میکند. |
readBufferSize | *uint32 | 2 | <MB> | اندازهٔ بافر خواندن در هر اتصال (مگابایت). 0 به حداقل 512KB نگاشت میشود. |
writeBufferSize | *uint32 | 2 | <MB> | اندازهٔ بافر نوشتن در هر اتصال (مگابایت). 0 به 512KB نگاشت میشود. |
header | json.RawMessage | (removed) | (use finalmask/udp header-*) | حذف شده. تنظیم `header` یا `seed` `PrintRemovedFeatureError` را فعال میکند. از تنظیمات جدید `finalmask/udp` یا ترابردهای اختصاصی `mkcp-original`/`mkcp-aes128gcm` استفاده کنید. |
seed | *string | (removed) | (use finalmask/udp header-*) | حذف شده. مانند `header`. |
منبع: infra/conf/transport_internet.go:55-65 · ثابتشده در v1.260327.0 (d2758a0)
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_internet.go:220-249 · ثابتشده در v1.260327.0 (d2758a0)
فیلدهای باقیمانده شکلدهی ترافیک پیشرفته (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 یک پارامتر پرسوجوی
?ed=<bytes>میپذیرد که حداکثر اندازهٔ دادهٔ زودهنگام را کدگذاری میکند. پارامتر از مسیر روی سیم حذف و در زمان ساخت پیکربندی بهعنوان تنظیم ترابرد اعمال میشود. - HttpUpgrade
hostداخلheadersرا با یک خطای صریح رد میکند (infra/conf/transport_internet.go:206-208). WebSocket صرفاً یک هشدار منسوخ برای همان الگو منتشر میکند. - فیلدهای
headerوseedدر mKCP حذف شدهاند. تنظیم هر یک در ساخت پیکربندی با تغییر مسیر به تنظیمات جدیدfinalmask/udp header-*یا انواع ترابرد اختصاصیmkcp-original/mkcp-aes128gcmشکست میخورد. 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_internet.go:55-249 · v1.260327.0 (d2758a0)
