اذهب إلى المحتوى

شبكة الإنترنت باستخدام بروتوكول IP


Ola Abbas

رأينا في المقال السابق أنه من الممكن بناء شبكات محلية LAN كبيرة نسبيًا باستخدام الجسور bridges ومبدّلات LAN، لكن هذه الأساليب كانت محدودة في قدرتها على التوسُّع والتعامل مع عدم التجانس. سيُقدّم هذا الفصل بعض الطرق لتجاوز قيود الشبكات ذات الجسور، مما يمكّننا من بناء شبكات كبيرة وغير متجانسة بتوجيهٍ فعّال نسبيًا. سيُشار إلى هذه الشبكات باسم الشبكات المتشابكة internetworks، وسنواصل مناقشة كيفية إنشاء شبكة متشابكة عالمية حقًا في الباب التالي، لكننا سنكتشف الأساسيات حاليًا.

ما هي الشبكة المتشابكة Internetwork؟

نستخدم مصطلح شبكة متشابكة، أو أحيانًا الإنترنت بحرف i صغير، للإشارة إلى مجموعة عشوائية من الشبكات المترابطة لتوفير نوعٍ من خدمة توصيل رزم من مضيف إلى مضيف host-to-host packet delivery service. فقد تنشئ مثلًا شركة لها العديد من المواقع sites شبكةً متشابكةً خاصة، من خلال ربط الشبكات المحلية في مواقعها المختلفة بروابط من نقطة لنقطة مؤجَّرة من شركة الهاتف. عندما نتحدّث عن الشبكة المتشابكة العالمية المستخدمة على نطاق واسع والتي تتّصل بها نسبة كبيرة من الشبكات الآن، فسنسمّيها الإنترنت بحرف I كبير. سنتعرف على مبادئ استخدام الشبكة المتشابكة "بحرف i صغير" تماشيًا مع نهج المبادئ الأولى لهذا الكتاب، ولكننا سنوضح هذه الأفكار بأمثلة من العالم الحقيقي من الإنترنت Internet "بحرف I كبير".

هناك جزء آخر من المصطلحات قد يكون مربكًا وهو الاختلاف بين الشبكات networks، والشبكات الفرعية subnetworks، والشبكات المتشابكة internetworks. وهنا سنتجنب الشبكات الفرعية subnetworks أو subnets إلى فصل لاحق. لنستخدم حاليًا مصطلح الشبكة للإشارة إمّا إلى شبكة متصلة مباشرةً، أو شبكة تبديل switched network من النوع المُوضَّح سابقًا. تستخدم هذه الشبكة تقنيةً واحدةً، مثل 802.11 أو إيثرنت. والشبكة المتشابكة هي مجموعة مترابطة من هذه الشبكات، حيث نشير أحيانًا إلى الشبكات الأساسية التي نشبك بينها بشبكات فيزيائية physical networks. والإنترنت هو عبارة عن شبكة منطقية logical network مبنيّة على مجموعة من الشبكات الفيزيائية. ويبقى النظر إلى مجموعة مقاطع الإيثرنت المتصٍّلة بجسور أو مبدّلات على أنها شبكة واحدة.

ASimpleInternetwork.PNG

يوضح الشكل السابق مثالًا عن شبكة متشابكة يُشار إليها أحيانًا بأنها "شبكةٌ من الشبكات" لأنها تتكون من الكثير من الشبكات الأصغر. حيث نرى في هذا الشكل شبكة إيثرنت وشبكة لاسلكية ورابط من نقطة لنقطة، وكلٌّ منها هي شبكة ذات تقنية مختلفة. ويَرمز حرف H إلى مضيف host كما يَرمز حرف R إلى موجّه router. تسمى العقد التي تربط بين الشبكات موجّهات. كما يُطلق عليها أحيانًا اسم بوابات gateways، ولكن نظرًا لاحتواء هذا المصطلح على دلالات أخرى عديدة، سنستخدم مصطلح موجّه فقط.

ASimpleInternetworkShowingTheProtocolLayers

بروتوكول الإنترنت Internet Protocol هو الأداة الرئيسية المُستخدمة اليوم لبناء شبكات متشابكة غير متجانسة وقابلة للتوسّع، وقد عُرف هذا البروتوكول في الأصل باسم بروتوكول خان-سيرف Kahn-Cerf تيمُّنًا بمخترعَيه. وتتمثل إحدى طرق التفكير في IP في أنه يعمل على جميع العُقد (المضيفين والموجّهات) في مجموعة من الشبكات ويُحدِّد البنية التحتية التي تسمح لهذه العقد والشبكات بالعمل في صورة شبكة متشابكة منطقيّة واحدة. حيث يوضح الشكل السابق كيفية اتصال المضيفين H5 وH8 منطقيًا عن طريق الإنترنت، بما في ذلك الرسم البياني للبروتوكول الذي يعمل على كلّ عقدة. لابد من ملاحظة أنّ البروتوكولات ذات المستوى الأعلى، مثل البروتوكولان TCP و UDP، تعمل عادةً فوق بروتوكول IP على المضيفين. حيث ETH هو البروتوكول الذي يشغَّل عبر شبكة إيثرنت. سيتناول الجزء المتبقّي من المقال جوانب مختلفة من بروتوكول IP. ويُعَدّ بروتوكول IP هو الحالة الأهم لدراستها ببساطة، بسبب حجم الإنترنت. وعلى الرغم من إمكانية بناء شبكة متشابكة لا تستخدم بروتوكول IP، فقد كانت هناك حلول بديلة في أيام الإنترنت الأولى. ويمكن القول بأن الإنترنت عبر بروتوكول الإنترنت هو البروتوكول الوحيد الذي واجه بالفعل مشكلة الحجم، وبالتالي فهو يوفّر أفضل دراسة حالة لبروتوكول التشبيك القابل للتوسع.

