تنفيذ الأمر Ping على جميع مضيفي IPv6 على القناة

تبقى بضعة أيام حتى بدء دفق جديد في الدورة التدريبية "Network Engineer" من OTUS. في هذا الصدد ، نريد أن نشارككم ترجمة المواد المفيدة حول هذا الموضوع.




سلسلة من مقالات المدونة حول تلميحات ونصائح استكشاف الأخطاء وإصلاحها IPv6 ping (ICMPv6 طلب الارتداد / رد الارتداد)

يرجى ملاحظة أنني أستخدم Linux (خاصة Fedora 31) ، ولكن بناء جملة الأمر ping لأنظمة التشغيل الأخرى ، آمل يجب أن تكون متشابهة للغاية.

تنفيذ الأمر Ping على جميع مضيفي IPv6 على القناة


النصيحة الأولى والأسهل هي تنفيذ الأمر ping على جميع مضيفي IPv6 على القناة.

يستخدم IPv6 عناوين الإرسال المتعدد لجميع أنواع اتصالات رأس بأطراف. لا توجد عناوين البث (أو البث) IPv6. وهذا يميز IPv6 عن IPv4 ، حيث توجد عدة أنواع من عناوين البث ، على سبيل المثال ، عنوان "البث المحدود" 255.255.255.255 [RFC1122].

ومع ذلك ، هناك عنوان IPv6 "متعدد العقد متعدد الإرسال" ، لذلك سنستخدمه لإجراء اختبار ping لجميع عقد IPv6 في القناة. (عنوان "البث" هو في الواقع مجرد عنوان متعدد الإرسال مسمى خصيصًا ، وهو مجموعة بث متعدد تتضمن جميع العقد. لاحظ أنه ، على سبيل المثال ، يتم تضمين "مجموعة" أو بت العنوان المتعدد في عناوين بث إيثرنت على مستوى الارتباط).

عنوان IPv6 متعدد العقد للقناة: ff02::1. ffيشير إلى عنوان IPv6 متعدد البث. 0 التالي جزء من العلم بتات غير محددة. يحدد

كذلك 2منطقة مجموعة الإرسال المتعدد. على عكس عناوين البث المتعدد IPv4 ، فإن عناوين الإرسال المتعدد IPv6 لها نطاق. تشير قيمة النطاق إلى الجزء من الشبكة المسموح به عبر حزم الإرسال المتعدد. بمجرد أن تصل الحزمة إلى حدود النطاق المحدد ، يجب التخلص من الحزمة ، بغض النظر عما إذا كان حقل عدد القفزات الخاص بها غير صفري. بالطبع ، إذا وصل عداد التحويل إلى الصفر قبل الوصول إلى الحد المحدد لمجموعة الإرسال المتعدد ، فسيتم أيضًا إعادة تعيينه على الفور. فيما يلي قائمة كاملة بنطاق الإرسال المتعدد IPv6.

أخيرًا ، ::1يشير إلى مجموعة الإرسال المتعدد لكافة العقد.

حول العنوان ff02::1تجدر الإشارة إلى أنه غامض. على مضيف IPv6 بواجهات متعددة ، مثل جهاز توجيه أو مضيف متعدد طرق الاتصال ، ff02::1لا يوجد شيء في العنوان حيث يمكنك تحديد الواجهة التي تريد إرسال رسائل اختبار ICMPv6 إليها أو انتظرها عند وصولها. ff02::1صالحة ويمكن استخدامها على أي من الواجهات والقنوات المتصلة بالعقدة متعددة الواجهة.

لذلك ، عندما نقوم بتنفيذ الأمر ping على جميع عقد IPv6 على القناة ، نحتاج أيضًا إلى إخبار الأداة بطريقة ما pingعن IPv6 عن الواجهة التي يجب استخدامها.

تعريف الواجهة - خيار سطر الأوامر


كما رأينا من قبل ، فإن عنوان الإرسال المتعدد لجميع العقد الذي نريد استخدامه - ff02::1- لا يوفر أي معلومات حول الواجهة التي تريد إرسال واستقبال طلب الصدى ICMPv6 وحزم الرد على الصدى.

لذا ، كيف يمكننا تحديد الواجهة التي سيتم استخدامها لمساحة عناوين الإرسال المتعدد أو عناوين الارتباط المحلي أحادية الإرسال؟

الطريقة الأولى والأكثر وضوحًا هي توفيرها كمعلمة للتطبيق الذي نستخدمه.

