ping6.net
الأساسيات

بروتوكول اكتشاف الجيران في IPv6 (NDP): كيف تكتشف الأجهزة بعضها البعض

نظرة معمقة في NDP، البروتوكول الذي يحل محل ARP في IPv6. تعرف على طلب الموجه، وطلب الجار، وكيفية عمل تحليل العناوين.

ping6.net14 ديسمبر 202425 min read
IPv6NDPNeighbor DiscoveryARP replacementnetworking

NDP يستبدل أكثر من مجرد ARP#

في IPv4، يستخدم تحليل العناوين بروتوكول ARP - وهو بروتوكول منفصل من الطبقة الثانية. اكتشاف الموجه يستخدم ICMP Router Discovery أو DHCP. رسائل إعادة التوجيه تستخدم ICMP. كشف العناوين المكررة غير موجود على الإطلاق.

IPv6 يدمج كل هذه الوظائف في بروتوكول اكتشاف الجيران. NDP يتعامل مع:

  • تحليل العناوين (مهمة ARP)
  • اكتشاف الموجه (العثور على البوابات الافتراضية)
  • اكتشاف البادئة (تعلم بادئات الشبكة للتكوين التلقائي)
  • اكتشاف المعاملات (MTU، حد القفزات)
  • التكوين التلقائي للعناوين (SLAAC)
  • كشف العناوين المكررة (منع التعارضات)
  • إمكانية الوصول للجار (هل لا يزال جاري موجوداً؟)
  • تحديد القفزة التالية (أي موجه يجب أن أستخدم؟)
  • رسائل إعادة التوجيه (توجد مسارات أفضل)

NDP يعمل بالكامل عبر ICMPv6، باستخدام خمسة أنواع من الرسائل (133-137). إنه ليس اختيارياً. حظر NDP وسيتوقف IPv6 عن العمل.

TL;DR - ملخص سريع

النقاط الرئيسية:

  • NDP يدمج ARP واكتشاف الموجه والتكوين التلقائي في بروتوكول واحد يعمل عبر ICMPv6
  • خمسة أنواع من الرسائل (133-137) تتعامل مع كل شيء من تحليل العناوين إلى إعلانات الموجه
  • الأمان: جميع رسائل NDP تتطلب Hop Limit 255 لمنع الهجمات من خارج الوصلة

انتقل إلى: إعلان الموجه | تحليل العناوين في العمل | استكشاف الأخطاء


أنواع رسائل NDP الخمسة#

جميع رسائل NDP هي حزم ICMPv6 بأرقام أنواع محددة. فهم هذه الرسائل الخمس يعني فهم كيفية عمل شبكات IPv6 على المستوى الأساسي.

النوعالاسمالمرسلالغرضالوجهة
133طلب الموجه (RS)المضيفاتطلب معلومات الموجهff02::2 (جميع الموجهات)
134إعلان الموجه (RA)الموجهاتالإعلان عن الوجود والتكوينff02::1 (جميع العقد) أو أحادي الإرسال
135طلب الجار (NS)أي عقدةتحليل العنوان، إمكانية الوصولإرسال متعدد للعقدة المطلوبة أو أحادي الإرسال
136إعلان الجار (NA)أي عقدةالرد على NSأحادي الإرسال أو ff02::1
137إعادة التوجيهالموجهاتتوجد قفزة تالية أفضلأحادي الإرسال (المرسل الأصلي)

كل رسالة NDP لديها متطلب أمان مشترك: يجب أن يكون حد القفزات 255. هذا يمنع الهجمات خارج الرابط لأن الموجهات تخفض حد القفزات. الحزم من المهاجمين عن بعد تصل بحد قفزات < 255 ويتم إسقاطها.

طلب الموجه (النوع 133)#

ترسل المضيفات طلبات الموجه عندما تريد من الموجهات الإعلان عن نفسها على الفور بدلاً من انتظار إعلان الموجه المجدول التالي.

بنية ICMPv6:

 0                   1                   2                   3
 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|     Type      |     Code      |          Checksum             |
|     (133)     |      (0)      |                               |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                            Reserved                           |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|   Options ...
+-+-+-+-+-+-+-+-+-+-+-+-

الحقول:

  • Type: 133
  • Code: 0
  • Reserved: 32 بت، يجب أن يكون صفراً
  • Options: عنوان طبقة الارتباط المصدر (اختياري، يتم تضمينه إذا لم يكن عنوان المصدر ::)

متى يتم الإرسال:

  • عند بدء تشغيل الواجهة
  • عند إقلاع المضيف
  • عند تهيئة مكدس IPv6
  • عندما يحتاج المضيف إلى التكوين بسرعة

عنوان المصدر:

  • عنوان محلي للرابط (إذا تم تكوينه)
  • :: (غير محدد، إذا لم يكن هناك عنوان بعد)

الوجهة: ff02::2 (عنوان إرسال متعدد لجميع الموجهات)

حد القفزات: 255 (مطلوب)

مثال على الحزمة:

IPv6 Header:
  Source: fe80::a4b2:c3d4:e5f6:7890
  Destination: ff02::2
  Next Header: 58 (ICMPv6)
  Hop Limit: 255
 
ICMPv6:
  Type: 133 (Router Solicitation)
  Code: 0
  Options:
    Source Link-Layer Address: 00:1a:2b:3c:4d:5e

تحديد المعدل:

يجب على المضيفات عدم إرسال طلبات الموجه بشكل متكرر جداً. RFC 4861 يوصي بحد أقصى واحد كل 3 ثوانٍ. هذا يمنع إغراق الموجهات أثناء عدم استقرار الشبكة.

لماذا هذا مهم:

