الخلاصة

  • استخدم IGMPv1 وv2 مؤقتات عشوائية لتوزيع الردود، وكان المضيف المنتظر يلغي تقريره إذا سمع تقرير عضوية صالحاً للمجموعة نفسها. وفي العادة عرف الموجّه حقيقة واحدة: يوجد عضو واحد على الأقل في الوصلة.
  • لم يكن Leave في v2 إثباتاً لخلو المجموعة، بل محفزاً لفحص سريع. وألغى v3 الكبت بين المضيفين لأن قوائم المصادر وتغيرات الحالة والتوجيه بحسب المنفذ جعلت تقاريرهم غير قابلة للاستبدال.

كان السؤال أصغر من قائمة المستمعين

يقرر موجّه البث المتعدد المتصل بشبكة محلية هل يستمر في إرسال حركة المجموعة G إلى تلك الوصلة. لا يحتاج القرار الأول إلى أسماء المستلمين أو عددهم. يكفي أن يبقى واحد منهم كي يظل الإرسال مطلوباً.

وصفت RFC 1112، المنشورة في أغسطس 1989، النسخة التي عُرفت لاحقاً بأنها أول نسخة واسعة الانتشار من IGMP. فالعضوية ديناميكية ومرتبطة بواجهة، ولا يلزم أن يكون المرسل عضواً كي يبعث إلى المجموعة. لم يمنح البروتوكول عنوان المجموعة لمالك، ولم يزود الموجّه بسجل أشخاص أو عمليات.

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

مؤقت عشوائي اختار الشاهد المؤقت

أرسل الموجّه Query إلى عنوان جميع المضيفين 224.0.0.1 بقيمة TTL تساوي واحداً. وأنشأ كل مضيف، لكل مجموعة معنية على واجهة الاستقبال، مؤقت تأخير مستقلاً بقيمة عشوائية بين صفر وعشر ثوان.

عند انتهاء أول مؤقت، أرسل صاحبه Membership Report إلى عنوان المجموعة التي يبلغ عنها، وبقيمة TTL واحد أيضاً. لذلك استطاع أعضاء المجموعة الآخرون على الوصلة نفسها سماع التقرير. وإذا كان مؤقت أحدهم ما زال يعمل، أوقفه بعد سماع تقرير صالح للمجموعة ولم يرسل شيئاً.

وزع الاختيار العشوائي الردود زمنياً، وخفض الاستماع المتبادل عددها. وفي الوضع المعتاد وصل تقرير واحد عن كل مجموعة بدلاً من تقرير لكل مضيف. لم يكتسب الفائز ولاية تمثيل؛ فقد يفوز مؤقت آخر في الجولة التالية.

ولهذا يجب تضييق معنى «كبت التقرير». لم تختف العضوية ولم يُمنع التطبيق من الاستقبال. الذي اختفى إرسال معلق ومكرر في دورة واحدة. وبالنسبة إلى حالة «G موجودة على الواجهة I»، لا يغير «نعم» ثان قرار الموجّه.

ظلت العضوية حية بالتجديد

أرسل الموجّه Queries دورية لتحديث حالته. فإذا لم يصل أي Report لمجموعة بعد خطوات السؤال والمهلة المحددة، افترض غياب الأعضاء المحليين، ولم يعد مضطراً إلى إدخال حركة G القادمة من بعيد إلى الوصلة.

كانت هذه soft state، لا قيداً دائماً. إذا تعطل مضيف ولم يستطع الوداع، انتهى أثره حين لم يجدد أحد الدليل. لكن غياب الجميع لم يُستنتج من صمت مضيف واحد، بل من سؤال أتيح للجميع ثم بقي بلا جواب.

أما الانضمام فكان أسرع. يرسل العضو الجديد تقريراً غير مطلوب فوراً، ثم يكرره بعد فواصل عشوائية قصيرة تحسباً لفقد الأول. وقد يكون أول مستمع على الوصلة؛ ولو انتظر السؤال الدوري فلن تصل إليه البيانات أصلاً.

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

كان Leave طلباً لإعادة السؤال

عرّفت RFC 2236 بروتوكول IGMPv2 في نوفمبر 1997. وأضافت Max Response Time وانتخاب querier وGroup-Specific Query ورسالة Leave Group، بغرض تقليل استمرار الحركة بعد مغادرة آخر مستمع.

إذا تذكر المضيف أنه كان آخر من أرسل Report للمجموعة في آخر Query، فعليه إرسال Leave إلى 224.0.0.2 عند مغادرته. أما إن لم يكن آخر المبلّغين، فيمكنه الصمت لأن عضواً آخر أثبت وجوده حديثاً.

لكن «آخر من أبلغ» لا تعني «آخر من بقي». لم يحذف querier المجموعة فور تسلمه Leave، بل أرسل عدداً مضبوطاً من الأسئلة الخاصة بالمجموعة في فواصل قصيرة. يستطيع أي عضو باقٍ الرد والحفاظ على التوجيه. وفقط إذا انتهت نافذة الرد الأخيرة بلا تقرير، اعتُبرت المجموعة خالية محلياً.

كان Leave يعني «تحقق الآن»، لا «ثق بي وأوقف الآخرين». ولمّا وُجد مضيف v1 في مجموعة، تجاهل موجّه v2 رسائل Leave لها، لأن المضيف القديم لا يعرف إجراءات المغادرة الجديدة. لا يجوز تفسير صمت مشارك قديم بلغة لم يتلقها.

صار المصدر جزءاً من حالة الاستقبال

