مدونة عمار الخوالده

مقدمة في شبكات الحاسوب - Computer Networking


مقدمة في شبكات الحاسوب - Computer Networking

مقدمة

شبكات الحاسوب من المواضيع المهمة التي يتعامل المبرمج معها باستمرار، فإرسال HTTP Requests، أو إرسال Queries إلى سيرفر قاعدة بيانات هي عبارة عن إرسال بيانات على الشبكة.

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

هدف هذا المقال هو إعطاء مقدمة عن الشبكات دون التركيز على جانب الـ Hardware، سيتم شرح بعض البروتوكولات (Protocols) بشكل مبسط في هذا المقال، وقد أشرحها أو أشرح بروتوكولات اخرى لاحقا بتفصيل أكبر في مقالات أخرى.

البروتوكول (Protocol) هي آلية متفق عليها بين الأجهزة الموجودة في الشبكة للتواصل، بالاتفاق على Protocols معينة للتواصل، يمكن للمرسل والمستقبل للبيانات فهم بعضهما بعضا بسبب وجود آلية واضحة لطريقة إرسال واستقبال وترميز البيانات.

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

بناء شبكة بسيطة

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

أول ما قد يتبادر إلى ذهننا هو ربط الحاسوبين ببعضهما عن طريق بعض الأسلاك وتبادل البيانات على شكل إشارات كهربائية تمثل بيانات Binary.

نقل بيانات Binary بين جهازين عبر سلك

السلك الذي يربط الجهازين يسمى Physical Medium، أي الوسيط الفيزيائي أو المادي، عند تصميمنا للـ Hardware والـ Software المسؤول عن إرسال البيانات عبر هذا الوسيط، يجب أن نراعي إمكانية اختلاف هذا الوسيط مستقبلا.

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

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

تشغيل برنامج ونقل البيانات عبر الشبكة عن طريق استخدام وسيط اتصال

بحسب الصورة السابقة، قسمنا مكونات الشبكة التي أنشأناها إلى طبقتين، الطبقة الأولى هي الـ Physical Layer، وهي مسؤولة عن الإرسال الفعلي للبيانات عبر الـ Physical Medium.

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

في الواقع، توجد 5 طبقات أخرى ذات مسؤوليات ووظائف مختلفة بين الـ Application Layer وال Physical Layer، سيتم شرحها بالتدريج، حاليا افترض عدم الحاجة لطبقات أخرى.

ملخص المرحلة الأولى من بناء الشبكة

المشكلة / المسألة: نحتاج آلية تبادل بيانات بين جهازين.

الحل:

  • ربط الجهازين بوسيط اتصال (Physical Medium).
  • تجهيز الـ Hardware لإرسال البيانات عبر الوسيط (Physical Layer).
  • امكانية دعم أكثر من نوع من وسطاء الاتصال (أسلاك نحاسية، موجات لاسلكية، ألياف ضوئية …إلخ).
  • دعم إرسال الـ Physical Layer للبيانات المستقبلة عبر الشبكة إلى البرامج التي نقوم ببرمجتها.
  • دعم استقبال الـ Physical Layer للبيانات من الـ Application Layer وإرسالها عبر الشبكة.

تعدد الأجهزة في الشبكة

أنشأنا شبكة تربط بين جهازين، لكن ماذا لو أردنا إضافة جهاز ثالث إلى الشبكة؟

ثلاثة أجهزة متصلة عبر الشبكة باستخدام جهاز موزع Hub

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

صحيح أننا أضفنا جهازا ثالثا وربطناه بالجهازين الآخرين عبر الـ Physical Medium، لكن تكمن المشكلة في أن إرسال البيانات عبر الـ Physical Medium يعني وصولها إلى جميع الأجهزة المتصلة، لهذا السبب نحتاج إلى رمز أو معرّف خاص بكل جهاز.

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

احتياجنا لوجود MAC Address بعد إضافة جهاز ثالث هو لتوضيح الفائدة من الـ MAC Address، ولا يعني هذا أبدا أن الشبكات لا تحتوي على MAC Addresses في حالة وجود جهازين فقط في الشبكة.

سنضيف طبقة جديدة تسمى Data-Link تتوسط طبقتي الـ Application والـ Physical، وستكون مسؤولة عن التعامل مع الـ MAC Address:

صورة توضح شكل البيانات في طبقة الـ Data-Link المسؤولة عن الـ MAC Address
ترسل الـ Application Layer البيانات إلى طبقة الـ Data-Link أولا، طبقة الـ Data-Link تضيف الـ MAC Address الخاص بالمرسل (الجهاز الحالي) والـ MAC Address الخاص بالجهاز المُستقبل، البيانات الخاصة بالـ Application مضاف إليها الـ MAC Addresses تسمى Frames.

تُرسَلُ الـ Frames إلى الطبقة التالية (الـ Physical Layer) والتي تنقلها بدورها عبر وسائط الاتصال.

أما في حالة استقبال البيانات، تقرأ الـ Data-Link الـ Frames المستَقبلة وتقارن الـ Destination MAC Address (الخاص بالمستقبِل) بالـ MAC Address للجهاز الحالي، تُمرر البيانات للطبقة التالية في حالة تطابق الـ MAC Addresses، ويتم تجاهلها في حالة عدم تطابقها لأنها رسالة غير موجهة لهذا الجهاز.1

الصورة التالية توضح آلية إرسال البيانات من الجهاز صاحب الـ MAC Address المنتهي بـ AA إلى الجهاز صاحب الـ MAC Address المنتهي بـ CC.

ارسال البيانات عبر الشبكة والتحقق من الـ MAC Address المطلوب
في المثال السابق، يكون الـ Frame على الشكل التالي:

Source MAC Address      = 00:00:00:00:00:AA
Destination Mac Address = 00:00:00:00:00:CC
Data                    = البيانات التي نريد إرسالها

الشكل المذكور للبيانات هو للتقريب، يمكنك إيجاد البيانات الموجودة داخل الـ Frame على الصيغة الموجودة في Ethernet Frame Structure - Wikipedia

ملخص المرحلة الثانية من بناء الشبكة

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

الحل:

  • أضفنا عنوان مميز لكل جهاز يسمى MAC Address
  • أضفنا طبقة فوق طبقة الـ Physical Layer اسمها Data-Link Layer
  • وظيفة الـ Data-Link Layer عند إرسال البيانات هو إضافة الـ MAC Address الخاص بالمرسل والـ MAC Address الخاص بالمستقبل.
  • عند إضافة الـ MAC Addresses إلى البيانات تُسمى نتيجة هذه العملية Frame.
  • وظيفة الـ Data-Link Layer عند استقبال البيانات هو مقارنة الـ Destination MAC Address في الـ Frame بالـ MAC Address الخاص بالجهاز، إذا كان مطابقا له يتم إرسال البيانات إلى الطبقة التالية لمعالجتها، وإلا فسيتم إهمالها لأنها ليست لهذا الجهاز.
  • بما أن الـ Frame يحتوي على الـ MAC Address الخاص بالمرسل، فيمكننا إرسال الرد لأننا نعرف الـ MAC Address الخاص به.

آلية توصيل البيانات إلى الـ Processes

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

حددنا في المرحلة السابقة آلية لمعرفة الجهاز المستهدف بالرسالة (MAC Address)، نحتاج أيضا إلى آلية أخرى لمعرفة البرنامج المستهدف ضمن هذا الجهاز.

لحل هذه المشكلة، سنقوم بإضافة طبقة جديدة نسميها Transport Layer بين طبقة Data-Link وطبقة الـ Application، في هذه الطبقة يعين نظام التشغيل رقما خاصا بكل Process، هذا الرقم يسمى Port ويساعدنا على استقبال البيانات وتحويلها إلى الـ Process المطلوبة.

في نظم التشغيل، الـ Process هو عبارة عن برنامج (Program) تم عمل Load له وللبيانات التي يحتاجها للعمل من الـ Disk إلى الـ Memory.

نظام التشغيل سيعين رقمين لكل Process، الـ Port الخاص بإرسال البيانات (Destination Port) والـ Port الخاص بالاستقبال (Source Port)، ستتم إضافة هذه المعلومات إلى البيانات الخاصة بنا، نتيجة هذه الإضافة تسمى Segment:

رسم توضيحي لبيانات الـ Segment داخل الـ Transport Layer

الصورة التالية على سبيل المثال توضح فائدة الـ Ports في التواصل بين جهازين، الجهاز الأول يقدم خدمة HTTP Web Server على البورت 80 وخدمة FTP لتبادل الملفات على البورت 21:

صورة توضيحية لاستخدام أكثر من Process للشبكة وتفريق نظام التشغيل بين الـ Processes باستخدام الـ Port Number

كما تلاحظ، الـ HTTP Web Server بحاجة أيضا لإرسال بيانات أو استجابة إلى الجهاز الآخر، لذلك يقوم باستخراج الـ Source Port من الـ Segment واستخدامه كـ Destination Port عند إرسال البيانات.

طبقة الـ Data-Link على الجهاز الآخر يمكنها معرفة أن هذا الـ Port العشوائي تم إنشاؤه للـ Process التي تتعامل مع HTTP (ولتكن Process لمتصفح الويب على سبيل المثال) لذلك سترسل البيانات إلى هذه الـ Process، وبهذه الطريقة تصبح لدينا آلية لتشغيل أكثر من Process تتعامل مع الشبكة دون تداخل البيانات فيما بينها.

هذا ليس شرحا كاملا للـ Transport Layer، ففي هذه الطبقة يوجد أكثر من Protocol للتحكم بارسال البيانات، UDP و TCP، حاليا سيتم تجاهلهما وتأجيل شرحهما قليلا.

ملخص المرحلة الثالثة من بناء الشبكة

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

الحل:

  • أنشأنا طبقة جديدة باسم Transport Layer.
  • في هذه الطبقة يحدد نظام التشغيل رقم Port لاستقبال البيانات خاص بكل Process.
  • تنشىء الطبقة Segment، وهي البيانات التي نريد إرسالها يضاف إليها الـ Port الخاص بالـ Process التي سنرسل البيانات إليها على الجهاز الآخر، والـ Port الخاص بالـ Process التي أرسلت البيانات.
  • وجود الـ Port الخاص بالـ Process المُرسلة في الـ Segment سيمكن الـ Process المُستقبِلة من الرد على الـ Process الأولى.

ربط الشبكات بعضها ببعض

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

النموذج الذي بنيناه حتى الآن لن يكون مناسبا لربط عدد كبير من الأجهزة، فنحن بصدد إنشاء شبكة تربط بين عدة شبكات، مما يعني وجود عدد كبير من الأجهزة المتصلة بكل واحدة من هذه الشبكات، سيكون من الصعب معرفة وتخزين الـ MAC Address لكل واحد من هذه الأجهزة.

شكل الشبكة الذي نريد الوصول إليه هو “شبكة تربط بين عدة شبكات” كما في الصورة:

صورة لربط عدة شبكات ببعضها البعض في شبكة أكبر

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

عندما أردنا إعطاء عنوان لكل جهاز، قمنا بإسناد MAC Address ثابت لكل جهاز عند عملية التصنيع، لكن الـ MAC Address لن يساعدنا للوصول إلى شكل الشبكة السابق، كلما زادت أعداد الشبكات، كلما زاد تعقيد إرسال البيانات، فحتى لو كنت أعرف الـ MAC Address الخاص بالجهاز المُستقبِل، كيف سيعرف جهازي في أي شبكة يوجد هذا الـ MAC Address من ضمن الشبكات الكثيرة المتصلة؟

التوجيه - Routing

نحتاج آلية توجيه (Routing) بين هذه الشبكات، حتى نتمكن من معرفة وِجهة البيانات التي نُرسلها، هل يجب إرسال هذه البيانات إلى جهاز آخر في نفس الـ Subnet؟ أم أن هذه البيانات سيتم إرسالها إلى جهاز متصل بـ Subnet أخرى؟ وما هو المسار الذي تتخذه البيانات للوصول إلى الجهاز أو الشبكة المطلوبة؟

لحل هذه المشكلة، نحتاج إلى رقم جديد مختلف عن الـ MAC Address، بحيث يمثل هذا الرقم الـ Subnet الذي ينتمي إليها الجهاز، إضافة إلى رقم يميز الجهاز ضمن هذه الـ Subnet، لذلك يجب أن لا يكون هذا الرقم خاصا بكل جهاز عند تصنيعه مثل الـ MAC Address، لأنه من الممكن فصل أحد الأجهزة من إحدى الشبكات وإعادة استخدامه في شبكة أخرى لاحقا (ومن الممكن أن ينتمي نفس الجهاز لأكثر من شبكة).