بالنسبة إلى الأداة المساعدة ، pingنقدمها من خلال الخيار -I.

[mark@opy ~]$ ping -w 1 -I enp3s2 ff02::1
ping: Warning: source address might be selected on device other than: enp3s2
PING ff02::1(ff02::1) from :: enp3s2: 56 data bytes
64 bytes from fe80::1d36:1fff:fefd:82be%enp3s2: icmp_seq=1 ttl=64 time=0.438 ms
64 bytes from fe80::f31c:ccff:fe26:a6d9%enp3s2: icmp_seq=1 ttl=64 time=0.589 ms (DUP!)
64 bytes from fe80::7e31:f5ff:fe1b:9fdb%enp3s2: icmp_seq=1 ttl=64 time=5.15 ms (DUP!)
64 bytes from fe80::f7f8:15ff:fe6f:be6e%enp3s2: icmp_seq=1 ttl=64 time=58.0 ms (DUP!)
64 bytes from fe80::877d:4ff:fe1a:b881%enp3s2: icmp_seq=1 ttl=64 time=62.3 ms (DUP!)
64 bytes from fe80::877d:4ff:fe1a:ad79%enp3s2: icmp_seq=1 ttl=64 time=62.8 ms (DUP!)
 
--- ff02::1 ping statistics ---
1 packets transmitted, 1 received, +5 duplicates, 0% packet loss, time 0ms
rtt min/avg/max/mdev = 0.438/31.544/62.786/29.566 ms
[mark@opy ~]$


باستخدام هذا الإرسال المتعدد لجميع العقد ، تلقينا ردودًا من 6 عقد IPv6. جاءت الردود من عناوين Link-Local IPv6 المضيفة ، بدءًا بالبادئة fe80::/10.

ل pingمنع طلبات الارتداد ICMPv6 من الاستمرار في ما لا نهاية حتى وإسقاطه، ونحن عادة تحديد عدد من الحزم لإرسال من خلال خيار -c. ومع ذلك ، يمنع هذا أيضًا اختبار الاتصال من عرض وعرض أكثر من رد ارتداد ICMPv6 عند إرسال طلب ارتداد ICMPv6 متعدد البث. بدلاً من ذلك ، استخدمنا الخيار -w للإشارة إلى أن ping يجب أن يكتمل بعد ثانية واحدة ، بغض النظر عن عدد عمليات ping أو pings التي تم إرسالها أو استلامها.

شيء آخر يجب الانتباه إليه هو (DUP!) الاستنتاج على الإجابات الثانية واللاحقة. يتم تحديد هذه الحزم على أنها نسخ مكررة من الاستجابة ، لأنها تحتوي على نفس قيمة تسلسل ICMP التي تحتوي على pings ICMPv6 الفردية التي تم إرسالها أولاً. تظهر لأن طلب الصدى المتعدد ICMPv6 ينتج عنه استجابات فردية أحادية الإرسال. يشار إلى عدد التكرارات أيضا في ملخص الإحصاءات.

تعريف الواجهة - معرف المنطقة


طريقة أخرى لتوفير واجهة للاستخدام هي جزء من معلمة عنوان IPv6.

يمكننا رؤية مثال على ذلك في إخراج ping ، حيث تحتوي عناوين عقد IPv6 المستجيبة لاحقة أيضًا %enp3s2، على سبيل المثال:

64 bytes from fe80::1d36:1fff:fefd:82be%enp3s2: icmp_seq=1 ttl=64 time=0.438 ms


يتم وصف هذه الطريقة لتحديد الواجهات رسميًا في [RFC4007] ، "هندسة مع تحديد عناوين IPv6." على الرغم من أنها تسمى عادةً واجهة نظام التشغيل ، إلا أنها تحدد شيئًا أكثر عمومية - "منطقة" أو "نطاق".

سبب وجود مناطق أكثر عامة أو مناطق نطاق هو أنه ، كما ذكر في [RFC4007] ، يمكن أن يحتوي مضيف IPv6 على عدة واجهات IPv6 مختلفة متصلة بالقناة نفسها. هذه الواجهات أعضاء في نفس المنطقة.

يجب أن يكون من الممكن تجميع عدة واجهات داخل المنطقة تحت نظام التشغيل ؛ في الوقت الحالي ، لا أعرف ما إذا كان هذا ممكنًا في Linux وكيفية القيام بذلك.

باستخدام اللاحقة %<zone_id>، يمكننا إزالة معلمة سطر الأوامر -I ping.