غيّر IGMPv3 موضوع التقرير. حددته RFC 3376 عام 2002، ثم أصبحت RFC 9776 المعيار الحالي في 2025 بعد تصحيح الإشكالات وتوضيحها مع إبقاء التوافق.

في وضع INCLUDE يطلب النظام حركة G من المصادر المدرجة فقط. وفي EXCLUDE يقبل كل المصادر عدا قائمة. تُجمع رغبات المقابس في حالة الواجهة، ويمكن أن تصف Group Records الحالة الراهنة أو تغير نمط الترشيح أو المصادر المسموح بها حديثاً أو المصادر التي ينبغي حجبها.

قد يريد مضيفان في G مصدرين مختلفين على نحو مشروع. يحدد Source-Specific Multicast في RFC 4607 القناة بصيغة (S,G). لا يعوض تقرير عن S1 رغبة مضيف آخر في S2.

ولهذا سحب مبرر تصميم v3 التحسين القديم. لم يعد المضيف يلغي تقرير v3 لمجرد أنه سمع تقرير غيره. قد يريد الموجّه متابعة كل مضيف لتسريع المغادرة أو المحاسبة؛ ولا يعمل الكبت جيداً مع الجسور التي تطبق IGMP snooping؛ ويبسّط إلغاؤه آلة حالة المضيف. كما يستطيع تقرير v3 واحد جمع عدة Group Records، فيخفض عدد الحزم من دون محو اختلافها.

لم تختفِ العشوائية. ما زالت الإجابات عن General Query موزعة داخل Max Response Time، ولا يجوز أن يرسل الجميع فوراً. ألغى v3 الاستنتاج القائل إن تقرير الغير يجعل دليل المضيف زائداً، ولم يلغ حماية الشبكة من انفجار الردود.

رأى المحوّل منافذ لا غرفة مشتركة

افترض الكبت الأول أن أعضاء LAN يسمعون التقرير نفسه كما لو كانوا في غرفة واحدة. أما المحوّل الذي يطبق IGMP snooping فيتخذ قراره لكل منفذ.

يغمر الجسر العادي حركة multicast، بينما يقرأ محوّل snooping رسائل IGMP ويبني جدول منافذ مهتمة. توصي RFC 4541، وهي وثيقة معلوماتية، عموماً بإرسال Membership Reports نحو منافذ موجّهات البث المتعدد لا إلى جميع منافذ المضيفين.

إذا وصل تقرير v1/v2 إلى مضيف في منفذ آخر، فقد يكبت تقريره. يعرف الموجّه الآن أن G موجودة في مكان ما على الوصلة، لكن المحوّل ربما لم يتعلم منفذ المضيف الصامت. والنتيجة المحتملة أن يُحجب التدفق عن مستمع حقيقي.

خدمت الحزمة خريطتين. احتاج الموجّه إلى «G على هذه الوصلة»، واحتاج المحوّل إلى «G على هذا المنفذ». كان الشهود متكافئين في القرار الأول، ولم يكونوا كذلك في الثاني.

تذهب تقارير v3 إلى 224.0.0.22 ويمكن أن تحتوي عدة سجلات. لم يتخل البروتوكول عن الكفاءة، بل نقل الضغط من حذف ملاحظات مستقلة إلى تجميع يحفظ اختلافها.

جهاز قديم واحد يغير معنى الصمت

تتعايش النسخ على الوصلة الحقيقية. عندما يسمع مضيف v3 سؤالاً قديماً، يشغل مؤقت توافق ويرد مؤقتاً بالصيغة القديمة. ويتذكر الموجّه الأعضاء القدامى أيضاً، لأن وجودهم يغير كيفية فهم Leave وحالة المصادر.

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

وفي SSM، تشترط RFC 9776 ألا يسمح مضيف واعٍ بالمصدر المحدد لتقرير v1 أو v2 بأن يكبت Membership Record الخاص به في v3. إن عرض «IGMP فعال» من دون النسخة ونمط التوافق يخفي هذا التراجع الدلالي.

لم يتحول الاهتمام إلى تصريح

ينقل IGMP رغبة محلية في استقبال multicast عبر IPv4 إلى الموجّهات المجاورة. لا يبني شجرة التوزيع الواسعة، ولا يوثق المشترك، ولا يمنح حق الإرسال، ولا يضمن وصول الرزمة.

وتقرر RFC 9776 أن IGMP لا يوفر سرية. تستطيع أجهزة الوصلة رؤية الاهتمام بمجموعات قد تكون حساسة. قد يبقي تقرير مزور الحركة من دون مستمع حقيقي، وقد يطيل تقرير قديم مزور نمط توافق يضعف fast leave أو ترشيح المصدر. تحد TTL واحد وRouter Alert وفحوص المصدر المحلي بعض المسارات، لكنها ليست توثيقاً تشفيرياً.

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

المصادر والحدود

تحدد RFC 1112 المؤقتات العشوائية والكبت، وتحدد RFC 2236 رسالة Leave واختبار آخر عضو. تحفظ RFC 3376 المبرر التاريخي لـv3، وRFC 9776 هي المواصفة الحالية. توثق RFC 4541 اعتبارات snooping، وتحدد RFC 4607 نموذج (S,G).

لا تثبت هذه النصوص انتشاراً عالمياً أو مطابقة منتج أو هوية المستمع. وقراءة انتهاء الكبت كتغير في قابلية الأدلة للاستبدال استنتاج من آلات الحالة والأسباب التي سجلتها المعايير صراحة.