مما يعني أن هذا الرقم يتم إسناده لكل جهاز عند الاتصال بالشبكة2، هذا الرقم هو الـ IP Address.

سنقوم بإضافة طبقة جديدة بين طبقة الـ Data-Link وطبقة الـ Transport للتعامل مع الـ IP Addresses، عند إرسال البيانات، تستلم هذه الطبقة الـ Segment من طبقة الـ Transport وتحولها إلى Packet.

الـ Packet هي عبارة عن الـ Segment يضاف إليها الـ IP Address الخاص بالمرسل (Source IP Address) والـ IP Address الخاص بالمُستقبل (Destination IP Address).3

يتم في الطبقة التالية تحويل الـ Packet إلى Frame، أصبح الترتيب لدينا كالآتي Data -> Segment -> Packet -> Frame:

صورة توضح محتويات الـ Packet في الـ Network Layer

عند استقبال البيانات، ستأخذ الـ Network Layer الـ Frame من الـ Data-Link Layer وتفككها للحصول على الـ IP Addresses الموجودة في الـ Packet داخل الـ Frame.

عملية الـ Packet Routing في الشبكات موضوع كبير وفيه الكثير من التفاصيل، هذا المقال يشرح جزءا بسيطا جدا من العملية.

اتصال الشبكات باستخدام الـ Router

حتى الآن، أسسنا الـ Layer التي ستتعامل مع الـ IP، لكن كيف ستتم عملية الإرسال إلى خارج الشبكة؟ سنقوم بربط كل شبكتين (أو أكثر) بجهاز يسمى Router، فكرة هذا الجهاز هو وجود اكثر من IP Address له، الصورة التالية توضح استخدام الـ Router للربط بين شبكتين مختلفتين:

صورة توضح وجود أكثر من IP للـ Router للربط بين الشبكات

يتحقق الـ Router من أن الـ Destination IP Address هو لجهاز داخل نفس الشبكة، إن كان كذلك فسيرسل البيانات ضمن الشبكة الداخلية، وإلا فسيرسل الـ Router البيانات إلى شبكة أخرى.

تحديد الشبكة باستخدام Subnet Mask

من إعدادات الشبكة التي يتصل بها جهازي حاليا عبر الـ Wifi يمكنني عرض بعض التفاصيل عن الشبكة كما توضح الصورة التالية:

مثال على الـ IPv4 والـ Subnet mask

لاحظ أن الـ IP Address يتكون من أربعة أجزاء مفصولة بنقاط، كل جزء من هذه الأجزاء يحتوي على Byte واحد (رقم من 0 إلى 255).

الـ Subnet mask يمثل جزءا مهما لعملية الـ Routing، الـ Subnet Mask الموضح في الصورة 255.255.255.0 يوضح أن جميع الأجهزة التي تبدأ بأول 3 Bytes مثل: {any}.192.168.181 تنتمي إلى نفس الشبكة، ويتم ذلك عن طريق تنفيذ عملية Bitwise AND بين كل Byte في الـ IP Address مع كل Byte في الـ Network Mask.

لو أردت إرسال بعض البيانات من جهازي 192.168.181.62 إلى الجهاز 192.168.181.77 فستكون النتيجة كالآتي عند تطبيق الـ Subnet Mask:

192.168.181.62 AND 255.255.255.0 = 192.168.181.0

192.168.181.77 AND 255.255.255.0 = 192.168.181.0

النتيجتان متطابقتان بعد تطبيق الـ Mask، مما يعني أن الجهازين على نفس الشبكة، وبناء على هذا لن يقوم الـ Router بمحاولة إرسال البيانات إلى شبكة أخرى، بل سيستخرج الـ MAC Address الخاص بالجهاز ضمن نفس الشبكة ويرسل البيانات إليه.

الشرح السابق هو للـ IPv4، توجد نسخة أخرى لها حجم مختلف (IPv6)، هل يمكنك حساب أقصى عدد يمكن الحصول عليه من الـ IPv4؟4

ملخص المرحلة الرابعة من بناء الشبكة

المشكلة / المسألة: نحن بحاجة لربط عدة شبكات مختلفة ببعضها، مما يزيد تعقيد النظام، وهذا يجعل الـ MAC Address غير كافٍ للتواصل بين الأجهزة بسبب الحاجة إلى آلية للـ Routing.