بدون RS، ستنتظر المضيفات إعلانات الموجه الدورية (المرسلة كل بضع دقائق). RS يسمح للمضيفات بالحصول على التكوين في ثوانٍ بدلاً من دقائق، مما يسرع تهيئة الشبكة.

إعلان الموجه (النوع 134)#

ترسل الموجهات إعلانات الموجه للإعلان عن وجودها، والإعلان عن بادئات الشبكة، وتوفير معاملات التكوين. هذا هو أساس التكوين التلقائي للعنوان بدون حالة (SLAAC).

بنية ICMPv6:

 0                   1                   2                   3
 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|     Type      |     Code      |          Checksum             |
|     (134)     |      (0)      |                               |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Cur Hop Limit |M|O|H|Prf|Resvd|       Router Lifetime         |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                         Reachable Time                        |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                          Retrans Timer                        |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|   Options ...
+-+-+-+-+-+-+-+-+-+-+-+-

الحقول:

Cur Hop Limit (8 بت): القيمة الموصى بها لحقل حد القفزات في الحزم الصادرة. عادة 64. المضيفات تنسخ هذا إلى حقل حد القفزات في رأس IPv6.

الأعلام (8 بت):

  • M (التكوين المدار للعنوان): استخدام DHCPv6 للعناوين
  • O (التكوين الآخر): استخدام DHCPv6 للتكوين الآخر (DNS، NTP، إلخ)
  • H (وكيل المنزل): الموجه هو وكيل منزل IPv6 المتنقل (نادراً ما يستخدم)
  • Prf (تفضيل الموجه): تفضيل 2 بت (00=متوسط، 01=عالي، 11=منخفض)
  • Reserved: 3 بت

Router Lifetime (16 بت): إلى متى (بالثواني) لاستخدام هذا الموجه كبوابة افتراضية. 0 تعني «ليس موجه افتراضي». الحد الأقصى 9000 ثانية (2.5 ساعة).

Reachable Time (32 بت): إلى متى (بالميلي ثانية) لاعتبار الجار قابلاً للوصول بعد تلقي تأكيد إمكانية الوصول. 0 يعني غير محدد (استخدام الافتراضي أو القيمة المستلمة سابقاً).

Retrans Timer (32 بت): الوقت بين إعادة إرسال طلبات الجيران (بالميلي ثانية). يُستخدم لتحليل العنوان وكشف عدم إمكانية الوصول للجار.

الخيارات الشائعة:

Source Link-Layer Address (النوع 1): عنوان MAC للموجه. يسمح للمضيفات بتخطي طلب الجار للموجه.

MTU (النوع 5): MTU الموصى به للرابط. عادة 1500.

Prefix Information (النوع 3): بادئات الشبكة للتكوين التلقائي للعنوان. هذا هو الخيار الحاسم لـ SLAAC.

RDNSS (النوع 25): عناوين خادم DNS المتكرر. RFC 8106.

DNSSL (النوع 31): قائمة البحث DNS. RFC 8106.

متى يتم الإرسال:

  • بشكل دوري (كل 200-600 ثانية، عادة 200)
  • رداً على طلب الموجه
  • عندما يتغير تكوين الموجه

المصدر: عنوان محلي للرابط للموجه (fe80::/10)

الوجهة:

  • ff02::1 (إرسال متعدد لجميع العقد) للإعلانات الدورية
  • أحادي الإرسال إلى المضيف الطالب عند الرد على RS

حد القفزات: 255 (مطلوب)

مثال على الحزمة:

IPv6 Header:
  Source: fe80::1
  Destination: ff02::1
  Next Header: 58 (ICMPv6)
  Hop Limit: 255
 
ICMPv6:
  Type: 134 (Router Advertisement)
  Code: 0
  Cur Hop Limit: 64
  Flags: M=0, O=0 (SLAAC only)
  Router Lifetime: 1800 seconds (30 minutes)
  Reachable Time: 30000 ms
  Retrans Timer: 1000 ms
 
  Options:
    Source Link-Layer Address: 00:11:22:33:44:55
    MTU: 1500
    Prefix Information:
      Prefix: 2001:db8:1234:5678::/64
      Valid Lifetime: 86400 (24 hours)
      Preferred Lifetime: 14400 (4 hours)
      Flags: L=1 (on-link), A=1 (autonomous/SLAAC)
    RDNSS:
      Lifetime: 3600
      Addresses: 2001:4860:4860::8888, 2001:4860:4860::8844

مجموعات الأعلام:

MOالسلوك
00SLAAC فقط، لا DHCPv6 (الأكثر شيوعاً)
01SLAAC للعناوين، DHCPv6 لـ DNS/NTP/إلخ
10DHCPv6 للعناوين (غير عادي، نادراً ما يستخدم)
11DHCPv6 لكل شيء (شبكات المؤسسات)

خيار معلومات البادئة:

هذا الخيار هو ما يجعل SLAAC ممكناً. يخبر المضيفات أي بادئة شبكة يجب استخدامها عند التكوين التلقائي للعناوين.

 0                   1                   2                   3
 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|     Type      |    Length     | Prefix Length |L|A|R|Reserved1|
|      (3)      |      (4)      |               | | | |         |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                         Valid Lifetime                        |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                       Preferred Lifetime                      |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                           Reserved2                           |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                                                               |
+                                                               +
|                                                               |
+                            Prefix                             +
|                                                               |
+                                                               +
|                                                               |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