نموذج الخدمة Service Model

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

يمكن عدّ نموذج خدمة IP مكوَّنًا من جزأين هما: مخطط العنوَنة addressing scheme، والذي يوفِّر طريقةً لتحديد جميع المضيفين في الشبكة المتشابكة، ونموذج مخطط البيانات datagram (عديم الاتصال) لتسليم البيانات. حيث يُطلق على نموذج الخدمة هذا أحيانًا اسم أفضل جهد best effort لأنه على الرغم من بذل IP قصارى جهده لتقديم مخططات البيانات، إلا أنه لا يقدّم أيّ ضمانات. سنؤجّل مناقشة نظام العنونة في الوقت الحالي ونشرح أولًا نموذج تسليم البيانات data delivery.

تسليم مخطط البيانات Datagram Delivery

يُعَد مخطط بيانات IP أساسيًا لِبروتوكول الإنترنت. وللتذكير فإنَّ مخطّط البيانات عبارة عن رزمة مرسَلة بطريقة عديمة الاتصال connectionless عبر الشبكة، إذ يحمل كلّ مخطط بيانات معلومات كافية للسماح للشبكة بتمرير الرزمة إلى وجهتها الصحيحة. أي ليست هناك حاجة لأية آلية إعداد مُسبَقة لإخبار الشبكة بما يجب القيام به عند وصول الرزمة. فما عليك سوى إرسالها، وستبذُل الشبكة قصارى جهدها لإيصالها إلى الوجهة المطلوبة. وبالتالي المعنى من نموذج الخدمة أفضل جهد أنه إذا حدث خطأٌ ما وفُقدت الرزمة أو تلِفت أو سُلِّمت بصورة خاطئة أو فشلت بأيّ شكلٍ من الأشكال في الوصول إلى وجهتها المقصودة، فلن تفعل الشبكة شيئًا لأنها بذلت قصارى جهدها، وهذا كلّ ما في الأمر. إذ لا تحاول الشبكة التعافي من الفشل، ويسمى هذا أحيانًا بـخدمة غير موثوقة unreliable service.

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

كثيرًا ما يُشار إلى قدرة بروتوكول IP على تجاوز أيّ شيء بأنها واحدة من أهم خصائصه. والجدير بالذكر أنّ العديد من التقنيات التي تشغّل بروتوكول IP عليها اليوم لم تكن موجودةً عندما اختُرِع IP. ولم تُخترَع بعد أيّ تقنية شبكاتٍ أثبتت غرابتها الشديدة بالنسبة لبروتوكول IP. إذ يمكن وحسب المبدأ تشغيل بروتوكول IP عبر شبكة تنقل الرسائل باستخدام الحمام الزاجل.

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

شبكات L2 مقابل L3

يمكن التعامل مع شبكة إيثرنت على أنها رابط من نقطة لنقطة يربط بين زوجٍ من المبدّلات مع شبكة من المبدّلات المتشابكة لتكوّن شبكة إيثرنت مبدَّلة Switched Ethernet، ويُعرَف هذا الضبط configuration أيضًا باسم شبكة L2. ولكن يمكن التعامل مع شبكة إيثرنت (حتى عندما تُرتَّب في ضبط من نقطة لنقطة بدلًا من شبكة CSMA / CD مشتركة) على أنها شبكة تربط زوجًا من الموجهات، مع شبكة من هذه الموجهات التي تشكّل الإنترنت. يُعرف هذا الضبط أيضًا باسم شبكة L3.

