پرش به مطلب اصلی

StreamToPackets

StreamToPackets نام فعلی نودی است که در بعضی مستندات قدیمی با مفهوم DataAsPacket شناخته می‌شد. این نود stream شامل packetهای قاب‌بندی‌شده را می‌خواند و packet خام را برای نود packet-oriented بعدی بازسازی می‌کند.

قالب فعلی frame:

  • دو بایت طول packet به صورت uint16 و big-endian
  • سپس payload خام packet

جایگاه رایج

TcpListener -> StreamToPackets -> TunDevice

سناریوی دو سرور:

server1: TunDevice -> PacketsToStream -> TcpConnector
server2: TcpListener -> StreamToPackets -> TunDevice

نمونه تنظیم

{
"name": "stream-to-packet",
"type": "StreamToPackets",
"settings": {
"sensitive-mode": true
},
"next": "packet-node"
}

تنظیمات

گزینهپیش‌فرضتوضیح
sensitive-modefalseفعال‌سازی heartbeat با frameهای ۵ بایتی کنترل

رفتار

  • از سمت stream بایت‌ها را buffer می‌کند تا یک frame کامل برسد.
  • طول دو بایتی را حذف می‌کند و payload را به صورت یک packet به next می‌دهد.
  • در مسیر برگشت، packetهای سمت next را با طول دو بایتی قاب‌بندی می‌کند و به line فعال stream برمی‌گرداند.
  • اگر line stream pause شود، خروجی packet به سمت stream drop می‌شود.
  • اگر sensitive-mode فعال باشد، frame پنج‌بایتی 0xFF را ping می‌داند و با frame پنج‌بایتی 0xDD پاسخ می‌دهد؛ این frameها به packet side نمی‌رسند.

نکته‌ها

  • این نود را معمولا با PacketsToStream در سمت مقابل جفت کنید.
  • buffer parser حد فعلی 65536 * 2 بایت دارد؛ اگر از این حد عبور کند buffer خالی می‌شود.
  • این نود packet boundary را از prefix می‌فهمد، نه از header IPv4.