الحقول:

  • Prefix Length: عادة 64 لـ SLAAC
  • علم L: على الرابط (البادئة موجودة على الرابط المحلي)
  • علم A: مستقل (استخدام لـ SLAAC)
  • علم R: عنوان الموجه (البادئة تحتوي على معرف واجهة الموجه)
  • Valid Lifetime: إلى متى تكون العناوين صالحة (عادة 86400 = 24 ساعة)
  • Preferred Lifetime: إلى متى لاستخدام العناوين للاتصالات الجديدة (عادة 14400 = 4 ساعات)
  • Prefix: بادئة الشبكة الفعلية (مثل، 2001:db8:1234:5678::)

عندما A=1، تقوم المضيفات بإنشاء العناوين من خلال دمج البادئة مع معرف الواجهة:

Prefix from RA:      2001:db8:1234:5678::/64
Interface ID:        a4b2:c3d4:e5f6:7890  (derived from MAC or random)
Resulting address:   2001:db8:1234:5678:a4b2:c3d4:e5f6:7890

إعلانات الموجه حاسمة

حظر ICMPv6 نوع 134 وسيتوقف SLAAC عن العمل. ستكون للمضيفات عناوين محلية للرابط فقط (fe80::/10) بدون اتصال عالمي. هذا واحد من أكثر أخطاء تكوين IPv6 شيوعاً - جدران الحماية التي تحظر كل ICMPv6 دون فهم الأنواع الأساسية.

طلب الجار (النوع 135)#

طلب الجار هو بديل IPv6 لـ ARP. يحلل عناوين IPv6 إلى عناوين طبقة الارتباط (MAC) ويتحقق من أن الجيران لا يزالون قابلين للوصول.

بنية ICMPv6:

 0                   1                   2                   3
 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|     Type      |     Code      |          Checksum             |
|     (135)     |      (0)      |                               |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                           Reserved                            |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                                                               |
+                                                               +
|                                                               |
+                       Target Address                          +
|                                                               |
+                                                               +
|                                                               |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|   Options ...
+-+-+-+-+-+-+-+-+-+-+-+-

الحقول:

  • Type: 135
  • Code: 0
  • Reserved: 32 بت، يجب أن يكون صفراً
  • Target Address: عنوان IPv6 المستعلم عنه
  • Options: عنوان طبقة الارتباط المصدر (مضمن ما لم يكن المصدر ::)

ثلاث حالات استخدام:

1. تحليل العنوان (بديل ARP)#

المضيف A يحتاج إلى إرسال حزمة إلى المضيف B على نفس الرابط ولكن لا يعرف عنوان MAC لـ B.

العملية:

  1. A يتحقق من ذاكرة التخزين المؤقت للجار - لا يوجد إدخال لـ B
  2. A يرسل NS إلى عنوان الإرسال المتعدد للعقدة المطلوبة لـ B
  3. B يستقبل NS ويستجيب بـ NA يحتوي على MAC الخاص به
  4. A يخزن التعيين مؤقتاً ويرسل الحزمة الأصلية

مثال:

# Host A wants to send to 2001:db8::10
 
IPv6 Header:
  Source: 2001:db8::1
  Destination: ff02::1:ff00:10  (solicited-node multicast)
  Hop Limit: 255
 
ICMPv6:
  Type: 135 (Neighbor Solicitation)
  Target Address: 2001:db8::10
  Options:
    Source Link-Layer Address: 00:1a:2b:3c:4d:5e

حساب عنوان الإرسال المتعدد للعقدة المطلوبة:

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

Formula: ff02::1:ff + last 24 bits of target address
 
Examples:
  2001:db8::10              -> ff02::1:ff00:10
  2001:db8::a4b2:c3d4:e5f6:7890 -> ff02::1:ff:f6:7890
  fe80::1                   -> ff02::1:ff00:1

هذا يقلل من المعالجة غير الضرورية. في IPv4، بث ARP يصل إلى كل مضيف على الشبكة. في IPv6، فقط المضيفات التي تنتهي عناوينها بنفس 24 بت تنضم إلى مجموعة الإرسال المتعدد وتستقبل NS.

2. كشف عدم إمكانية الوصول للجار (NUD)#

التحقق من أن الجار الذي كان قابلاً للوصول سابقاً لا يزال قابلاً للوصول.

العملية:

  1. المضيف لم يتلق حركة مرور من الجار مؤخراً
  2. المضيف يرسل NS (أحادي الإرسال) إلى الجار
  3. إذا تم استلام NA، الجار قابل للوصول
  4. إذا لم يكن هناك رد بعد المحاولات، يعتبر الجار غير قابل للوصول

مثال:

IPv6 Header:
  Source: 2001:db8::1
  Destination: 2001:db8::10  (unicast to neighbor)
  Hop Limit: 255
 
ICMPv6:
  Type: 135 (Neighbor Solicitation)
  Target Address: 2001:db8::10
  Options:
    Source Link-Layer Address: 00:1a:2b:3c:4d:5e

NUD يعمل تلقائياً في الخلفية. عندما ترسل المضيفات حركة المرور، فإنها تتتبع ما إذا كان الجيران يستجيبون. إذا صمت الجار، يتحقق NUD من إمكانية الوصول قبل إعلانه ميتاً.

3. كشف العنوان المكرر (DAD)#

قبل استخدام عنوان IPv6، تقوم المضيفات بإجراء DAD للتأكد من عدم استخدام عقدة أخرى له. هذا يمنع تعارضات العناوين في SLAAC.

العملية:

  1. المضيف ينشئ عنواناً مؤقتاً (عبر SLAAC، DHCPv6، أو تكوين يدوي)
  2. المضيف يرسل NS بمصدر :: والهدف = العنوان المؤقت
  3. إذا استجاب شخص ما بـ NA، فالعنوان قيد الاستخدام بالفعل (تعارض)
  4. إذا لم يكن هناك رد بعد المهلة، فالعنوان فريد ويمكن استخدامه

مثال:

# Host wants to use 2001:db8::a4b2:c3d4:e5f6:7890
# Sends DAD NS first
 
IPv6 Header:
  Source: ::  (unspecified address—host has no address yet)
  Destination: ff02::1:ff:f6:7890  (solicited-node multicast)
  Hop Limit: 255
 
ICMPv6:
  Type: 135 (Neighbor Solicitation)
  Target Address: 2001:db8::a4b2:c3d4:e5f6:7890
  Options: (none—source is ::)

إذا كان مضيف آخر يستخدم هذا العنوان، فإنه يرسل إعلان جار. المضيف الطالب يكتشف التعارض ويجب أن يختار عنواناً مختلفاً.

مهلة DAD: عادة ثانية واحدة. المضيف ينتظر هذا الوقت للحصول على رد. إذا كان هادئاً، يُفترض أن العنوان فريد.

مشكلة أمنية: DAD ليس لديه مصادقة. يمكن للمهاجم الرد على كل طلب DAD، مما يمنع المضيفات من تكوين العناوين. يسمى هذا هجوم DAD DoS. الحلول تشمل SEND (اكتشاف الجار الآمن) أو RA Guard، لكن اعتماده محدود.

إعلان الجار (النوع 136)#

يُرسل رداً على طلب الجار أو بشكل غير مرغوب للإعلان عن تغييرات العنوان/طبقة الارتباط.

بنية ICMPv6:

 0                   1                   2                   3
 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|     Type      |     Code      |          Checksum             |
|     (136)     |      (0)      |                               |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|R|S|O|                     Reserved                            |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                                                               |
+                                                               +
|                                                               |
+                       Target Address                          +
|                                                               |
+                                                               +
|                                                               |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|   Options ...
+-+-+-+-+-+-+-+-+-+-+-+-

الحقول:

الأعلام:

  • R (موجه): المرسل هو موجه
  • S (مطلوب): الإعلان هو رد على NS
  • O (تجاوز): تجاوز إدخال ذاكرة التخزين المؤقت الموجود

Target Address: العنوان الذي يُرسل من أجله هذا الإعلان

Options: عنوان طبقة الارتباط المستهدف (عنوان MAC)

متى يتم الإرسال:

  • رداً على طلب الجار (S=1)
  • إعلان غير مرغوب عن تغيير العنوان (S=0)
  • NA مجاني لتحديث الجيران بعد تغيير عنوان طبقة الارتباط

الوجهة:

  • أحادي الإرسال إلى العقدة الطالبة (عند الرد على NS)
  • ff02::1 (جميع العقد) للإعلانات غير المرغوبة

حد القفزات: 255 (مطلوب)

مثال على الرد على NS:

IPv6 Header:
  Source: 2001:db8::10
  Destination: 2001:db8::1  (unicast to requester)
  Hop Limit: 255
 
ICMPv6:
  Type: 136 (Neighbor Advertisement)
  Flags: R=0, S=1 (solicited response), O=1 (override)
  Target Address: 2001:db8::10
  Options:
    Target Link-Layer Address: 00:aa:bb:cc:dd:ee

معاني الأعلام:

S=1: هذا رد على NS الخاص بك. حدّث ذاكرة التخزين المؤقت الخاصة بك.

S=0: إعلان غير مرغوب. لقد غيرت شيئاً ما.

O=1: تجاوز إدخال ذاكرة التخزين المؤقت الموجود بهذه المعلومات.

O=0: حدّث ذاكرة التخزين المؤقت فقط إذا لم يكن هناك إدخال موجود.

مثال NA غير مرغوب:

المضيف يغير عنوان MAC الخاص به (نادر، ولكن يحدث مع الأجهزة الافتراضية أو إعادة تكوين الواجهة). يرسل NA غير مرغوب لتحديث الجيران:

IPv6 Header:
  Source: 2001:db8::10
  Destination: ff02::1  (all-nodes)
  Hop Limit: 255
 
ICMPv6:
  Type: 136 (Neighbor Advertisement)
  Flags: R=0, S=0 (unsolicited), O=1 (override)
  Target Address: 2001:db8::10
  Options:
    Target Link-Layer Address: 00:ff:ee:dd:cc:bb  (new MAC)

جميع الجيران يستقبلون هذا ويحدثون ذاكرة التخزين المؤقت الخاصة بهم.

إعادة التوجيه (النوع 137)#

ترسل الموجهات رسائل إعادة التوجيه لإبلاغ المضيفات بأن موجه القفزة الأولى الأفضل موجود لوجهة معينة.

بنية ICMPv6:

 0                   1                   2                   3
 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|     Type      |     Code      |          Checksum             |
|     (137)     |      (0)      |                               |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                           Reserved                            |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                                                               |
+                                                               +
|                                                               |
+                       Target Address                          +
|                                                               |
+                                                               +
|                                                               |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                                                               |
+                                                               +
|                                                               |
+                     Destination Address                       +
|                                                               |
+                                                               +
|                                                               |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|   Options ...
+-+-+-+-+-+-+-+-+-+-+-+-

الحقول:

  • Type: 137
  • Code: 0
  • Target Address: موجه القفزة التالية الأفضل (أو الوجهة إذا كانت على الرابط)
  • Destination Address: الوجهة التي يجب أن تستخدم المسار الأفضل
  • Options: عنوان طبقة الارتباط المستهدف، رأس معاد توجيهه (جزء من الحزمة الأصلية)

متى يتم الإرسال:

الموجه R1 يستقبل حزمة من المضيف A متجهة إلى المضيف B. R1 يعرف أن الموجه R2 (على نفس الرابط مع A) هو قفزة تالية أفضل لـ B. R1 يعيد توجيه الحزمة إلى R2 ويرسل إعادة توجيه إلى A يخبره باستخدام R2 مباشرة في المستقبل.

