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

PacketsToStream

PacketsToStream نام فعلی نودی است که در بعضی مستندات قدیمی با مفهوم PacketAsData آمده بود. این نود packet خام را با یک prefix دو بایتی طول، به stream معمولی تبدیل می‌کند و در مسیر برگشت دوباره packet boundary را بازسازی می‌کند.

جایگاه رایج

TunDevice -> PacketsToStream -> TcpConnector
TcpListener -> StreamToPackets -> TunDevice

PacketsToStream و StreamToPackets از یک قالب مشترک استفاده می‌کنند:

2 bytes length + packet payload

نمونه تنظیم

{
"name": "packet-to-stream",
"type": "PacketsToStream",
"settings": {
"sensitive-mode": true,
"interval-ms": 50,
"tolerance-ms": 150
},
"next": "stream-node"
}

تنظیمات

گزینهپیش‌فرضتوضیح
sensitive-modefalseفعال‌سازی heartbeat سمت stream
interval-ms50فاصله ارسال heartbeat در sensitive mode
tolerance-ms150حداکثر زمان انتظار برای پاسخ heartbeat

رفتار

  • برای هر worker در صورت نیاز یک line سمت stream می‌سازد و آن را reuse می‌کند.
  • قبل از ارسال هر packet، اگر لازم باشد checksum IPv4 را recalculation می‌کند.
  • طول packet را با دو بایت big-endian prepend می‌کند.
  • برگشت stream را buffer می‌کند تا frame کامل شود و سپس packet را به سمت قبلی برمی‌گرداند.
  • اگر line سمت stream بسته شود، line جدید ساخته و init می‌شود؛ packet line مشترک worker بسته نمی‌شود.

sensitive mode

در این حالت نود هر interval-ms یک frame پنج‌بایتی 0xFF می‌فرستد. اگر frame پنج‌بایتی 0xDD برگردد heartbeat موفق است. اگر تا tolerance-ms پاسخی نیاید، line سمت stream بسته و دوباره ساخته می‌شود.

نکته‌ها

  • این نود stream serialization ساده است، نه parser IPv4.
  • برای برگشت صحیح packetها، سمت مقابل باید StreamToPackets یا نودی با همین framing باشد.