[mark@opy ~]$ ping -w 1 ff02::1%enp3s2
PING ff02::1%enp3s2(ff02::1%enp3s2) 56 data bytes
64 bytes from fe80::2392:6213:a15b:66ff%enp3s2: icmp_seq=1 ttl=64 time=0.106 ms
64 bytes from fe80::1d36:1fff:fefd:82be%enp3s2: icmp_seq=1 ttl=64 time=0.453 ms (DUP!)
64 bytes from fe80::f31c:ccff:fe26:a6d9%enp3s2: icmp_seq=1 ttl=64 time=0.606 ms (DUP!)
64 bytes from fe80::7e31:f5ff:fe1b:9fdb%enp3s2: icmp_seq=1 ttl=64 time=6.23 ms (DUP!)
64 bytes from fe80::f7f8:15ff:fe6f:be6e%enp3s2: icmp_seq=1 ttl=64 time=157 ms (DUP!)
64 bytes from fe80::877d:4ff:fe1a:ad79%enp3s2: icmp_seq=1 ttl=64 time=159 ms (DUP!)
64 bytes from fe80::877d:4ff:fe1a:b881%enp3s2: icmp_seq=1 ttl=64 time=161 ms (DUP!)
64 bytes from fe80::23d:e8ff:feec:958c%enp3s2: icmp_seq=1 ttl=64 time=179 ms (DUP!)
 
--- ff02::1%enp3s2 ping statistics ---
1 packets transmitted, 1 received, +7 duplicates, 0% packet loss, time 0ms
rtt min/avg/max/mdev = 0.106/82.858/179.216/81.281 ms
 
[mark@opy ~]$



استجابات عنوان الارتباط المحلي


من هذا العقد متعدد الإرسال ، تلقينا ping ما مجموعه 6 ردود فريدة.

جاءت هذه الردود من عناوين مضيف Unicast Link-Local IPv6. على سبيل المثال ، إليك الإجابة الأولى:

64 bytes from fe80::2392:6213:a15b:66ff%enp3s2: icmp_seq=1 ttl=64 time=0.106 ms


عناوين IPv6 المحلية الخاصة بـ Unicast Link مطلوبة على كافة الواجهات الممكّنة لـ IPv6 [RFC4291] ، بنية عناوين الإصدار 6 من IP. والسبب في ذلك هو أن مضيف IPv6 دائمًا ما يكون لديه عنوان IPv6 أحادي الإرسال تلقائيًا ، والذي يمكنه استخدامه ، على الأقل للتواصل مع مضيفين آخرين من خلال قنواته المتصلة مباشرة. وهذا يشمل التواصل مع تطبيقات المضيفين الآخرين من خلال عناوين المضيف المحلي.

هذا يبسط تطوير وتنفيذ البروتوكولات مثل IPv6 Neighbor Discovery و OSPFv3. كما يسمح لتطبيقات المستخدم النهائي على المضيفين بالتواصل عبر القناة دون الحاجة إلى أي بنية تحتية أخرى تدعم IPv6 على القناة. لا يتطلب الاتصال المباشر بين مضيفي IPv6 المتصلين جهاز توجيه IPv6 أو خادم DHCPv6 المتصل.

تبدأ عناوين الارتباطات المحلية ببادئة من 10 بتات fe80، تليها 54 بتات صفر ، يليها معرف واجهة 64 بت (IID). في الجواب الأول أعلاه 2392:6213:a15b:66ff، هذا هو معرف 64 بت.

الإرسال المتعدد المحلق


بشكل افتراضي ، يتم إرجاع حزم الإرسال المتعدد داخليًا إلى العقدة التي ترسلها. يحدث هذا لكل من عناوين IPv6 و IPv4.

سبب هذا السلوك الافتراضي هو أنه عند إرسال حزم الإرسال المتعدد ، قد يكون هناك أيضًا تطبيق استماع محلي متعدد الإرسال يعمل على مضيف الإرسال نفسه ، وكذلك في مكان ما على الشبكة. يجب أن يتلقى هذا التطبيق المحلي أيضًا حزم الإرسال المتعدد.

يمكننا رؤية هذه الحلقة المحلية للإرسال المتعدد في ناتج ping:

[mark@opy ~]$ ping -w 1 ff02::1%enp3s2
PING ff02::1%enp3s2(ff02::1%enp3s2) 56 data bytes
64 bytes from fe80::2392:6213:a15b:66ff%enp3s2: icmp_seq=1 ttl=64 time=0.106 ms
64 bytes from fe80::1d36:1fff:fefd:82be%enp3s2: icmp_seq=1 ttl=64 time=0.453 ms (DUP!)
...