سيناريو مثال:

Network topology:
  Host A: 2001:db8:1::10
  Router R1: 2001:db8:1::1 (default gateway for A)
  Router R2: 2001:db8:1::2 (better route to 2001:db8:2::/64)
  Destination B: 2001:db8:2::20
 
Flow:
1. A sends packet to B via R1 (default gateway)
2. R1 sees that R2 is a better next-hop for 2001:db8:2::/64
3. R1 forwards packet to R2
4. R1 sends Redirect to A:
   Target Address: 2001:db8:1::2 (R2)
   Destination Address: 2001:db8:2::20 (B)
5. A updates routing table: use R2 for 2001:db8:2::/64
6. A's future packets to B go directly to R2

رسالة إعادة التوجيه من R1 إلى A:

IPv6 Header:
  Source: fe80::1  (R1's link-local)
  Destination: 2001:db8:1::10  (Host A)
  Hop Limit: 255
 
ICMPv6:
  Type: 137 (Redirect)
  Target Address: fe80::2  (R2—better next-hop)
  Destination Address: 2001:db8:2::20  (B—destination to reach via R2)
  Options:
    Target Link-Layer Address: 00:11:22:33:44:55 (R2's MAC)
    Redirected Header: (original packet header that triggered redirect)

اعتبارات الأمان:

يمكن إساءة استخدام رسائل إعادة التوجيه. يمكن للمهاجم على الرابط المحلي إرسال إعادات توجيه ضارة من أجل:

  • توجيه حركة المرور عبر جهاز المهاجم (هجوم الرجل في الوسط)
  • ثقب حركة المرور الأسود عن طريق إعادة التوجيه إلى موجه غير موجود
  • إنشاء حلقات توجيه

الحماية:

  • SEND (اكتشاف الجار الآمن): يصادق على رسائل إعادة التوجيه
  • العديد من المضيفات تتجاهل إعادات التوجيه من موجهات غير البوابة الافتراضية
  • بعض الشبكات الواعية بالأمان تعطل معالجة إعادة التوجيه بالكامل
  • يجب أن تأتي إعادات التوجيه من موجه القفزة الأولى الحالي (يتم فحصه بواسطة المضيفات)

هل يجب السماح بإعادات التوجيه؟

شبكات المنازل/الصغيرة: آمن. يحسن التوجيه عندما توجد موجهات متعددة.

شبكات المؤسسات: غالباً معطلة. جداول التوجيه المتحكم فيها والمخاطر الأمنية المحتملة تفوق الفوائد.

مراكز البيانات: معطلة عادة. التوجيه الثابت أو البروتوكولات الديناميكية (BGP، OSPF) تدير المسارات.

تحليل العنوان في العمل#

دعنا نتتبع العملية الكاملة للمضيف A الذي يرسل حزمة إلى المضيف B على نفس الرابط.

الحالة الأولية:

  • المضيف A: 2001:db8::1 (MAC: aa:aa:aa:aa:aa:aa)
  • المضيف B: 2001:db8::10 (MAC: bb:bb:bb:bb:bb:bb)
  • ذاكرة التخزين المؤقت للجار لـ A فارغة

الخطوة 1: التطبيق يبدأ الاتصال

# On Host A
ping6 2001:db8::10

الخطوة 2: التحقق من ذاكرة التخزين المؤقت للجار

# A checks neighbor cache
ip -6 neigh show 2001:db8::10
# (empty—no entry)

الخطوة 3: إرسال طلب الجار

A يرسل NS إلى عنوان الإرسال المتعدد للعقدة المطلوبة:

IPv6 Header:
  Source: 2001:db8::1
  Destination: ff02::1:ff00:10  (solicited-node for 2001:db8::10)
  Hop Limit: 255
 
Ethernet Header:
  Source MAC: aa:aa:aa:aa:aa:aa
  Dest MAC: 33:33:ff:00:00:10  (multicast MAC for ff02::1:ff00:10)
 
ICMPv6:
  Type: 135 (Neighbor Solicitation)
  Target Address: 2001:db8::10
  Options:
    Source Link-Layer Address: aa:aa:aa:aa:aa:aa

الخطوة 4: B يستقبل NS

المضيف B يستمع إلى ff02::1:ff00:10 (لأن عنوانه ينتهي بـ :10). يستقبل NS ويعالجه.

الخطوة 5: B يرسل إعلان الجار

IPv6 Header:
  Source: 2001:db8::10
  Destination: 2001:db8::1  (unicast to A)
  Hop Limit: 255
 
Ethernet Header:
  Source MAC: bb:bb:bb:bb:bb:bb
  Dest MAC: aa:aa:aa:aa:aa:aa
 
ICMPv6:
  Type: 136 (Neighbor Advertisement)
  Flags: R=0, S=1 (solicited), O=1 (override)
  Target Address: 2001:db8::10
  Options:
    Target Link-Layer Address: bb:bb:bb:bb:bb:bb

الخطوة 6: A يحدّث ذاكرة التخزين المؤقت للجار

# A's neighbor cache now has entry
ip -6 neigh show 2001:db8::10
# 2001:db8::10 dev eth0 lladdr bb:bb:bb:bb:bb:bb REACHABLE

الخطوة 7: A يرسل الحزمة الأصلية

الآن بعد أن A يعرف MAC لـ B، يرسل حزمة ping:

IPv6 Header:
  Source: 2001:db8::1
  Destination: 2001:db8::10
 
Ethernet Header:
  Source MAC: aa:aa:aa:aa:aa:aa
  Dest MAC: bb:bb:bb:bb:bb:bb  (learned from NA)
 
ICMPv6:
  Type: 128 (Echo Request)

الوقت الإجمالي: ميلي ثانية. العملية غير مرئية للتطبيقات.

حالات ذاكرة التخزين المؤقت للجار#

إدخالات ذاكرة التخزين المؤقت للجار تمر بعدة حالات حيث يتتبع NUD إمكانية الوصول.

الحالةالمعنىالإجراء التالي
INCOMPLETEتم إرسال NS، في انتظار NAانتهاء المهلة أو استلام NA
REACHABLEتم استلام NA مؤخراً، تأكيد إمكانية الوصولإرسال حركة المرور أو انتهاء المهلة
STALEالإدخال قديم، لم يتم تأكيده مؤخراًإرسال حركة المرور (يؤدي إلى التحقيق)
DELAYتم إرسال حركة المرور إلى إدخال قديم، في الانتظارانتهاء المهلة يؤدي إلى التحقيق
PROBEإرسال NS للتحقق من إمكانية الوصولاستلام NA أو انتهاء المهلة
FAILEDلا رد على التحقيقاتإزالة الإدخال

انتقالات الحالة:

INCOMPLETE --NA received--> REACHABLE
REACHABLE --timeout--> STALE
STALE --traffic sent--> DELAY
DELAY --timeout--> PROBE
PROBE --NA received--> REACHABLE
PROBE --timeout--> FAILED

التحقق من ذاكرة التخزين المؤقت للجار (Linux):

ip -6 neigh show
 
# Example output:
# 2001:db8::1 dev eth0 lladdr aa:aa:aa:aa:aa:aa REACHABLE
# 2001:db8::10 dev eth0 lladdr bb:bb:bb:bb:bb:bb STALE
# fe80::1 dev eth0 lladdr cc:cc:cc:cc:cc:cc DELAY

المؤقتات:

  • مهلة REACHABLE: 30 ثانية (قابلة للتكوين، من RA Reachable Time)
  • مهلة DELAY: 5 ثوانٍ قبل الانتقال إلى PROBE
  • فترة إعادة الإرسال: ثانية واحدة (قابلة للتكوين، من RA Retrans Timer)
  • MAX_MULTICAST_SOLICIT: 3 محاولات قبل إعلان FAILED

هذه تضمن اكتشاف الجيران الميتين بسرعة مع تقليل حركة المرور NUD غير الضرورية.

SLAAC: التكوين التلقائي للعنوان#

الجمع بين إعلانات الموجه وكشف العنوان المكرر ينشئ التكوين التلقائي للعنوان بدون حالة. المضيفات تكوّن نفسها بدون خوادم DHCP.

عملية SLAAC الكاملة:

الخطوة 1: الواجهة تصبح نشطة

المضيف يمكّن IPv6 على الواجهة eth0.

الخطوة 2: إنشاء عنوان محلي للرابط

fe80:: + interface identifier
fe80::a4b2:c3d4:e5f6:7890  (if using MAC-derived IID)
fe80::1234:5678:9abc:def0  (if using random IID)

الخطوة 3: تنفيذ DAD على المحلي للرابط

إرسال NS بمصدر :: للتحقق من أن عنوان fe80:: فريد.

الخطوة 4: إرسال طلب الموجه

IPv6 Header:
  Source: fe80::a4b2:c3d4:e5f6:7890
  Destination: ff02::2
  Hop Limit: 255
 
ICMPv6:
  Type: 133 (Router Solicitation)

الخطوة 5: استقبال إعلان الموجه

ICMPv6:
  Type: 134 (Router Advertisement)
  Flags: M=0, O=0 (SLAAC)
  Prefix Information:
    Prefix: 2001:db8:1234:5678::/64
    Flags: A=1 (autonomous)
    Valid Lifetime: 86400
    Preferred Lifetime: 14400

الخطوة 6: إنشاء عنوان عالمي

Prefix: 2001:db8:1234:5678::/64
IID: a4b2:c3d4:e5f6:7890
Result: 2001:db8:1234:5678:a4b2:c3d4:e5f6:7890

الخطوة 7: تنفيذ DAD على العنوان العالمي

إرسال NS للتحقق من أن 2001:db8:1234:5678:a4b2:c3d4:e5f6:7890 فريد.

الخطوة 8: تكوين العنوان

ip -6 addr show eth0
 
# Output:
# inet6 2001:db8:1234:5678:a4b2:c3d4:e5f6:7890/64 scope global dynamic
# inet6 fe80::a4b2:c3d4:e5f6:7890/64 scope link

الخطوة 9: تعيين المسار الافتراضي

استخدام عنوان الموجه المحلي للرابط كبوابة افتراضية:

ip -6 route show
 
# Output:
# default via fe80::1 dev eth0 metric 1024
# 2001:db8:1234:5678::/64 dev eth0 proto kernel metric 256

الوقت الإجمالي: بضع ثوانٍ.

ملحقات الخصوصية (RFC 4941):

معرفات الواجهة المشتقة من MAC قابلة للتتبع عبر الشبكات. ملحقات الخصوصية تولد IID عشوائية تتغير بشكل دوري.

Original: 2001:db8:1234:5678:a4b2:c3d4:e5f6:7890  (static)
Privacy:  2001:db8:1234:5678:1a2b:3c4d:5e6f:7a8b  (changes daily)

معظم أنظمة التشغيل الحديثة تمكّن ملحقات الخصوصية افتراضياً للاتصالات الصادرة مع الحفاظ على العنوان المستقر للاتصالات الواردة.

الاعتبارات الأمنية#

NDP لديه نقاط ضعف لأنه صُمم بافتراض شبكات محلية موثوقة. يمكن للمهاجمين على نفس الرابط:

إعلانات الموجه المارقة#

المهاجم يرسل RA مزيفة مع:

  • بادئة خاطئة (ثقب حركة المرور الأسود أو التوجيه عبر المهاجم)
  • أعمار قصيرة (إجبار معالجة RA المتكررة)
  • علم M=1 (إجبار DHCPv6 على خادم المهاجم)

التأثير: السيطرة الكاملة على تكوين المضيف.

التخفيف:

  • RA Guard: ميزة التبديل التي تحظر RA من منافذ غير الموجه
  • SEND (اكتشاف الجار الآمن): المصادقة التشفيرية (معقدة، نادراً ما يتم نشرها)
  • تفضيل الموجه: استخدام قيم التفضيل العالية على الموجهات الشرعية

انتحال إعلان الجار#

المهاجم يرسل NA مزيفة يدعي أنه مضيف آخر.

التأثير: هجمات الرجل في الوسط، اعتراض حركة المرور.

التخفيف:

  • SEND: يصادق على NA
  • أمان المنفذ: التبديلات تفرض ربط عنوان MAC
  • المراقبة: كشف عناوين MAC المكررة

DAD DoS#

المهاجم يستجيب لكل طلب DAD، مما يمنع تكوين العنوان.

التأثير: المضيفات لا يمكنها الحصول على عناوين، لا اتصال.

التخفيف:

  • SEND: يصادق على رسائل DAD
  • تحديد المعدل: تحديد NA من مصدر واحد
  • العناوين الثابتة: تجاوز SLAAC بالكامل (غير قابل للتوسع)

هجمات إعادة التوجيه#

المهاجم يرسل إعادات توجيه مزيفة توجه حركة المرور عبر المهاجم.

التأثير: هجوم الرجل في الوسط، اعتراض حركة المرور.

التخفيف:

  • تعطيل إعادات التوجيه: العديد من أنظمة التشغيل تسمح بتعطيل معالجة إعادة التوجيه
  • SEND: يصادق على إعادات التوجيه
  • التحقق من المصدر: يجب على المضيفات التحقق من أن إعادات التوجيه تأتي من موجه القفزة الأولى الحالي

الواقع: معظم الشبكات لا تستخدم SEND بسبب التعقيد. RA Guard على التبديلات هو الدفاع العملي لشبكات المؤسسات.

استكشاف مشاكل NDP وإصلاحها#

المضيف ليس لديه عنوان عالمي#

الأعراض:

  • عناوين fe80:: فقط
  • يمكن ping المحلي للرابط، وليس العالمي
  • لا يوجد مسار افتراضي

التشخيص:

# Check for Router Advertisements
sudo tcpdump -i eth0 -vv 'icmp6 && ip6[40] == 134'
 
# Check RA acceptance
sysctl net.ipv6.conf.eth0.accept_ra
# Should be 1 or 2 for hosts
 
# Manually send RS
rdisc6 eth0

الأسباب الشائعة:

  • لا يوجد موجه على الرابط
  • جدار الحماية يحظر النوع 134
  • accept_ra معطل
  • إعادة توجيه IPv6 ممكّنة (تعطل معالجة RA)

الإصلاح: تمكين الموجه، السماح بـ ICMPv6 نوع 134، تعيين accept_ra=1.

ذاكرة التخزين المؤقت للجار دائماً FAILED#

الأعراض:

  • لا يمكن الوصول إلى الجيران
  • تم إرسال NS ولكن لم يتم استلام NA
  • ذاكرة التخزين المؤقت للجار تظهر FAILED

التشخيص:

# Watch NS/NA exchange
sudo tcpdump -i eth0 -vv 'icmp6 && (ip6[40] == 135 || ip6[40] == 136)'
 
# Check neighbor cache
ip -6 neigh show
 
# Manual NS (Linux ndisc6 tool)
ndisc6 2001:db8::10 eth0

الأسباب الشائعة:

  • جدار الحماية يحظر الأنواع 135/136
  • IPv6 معطل على المضيف المستهدف
  • التبديل يرشح الإرسال المتعدد
  • رابط خاطئ (الهدف على شبكة فرعية مختلفة)

الإصلاح: السماح بـ NDP عبر جدران الحماية، التحقق من تمكين IPv6 على الهدف.

فشل DAD#

الأعراض:

  • العنوان يظهر «dadfailed»
  • الواجهة لا يمكنها تكوين العنوان
  • سجلات النواة تظهر تعارضات DAD

التشخيص:

# Check address status
ip -6 addr show eth0
 
# Example output with DAD failure:
# inet6 2001:db8::10/64 scope global tentative dadfailed
 
# Check for duplicate
ping6 -c 1 2001:db8::10

الأسباب الشائعة:

  • مضيف آخر يستخدم نفس العنوان
  • مهاجم ينتحل NA (DAD DoS)
  • أجهزة افتراضية بعناوين MAC مستنسخة

الإصلاح: تغيير العنوان، التحقيق في المضيفات المكررة، فحص تكوين VM.

أمثلة عملية بالأدوات#

مراقبة NDP باستخدام tcpdump#

# All NDP traffic
sudo tcpdump -i eth0 -vv 'icmp6 && ip6[40] >= 133 && ip6[40] <= 137'
 
# Router Advertisements only
sudo tcpdump -i eth0 -vv 'icmp6 && ip6[40] == 134'
 
# Address resolution (NS/NA)
sudo tcpdump -i eth0 -vv 'icmp6 && (ip6[40] == 135 || ip6[40] == 136)'
 
# Filter by target address
sudo tcpdump -i eth0 -vv 'icmp6 && ip6[40] == 135' | grep '2001:db8::10'

إدارة ذاكرة التخزين المؤقت للجار يدوياً#

# Show all neighbors
ip -6 neigh show
 
# Show specific neighbor
ip -6 neigh show 2001:db8::10
 
# Delete entry (force re-resolution)
sudo ip -6 neigh del 2001:db8::10 dev eth0
 
# Add static entry
sudo ip -6 neigh add 2001:db8::10 lladdr aa:bb:cc:dd:ee:ff dev eth0

اختبار SLAAC#

# Flush addresses
sudo ip -6 addr flush dev eth0
 
# Re-enable IPv6
sudo sysctl -w net.ipv6.conf.eth0.disable_ipv6=0
 
# Watch autoconfiguration
ip -6 addr show eth0
ip -6 route show

مقالات ذات صلة#

  • شرح ICMPv6 - NDP يعمل عبر ICMPv6. افهم البروتوكول الأساسي.
  • أنواع عناوين IPv6 - تعرف على المحلي للرابط، والإرسال المتعدد للعقدة المطلوبة، وأنواع العناوين الأخرى التي يستخدمها NDP.
  • أمان IPv6 - حماية NDP من الهجمات مع السماح بالوظائف الأساسية.

اختبار NDP في العمل

استخدم أداة Ping الخاصة بنا لتشغيل تحليل العنوان وTraceroute لرؤية كيف تكتشف المضيفات موجهات القفزة التالية.

الأسئلة المتداولة#

لماذا يستخدم NDP الإرسال المتعدد بدلاً من البث مثل ARP؟

الإرسال المتعدد أكثر كفاءة. بث ARP يصل إلى كل مضيف على الشبكة - يجب على الجميع معالجة الإطار حتى لو لم يكونوا الهدف. NDP يستخدم عناوين الإرسال المتعدد للعقدة المطلوبة المحسوبة من عنوان IPv6 المستهدف. فقط المضيفات ذات العناوين المتطابقة تنضم إلى مجموعة الإرسال المتعدد وتستقبل الحزمة. المضيفات ترشح الإرسال المتعدد غير المتطابق في الأجهزة (NIC)، مما يقلل من حمل CPU. على الشبكات الكبيرة بآلاف المضيفات، هذا يحدث فرقاً كبيراً في الأداء.

هل يمكنني تعطيل NDP كما يمكنني تعطيل ARP؟

لا. NDP إلزامي لعمليات IPv6. يتعامل مع تحليل العنوان، واكتشاف الموجه، والتكوين التلقائي. عطّل NDP وسيتوقف IPv6 عن العمل بالكامل. على عكس IPv4 حيث يمكنك استخدام إدخالات ARP الثابتة، يتطلب IPv6 NDP لإعلانات الموجه (التي توفر البوابات الافتراضية والبادئات). حتى مع الجيران الثابتين، لن يكون لديك طريقة لتعلم الموجهات أو تكوين العناوين تلقائياً.

كيف يمنع كشف العنوان المكرر التعارضات؟

قبل استخدام أي عنوان، ترسل المضيفات طلب جار بعنوان مصدر :: (غير محدد) والهدف المحدد للعنوان الذي تريد استخدامه. إذا كان مضيف آخر يستخدم هذا العنوان بالفعل، فإنه يستجيب بإعلان جار. المضيف الطالب يرى الاستجابة، ويكتشف التعارض، ويجب أن يختار عنواناً مختلفاً. إذا لم يصل رد خلال حوالي ثانية واحدة، يُفترض أن العنوان فريد. DAD يعمل لكل من العناوين المحلية للرابط والعالمية.

ما هي عناوين الإرسال المتعدد للعقدة المطلوبة؟

عناوين الإرسال المتعدد للعقدة المطلوبة مشتقة من آخر 24 بت من عنوان IPv6 باستخدام الصيغة ff02::1:ff:XX:XXXX. كل عنوان IPv6 ينضم تلقائياً إلى مجموعة الإرسال المتعدد للعقدة المطلوبة المقابلة له. عند إجراء تحليل العنوان، يرسل المرسل NS إلى عنوان العقدة المطلوبة بدلاً من البث. فقط المضيفات ذات العناوين التي تنتهي بنفس 24 بت تستقبله. هذا يقلل من المعالجة غير الضرورية مقارنة بـ ARP القائم على البث.

لماذا يجب أن تحتوي حزم NDP على حد قفزات 255؟

الأمان. NDP الشرعي ينشأ دائماً على الرابط المحلي ويضبط حد القفزات على 255. الموجهات تخفض حد القفزات عند إعادة التوجيه، لذلك تصل الحزم من المهاجمين عن بعد بحد قفزات < 255. برفض حزم NDP بحد قفزات != 255، تحمي المضيفات من المهاجمين خارج الرابط الذين يرسلون إعلانات موجه مزيفة، أو إعلانات جار، أو إعادات توجيه. هذا الفحص البسيط يمنع العديد من الهجمات عن بعد دون الحاجة إلى مصادقة معقدة.

هل يجب أن أنشر SEND (اكتشاف الجار الآمن)؟

على الأرجح لا. SEND يوفر مصادقة تشفيرية لـ NDP باستخدام التشفير بالمفتاح العام، مما يمنع هجمات الانتحال. نظرياً رائع. عملياً معقد، يتطلب بنية تحتية PKI، دعم نظام التشغيل ضعيف، ويضيف تأخيراً للعمليات الحساسة للوقت مثل تحليل العنوان. معظم الشبكات تستخدم تخفيفات أبسط: RA Guard على التبديلات (يحظر RA من منافذ غير الموجه)، ومراقبة RA المارقة، والأمن المادي/طبقة الارتباط. SEND مناسب للبيئات عالية الأمان الراغبة في الاستثمار في البنية التحتية والتعقيد.