يتمثّل إيثرنت من نقطة لنقطة في رابط وشبكة في نفس الوقت وهذا أمرٌ مربِك (وإن كانت شبكة تافهة ثنائية العقد)، فقد تكون متصّلةً بزوج من المبدّلات L2 التي تشغّل خوارزمية الشجرة الممتدة، أو متصلةً بزوج من الموجّهات L3 التي تشغّل بروتوكول IP (بالإضافة إلى بروتوكولات التوجيه التي ستوضّح لاحقًا). إذًا لماذا تفضّل ضبطًا على الآخر؟ يعتمد ذلك جزئيًا على ما إذا كنت تريد أن تكون الشبكة مثل نطاق بثّ إذاعي (إذا كانت الإجابة نعم، فاختر L2، وما إذا كنت تريد أن يكون المضيفون المتصلين بالشبكة موجودون على شبكات مختلفة (إذا كانت الإجابة نعم، فاختر L3. الخبر السار هو أنه عندما تفهم تمامًا الآثار المترتِّبة عن هذه الازدواجية، فستكون قد تجاوزت عقبةً رئيسية في إتقان شبكات تبديل الرُّزم الحديثة.

صيغة الرزمة Packet Format

من الواضح أنّ جزءًا أساسيًا من نموذج خدمة IP هو نوع الرزم الممكن حملها. حيث يتكون مخطط بيانات IP مثل معظم الرزم، من ترويسة متبوعة بعدد من بايتات البيانات. حيث تظهر صيغة العنوان في الشكل التالي. نلاحظ اعتماد أسلوب مختلف لتمثيل الرزم عن ذلك الذي استخدمناه في الفصول السابقة. لأنّ صيَغ الرزم في طبقة الإنترنت وما فوقها مصمَّمة غالبًا لتتماشى مع حدود 32 بت لتبسيط مهمة معالجتها في البرمجيات. وبالتالي فالطريقة الشائعة لتمثيلها (المستخدَمة في طلبات الإنترنت للتعليقات Internet Requests for Comments على سبيل المثال) هي رسمُها على شكل سلسلة متتالية من كلمات مؤلَّفة من 32 بت. حيث تُرسَل الكلمة العليا أولًا، ليُرسل البايت الموجود في أقصى اليسار من كلّ كلمةٍ تحديدُا أولًا، وبهذا يمكن بسهولة التعرف على الحقول التي يبلغ طولها مضاعفات 8 بت في هذا التمثيل. كما يمكن تحديد أطوال الحقل من خلال النظر إلى مواضع البت المحدَّدة في الجزء العلوي من الرزمة في الحالة الفردية عندما لا تكون الحقول من مضاعفات 8 بت الزوجية.

IPv4PacketHeader.png

لاحظ أن نموذج مخطط البيانات البسيط للتسليم بأفضل جهد ما يزال يحتوي على بعض الميزات الدقيقة، حيث يحدِّد حقل الإصدار Version إصدار IP، وإصدار بروتوكول IP هو 4 والذي يُسمى عادةً IPv4. لاحظ أنّ وضع هذا الحقل في بداية مخطَّط البيانات يجعل من السهل إعادة تعريف كلّ شيء آخر في صيغة الرُّزمة في الإصدارات اللاحقة، حيث يبدأ برنامج معالجة الترويسة بالنظر إلى الإصدار ثمّ يتفرّع لمعالجة بقيّة الرزمة وفقًا للصيغة المناسبة. ويحدِّد الحقل التالي HLen طول الترويسة المقدَّر بكلمات 32 بت، ليكون طول الترويسة 5 كلمات (20 بايت) في حالة عدم وجود الخيارات والتي تحدث في معظم الأحيان.

احتوى حقل TOS (نوع الخدمة type of service ذو 8 بتات على عددٍ من التعريفات المختلفة على مرّ السنين. ولكنّ وظيفته الأساسية تتمثّل بالسماح بمعالجة الرزم بصورة مختلفة بناءً على احتياجات التطبيق. فقد تحدِد قيمة الحقل TOS فيما إذا كان ينبغي وضع الرزمة في رتلٍ خاص ذو تأخير منخفض أم لا.

تحتوي 16 بت التالية من الترويسة حقلَ Length الذي يمثِّل طول مخطَّط البيانات بما في ذلك الترويسة. ويَحسب حقل Length عدد البايتات بدلًا من عدد الكلمات words على عكس حقل HLen. وبالتالي الحد الأقصى لحجم مخطط بيانات IP هو 65.535 بايتًا. ولكن من الممكن ألا تدعم الشبكة الفيزيائية التي يعمل بروتوكول IP عليها مثل هذه الرزم الطويلة، لذلك يدعم IP عملية التجزئة fragmentation وإعادة التجميع reassembly، بحيث تحتوي الكلمة الثانية من العنوان على معلومات حول التجزئة، وسنتحدّث عن تفاصيل استخدامها لاحقًا.

بالانتقال إلى الكلمة الثالثة في الترويسة حيث يكون البايت التالي هو حقل TTL (عُمر الرزمةtime to live. والهدف من هذا الحقل هو التقاط الرزم التي تدور في حلقات توجيه ثم تجاهلها بدلًا من تركها تستهلك الموارد إلى أجلٍ غير مُسمى. يُضبط حقل TTL على عددٍ محدَّد من الثواني التي يُسمح فيها بالاحتفاظ بالرزمة، وستعمل الموجّهات الموجودة على طول المسار على تقليل قيمة هذا الحقل حتى يصل إلى القيمة 0. خفّضت معظم الموجهات قيمة الحقل TTL بمقدار 1 أثناء إعادة توجيه الرزمة، نظرًا لندرة بقاء الرزمة لمدّة 1 ثانية في الموجه، ولم يكن لدى جميع الموجهات إمكانية الوصول إلى ساعة مشتركة، وبالتالي أصبح هذا الحقل عدّادًا للقفزات أكثر من كونه مؤقِّتًا. لكنه لا يزال طريقةً جيدةً لالتقاط الرزم العالقة في حلقات التوجيه. حيث لا بد من توفُّر الدقة في ضبط هذا الحقل الأولي بواسطة المضيف المرسل، فإذا ضبطته على مستوٍ عالٍ جدًا فقد تدور الرزم كثيرًا قبل إهمالها، وإذا ضبطته على مستوٍ منخفض جدًا من الممكن ألا تصل الرزم إلى وجهتها، وبالتالي القيمة 64 هي القيمة الافتراضية الحالية.

حقل البروتوكول Protocol هو ببساطة مفتاح **فكّ تعدُّد ** demultiplexing، حيث يُحدِّد بروتوكول المستوى الأعلى الذي يجب أن تُمرَّر إليه رزمة IP. وهناك قيمة محدَّدة لبروتوكول TCP، وهو بروتوكول التحكم في الإرسال Transmission Control Protocol، وهي 6، أما بروتوكول UDP، وهو بروتوكول مخطط بيانات المستخدم User Datagram Protocol، فقيمته هي 17، إلى جانب العديد من البروتوكولات الأخرى التي قد توجَد فوق بروتوكول IP في رسم البروتوكول البياني.

يُحسَب حقل المجموع الاختباري Checksum من خلال عدّ عنوان IP بالكامل على أنه سلسلة من الكلمات ذات 16 بت، وإضافتها باستخدام حساب متمِّم الواحد، وأخذ متمِّم الواحد للنتيجة. وبالتالي عند تلف أيّ بت في الترويسة أثناء النقل، فلن يحتوي المجموع الاختباري على القيمة الصحيحة عند استلام الرزمة. ومن المنطقي تجاهل أيّ رزمة تفشل في المجموع الاختباري نظرًا لإمكانية احتواء الترويسة التالفة على خطأ في عنوان الوجهة، كما قد يُسلّم بصورة خاطئة نتيجةً لذلك. وتجدر الإشارة إلى أنّ هذا النوع من المجموع الاختباري لا يحتوي على نفس خصائص الكشف عن الأخطاء القوية مثل CRC، ولكن حسابه يُعَدّ أسهل بكثير في البرنامج.

آخر حقلين مطلوبين في ترويسة الرزمة هما SourceAddr وDestinationAddr، ويُعَدّ الحقل DestinationAddr مفتاح تسليم مخطط البيانات، إذ تحتوي كلّ رزمة على عنوان كامل لوجهتها المقصودة بحيث يمكن اتخاذ قرارات إعادة التوجيه في كلّ موجّه. أمّا عنوان المصدر SourceAddr فهو مطلوب للسماح للمستقبِلين بتحديد ما إذا كانوا يريدون قبول الرزمة لتمكينهم من الرد أم لا. سنناقش عناوين IP لاحقًا، ولكن الشيء المهم في الوقت الحالي والواجب معرفته، أنّ بروتوكول IP يحدِّد حيِّز العناوين العالمية الخاصة به، بغضّ النظر عن الشبكات الفيزيائية التي يديرها، كما سنرى أنّ هذا هو أحد مفاتيح دعم عدم التجانس.

وقد يكون هناك عدد من الخيارات في نهاية الترويسة، بحيث يمكن تحديد وجود أو عدم وجود الخيارات من خلال فحص حقل طول الترويسة HLen. ورغم ندرة استخدام الخيارات options، إلا أنه يجب على تطبيق IP الكامل التعامُل معها جميعًا.

التجزئة Fragmentation وإعادة التجميع Reassembly

تتمثل إحدى مشكلات توفير نموذج خدمة موحّد من مضيف إلى مضيف على مجموعة غير متجانسة من الشبكات، في ميلان كلّ تقنية شبكة إلى أن تكون لها فكرتها الخاصة عن حجم الرزمة. على سبيل المثال يمكن لشبكة الإيثرنت الكلاسيكية قبول رزم يصل طولها إلى 1500 بايت، ولكن قد توفّر الشبكات الأخرى الحديثة رزمًا أكبر "ضخمة جدًا jumbo" تحمل ما يصل إلى 9000 بايت حمولة. حيث يترك هذا خيارين لنموذج خدمة IP هما: التأكد من صغر جميع مخططات بيانات IP كفاية لتناسب رزمةً واحدةً على أيّ تقنية شبكة، أو توفير وسيلة يمكن من خلالها تجزئة الرزم وإعادة تجميعها عندما تكون كبيرةً جدًا، بحيث يمكن تمريرها عبر تقنية الشبكة المعطاة. تبيّن أنّ الخيار الأخير هو اختيار جيد، خاصةً عندما تفكِّر في حقيقة ظهور تقنيات شبكات جديدة دائمًا، إلى جانب حاجة بروتوكول IP إلى تشغيلها جميعًا؛ فهذا من شأنه جعل اختيار إطار صغير مناسب لحجم مخطط البيانات صعبًا. وهو ما يعني أيضًا أنّ المضيف لن يرسل رزمًا صغيرةً بلا داعٍ، ممّا يهدر حيّز النطاق التراسلي ويستهلك موارد المعالجة عن طريق طلب المزيد من العناوين لكلّ بايت من البيانات المرسَلة.

الفكرة الأساسية هنا هي أنّ لكلّ نوع شبكة وحدة نقلٍ قصوى maximum transmission unit أو اختصارًا MTU، وهي أكبر مخطط بيانات IP يمكن حمله في إطار. تُعدّ وحدة MTU لحسن الحظ، في شبكات ATM أكبر بكثير من خليةٍ واحدة، إذ تملك تقنية ATM آلية تجزئة وإعادة تجميع خاصة بها، ويسمّى إطار طبقة الربط في شبكة ATM بـوحدة بيانات بروتوكول تقارب الطبقة الفرعية convergence-sublayer protocol data unit أو اختصارًا CS-PDU. نلاحظ أنّ قيمة وحدة MTU أصغر من أكبر حجم للرزمة على تلك الشبكة لأنّ مخطّط بيانات IP يحتاج إلى احتواء حمولة payload إطار طبقة الربط.

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

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

IPDatagramsTraversingTheSequenceOfPhysicalNetworks.PNG

لفهم كل ما يحدث، وعلى فرض يريد المضيف H5 إرسال مخططَ بيانات إلى المضيف H8 في الشكل الموضّح سابقًا. وأنّ وحدة MTU هي 1500 بايت لشبكتي إيثرنت و802.11، و532 بايتًا لشبكة نقطة لنقطة. ثم يرسَل مخطط بيانات ذو 1420 بايتًا (20 بايتًا لترويسة IP بالإضافة إلى 1400 بايت من البيانات) من المضيف H5، ليمر عبر شبكتي 802.11 والإيثرنت الأولى بدون تجزئة، بينما يجب تجزئتها إلى ثلاثة مخطّطات بيانات في الموجّه R2. ليعيد الموجّه R3 بعد ذلك توجيه هذه الأجزاء الثلاثة عبر شبكة الإيثرنت الثانية إلى المضيف الوجهة. يوضح الشكل السابق هذا الوضع، إضافةً إلى تعزيز نقطتين مهمتين:

  1. كلّ جزء هو في حدّ ذاته مخطط بيانات IP مستقل يُنقَل عبر سلسلة من الشبكات الفيزيائية مستقلًا عن الأجزاء الأخرى.
  2. يُعاد تغليف كلّ مخطط بيانات IP لكلّ شبكة فيزيائية تنتقل عبرها.

HeaderFieldsUsedInIPFragmentation.PNG

يمكن فهم عملية التجزئة بالتفصيل من خلال النظر في حقول ترويسة كلّ مخطط بيانات، كما هو الحال في الشكل السابق. حيث تحتوي الرزمة غير المُجزأة unfragmented -والموضحة في القسم (أ) من الشكل السابق-، على 1400 بايت من البيانات وعلى ترويسة IP مؤلَّفة من 20 بايت. يجب تجزئة الرزمة عندما تصل إلى الموجّه R2، الذي يحتوي على وحدة MTU تبلغ 532 بايتًا. حيث تَترك وحدة MTU التي تتألف من 532 بايت 512 بايتًا للبيانات بعد ترويسة بروتوكول IP المكوَّنة من 20 بايتًا، ولهذا يحتوي الجزء fragment الأول على 512 بايت من البيانات. ويضبط الموجّه M بت في حقل الرايات Flags، مما يعني وجود المزيد من الأجزاء التي يجب اتّباعها، كما يضبط الموجّه حقلَ الإزاحة Offset بالقيمة 0، نظرًا لاحتواء هذا الجزء على الجزء الأول من مخطط البيانات الأصلي. وتبدأ البيانات المنقولة في الجزء الثاني بالبايت رقم 513 من البيانات الأصلية، لذلك يُضبَط حقل Offset في هذه الترويسة بالقيمة 64، وهو 512/8.

لماذا القسمة على 8؟ تبعًا لقرار مصممي بروتوكول IP وجوب حدوث التجزئة دائمًا على حدود 8 بايت، مما يعني أنّ حقل Offset يعَدّ قطعًا chunks ذات 8 بايتات وليس البايتات. يحتوي الجزء الثالث على آخر 376 بايت من البيانات، والإزاحة offset الآن هي 2 × 512/8 = 128. حيث لم يُضبَط البت M لكون هذا هو الجزء الأخير.

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

تُعَدّ عملية إعادة تجميع IP معقدة، إذ سيبقى المستقبِل يحاول إعادة تجميع مخطَّط البيانات في حالة فقد جزء fragment واحد، ليستسلم في النهاية، وحينها سيتعيّن عليه كنس مهملات الموارد التي استخدمها لإجراء إعادة التجميع الفاشلة. وقد يكون الحصول على مضيف لربط الموارد بلا داعٍ أساسًا لهجوم الحرمان من الخدمة denial-of-service attack. لذلك يُعَد تجنب تجزئة IP أمرًا جيدًا، حيث يُشجَّع المضيفون الآن بشدة على تطبيق path MTU discovery اكتشاف مسار وحدة MTU، وهي عملية يتم من خلالها تجنّب التجزئة عن طريق إرسال رزم صغيرة بما يكفي لاجتياز الرابط مع أصغر وحدة MTU في المسار من المرسل إلى المستقبِل.

العناوين العامة Global Addresses

من بين الأشياء التي يوفّرها نموذج خدمة IP هي مخطط العنونة addressing scheme. إذا أردت أن تكون قادرًا على إرسال البيانات إلى أيّ مضيف على أيّ شبكة، فيجب أن تكون هناك طريقة لتحديد جميع المضيفين. وبالتالي أنت بحاجة إلى مخطّط عنوَنة عام لا يوجد فيه مضيفان لهما نفس العنوان. ويُعَدّ التفرّد العام Global uniqueness هو الخاصيّة الأولى الواجب توفيرها في مخطَّط العنوَنة.

تُعَدّ عناوين إيثرنت فريدةً عالميًا، ولكن هذا وحده غير كاف لنظام العنوَنة في شبكة متشابكة كبيرة. حيث أنَّ عناوين الإيثرنت مُسطّحة flat أيضًا، مما يعني عدم امتلاكها لأية بنية structure، كما توفّر أدلةً قليلةً جدًا لبروتوكولات التوجيه. ومع ذلك، تملك عناوين إيثرنت بنيةً لأغراض الإسناد assignment، حيث يحدّد أول 24 بتًا الشركة المصنعة، ولكن هذا لا يوفِّر معلومات مفيدةً لبروتوكولات التوجيه، نظرًا لعدم وجود علاقة لهذه البنية بمخطط الشبكة. إنّ عناوين IP هرميةٌ hierarchical، وذلك يعني أنها تتكوّن من عِدّة أجزاء تتوافق مع نوع الهرمية الموجودة في الشبكة المتشابكة internetwork. إذ تتكوّن عناوين IP من جزأين، يشار إليهما عادةً بجزء الشبكة network وجزء المضيف host. وهذه بنية منطقية إلى حدٍ ما للشبكة المتشابكة التي تتكوّن من عدّة شبكات مترابطة. حيث يحدَّد جزءُ الشبكة من عنوان IP الشبكةَ التي يتصل بها المضيف، أي أنّ جميع المضيفين المتصلين بنفس الشبكة لديهم نفس جزء الشبكة في عنوان IP الخاص بهم. ويُعرّف جزء المضيف كلّ مضيف بصورة فريدة على تلك الشبكة. وبالتالي سيكون لعناوين المضيفين على الشبكة ذاتها نفس جزء الشبكة وأجزاء مضيفٍ مختلفة.

لاحظ أنّ الموجّهات في الشكل السابق تتّصل بشبكتين. أي يجب أن يكون لديها عنوان على كلّ شبكة، بمعنى عنوان لكلّ واجهة. يحتوي الموجّه R1 على سبيل المثال، والذي يقع بين شبكة لاسلكية وشبكة إيثرنت، على عنوان IP على واجهة الشبكة اللاسلكية التي يكون جزء الشبكة الخاص بها هو نفسه لجميع المضيفين على تلك الشبكة. كما يحتوي أيضًا على عنوان IP على واجهة شبكة الإيثرنت التي لها نفس جزء الشبكة للمضيفين الموجودين على هذه الشبكة. وبالتالي ومع الأخذ في الحسبان إمكانية تنفيذ الموجّه router على أساس مضيفٍ بواجهتيْ شبكة، فمن الأدقّ التفكير في عناوين IP على أنها تنتمي إلى واجهات interfaces أكثر من كونها منتميةً إلى مضيفين hosts.

كيف تبدو هذه العناوين الهرمية؟ تُعَدّ أحجام الجزأين غير متماثلة لجميع العناوين، على عكس بعض الأشكال الأخرى للعناوين الهرمية. وقد قُسّمت عناوين IP إلى ثلاثة أصناف classes مختلفة، كما هو موضح في الشكل الآتي، حيث يحدّد كلّ منها أجزاء شبكة وأجزاء مضيف مختلفة الحجم، وهناك أيضًا عناوين من الصنف D تحدِّد مجموعة البث المتعدّد multicast وعناوين الصنف E غير المستخدمة حاليًا. ويبلغ طول العنوان 32 بتًا في جميع الحالات.

يحدَّد صنف عنوان IP في البتات القليلة الأعلى أهميةً. فإذا كان البت الأول هو 0، فهو عنوان من الصنف A. وإذا كان البت الأول 1 والثاني 0، فهو عنوان من الصنف B. أمّا إذا كان البتان الأوليان 1 والثالث 0، فسيكون عنوانًا من الصنف C. وبالتالي من بين ما يقرب 4 مليارات عنوان IP ممكن، سيكون نصفها من الصنف A، ورُبعها من الصنف B، وثُمنها من الصنف C. يخصّص كل صنف عددًا معينًا من البتات لجزء الشبكة من العنوان والباقي من أجل جزء المضيف، حيث تحتوي شبكات الصنف A على 7 بتات لجزء الشبكة و 24 بت لجزء المضيف، ممّا يعني أنّه من غير الممكن تواجُد أكثر من 126 شبكة من الصنف A (القيمتان 0 و127 محجوزة)، ولكن يمكن لكلٍ منها استيعاب ما يصل إلى 224−2 (حوالي 16 مليون) مضيف (هناك قيمتان محجوزتان). تُخصِّص عناوين الصنف B للشبكة 14 بتًا و16 بتًا للمضيف، مما يعني أنّ كلّ شبكة من الفئة B تملك حيزًا لحوالي 65,534 مضيفًا. كما تحتوي عناوين الصنف C على 8 بتات فقط للمضيف و21 بتًا لجزء الشبكة، لذلك فقد تحتوي شبكة الصنف C على 256 معرّف مضيفٍ فريد فقط، مما يعني وجود 254 مضيفًا متصلًا فقط، فمعرّف المضيف 255 محجوز للبث الإذاعي broadcast، و0 ليس رقم مضيفٍ صالح. ولكن يدعم مخطَّط العنوَنة 221 شبكة من الصنف C.

IPAddresses.PNG

يتمتع نظام العنونة هذا بالكثير من المرونة ظاهريًا، مما يسمح باستيعاب الشبكات ذات الأحجام المختلفة بصورة كبيرة وبكفاءة إلى حدٍ ما. وقد كانت الفكرة الأصلية فيه هي أن الإنترنت يتألف من عددٍ صغير من الشبكات الواسعة wide area networks (ستكون هذه شبكات من الصنف A)، وعددٍ متواضع من شبكات بحجم الموقع (الحرم الجامعي) (ستكون شبكات من الصنف B)، إلى جانب عدد كبير من الشبكات المحلية LANs (ستكون هذه شبكات من الصنف C). ولكن بعدها تبين أنّ ذلك لم يكن مرنًا بدرجة كافية -كما سنرى بعد قليل-، حيث أنّ عناوين IP اليوم عديمة التصنيف classless.

من المفيد النظر في بعض الأمور العملية قبل النظر في كيفية استخدام عناوين IP، مثل كيفية كتابتها. إذ تُكتَب عناوين IP بأربعة أعداد صحيحة تفصل بينها نقاط. حيث يمثِّل كلّ عدد صحيح القيمة العشرية الموجودة في بايت واحد من العنوان، بدءًا من البايت الأكثر أهميةً، مثل العنوان 171.69.210.245.

من المهم عدم الخلط بين عناوين IP وأسماء نطاقات الإنترنت Internet domain names، والتي هي أيضًا ذات تسلسل هرمي. إذ تميل أسماء النطاقات إلى أن تكون سلاسل ASCII مفصولٌ بينها بنقاط، مثل cs.princeton.edu. والشيء المهم في عناوين IP هو أنها تُنقل في ترويسات رزم IP، وتُستخدم في موجِّهات IP لاتخاذ قرارات التمرير.

تمرير مخطط البيانات Datagram في بروتوكول IP

نحن الآن جاهزون للنظر في الآلية الأساسية التي تُمرِر موجّهات IP من خلالها مخططات البيانات في شبكةٍ متشابكة. وتذكر أنّ عملية تمرير forwarding كما ذكرنا في قسم سابق، هي عملية أخذ رزمة من مدخل وإرسالها إلى مخرجٍ مناسب. بينما التوجيه routing، فهو عملية بناء الجداول التي تسمح بتحديد مخرج الرزمة الصحيح. حيث تركز المناقشة هنا على التمرير، اذ سنناقش التوجيه لاحقًا.

إنّ النقاط الرئيسية الواجب الانتباه إليها أثناء مناقشة تمرير مخططات بيانات IP هي:

  • يحتوي كلّ مخطط بيانات IP على عنوان IP خاص بالمضيف الوجهة.
  • يعرِّف جزء الشبكة من عنوان IP بصورة فريدة شبكةً فيزيائية تشكل جزءًا من الإنترنت الأكبر.
  • جميع المضيفين والموجّهات التي تشترك بنفس جزء الشبكة من عنوانها متصّلون بنفس الشبكة الفيزيائية ويمكنهم بالتالي التواصل مع بعضهم بعضًا عن طريق إرسال الإطارات عبر تلك الشبكة.
  • تحتوي كلّ شبكة فيزيائية تشكّل جزءًا من الإنترنت على موجّهٍ واحد على الأقل، وهو متصّل أيضًا بشبكة فيزيائية أخرى على الأقل، أي يمكن لهذا الموجّه تبادل الرزم مع المضيفين أو الموجّهات الموجودة على أيٍّ من الشبكتين.

لذلك يمكن معالجة تمرير مخطّطات بيانات IP بالطريقة التالية: يُرسَل مخطط البيانات من مضيف المصدر إلى مضيف الوجهة، وقد يمرّ عبر عدة موجّهات على طول الطريق. حيث تحاول أيّ عقدة في البداية -سواءً كانت مضيفًا أو موجهًا- تحديد ما إذا كانت متصلةً بالشبكة الفيزيائية نفسها الموجودة فيها الوجهة، وتقارن جزء الشبكة من عنوان الوجهة مع جزء الشبكة من عنوان كلّ واجهة من واجهات الشبكة الخاصة بها (عادةً ما يكون للمضيفين واجهة واحدة فقط، بينما تحتوي الموجّهات عادةً على اثنين أو أكثر، نظرًا لاتصالها عادةً بشبكتين أو أكثر). فإذا حدث تطابق، هذا يعني أنّ الوجهة تقع على نفس الشبكة الفيزيائية التي تقع عليها الواجهة، ويمكن تسليم الرزمة مباشرةً عبر تلك الشبكة. أمّا إن لم تكن العقدة متصلةً بنفس شبكة عقدة الوجهة الفيزيائية، فستحتاج إلى إرسال مخطَّط البيانات إلى الموجِّه. كما سيكون لكلّ عقدة القدرة على اختيار موجِّه من عدة موجّهات، ولذلك فهي بحاجة إلى اختيار أفضلها، أو على الأقل اختيار موجّهٍ يعطيها فرصةً معقولةً لتقريب مخطط البيانات من وجهتها.

يُعرف الموجه الذي تختاره العقدة باسم موجّه القفزة التالية next hop router، حيث يعثر الموجّه على العقدة التوجيهية التالية الصحيحة من خلال الرجوع إلى جدول التمرير الخاص به. وجدول التمرير هو مجرّد قائمة من أزواج NetworkNum NextHop. وغالبًا ما تحوي جداول إعادة التوجيه عمليًا على بعض المعلومات الإضافية المتعلقة بالعقدة التوجيهية التالية. كما يوجد هناك أيضًا موجّه افتراضي default router يُستخدم إذا لم تتطابق أية مدخلةٍ من مدخلات الجدول مع رقم شبكة الوجهة. قد يكون من المقبول تمامًا بالنسبة للمضيف، أن يكون لديه موجّه افتراضي ولا شيء آخر، وهذا يعني أنّ جميع مخططات البيانات الموجَّهة للمضيفين غير المتصلين بالشبكة الفيزيائية التي أُرفِق المضيف المرسِل بها ستُرسَل عبر الموجه الافتراضي.

يمكن وصف خوارزمية إعادة توجيه مخطط البيانات بالطريقة التالية:

if (رقم شبكة الوجهة = رقم الشبكة الخاصة بإحدى واجهاتي) then
    سلِّم الرزمة إلى الوجهة عبر تلك الواجهة
else
    if (رقم شبكة الوجهة موجود في جدول التمرير الخاص بي) then
        سلِّم الرزمة إلى العقدة التوجيهية التالية
    else
        سلِّم الرزمة إلى الموجّه الافتراضي

بالنسبة لمضيفٍ بواجهة واحدة وموجّهٍ افتراضي فقط في جدول التمرير الخاص به، فهذا يبسَّط إلى:

if (رقم شبكة الوجهة = رقم شبكتي) then
    سلِّم الرزمة إلى الوجهة مباشرةً
else
    سلِّم الرزمة إلى الموجه الافتراضي

لنشاهد الآن كيف يعمل هذا في مثال الشبكة المتشابكة الموضَّحة في الشكل الآتي. افترض أولًا أنّ المضيف H1 يريد إرسال مخطط بيانات إلى المضيف H2، والمضيفين H1 وH2 لهما نفس رقم الشبكة في عنوان IP الخاص بهما، نظرًا لوجودهم على نفس الشبكة الفيزيائية. وبالتالي يستنتج المضيف H1 إمكانية توصيل مخطط البيانات مباشرةً إلى المضيف H2 عبر الإيثرنت. والمشكلة الوحيدة التي تحتاج إلى حلّ هي كيفية اكتشاف المضيف H1 لعنوان شبكة الإيثرنت الصحيح للمضيف H2 (سنعالج آلية الحلّ هذه لاحقًا).

ASimpleInternetwork.png

افترِض الآن أنّ المضيف H5 يريد إرسال مخطّط بيانات إلى المضيف H8. يملك هذان المضيفان أرقامَ شبكة مختلفة نظرًا لأنهما على شبكات فيزيائية مختلفة، لذلك يستنتج المضيف H5 حاجته إلى إرسال مخطط البيانات إلى موجّه. حيث يُعَدّ الموجّه R1 هو الخيار الوحيد (الموجه الافتراضي)، لذلك يرسل المضيف H1 مخطط البيانات عبر الشبكة اللاسلكية إلى الموجّه R1. بحيث يعرف الموجّه R1 أنه لا يمكنه تسليم مخطط بيانات مباشرةً إلى المضيف H8 لأن أيًا من واجهاته ليست على نفس شبكة المضيف H8. افترِض أنّ الموجّه الافتراضي الخاص بالموجّه R1 هو الموجّه R2، حيث يرسل الموجّه R1 مخطط البيانات إلى الموجّه R2 عبر شبكة الإيثرنت، وبافتراض احتواء الموجِّه R2 على جدول التمرير الموضَّح في الجدول التالي، فسيبحث عن رقم شبكة المضيف H8 (الشبكة 4)، ويمرر مخطط البيانات عبر شبكة من نقطة لنقطة إلى الموجه R3، كما يقوم الموجه R3 بتمرير مخطط البيانات مباشرةً إلى المضيف H8 نظرًا لوجود الموجّه R3 على نفس شبكة المضيف H8.

رقم الشبكة NetworkNum العقدة التوجيهية التالية NextHop
1 R1
4 R3

لاحظ أنه من الممكن تضمين معلوماتٍ عن الشبكات المتصلة مباشرةً في جدول التمرير. حيث يمكن تسمية واجهات شبكة الموجّه R2 مثل الواجهة 0 للرابط من نقطة لنقطة (الشبكة 3) والواجهة 1 لشبكة الإيثرنت (الشبكة 2). إذًا سيكون لدى الموجّه R2 جدول التمرير الموضح في الجدول التالي:

رقم الشبكة NetworkNum العقدة التوجيهية التالية NextHop
1 R1
2 Interface 1
3 Interface 0
4 R3

وبالتالي يعرف الموجّه R2 ما يجب فعله عندما يصادف أيّ رقم شبكةً في رزمة. فإمّا أن تكون هذه الشبكة متصلة مباشرةً بالموجّه R2، وفي هذه الحالة يمكن تسليم الرزمة إلى وجهتها عبر تلك الشبكة. أو يمكن الوصول إلى الشبكة عبر بعض موجّهات القفزة التالية التي قد يصل إليها الموجّه R2 عبر شبكة متصلة به. سيستخدم الموجّه R2 بروتوكول ARP الموصوف أدناه، في كلتا الحالتين للعثور على عنوان MAC الخاص بالعقدة التي ستُرسَل الرزمة إليها بعد ذلك.

يُعَد جدول التمرير الذي يستخدمه الموجّه R2 بسيطًا بدرجة كافية تمكّن من ضبطه يدويًا. ولكن عادةً ما تكون هذه الجداول أعقد، ويمكن إنشاؤها عن طريق تشغيل أحد بروتوكولات التوجيه التي سيتم شرحها في فصل لاحق. لاحظ أيضًا أنه عادةً ما تكون أرقام الشبكة أطول في التطبيق العملي (128.96 مثلًا).

يمكنك الآن رؤية كيف أدّت العنوَنة الهرمية -أي تقسيم العنوان إلى جزء شبكة وجزء مضيف- إلى تحسين قابلية التوسع لشبكةٍ كبيرة. حيث تحتوي الموجّهات الآن على جداول تمرير تحوي فقط قائمةً بمجموعة من أرقام الشبكة بدلًا من جميع العُقد في الشبكة. وهذا يعني أنّ الموجّه R2 على سبيل المثال يمكنه تخزين المعلومات اللازمة للوصول إلى جميع المضيفين في الشبكة (التي تحوي ثمانية مضيفين) في جدولٍ من أربع مدخلات فقط. إذ سيظل الموجه R2 بحاجة فقط إلى نفس المدخلات الأربعة حتى لو كان هناك 100 مضيف على كلّ شبكة فيزيائية، وهذه خطوة أولى جيدة في تحقيق قابلية التوسع scalability، على الرغم من كونها ليست الخطوة الأخيرة بأي حال من الأحوال.

اقتباس

يوضّح ذلك أحد أهم مبادئ بناء الشبكات القابلة للتوسّع، وهو الحاجة إلى تقليل كمية المعلومات المخزَّنة في كلّ عقدة والتي تتبادلها العقَد لتحقيق قابلية التوسع. وتُعَدّ الطريقة الأكثر شيوعًا للقيام بذلك هي التجميع الهرمي hierarchical aggregation، حيث يقدّم بروتوكول IP تسلسلًا هرميًا من مستويين، مع وجود شبكاتٍ في المستوى العلوي وعقدٍ في المستوى السفلي. لقد جمّعنا المعلومات عن طريق السماح للموجهات بالتعامل فقط مع الوصول إلى الشبكة الصحيحة، حيث تُمثَّل المعلومات التي يحتاجها الموجّه لتقديم مخطط بيانات إلى أية عقدة على شبكة معيّنة بقطعةِ معلوماتٍ مجمَّعة.

ترجمة -وبتصرّف- للقسم Internet من فصل Internetworking من كتاب Computer Networks: A Systems Approach.

اقرأ أيضًا


تفاعل الأعضاء

أفضل التعليقات

لا توجد أية تعليقات بعد



انضم إلى النقاش

يمكنك أن تنشر الآن وتسجل لاحقًا. إذا كان لديك حساب، فسجل الدخول الآن لتنشر باسم حسابك.

زائر
أضف تعليق

×   لقد أضفت محتوى بخط أو تنسيق مختلف.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   جرى استعادة المحتوى السابق..   امسح المحرر

×   You cannot paste images directly. Upload or insert images from URL.


×
×
  • أضف...