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-mode | false | فعالسازی heartbeat سمت stream |
interval-ms | 50 | فاصله ارسال heartbeat در sensitive mode |
tolerance-ms | 150 | حداکثر زمان انتظار برای پاسخ 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 باشد.