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:232-235 · ثابت‌شده در v26.7.28 (5ca6f4b)

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:613-619 · ثابت‌شده در v26.7.28 (5ca6f4b)

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:655-660 · ثابت‌شده در v26.7.28 (5ca6f4b)

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:578-587 · ثابت‌شده در v26.7.28 (5ca6f4b)

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 باشد. جایگزین کلید بولی قدیمی `congestion`.
maxSendingWindow*uint32(default)>= mtuکران بالای پنجرهٔ ارسال. باید بزرگ‌تر یا مساوی `mtu` باشد، در غیر این صورت پیکربندی در زمان ساخت رد می‌شود.
headerjson.RawMessage(removed)(use finalmask)حذف شده. تنظیم `header` یا `seed` در زمان ساخت با تغییر مسیر به ترابردهای هدر finalmask جدید شکست می‌خورد.
seed*string(removed)(use finalmask)حذف شده. مانند `header`.

منبع: infra/conf/transport_method.go:523-533 · ثابت‌شده در v26.7.28 (5ca6f4b)

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:257-288 · ثابت‌شده در v26.7.28 (5ca6f4b)

فیلدهای باقی‌مانده شکل‌دهی ترافیک پیشرفته (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": { /* ... */ }
  }
}

نکات

  • network: "http" (ترابرد HTTP/2) از Xray-core حذف شده است. به‌جای آن از splithttp (XHTTP) استفاده کنید — HTTP/2 و HTTP/3 را پوشش می‌دهد.
  • مسیر WebSocket یک پارامتر پرس‌وجوی ?ed=<bytes> می‌پذیرد که حداکثر اندازهٔ دادهٔ زودهنگام را کدگذاری می‌کند. پارامتر از مسیر روی سیم حذف و در زمان ساخت پیکربندی به‌عنوان تنظیم ترابرد اعمال می‌شود.
  • HttpUpgrade host داخل headers را با یک خطای صریح رد می‌کند (infra/conf/transport_method.go:677-679). WebSocket صرفاً یک هشدار منسوخ برای همان الگو منتشر می‌کند.
  • مدل ازدحام mKCP تغییر کرد: کلید بولی congestion و فیلدهای readBufferSize / writeBufferSize حذف شده‌اند و با cwndMultiplier (ضریب رشد پنجره، ≥ 1) و maxSendingWindow (سقف پنجره، ≥ mtu) جایگزین شده‌اند.
  • فیلدهای header و seed در mKCP حذف شده‌اند. تنظیم هر یک در ساخت پیکربندی با تغییر مسیر به ترابردهای هدر finalmask جدید (یا انواع اختصاصی mkcp-original / mkcp-aes128gcm) شکست می‌خورد.
  • finalmask زیرسیستم بازطراحی‌شدهٔ پوشش‌دهی بستهٔ UDP در Xray است (transport/internet/finalmask/*). جایگزین ابهام‌سازی هدر قدیمی mKCP با بلوک‌های ساختمانی قابل‌اتصال می‌شود که بر اساس نوع انتخاب می‌گردند — header-custom، mkcp-original، mkcp-aes128gcm، mkcp-legacy، realm، salamander، noise، xdns، xicmp، sudoku، fragment — از جمله یک DSL کوچک عبارت transform برای بازنویسی در سطح بایت. این یک حوزهٔ پیشرفته است؛ برای شِمای کامل هر نوع به بستهٔ 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:232-660 · v26.7.28 (5ca6f4b)

Core Tutorial اثر Argsment