بعد مناقشة بعض الأمور الأساسية حول التبديل، سنركّز الآن بشكل أكبر على تقنية تبديل محددة وهي الإيثرنت المبدَّل، والتي تُستخدم بكثرة في شبكات الحرم الجامعي والشركات. وتُستخدم المبدلات عادةً في بناء هذه الشبكات والمعروفة غالبًا بمبدِّلات الطبقة الثانية L2، والتي كان يُشار أكثر في وقت سابق باسم الجسور bridges لأنها اُستخدِمت "لتجسير" مقاطع الإيثرنت لبناء شبكة محلية مُوسَّعة extended LAN. لكن تعتمد معظم الشبكات اليوم تقنية الإيثرنت ضمن إعداد اتصال من نقطة لنقطة، مع هذه الروابط المتشابكة بواسطة مبدّلات L2 لتشكيل شبكة إيثرنت مبدَّلة.
نبدأ بالمنظور التاريخي الآن (المُعتمد على الجسور لتوصيل مجموعة مقاطع إيثرنت، ثم ننتقل إلى الاستخدام واسع الانتشار اليوم باستخدام مبدلات L2 لتوصيل مجموعة من روابط من نقطة لنقطة). لكن سواء أطلقت على الجهاز اسم جسرٍ أو مبدّل، والشبكة المُنشَأة اسم شبكة LAN مُوسَّعة أو شبكة إيثرنت مبدَّلة، فكليهما يتصرفان بنفس الطريقة تمامًا.
بفرض وجود زوج إيثرنت يُطلب ربطهما معًا. من بين أحد الأساليب الممكن تجريبها هي وضع مكرّر repeater بينهما. ولكن هذا لن يكون حلًا عمليًا، غير أنه سيتجاوز قيود الإيثرنت الفيزيائية (حيث لا يُسمح باستخدام أكثر من مكرّرين بين أيّ جهازين مضيفين وألا يزيد إجمالي الطول عن 2500 متر). والبديل هنا هو وضع عقدةٍ مع زوج محوّلات adaptors إيثرنت بين شبكتي الإيثرنت وتقوم العقدة بتمرير الإطارات من شبكة إيثرنت إلى أخرى. قد تختلف هذه العقدة عن المكرّر الذي يتعامل مع البتّات -وليس الإطارات-، وينسخ فقط البتات المُستقبلة من واجهةٍ إلى واجهة أخرى. بينما ستنفّذ هذه العقدة بدلًا من ذلك بروتوكولات كشف التصادم والوصول إلى الوسائط في شبكة الإيثرنت على كلّ واجهة. ولن تطبَّق القيود المتعلقة بإدارة التصادمات مثل طول وعدد مضيفي الإيثرنت، على زوج الإيثرنت المدمَج المتّصل بهذه الطريقة. وبهذا يعمل هذا الجهاز في الوضع المختلط promiscuous mode، ويقبل جميع الإطارات المُرسَلة على أيّ شبكة إيثرنت، ويُمررها إلى الشبكة الأخرى.
تقبل الجسور ببساطة إطارات من شبكة محلية LAN على مداخلها وتُمررها إلى عدّة مخارج أخرى. وقد استخدمت الجسور القديمة هذه الإستراتيجية البسيطة، إلا أنها تحوي بعض القيود الخطيرة جدًا كما سترى لاحقًا. ولهذا أُضيفت عِدّة تحسينات على مرّ السنين لجعل الجسور آليةً فعالةً لربط مجموعة من الشبكات المحلية.
تعلم الجسور Learning Bridges
التحسين الأول الممكن إجراؤه على الجسر هو ملاحظة عدم حاجته إلى تمرير جميع الإطارات التي يستقبلها. إذ ما من داعٍ لتمرير الجسر للإطار من المنفذ 1 إلى المنفذ 2، عندما يصل إطارٌ من المضيف A موجَّه إلى المضيف B. والسؤال إذًا هو كيف يتعرّف الجسر على المنفذ الموافق لأيٍّ من المضيفَين المختلفين؟
تتمثل إحدى الخيارات في أن يكون هناك جدولٌ يُنزَّل يدويًا في الجسر مشابه للجدول الآتي. لن يعيد الجسر بعدئذٍ تمرير الإطار إلى المنفذ 2 عندما يتلقّى إطارًا على المنفذ 1 موجهًا إلى المضيف A، حيث لن تكون هناك حاجة لذلك، نظرًا لتلقّي المضيف A للإطار فعليًا مباشرةً على الشبكة المحلية المتصلة بالمنفذ 1. وبهذا سيُعيد الجسر تمرير الإطار إلى المنفذ 1 في أيّ وقتٍ يستلم إطارًا موجهًا إلى المضيف A على المنفذ 2.
المضيف Host | المنفذ Port |
---|---|
A | 1 |
B | 1 |
C | 1 |
X | 2 |
Y | 2 |
Z | 2 |
إن وجود شخصٍ يُعنى بهذا الجدول أمرٌ مرهق للغاية، لذلك هناك حيلة بسيطة يمكن من خلالها تعلُّم الجسر لهذه المعلومات بنفسه. والفكرة هنا تكمن في فحص كلّ جسر لعنوان المصدر في جميع الإطارات التي يتلقاها، وبالتالي إذا أرسل المضيف A إطارًا إلى مضيفٍ آخر على جانبي الجسر، فسيتلقى الجسر هذا الإطار ويسجّل أنّ إطارًا من المضيف A قد اُستلِم للتو على المنفذ 1. وبهذه الطريقة يمكن للجسر بناء جدولٍ مماثل تمامًا للجدول السابق.
لاحظ أنّ الجسر الذي يستخدم مثل هذا الجدول يطبّق إصدارًا من نموذج مخطَّط البيانات (أو عديم الاتصال) للتمرير والموصوف سابقًا. حيث تحمل كلّ رزمةٍ عنوانًا عامًا، ويقرّر الجسر أيّ مخرج سيستخدمه لإرسال رزمة من خلال البحث عن هذا العنوان في الجدول.
يكون هذا الجدول فارغًا عندما يعمل الجسر لأول مرّة، ثم تُضاف المدخلات مع مرور الوقت. وتُربَط مهلة زمنية بكلّ مدخلة، حيث يتجاهل الجسر المدخلة بعد فترة زمنية محددة، وذلك للحماية من الحالة الذي قد يُنقل فيها مضيفٌ (وعنوان LAN الخاص به) من شبكةٍ إلى أخرى. وبالتالي فهذا الجدول لا يُعَدّ كاملًا بالضرورة. فإذا تلقّى الجسر إطارًا موجهًا إلى مضيف غير موجود حاليًا في الجدول، فسيمضي قُدمًا ويُمرر الإطار إلى جميع المنافذ الأخرى. ما يعني أنّ هذا الجدول هو مجرّد تحسين لتصفية filters بعض الإطارات، ولا يتُشترط صحته دائمًا.
التطبيق Implementation
تُعَدّ الشيفرة التي تطبق خوارزمية تعلّم الجسر بسيطةً للغاية، حيث تُعرِّف البنية BridgeEntry
مدخلةً في جدول تمرير الجسر؛ وتُخزَّن في بنية Map
(والتي تدعم الدوال mapCreate
وmapBind
وmapResolve
من أجل تحديد موقع المدخلات بكفاءة عند وصول الرزم من مصادر موجودةٍ بالفعل في الجدول، ليُحدد الثابت MAX_TTL
مدّة الاحتفاظ بمدخلةٍ في الجدول قبل إهمالها.
#define BRIDGE_TAB_SIZE 1024 /* الحجم الأقصى لجدول الجسور */ #define MAX_TTL 120 /* الوقت (مقدرًا بالثواني) قبل حذف المدخلة */ typedef struct { MacAddr destination; /*للعقدة MAC عنوان */ int ifnumber; /* واجهة للوصول إليها */ u_short TTL; /*(العمر) time to live */ Binding binding; /* Map الربط بالبنية */ } BridgeEntry; int numEntries = 0; Map bridgeMap = mapCreate(BRIDGE_TAB_SIZE, sizeof(BridgeEntry));
تعطي الدالةُ updateTable
الإجراءَ الروتيني والذي يحدّث جدول التمرير عند وصول رزمة جديدة، وتمرَّر لها الوسطاء المتمثّلة في عنوان التحكم في الوصول إلى وسائط المصدر MAC الموجود في الرزمة، ورقم الواجهة التي اُستقبل منها. حيث يُستدعى إجراءٌ آخر غير معروضٍ هنا، وذلك على فترات منتظمة، لفحص المدخلات في جدول التمريرويقلّل من حقل عمر الرزمة time to live أو اختصارًا TTL
لكلّ مُدخَلة، مع تجاهل أيّ مدخَلات وصل عُمرها إلى الصفر.
يُعاد ضبط حقل TTL
إلى MAX_TTL
في كلّ مرّة تصل فيها رزمة لتحديث مدخلة جدول موجودة مسبقًا، وتُحدَّث الواجهة التي يمكن من خلالها الوصول إلى الوجهة لتظهر أحدث رزمةٍ مستلَمة.
void updateTable (MacAddr src, int inif) { BridgeEntry *b; if (mapResolve(bridgeMap, &src, (void **)&b) == FALSE ) { /* هذا العنوان غير موجود في الجدول، لذا حاول إضافته */ if (numEntries < BRIDGE_TAB_SIZE) { b = NEW(BridgeEntry); b->binding = mapBind( bridgeMap, &src, b); /* استخدم عنوان مصدر الرزمة على أنه عنوان الوجهة في الجدول */ b->destination = src; numEntries++; } else { /* لا يمكن احتواء هذا العنوان في الجدول الآن، لذا استسلم */ return; } } /* TTL أعد ضبط الحقل واستخدم أحدث واجهة إدخال */ b->TTL = MAX_TTL; b->ifnumber = inif; }
لاحظ أنّ هذا التطبيق يتبنّى إستراتيجيةً بسيطةً، ففي الحالة التي تصبح فيها سعة جدول الجسر ممتلئة، يفشل ببساطة في إضافة العنوان الجديد. مع الأخذ بعين الإعتبار أنّ اكتمال جدول الجسر ليس ضروريًا لإعادة التوجيه الصحيحة، أي أنّه يحسّن الأداء فقط. فإذا كان هناك بعض المدخلات في الجدول التي لم تُستخدَم حاليًا، فستنتهي مهلتها في النهاية وستُزال، مما يوفّر مساحةً لمدخلةٍ جديدة. تتمثل الطريقة البديلة في استدعاء خوارزمية الاستبدال المؤقتة cache replacement algorithm عند العثور على الجدول ممتلئًا، وقد تُحدَّد المدخلة على سبيل المثال وتُزال باستخدام أصغر عُمر TTL لاستيعاب المدخلة الجديدة.
خوارزمية الشجرة الممتدة Spanning Tree Algorithm
تعمل الإستراتيجية السابقة بصورة جيدة لحين حدوث حلقةٌ في الشبكة، حيث تفشل في هذه الحالة بشكل مروّع، فمن المحتمل استمرار توجيه الإطارات إلى الأبد. ومن السهل رؤية ذلك في المثال الموضَّح في الشكل التالي، حيث تشكّل المبدلات S1 وS4 وS6 حلقة loop:
لاحظ انتقالنا الآن من تسمية جهاز التمرير بالجسر (توصيل المقاطع التي يمكنها الوصول إلى عدّة أجهزة أخرى) إلى تسميتها بمبدّلات L2 (توصيل روابط من نقطة لنقطة التي يمكنها الوصول إلى جهاز واحد فقط). سنضمّن ثلاثة مضيفين فقط للحفاظ على المثال السابق قابلًا للإدارة، حيث تحتوي المبدّلات عادةً من الناحية العملية على 16 أو 24 أو 48 منفذًا، ممّا يعني قدرتها على الاتصال بالعديد من الأجهزة المضيفة (والمبدّلات الأخرى).
بفرض في مثالنا على شبكة التبديل، أنّ الرزمة تدخل المبدّل S4 من المضيف C، وأنّ عنوان الوجهة ليس موجودًا بعد في أيّ جدول تمرير للمبدّلات. يرسل المبدّل S4 نسخةً من الرزمة من منفذيه الآخرين إلى المبدّلين S1 وS6، ليُعيد المبدّل S6 توجيه الرزمة إلى المبدّل S1 (ويعيد المبدّل S1 توجيه الرزمة إلى المبدّل S6 في الوقت نفسه)، ويعيد كلٌ منهما بدوره توجيه الرزمة إلى المبدّل S4. وهنا، لا يزال المبدّل S4 لا يحتوي على هذه الوجهة في جدوله، لذلك يعيد توجيه الرزمة إلى منفّذيه الآخرين. إذ لا يوجد ما يمنع هذه الدورة من التكرار إلى ما لا نهاية، مع تكرار الرزم في كلا الاتجاهين بين المبدّلات S1 وS4 وS6.
ولكن لماذا توجد حلقةٌ في شبكة الإيثرنت المبدَّلة (أو شبكات LAN المُوسَّعة)؟ أحد الاحتمالات هو وجود أكثر من مديرٍ للشبكة لامتدادها عبر أقسام متعدّدة في المؤسسة على سبيل المثال. فمن الممكن ألا يُعرَف أيّ شخصٍ ضبط الشبكة كاملةً بهذه الإعدادات، مما يعني إمكانية إضافة مبدّل يكمّل حلقةً دون علم أيّ شخص. أمّا السيناريو الثاني والأكثر احتمالًا، فهو أنّ الحلقات مدمجة في الشبكة عن قصد لتوفير الخط الاحتياطي redundancy في حالة الفشل. والشبكة التي لا تحتوي على حلقات تحتاج إلى فشل رابطٍ واحد فقط لتُقسَم إلى قسمين منفصلين.
يجب أن تكون المبدّلات قادرةً على التعامل مع الحلقات بصورة صحيحة مهما كان السبب، وتُعالَج هذه المشكلة من خلال جعل المبدّلات تشغّل خوارزمية شجرة ممتدّة وموزعة. فإذا اعتبرنا أنّ الشبكة ممثَّلةٌ برسمٍ بياني graph يحتوي على حلقات loops أو دورات cycles، فالشجرة الممتدة هي رسم فرعي لهذا الرسم البياني يغطي أو يضم جميع الرؤوس vertices، ولكنه لا يحتوي على دورات، أي أنّ الشجرة الممتدة تحافظ على جميع رؤوس الرسم البياني الأصلي ولكنها تستبعد بعض الأضلاع edges. يوضّح الشكل التالي رسمًا بيانيًا يحتوي حلقةً أو دورةً على اليسار وشجرةً ممتدةً على اليمين:
فكرة الشجرة الممتدة بسيطة، فهي مجموعة فرعية من مخطط الشبكة الفعلي الذي لا يحتوي على حلقات، والذي يصل إلى جميع الأجهزة في الشبكة. يتمثّل الجزء الصعب بكيفية تنسيق قرارات جميع المبدّلات للوصول إلى شكلٍ واحد للشجرة الممتدة، حيث يمكن تغطية مخططٍ واحدة بعدّة أشجار ممتدة، وتكمن الإجابة على ذلك في بروتوكول الشجرة الممتدة الذي سنشرحه الآن.
طوّرت راديا بيرلمان Radia Perlman خوارزمية الشجرة الممتدة، ثم طُوِّرت في شركة المعدّات الرقمية Digital Equipment Corporation، وهي بروتوكول تستخدمه مجموعة من المبدّلات للاتفاق على شجرة ممتدة لشبكة معينة. حيث تعتمد مواصفات معيار IEEE 802.1 على هذه الخوارزمية. وهذا يعني اختيار كلّ مبدّل للمنافذ التي يكون مستعد وغير مستعد لتمرير الاطارات عليها، وبهذا يصغّر الشبكة إلى شجرة لا دورية عن طريق إزالة المنافذ من مخطط الشبكة. ومن الممكن ألا يشارك مبدلٌ كامل في تمرير الإطارات، وهو الأمر الذي يبدو غريبًا للوهلة الأولى. ولكنّ هذه الخوارزمية ديناميكية، مما يعني أنّ المبدّلات مستعدة دائمًا لإعادة ضبط نفسها في شجرة ممتدة جديدة في حالة فشل بعض المبدّلات، وبالتالي توفِّر هذه المنافذ والمبدّلات غير المستخدَمة السعة الزائدة اللازمة للتعافي من حالات الفشل.
الفكرة الرئيسية للشجرة الممتدة هي تحديد المبدّلات المنافذ التي ستُمرر الإطارات عليها، إذ تختار الخوارزمية المنافذ على النحو التالي: كلّ مبدّل له معرّف فريد، حيث سنستخدم التسميات S1 وS2 وS3 وما إلى ذلك، وستنتخب الخوارزمية أولًا المبدلَ الذي يحتوي على أصغر معرّف ID وتعدّه جذرًا root للشجرة الممتدة. ويُعيد المبدّل الجذرُ تمرير الإطارات عبر جميع منافذه دائمًا. ليحسب كلّ مبدّلٍ أقصر مسار إلى الجذر ويلاحظ أيًّا من منافذه يقع على هذا المسار. كما يُحدَّد هذا المنفذ أيضًا، بحيث يُعَدّ مسار المبدل المفضّل إلى الجذر. ولحساب احتمال وجود مبدّلٍ آخر متّصل بمنافذه في النهاية، يختار المبدّل مبدّلًا واحدًا مُخَصّصًا designated ليكون مسؤولًا عن تمرير الإطارات نحو الجذر، بحيث يكون كلّ مبدلٍ مخصّص هو المبدّل الأقرب إلى الجذر. وإذا كان مبدّلان أو أكثر قريبين بدرجة متساوية من الجذر، تُستخدَم معرّفات المبدّلات لكسر هذا التساوي، ويفوز أصغر معرّف.
قد يوصَل كلّ مبدلٍ بأكثر من مبدّل آخر، لذلك فهو يشارك في اختيار مبدّلٍ مُخصّص لكلّ منفذ من هذا القبيل. وهذا يعني أنّ كلّ مبدّل يقرر ما إذا كان هو المبدّل المُخصص بالنسبة لكلّ منفذٍ من منافذه. ويُمرر المبدّل الإطارات خلال تلك المنافذ التي يكون هو المبدّل المُخصص لها.
يوضِّح الشكل السابق الشجرة الممتدة التي تتوافق مع الشبكة التي تحوي حلقات والموضَّحة سابقًا، حيث أنّ المبدّل S1 هو المبدّل الجذر نظرًا لاحتوائه على أصغر معرّف. يمكن الملاحظة أنّ المبدّلين S3 وS5 متّصلان ببعضهما البعض، لكنّ المبدّل S5 هو المبدّل المُخصّص لأنه أقرب إلى المبدّل الجذر. وبالمثل، فالمبدّلين S5 وS7 متصلان ببعضهما البعض، ولكن في هذه الحالة يكون المبدّل S5 هو المبدّل المخصّص لاحتوائه على معرّف أصغر، لأنّ كلاهما على مسافة متساوية من المبدّل S1.
من الممكن أن ينظر الشخص إلى الشبكة ويحسب الشجرة الممتدة وفقًا للقواعد المذكورة سابقًا، ولكنّ المبدّلات لا تتمتع بهذه القدرة على رؤية مخطّط الشبكة بالكامل، ناهيك عن إلقاء نظرة خاطفة داخل المبدّلات الأخرى لرؤية معرّفاتها. إذ يتعين عليها بدلًا من ذلك تبادُل رسائل الضبط configuration messages مع بعضها بعضًا، ثم تحديد ما إذا كانت تمثّل المبدّل الجذر أو المبدّل المُخصّص بناءً على هذه الرسائل.
تحوي رسائل الضبط ثلاث معلومات مهمّة :
- معرّف المبدّل الذي يرسل الرسالة.
- معرّف المبدّل الذي يعتقده مبدّل الإرسال المبدّل الجذر.
- المسافة، مقاسةً بعدد القفزات hops، من مبدّل الإرسال إلى المبدّل الجذر.
يسجّل كلّ مبدّل أفضلَ رسالة ضبط شاهدها حاليًا على كلّ من منافذه (سيُشرح معنى "الأفضل" لاحقًا)، بما في ذلك كلّ الرسائل التي تلقّاها من مبدّلات أخرى والرسائل التي أرسلها بنفسه.
أولًا يعتقد كلّ مبدّل أنه هو المبدّل الجذر، ويرسل بالتالي رسالة ضبطٍ إلى كلّ منفذ من منافذه لتعريف نفسه بكونه الجذر، ويعطي مسافةً للجذر هي 0. يتحقّق المبدّل عند تلقّي رسالة ضبط عبر منفذ معيّن لمعرفة ما إذا كانت هذه الرسالة الجديدة أفضل من أفضل رسالة ضبط مُسجلة لهذا المنفذ، حيث تُعَد رسالة الضبط الجديدة أفضل من المعلومات المسجلة حاليًا إذا تحقق أيّ مما يلي:
- أنها تحدد جذرًا بمعرّفٍ أصغر.
- أنها تحدد جذرًا بمعرّف متساوٍ ولكن بمسافة أقصر.
- معرّف الجذر والمسافة متساويان، لكن معرّف مبدّل الإرسال أصغر.
إذا كانت الرسالة الجديدة أفضل من المعلومات المسجَّلة حاليًا، فسيتجاهل المبدّل المعلومات القديمة ويحفظ المعلومات الجديدة، ولكنه يضيف أولًا 1 إلى حقل المسافة إلى الجذر distance-to-root field، نظرًا لبُعد المبدّل بمقدار قفزةٍ واحدة عن الجذر من المبدّل الذي أرسل الرسالة.
إذا تلقّى المبدّل رسالة ضبط تشير إلى أنّه ليس الجذر -أي رسالة من مبدلٍ بمعرّف أصغر-، فسيتوقف المبدّل عن إنشاء رسائل الضبط من تلقاء نفسه، ويعيد توجيه رسائل الضبط من المبدّلات الأخرى فقط، بعد إضافة 1 إلى حقل المسافة أولًا. وبالمثل، إذا تلقّى المبدّل رسالة ضبط تشير إلى أنه ليس المبدّل المُخصّص عن ذلك المنفذ -أي رسالة من مبدّل أقرب إلى الجذر أو بعيدًا عن الجذر بنفس القدر ولكن بمعرّف أصغر-، سيتوقف المبدّل عن إرسال رسائل الضبط عبر هذا المنفذ. وبالتالي يظلّ المبدّل الجذر فقط هو الذي ينشئ رسائل الضبط عندما يستقر النظام، بينما تعيد المبدّلات الأخرى توجيه هذه الرسائل عبر المنافذ التي تكون المبدّلات المخصصة أو المُكلَّفة عنها فقط. وبذلك بُنيَت الشجرة الممتدة، واتفقت جميع المبدّلات على المنافذ المستخدمة للشجرة الممتدة، ويمكن استخدام هذه المنافذ فقط لتمرير رُزم البيانات.
لنرى كيف يعمل هذا البروتوكول مع المثال التالي، كما هو مُوضح في الشكل السابق. إذا اُستعيدت الطاقة للتو إلى شبكة الحرم الجامعي، بحيث شُغِّلت جميع المبدّلات في نفس الوقت تقريبًا. ستبدأ جميع المبدّلات بالادعاء بأنها المبدِّل الجذر، لهذا سنشير إلى رسالة الضبط من العقدة X التي تدّعي بوجود المسافة d إلى العقدة الجذر Y بالشكل (Y, d, X)، بحيث ستكتشف سلسلةً من الأحداث على النحو التالي وذلك بالتركيز على المبدّل S3:
- يتلقى المبدّل S3 الرسالة (S2, 0, S2).
- بما أنّ 2 < 3، فيقبل المبدّلُ S3 المبدلَ S2 جذرًا.
- يضيف المبدّل S3 قيمة 1 إلى المسافة التي أُعلن عنها بواسطة S2 (0)، وبالتالي يرسل الرسالة (S2, 1, S3) إلى المبدّل S5.
- ويقبل المبدّلُ S2 المبدّلَ S1 جذرًا في الوقت نفسه، نظرًا لاحتوائه على معرّف أقل، ليرسل الرسالة (S1, 1, S2) إلى المبدّل S3.
- يقبل المبدّلُ S5 المبدّلَ S1 جذرًا ويرسل رسالة (S1, 1, S5) إلى المبدّل S3.
- يقبل المبدّل S3 المبدّلَ S1 جذرًا، ويلاحظ أنّ كلًا من المبدّلين S2 وS5 أقرب منه إلى الجذر، لكن معرّف المبدّل S2 هو الأصغر، لذلك يظلّ على مسار المبدّل S3 إلى الجذر.
وهذا يترك المبدّل S3 بمنافذ نشطة، ويمكن ملاحظة عدم قدرة المضيفين A و B على الاتصال عبر أقصر مسار (عبر المبدّل S5) حيث يتوجب على الإطارات التدفق لأعلى الشجرة ثم العودة للأسفل، وهذه هي الضريبة التي تُدفع لتجنّب الحلقات.
يستمر المبدّل الجذر في إرسال رسائل الضبط دوريًا حتى بعد استقرار النظام، وتستمر المبدّلات الأخرى في تمرير هذه الرسائل. لن تتلقى المبدّلات المُستقبِلة رسائل الضبط هذه في حالة فشل مبدّل معين، وستدّعي مرةً أخرى أنها الجذر بعد الانتظار لفترة زمنية محدّدة، وستبدأ الخوارزمية مرةً أخرى لاختيار جذر جديد ومبدّلات مُخصّصة جديدة.
أحد الأشياء المهمة التي يجب ملاحظتها هو أنه بالرغم من قدرة هذه الخوارزمية على إعادة ضبط الشجرة الممتدة عندما يفشل مبدّل ما، إلا أنّها غير قادرة على تمرير الإطارات عبر مسارات بديلة من أجل التوجيه بعيدًا عن مبدّلٍ مزدحم.
البث الإذاعي Broadcast والبث المتعدد Multicast
ركزت المناقشة السابقة على كيفية تمرير الإطارات أحادية البث التي يقوم بها المبدّل من منفذٍ إلى آخر. بما أنّ الهدف من استخدام المبدّل هو توسيع شبكة محلية LAN بشفافية عبر شبكات متعددة، وبما أنّ معظم الشبكات المحلية تدعم البث الإذاعي والبث المتعدِّد، لذا يجب على المبدلات دعم هاتين الميزتين أيضًا. يُعَدّ البث الإذاعي بسيط، حيث يقوم كلّ مبدّل بتمرير الإطار مع عنوان البث الإذاعي الخاص بالوجهة على كلّ المنافذ النشطة ما عدا المنفذ الذي اُستقبِل الإطار عليه.
يمكن تنفيذ البث المتعدِّد بنفس الطريقة تمامًا، حيث يقرّر كلّ مضيف بنفسه قبول الرسالة أم لا. ونظرًا لعدم كون كلّ المضيفين أعضاءً في أيّ مجموعة بث متعدد معّينة، فمن الممكن القيام بعمل أفضل. حيث يمكن توسيع خوارزمية الشجرة الممتدة لتحسين الشبكات التي لا يلزم إعادة توجيه إطارات البث المتعدد عليها، ويمكن افتراض إرسال إطار إلى المجموعة M بواسطة المضيف A، فإذا كان المضيف C لا ينتمي إلى المجموعة M، فليس هناك داعٍ للمبدّل S4 لإعادة توجيه الإطارات عبر تلك الشبكة.
كيف يمكن لمبدّل معيّن معرفة ما إذا كان يجب عليه تمرير إطار البث المتعدِّد عبر منفذ معيّن؟ إنّه ببساطة يتعلم تمامًا بنفس الطريقة التي يتعلم بها المبدّل ما إذا كان يجب عليه تمرير إطار أحادي البث عبر منفذ معيّن أم لا، من خلال مراقبة عناوين المصدر التي يستقبلها عبر هذا المنفذ. وحيث أن المجموعات ليست مصدر للإطارات، يمكننا التلاعب قليلًا. بحيث يجب على كلّ مضيفٍ عضو في المجموعة M إرسال إطار دوريًا بعنوان المجموعة M في حقل المصدر لترويسة الإطار، ليكون لهذا الإطار عنوان وجهة بالنسبة للمبدّلات وهو عنوان البث المتعدِّد.
على الرغم من اقتراح توسيع وتطوير البث المتعدِّد الموصوف للتو، إلا أنه لم يُعتمَد على نطاق واسع، إذ يُنفَّذ البث المتعدَّد بنفس طريقة البث الإذاعي تمامًا.
الشبكات المحلية الافتراضية Virtual LANs أو اختصارًا VLANs
أحد قيود المبدّلات هو أنها لا تتوسّع، كما أنّ توصيل أكثر من عدد قليل من المبدّلات معًا أمرٌ غير واقعي، حيث أن العدد القليل من الناحية العملية يعني العشرات. فأحد أسباب ذلك هو توسُّع خوارزمية الشجرة الممتدة خطيًا، بمعنى عدم وجود شرط لفرض تسلسلٍ هرميّ على مجموعة المبدّلات. أمّا السبب الثاني فهو أنّ المبدّلات تُمرر جميع إطارات البث الإذاعي، ومن الممكن رؤية جميع المضيفين لرسائل البث الإذاعي لبعضهم البعض ضمن مجال محدود (نفس القسم مثلًا)، ولكن من المُستبعد أن يرغب جميع المضيفين الموجودين في بيئة أكبر (شركة أو جامعة كبيرة مثلًا) بأن يكونوا منزعجين من رسائل البث الإذاعي لبعضهم البعض. وبالتالي لا يتوسّع البث الإذاعي ونتيجةً لذلك لا تتوسّع الشبكات القائمة على الطبقة الثانية L2.
إحدى طرق زيادة قابلية التوسع scalability هي الشبكة المحلية الافتراضية VLAN، حيث تسمح شبكات VLAN بتقسيم شبكة LAN واحدة مُوسَّعة إلى عدة شبكات LAN منفصلة ظاهريًا. ويُسنَد معرّفٌ لكلّ شبكة LAN افتراضية، كما يُطلق على المعرّف أحيانًا لون color، ويمكن أن تنتقل الرُّزم من جزء إلى آخر فقط إذا كان لكلا الجزأين نفس المعرّف. وهذا له تأثيرٌ في الحدّ من عدد مقاطع شبكة LAN الممتدة التي ستتلقى أيّ رزمة بثٍ إذاعي معيّنة.
يمكن رؤية كيفية عمل شبكات VLAN من خلال المثال المُوَضح في الشكل السابق حيث يوجد أربعة مضيفين ومبدِّلين. ستصل أيّ رزمة بثٍ إذاعي من أيّ مضيف إلى جميع المضيفين الآخرين في حالة عدم وجود شبكات VLAN. ولنفترض الآن تحديد للمقاطع المتصلة بالمضيفين W وX على أنها في شبكة محلية افتراضية واحدة، والتي سنسمّيها VLAN 100. كما سنحدّد أيضًا المقاطع التي تتصل بالمضيفين Y وZ على أنها في شبكة VLAN 200. وسنحتاج للقيام بذلك إلى ضبط معرّف VLAN على كلّ منفذٍ من المبدّلين S1 وS2، حيث يُعَدّ الرابط بين المبدلين S1 وS2 موجودًا في كلتا شبكتي VLAN.
يُلاحِظ المبدّل S2 أنّ الرزمة التي يرسلها المضيف X جاءت على منفذٍ ضُبط على أنّه موجود في شبكة VLAN 100. وعند وصول هذه الرزمة إلى المبدّل، يحشر ترويسة VLAN بين ترويسة الإيثرنت وحمولته (الجزء المهم في ترويسة VLAN هو معرّف VLAN الذي يُضبط بالقيمة 100). سيُطبّق المبدّل الآن قواعده العادية لتمرير الرزمة، مع التقييد الإضافي الذي يقضي بعدم إمكانية إرسال الرزمة إلى واجهة ليست جزءًا من الشبكة VLAN 100. وبالتالي لن تُرسَل الرزمة تحت أي ظرفٍ، حتى ولو كانت رزمة بثٍ إذاعي، من الواجهة إلى المضيف Z الموجود في الشبكة VLAN 200، ولكن يُعاد توجيه الرزمة إلى المبدّل S1، الذي يتّبع نفس القواعد وبالتالي فقد يُمرر الرزمة إلى المضيف W، ولكن ليس إلى المضيف Y.
الميزة الجذابة في شبكات VLAN هي إمكانية تغيير المخطط المنطقي دون نقل أيّ أسلاك أو تغيير أيّ عناوين. فإذا أردت جعل الرابط الذي يتصل بالمضيف Z جزءًا من شبكة VLAN 100 على سبيل المثال -بالتالي تفعيل المضيفين X وW وZ ليكونوا على نفس شبكة LAN الوهمية- ، فستحتاج فقط إلى تغيير جزء واحد من ضبط المبدّل S2.
يتطلّب دعم شبكات VLAN امتدادًا بسيطًا إلى حدٍ ما لمواصفات ترويسة 802.1 الأصلية، وإدخال حقل معرّف VLAN المؤلَّف من 12 بتًا VID
بين الحقلين SrcAddr
وType
، كما هو موضح في الشكل الآتي. (يُشار إلى المعرّف VID
هذا عادةً باسم VLAN Tag. يوجد بالفعل 32 بتًا أُدخلت في منتصف الترويسة، ولكن يُستخدم أول 16 بتّا للحفاظ على التوافق العكسي مع المواصفات الأصلية (حيث تستخدم Type = 0x8100
للإشارة إلى احتواء هذا الإطار على امتداد شبكة VLAN، حيث تحتوي البتات الأربعة الأخرى على معلومات التحكم المُستخدمة لتحديد أولويات الإطارات، وهذا يعني أنه من الممكن ربط 212 = 4096 شبكةً افتراضية مع شبكة محلية فيزيائية واحدة.
نختتم هذه المناقشة بملاحظة وجود قيود أخرى على الشبكات التي أُنشئت عن طريق ربط مبدّلات L2، وهي عدم وجود دعم لعدم التجانس heterogeneity. أي أنّ المبدّلات محدودة بأنواع الشبكات التي يمكن ربطها، حيث تستخدِم المبدّلات ترويسة إطار الشبكة، وبالتالي يمكنها دعم الشبكات التي لها نفس صيغة العناوين. بحيث يمكن استخدام المبدّلات لتوصيل شبكات إيثرنت والشبكات المستندة إلى المعيار 802.11 ببعضها بعضًا، نظرًا لاشتراكها في صيغة ترويسة مشتركة. لكن المبدّلات لا تعمَّم بسهولة على أنواع الشبكات الأخرى ذات صيغ العنونة المختلفة، مثل شبكات ATM، وSONET، وPON، أو الشبكة الخلوية.
يوضّح المقال التالي كيفية معالجة هذا القيد، بالإضافة إلى توسيع نطاق شبكات التبديل إلى أحجامٍ أكبر.
ترجمة -وبتصرّف- للقسم Switched Ethernet من فصل Internetworking من كتاب Computer Networks: A Systems Approach.
اقرأ أيضًا
- المقال التالي: شبكة الإنترنت باستخدام بروتوكول IP
- المقال السابق: التشبيك Internetworking بين أنواع مختلفة من الشبكات الحاسوبية
أفضل التعليقات
لا توجد أية تعليقات بعد
انضم إلى النقاش
يمكنك أن تنشر الآن وتسجل لاحقًا. إذا كان لديك حساب، فسجل الدخول الآن لتنشر باسم حسابك.