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 جعلی ارسال می‌کند تا ترافیک وب ساده را تقلید کند.
acceptProxyProtocolboolfalsetrue | falseورودی — پذیرش هدر PROXY-protocol v1/v2 که توسط یک متعادل‌کنندهٔ بار بالادست پیش‌افزوده شده است.

منبع: infra/conf/transport_method.go:231-234 · ثابت‌شده در v26.9.9 (52a412d)

tcpSettings پیش‌فرض است — بیشتر تنظیمات از TCP ساده با TLS به‌عنوان لایهٔ امنیتی استفاده می‌کنند.

network: ws — WebSocket ​

فیلدنوعپیش‌فرضمقادیر مجازتوضیحات
hoststring(server address)<hostname>هدر Host HTTP که در ارتقای WebSocket ارسال می‌شود. اولویت کلاینت: host > serverName > address.
pathstring//<path>[?ed=<bytes>]مسیر WebSocket. پارامتر پرس‌وجوی ?ed=N دادهٔ زودهنگام 0-RTT را تا N بایت فعال می‌کند.
headersmap[string]string{}{<header>: <value>}هدرهای HTTP اضافی. قرار دادن host اینجا منسوخ است؛ به‌جای آن از فیلد host سطح بالا استفاده کنید.
acceptProxyProtocolboolfalsetrue | falseورودی — پذیرش PROXY-protocol روی اتصال TCP زیرین.
heartbeatPerioduint320 (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 (مثلاً کدهای بستن).

فیلدنوعپیش‌فرضمقادیر مجازتوضیحات
hoststring(server address)<hostname>هدر Host HTTP.
pathstring//<path>[?ed=<bytes>]مسیر ارائه‌شده. ?ed=N دادهٔ زودهنگام را فعال می‌کند.
headersmap[string]string{}{<header>: <value>}هدرهای درخواست اضافی. host اینجا مجاز نیست — آن را از طریق فیلد host سطح بالا تنظیم کنید.
acceptProxyProtocolboolfalsetrue | falseپذیرش PROXY-protocol روی اتصال TCP زیرین.

منبع: infra/conf/transport_method.go:650-655 · ثابت‌شده در v26.9.9 (52a412d)

network: grpc ​

فیلدنوعپیش‌فرضمقادیر مجازتوضیحات
authoritystring(server address)<authority>شبه‌هدر HTTP/2 :authority که در درخواست gRPC ارسال می‌شود.
serviceNamestring(required)<service path>نام سرویس gRPC. مسیر کامل درخواست بسته به multiMode برابر با /{serviceName}/Tun یا /{serviceName}/TunMulti است.
multiModeboolfalsetrue | falseچندسوسازی بسیاری از جریان‌های منطقی روی یک جریان دوسویهٔ gRPC. تأخیر را برای اتصال‌های کوتاه کاهش می‌دهد.
idle_timeoutint3260<seconds>زمان‌اوت بی‌کاری برای اتصال gRPC. پس از این بازه به همتا ping زده می‌شود؛ عدم پاسخ اتصال را می‌بندد.
health_check_timeoutint3220<seconds>زمان‌اوت برای پاسخ ping.
permit_without_streamboolfalsetrue | falseاجازهٔ ping زنده‌نگه‌دارندهٔ gRPC حتی بدون جریان فعال.
initial_windows_sizeint320 (lib default)<bytes>اندازهٔ پنجرهٔ سطح‌جریان اولیهٔ HTTP/2. برای پیوندهای BDP بالا مفید است.
user_agentstring(lib default)<UA string>User-Agent ارسال‌شده روی اتصال HTTP/2 زیرین.

منبع: infra/conf/transport_method.go:573-582 · ثابت‌شده در v26.9.9 (52a412d)

network: mkcp ​

فیلدنوعپیش‌فرضمقادیر مجازتوضیحات
mtu*uint321350>= 21حداکثر اندازهٔ قطعهٔ mKCP، به بایت. باید حداقل 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)تجزیه می‌شود اما نادیده گرفته می‌شود — به‌جای آن از یک مدخل 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 پوشش داده می‌شوند.

فیلدنوعپیش‌فرضمقادیر مجازتوضیحات
hoststring(server address)<hostname>هدر Host HTTP.
pathstring//<path>پیشوند مسیر.
modestringautoauto | packet-up | stream-up | stream-oneحالت قاب‌بندی SplitHTTP. auto با سرور مذاکره می‌کند. packet-up هر نوشتن لایهٔ برنامه را به‌عنوان یک POST جداگانه می‌فرستد؛ stream-up از یک POST بلندمدت استفاده می‌کند؛ stream-one حتی پاسخ را روی همان اتصال TCP باز نگه می‌دارد.
headersmap[string]string{}{<header>: <value>}هدرهای اضافی که به هر درخواست اضافه می‌شوند.
xPaddingBytesInt32Range(unset){from, to}بازهٔ بایت‌های padding تصادفی که به هر درخواست اضافه می‌شوند.
xmuxXmuxConfig(unset)XmuxConfigتنظیم استخر اتصال X-Mux.
downloadSettings*StreamConfig(unset)StreamConfigstream-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 یک پارامتر پرس‌وجوی ?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 گزینه‌های ترابرد را در بلوک‌های *-opts per-protocol (ws-opts, h2-opts, grpc-opts, xhttp-opts) روی هر ورودی پراکسی توزیع می‌کند. ببینید Transport — mihomo.

منبع: infra/conf/transport_method.go:231-655 · v26.9.9 (52a412d)

Core Tutorial اثر Argsment