UdpConnector
UdpConnector نود خروجی UDP است. این نود یک UDP socket محلی میسازد، مقصد را انتخاب میکند و datagramها را بین نود قبلی و remote peer جابهجا میکند.
این نود معمولا انتهای زنجیر است.
نمونه تنظیم ساده
{
"name": "udp-out",
"type": "UdpConnector",
"settings": {
"address": "example.com",
"port": "random(40000,40100)",
"reuseaddr": true,
"fwmark": 10,
"interface": "eth0",
"source-ip": "192.0.2.10"
}
}
نمونه چند مقصد weighted
{
"name": "udp-out",
"type": "UdpConnector",
"settings": {
"addresses": [
{
"address": "1.1.1.1",
"port": 53,
"weight": 3
},
{
"address": "8.8.8.8",
"port": "random(40000,40100)",
"weight": 1
}
],
"reuseaddr": true
}
}
تنظیم مقصد
باید یکی از دو سبک زیر را انتخاب کنید:
address+portaddresses
مقدارهای معتبر برای address:
- IPv4 ثابت
- IPv6 ثابت
- domain ثابت
src_context->addressdest_context->address
مقدارهای معتبر برای port:
- عدد ثابت، مثل
53 - string عددی، مثل
"53" src_context->portdest_context->portrandom(x,y)
random(x,y) در زمان init هر line یک پورت تصادفی در بازه inclusive [x, y] انتخاب میکند و همان line تا پایان عمرش همان پورت را نگه میدارد.
addresses
addresses آرایهای از مقصدهای weighted است. هر entry باید address، port و weight داشته باشد. مقصد هر line با احتمال متناسب با weight انتخاب میشود.
alias قدیمی adresses هم پذیرفته میشود، اما addresses spelling پیشنهادی است.
تنظیمات socket
| گزینه | توضیح |
|---|---|
reuseaddr | فعالسازی SO_REUSEADDR |
fwmark | socket mark با SO_MARK در platformهای پشتیبانیشده |
interface | محدود کردن socket به interface محلی |
source-ip | bind کردن UDP socket به source IP مشخص با port موقت |
رفتار UDP
UDP handshake ندارد. در پیادهسازی فعلی:
- upstream
Initsocket را میسازد و peer مقصد را محاسبه میکند. - payload upstream بلافاصله قابل ارسال است.
- downstream
Estفقط وقتی فرستاده میشود که اولین datagram از remote peer دریافت شود. - datagramهایی که از peer غیرمنتظره برسند drop میشوند.
- اگر read pause باشد، datagram دریافتی buffer نمیشود و drop میشود.
timeout
هر UDP line در جدول idle نگه داشته میشود:
- حدود
30sبعد از initialization - حدود
300sبعد از ادامه traffic
بعد از expire شدن، socket بسته میشود و downstream Finish به نود قبلی میرود.
نکتهها
- DNS resolution synchronous است.
fwmarkو device binding platform-dependent هستند.- اگر به UDP stateless با routing context نیاز دارید،
UdpStatelessSocketرا بررسی کنید.