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 خوانده می‌شود.

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_internet.go:117-120 · ثابت‌شده در v1.260327.0 (d2758a0)

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_internet.go:142-148 · ثابت‌شده در v1.260327.0 (d2758a0)

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_internet.go:184-189 · ثابت‌شده در v1.260327.0 (d2758a0)

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/grpc.go:8-17 · ثابت‌شده در v1.260327.0 (d2758a0)

network: mkcp

فیلدنوعپیش‌فرضمقادیر مجازتوضیحات
mtu*uint321350<bytes>حداکثر اندازهٔ قطعهٔ mKCP، به بایت. مرزهای اعتبارسنجی قدیمی (576..1460) سست شده‌اند اما مقادیر معمول حدود 1350 هستند.
tti*uint325010-5000 msبازهٔ زمان ارسال به میلی‌ثانیه. مقادیر کم‌تر یعنی ارسال‌های مجدد سریع‌تر به قیمت CPU.
uplinkCapacity*uint325<MB/s>پهنای‌باند آپلینک تخمینی به MB/s. mKCP از این برای اندازه‌گیری پنجرهٔ ارسال خود استفاده می‌کند.
downlinkCapacity*uint3220<MB/s>پهنای‌باند دانلینک تخمینی به MB/s.
congestion*boolfalsetrue | falseفعال کردن کنترل ازدحام mKCP. وقتی false باشد، mKCP به‌عنوان یک ترابرد UDP با پنجرهٔ ثابت رفتار می‌کند.
readBufferSize*uint322<MB>اندازهٔ بافر خواندن در هر اتصال (مگابایت). 0 به حداقل 512KB نگاشت می‌شود.
writeBufferSize*uint322<MB>اندازهٔ بافر نوشتن در هر اتصال (مگابایت). 0 به 512KB نگاشت می‌شود.
headerjson.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 (فاز ۵) پوشش داده می‌شوند.

فیلدنوعپیش‌فرضمقادیر مجازتوضیحات
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_internet.go:220-249 · ثابت‌شده در v1.260327.0 (d2758a0)

فیلدهای باقی‌مانده شکل‌دهی ترافیک پیشرفته (xPaddingObfsMode, xPaddingKey, 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_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 گزینه‌های ترابرد را در بلوک‌های *-opts per-protocol (ws-opts, h2-opts, grpc-opts, xhttp-opts) روی هر ورودی پراکسی توزیع می‌کند. ببینید Transport — mihomo.

منبع: infra/conf/transport_internet.go:55-249 · v1.260327.0 (d2758a0)

Core Tutorial اثر Argsment