PingClient
اطلاعیهٔ نسخهٔ ۲: این صفحه جایگزین مستندات قدیمی Ping wire v1 است. گزینهها و راهبردهای قدیمی مانند
strategy،wrap-*/warp-*،source،dest،check-identifier،xor-byteوroundup-sizeدیگر معتبر نیستند و برنامه آنها را با خطای مهاجرت رد میکند.
PingClient در نسخهٔ ۲ یک packet کامل IPv4 را در یک ICMP Echo Request واقعی
حمل میکند. هر سمت فقط با تنظیم send-replies: true برای درخواست دریافتی
Echo Reply با نوع 0 و با identifier، sequence number و دادهٔ دقیق همان درخواست
میفرستد. پیشفرض این گزینه false است؛ در این حالت clone، کپی و ارسال Reply
انجام نمیشود. این گزینه در دو سمت مستقل تنظیم میشود. رهگیری درخواست،
جلوگیری از replay و مصرف Replyهای منطبق حتی با غیرفعالبودن ارسال Reply ادامه
دارد. دادهٔ داخلی یکبار تحویل داده میشود و منتظر Reply نمیماند؛ اگر ارسال
Reply فعال باشد، Reply پیش از تحویل داده فرستاده میشود. دادهٔ جدید جهت مخالف
همیشه در یک Echo Request جدید حمل میشود.
درخواستهای در انتظار و replay در یک tracker مشترک و synchronized برای کل node پیگیری میشوند؛ تطبیق درخواست و پاسخ به WID مربوط به packet line وابسته نیست. هر ring حداکثر ۱۰۲۴ ورودی دارد.
تنظیمات معتبر فقط اینها هستند:
| گزینه | الزامی | پیشفرض |
|---|---|---|
local-ipv4 | بله | — |
peer-ipv4 | بله | — |
send-replies | خیر | false |
identifier | خیر | "random" |
sequence-start | خیر | 1 |
ttl | خیر | 64 |
tos | خیر | 0 |
send-replies باید یک مقدار boolean باشد؛ حذف آن همان رفتار false را دارد.
مقدار identifier میتواند "random" یا عدد صحیح 0..65535 باشد و مقدار تصادفی
پیشفرض صفر نیست. sequence-start عدد صحیح 0..65535 و ttl و tos عدد صحیح
0..255 هستند.
درخواست تکراری داده را دوباره تحویل نمیدهد و فقط در صورت فعالبودن این گزینه
Reply دیگری دریافت میکند.
حداکثر اندازهٔ packet داخلی ۱۴۷۲ بایت است و سربار carrier ۲۸ بایت است. IPv4 داخلیِ fragmented معتبر است، ولی carrier بیرونی fragmented، IPv6، packet malformed یا checksum نامعتبر رد میشود. برای توضیح کامل و مثال config فعلی، به مرجع انگلیسی PingClient مراجعه کنید.
خطاهای رد packet با سطح ERROR و علت مشخص ثبت میشوند. پیام شامل اندازهٔ packet،
حداکثر اندازهٔ packet داخلی و carrier، سربار و headroom موجود و مورد نیاز است.
محدودکنندهٔ پنجثانیهای بین همهٔ علتهای خطا، جهتها و workerهای هر node مشترک
است؛ همهٔ packetهای ردشده پیام جداگانه تولید نمیکنند.
پس از بازکردن درخواست Echo، packet داخلی روی همان worker دریافتکننده ارسال میشود. پاسخ Echo، بررسی replay و تطبیق درخواست نیز روی همان worker انجام میشوند؛ tracker مشترک به affinity جریان TCP/UDP نیاز ندارد. fragmentهای داخلی با حفظ بایتها و مرزهایشان مستقیم ارسال میشوند و منتظر fragment اول نمیمانند. اگر مصرفکنندهٔ بعدی stateful باشد، خودش مالکیت worker جریان را برقرار میکند.
متادیتای node
متادیتای برگرفته از کد منبع:
| ویژگی | مقدار |
|---|---|
version | 2 |
| node flags | kNodeFlagNone |
can_have_prev | true |
can_have_next | true |
layer_group | kNodeLayer3 |
layer_group_prev_node | kNodeLayer3 |
layer_group_next_node | kNodeLayer3 |
required_padding_left | 28 بایت |
| وضعیت line | ندارد |