الحل:

  • نقوم بإسناد عنوان جديد يسمى IP Address لكل جهاز ضمن الشبكة.
  • هذا العنوان ليس مثبتا في الجهاز من المصنع مثل الـ MAC Address، بل يتم إسناده للجهاز عند اتصاله بالشبكة.5
  • نضيف طبقة جديدة باسم Network Layer بين طبقتي الـ Data-Link والـ Transport
  • عند إرسال البيانات، تضيف الـ Network Layer الـ IP Address للمرسل والمستقبل إلى الـ Segment مما يحولها إلى Packet.
  • عند استقبال البيانات، يمكن لهذه الطبقة معرفة ما إذا كانت الـ Packet تنتمي لنفس الشبكة أم لا.
  • نضيف جهازا إلى الشبكة يسمى Router، يمكن لهذا الجهاز الانتماء لأكثر من شبكة في نفس الوقت، ويكون لديه IP Address في كل شبكة.
  • سيعمل هذا الجهاز كوسيط بين الشبكات، أو كـ Gateway بالنسبة للـ Subnet، ففي حال تعرفه على أن الـ Destination IP خارج الـ Subnet الحالية، يعمل على إرسالها إلى العالم الخارجي.

آلية إرسال البيانات في الـ Transport Layer

يوجد بروتوكولان لتنظيم عملية إرسال الـ Segments في هذه الطبقة:

  • TCP
  • UDP

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

User Datagram Protocol - UDP

الـ UDP هو بروتوكول بسيط يُرسل البيانات إلى الـ Destination Port، مع تحديد Source Port لاستقبال البيانات.

الـ UDP هو بروتوكول Stateless أي أنه لا يخزن بيانات متعلقة بالمرسل والمستقبل، فيمكنني إرسال أي بيانات إلى أي جهاز عبر UDP ما دام الـ Port غير مغلق في الـ Firewall.

Transmission Control Protocol - TCP

الـ TCP يعتبر أكثر تعقيدا من الـ UDP، حيث أنه يحتوي على الكثير من الآليات لضمان وصول البيانات إلى الطرف الآخر، وإعادة إرسالها في حالة حدوث أخطاء، ووصولها بترتيب معين، وغيرها من الآليات الأخرى.

على عكس UDP، فـ TCP هو بروتوكول Stateful، أي أنه يخزن بيانات المرسل والمستقبل، فلا يمكن إرسال البيانات إلى أي جهاز ببساطة عبر TCP، بل يجب أولا إنشاء إتصال Connection، يوافق عليه المرسل والمستقبل، بعد إنشاء الاتصال عن طريق عملية تسمى الـ Handshake، يتم تبادل البيانات بين الجهازين.

بناء بروتوكولات فوق TCP و UDP

في معظم الانظمة التي نتعامل معها بشكل يومي، لا نتعامل كمبرمجن مع TCP و UDP بشكل مباشر، بل نتعامل مع بروتوكولات أخرى ذات خصائص مختلفة مبنية فوقها، فبروتوكول HTTP مثلا هو بروتوكول يعمل على الـ Application Layer، وهو بروتوكول مبني فوق TCP.

في العادة كان يتم بناء بروتوكول HTTP على TCP، لكن HTTP/3 مبني على بروتوكول QUIC الذي تم بناءه على بروتوكول UDP.

فهم طريقة عمل TCP و UDP وخصائصها يساعدنا أكثر على فهم البروتوكولات الموجودة في طبقات أعلى.

بروتوكول DNS أيضا هو بروتوكول يعمل على الـ Application Layer وهو مبني على بروتوكول UDP، حيث يقوم جهازك بإرسال استعلام عبر UDP، ويقوم الـ DNS Resolver بارسال النتيجة عبر نفس البروتوكول إلى جهازك.

لتفاصيل أكثر عن طريقة عمل الـ DNS يمكنك قراءة المقال التالي: شرح الـ DNS وآلية عمله وبعض تطبيقاته

OSI Model

الطبقات التي شرحناها حتى الآن هي طبقات تنتمي إلى Standard Model (نموذج معياري) اسمه OSI Model.