تأتي الاستجابة الأولى والأسرع (0.106 مللي ثانية مقارنة بـ 0.453 مللي ثانية) من عنوان Link-Local الذي تم تكوينه على الواجهة نفسها enp3s2.

[mark@opy ~]$ ip addr show dev enp3s2 | grep fe80
    inet6 fe80::2392:6213:a15b:66ff/64 scope link noprefixroute 
[mark@opy ~]$


pingتوفر الأداة المساعدة طريقة لقمع التعليقات المحلية للبريد المتعدد الإرسال باستخدام معلمة -L. إذا أرسلنا ping متعدد الإرسال لكل العقد مع هذه العلامة ، فإن الردود تقتصر على العقد البعيدة. لا نتلقى ردًا من عنوان Link-Local لواجهة المرسل.

[mark@opy ~]$ ping -L -w 1 ff02::1%enp3s2
PING ff02::1%enp3s2(ff02::1%enp3s2) 56 data bytes
64 bytes from fe80::1d36:1fff:fefd:82be%enp3s2: icmp_seq=1 ttl=64 time=0.383 ms
 
64 bytes from fe80::f31c:ccff:fe26:a6d9%enp3s2: icmp_seq=1 ttl=64 time=0.467 ms (DUP!)
...


عناوين Ping Link المحلية


كما يمكنك أن تخمن ، فإن عناوين الارتباط المحلي أحادية الإرسال نفسها لا توفر أيضًا معلومات كافية للإشارة إلى الواجهة التي يجب استخدامها للوصول إليها. كما في حالة الاتصال متعدد الإرسال لكل العقد ، نحتاج أيضًا إلى تحديد الواجهة كمعلمة سطر أوامر pingأو معرف منطقة بالعنوان عند تنفيذ الأمر ping لعناوين Link-Local.

هذه المرة يمكننا استخدامها -cللحد من عدد الحزم والردود المرسلة والمستلمة ping، لأننا نقوم بإجراء اختبار إرسال أحادي الإرسال.

[mark@opy ~]$ ping -c 1 fe80::f31c:ccff:fe26:a6d9%enp3s2
 
PING fe80::f31c:ccff:fe26:a6d9%enp3s2(fe80::fad1:11ff:feb7:3704%enp3s2) 56 data bytes
64 bytes from fe80::f31c:ccff:fe26:a6d9%enp3s2: icmp_seq=1 ttl=64 time=0.395 ms
 
--- fe80::f31c:ccff:fe26:a6d9%enp3s2 ping statistics ---
1 packets transmitted, 1 received, 0% packet loss, time 0ms
rtt min/avg/max/mdev = 0.395/0.395/0.395/0.000 ms
[mark@opy ~]$


بينغ (جميع) عناوين IPv6 الأخرى؟


في هذه المقالة ، رأينا كيفية تنفيذ الأمر ping على جميع عقد IPv6 على قناة باستخدام عنوان IPv6 متعدد العقد لجميع العقد ff02::1. لقد رأينا أيضًا كيفية تحديد الواجهة التي سيتم استخدامها مع عنوان IPv6 متعدد العقد لجميع العقد ، نظرًا لأن العنوان وحده لا يمكنه تقديم هذه المعلومات. استخدمنا إما معلمة سطر الأوامر pingأو حددنا واجهة من خلال لاحقة %<zone_id>.

ثم تعرفنا على عناوين الارتباط المحلي أحادية الإرسال ، وهي العناوين المستخدمة للرد على طلبات ارتداد ICMPv6 متعدد العقد.

لقد رأينا أيضًا كيف تعود حزم الإرسال المتعدد إلى المضيف المرسل افتراضيًا وكيفية تعطيل ذلك للأداة المساعدة ping.

أخيرًا ، قمنا بضغط ping على عنوان Link-Local واحد باستخدام اللاحقة%<zone_id>نظرًا لأن عناوين Link-Local وحدها لا توفر معلومات حول الواجهة الصادرة.

إذن ماذا عن اختبار ping على جميع العقد الأخرى واسترداد عناوين Unicast العالمية (GUA) (أي عناوين الإنترنت العامة) أو عناوين Unicast المحلية الفريدة (ULAs)؟ سنغطي هذا في مشاركة المدونة التالية.

هذا كل شئ.

يمكنك معرفة المزيد عن دورتنا في يوم مفتوح .

All Articles