الـ OSI Model هو نموذج افتراضي يستخدم كـ Abstraction لشرح مفاهيم الشبكات، فتقسيم مكونات الشبكة إلى أكثر من طبقة يسهل عملية الشرح والفهم.

هذه الصورة توضح طبقات الـ OSI Model كاملة:

صورة كاملة لطبقات الـ OSI model مع توضيح لطبيعة البيانات في كل طبقة

غطينا جميع الطبقات خلال الشرح باستثناء طبقتي Session Layer و Presentation Layer.

الـ Session Layer

هذه الطبقة مسؤولة عن إنشاء الـ Connections، لكن على أرض الواقع الـ Connection متعلق مباشرة ببروتوكول TCP، لذلك لا توجد أهمية كبيرة لفصل مفهوم الـ Sessions أو الـ Connections إلى طبقة مستقلة.

الـ Presentation Layer

هذه الطبقة مسؤولة عن تجهيز البيانات وتغيير شكلها بحيث تكون جاهزة للاستخدام كما ينبغي في الـ Application Layer.

فتشفير البيانات (Data Encryption)، أو الـ Encoding، أو الـ Serialization، كلها تنتمي لهذه الطبقة، لكن على أرض الواقع، معظم هذه العمليات تتم بالفعل في الـ Application Layer.

يمكن اعتبار تشفير TLS في حال وجوده ضمن هذه الطبقة.

مشاكل الـ OSI Model

الـ OSI Model لا يزال مفهوما نظريا، فهذه الطبقات كلها هي لتسهيل الشرح، لكن تجد اختلافا بين الـ OSI Model وبين واقع الشبكات الآن، خاصة في الـ Session والـ Presentation Layer.

فمشكلة الـ OSI Model الرئيسية هي كثرة تقسيم الطبقات إلى حد لا داعي له أحيانا.

إذا كان الـ OSI Model يعاني من هذه المشاكل، فلماذا نقوم بشرحه؟ وألا يوجد Model بديل أكثر دقة؟

لا تزال كثير من الكتب والمراجع تستخدم الـ OSI Model في الشرح، كما تستخدم كثير من الأدوات والتقنيات المتعلقة بالشبكات الـ OSI Model للإشارة إلى آلية عملها، فهذا مثلا مقال على موقع Nginx يشرح الفرق في الـ Load Balancing على مستوى الطبقة السابعة (Application Layer) والطبقة الرابعة (Transport Layer).

الـ TCP/IP Model يعبر عن شبكات الانترنت بشكل أكثر دقة من الـ OSI Model، فهو يختصر الطبقات التي لا داعي لها، فهم أي واحد منهما يساعدك في فهم الآخر.

مقارنة بين الـ TCP/IP Model والـ OSI Model


  1. عند إرسال الـ Frame عبر الشبكة فإنه يصل إلى جميع الأجهزة، هذا يعني أن بعض الأجهزة قد تقرأ بيانات غير موجهة لها بدل تجاهلها، إضافة إلى زيادة الحمل على الشبكة بسبب إرسال الكثير من البيانات التي لا داعي لها (Hub vs Switch in computer networks). ↩︎

  2. يحتوي الراوتر غالبا على سيرفر وظيفته إسناد الـ IPs إلى الاجهزة المتصلة بالشبكة (DHCP Server). ↩︎

  3. في برامجنا نقوم بالتواصل مع باقي الاجهزة عن طريق تحديد الـ IP Address، فكيف يعرف الجهاز الذي يريد إرسال البيانات الـ MAC Address الخاص بباقي الأجهزة ليضيفه إلى الـ Destination MAC Address? إبحث عن: (ARP - Address Resolution Protocol). ↩︎

  4. ابحث عن محدودية عدد عناوين الـ IP وكيف تم حل المشكلة (IPv4 vs IPv6). ↩︎

  5. في العادة، يتم استخدام Private IPs للتواصل بين الأجهزة داخل نفس الشبكة، أما عند تواصل جهاز داخل الشبكة مع جهاز آخر خارجها يتم استخدام الـ IP الخاص بالـ Router كـ Destination IP، ولمعرفة الـ IP الداخلي المطلوب، يتم اسناد Port عشوائي ضمن الراوتر يؤشر على الـ IP الداخلي (NAT - Network Address Translation). ↩︎

اقرأ أيضا