إذا كنت مبرمجاً، فإن هذا لا يعني بالضرورة أنك مبرمج شبكات أيضاً. مبرمج قواعد البيانات يحتاج بجانب البرمجة إلى معرفة المزيد عن مبادئ قواعد البيانات، ومبرمج الرسوميات يحتاج إلى معرفة المزيد عن عمل الرسوميات في الحاسوب، كما أن مبرمج الشبكات يحتاج إلى معرفة المزيد عن الشبكات. ليس هذا فحسب، بل إن هناك في العادة إلى جانب المبادئ، أدوات ومكتبات برمجية خاصة عليك أن تجيد التعامل معها في كل مجال. بالنسبة للشبكات، مفهوم المقابس والمكتبات التي تحقق هذا المفهوم هي التي تمكن المبرمج من التعامل مع الشبكات. في هذه السلسلة المبسّطة من ثلاث مقالات بإذن الله، أستعرض معك المفاهيم الأساسية للشبكات وللمقابس، على أمل أن نستعرض أكثر تفاصيل برمجة المقابس في مقالات أخرى إن شاء الله تعالى.
المفهوم الأساسي
المفهوم الأساسي للشبكة هو ربط أكثر من جهاز واحد بغرض مشاركة الموارد (موارد حسابية computational ، تخزينية storage، أو طرفيات peripheral) والتواصل communication. تقليدياً ، كانت الأجهزة عبارة عن حواسيب (تسمى hosts) وراوترات، ووسيلة الاتصال هي الأسلاك. أما الآن، فمن الممكن لأية آلة مع بعض الذكاء المدمج (معالج)، أن يكون لها عنوان شبكة (مثل الطابعات مثلاً)، وأن تتبادل الاتصال مع جميع الأنواع الأخرى من الأجهزة، من خلال وسائط من جميع الأنواع، سلكية أو لاسلكية.
التركيب الفيزيائي للشبكة physical topology، وأنواع وسائط الاتصال communication media، تقع في دائرة اهتمام مصممي وفنيي الشبكات. ما يقلق مديري الشبكات، والمبرمجين (بما فيهم الهاكرز) أكثر من ذلك، هو الجانب الآخر من الشبكات: جانب البرمجيات.
دور البروتوكولات
الاتصالات بين أجهزة الحاسوب هي في الأساس تدفق إشارات. باستخدام نفس التمثيل للإشارات ضمن الحاسوب الواحد، فإن هذه الإشارات تمثّل أيضاً باعتبارها تدفق سيل من البتات bit (البت الواحد: إشارة تحتمل قيمتين فقط)، والتي غالبا ما يتم التعامل معها في مجموعات من ثمانية، كل مجموعة منها تسمى بايتاً byte. لذلك، فإن الاتصال بين طرفين (حاسوبين) هو في نهاية المطاف سلسلة من البايتات. العديد من الوحدات ضمن كل طرف قد تتعامل مع هذه السلاسل من البايتات، ابتداءً من البرامج المثبتة على كروت واجهة الشبكة، وحتى الوحدات البرمجية المكوّنة لنظام تشغيل الحاسوب ، أو تطبيقات المستخدمين. المشكلة هي أن هذا السيل المتدفق من سلاسل البايتات عبر وسائط النقل يمكن أن يعني أي شيء لتلك الوحدات؛ ودون اتفاق واضح محدد سلفاً على معنى هذه السلاسل، فإنها ليست أكثر من قمامة إلكترونية. من أجل هذا، اتفق الناس علي تفسيرات مشتركة للبايتات المتبادلة بينهم، وأخذ ذلك شكل مجموعة من القواعد والاصطلاحات التي تتحكم في الاتصال بين الأجهزة على الشبكات. تسمى هذه القواعد، بطبيعة الحال، بروتوكولات الشبكات.
تتطلب البروتوكولات أن يتم تبادل البايتات في كتل تسمى رسائل messages. تحدد البروتوكولات بدقة كلاً من تركيب أنماط البايتات في الرسائل(الـsyntax)، ويشار اليها عادة باسم تنسيقات الرسالة (message format)، بالإضافة إلى دلالات هذه التنسيقات (الـsemantics)؛ أي معنى كل جزء من الأجزاء المختلفة لتلك الرسائل، على افتراض أنه ستكون هناك حاجة إلى عدة أجزاء في كل رسالة متبادلة من أجل التحكم الكامل في الاتصال بين الأطراف المختلفة. أيضاً ، تتحكم البروتوكولات في تزامن الاتصال، ويعني ذلك التأكد من أن هناك توافقاً بين معدلات وتوقيت الإرسال والاستقبال بين كل طرفين. وعلى المستويات الأدنى، فيما يتعلق بأجهزة التشبيك (العتاد الصلب hardware)، فإن هناك حاجة إلى بروتوكولات للسيطرة على توقيت الإشارات المرسلة، وغيرها من المواصفات الكهربائية والميكانيكية للإشارات ولأجهزة الشبكات.
على الرغم من أن عدة مجموعات من هذه البروتوكولات قد أتت من جهات صناعية وعسكرية على مر الوقت، فإن مجموعة واحدة (تسمى مجموعة البروتوكولات المترابطة عادة بكومة stack أو suit) كانت تتمتع بكونها قياسية منذ فترة طويلة، ومطبّقة على نطاق واسع، هذا بالإضافة إلى متانة تصميمها وسلامته (أثبت الوقت ذلك فيما بعد)، مما رشّحها لأن يتم اختيارها كمجموعة بروتوكولات الإنترنت. تلك هي مجموعة بروتوكولات TCP/IP.
مثل كل شيء إذا لم يكن عتاداً صلباً في أجهزة الحاسوب، فإن بروتوكولات الشبكات تنفّذ أساساً كوحدات برمجية، إما في تعريف كرت الشبكة، وإما في نظام التشغيل، وكذلك في تطبيقات المستخدم. إذا أراد طرف أن يتواصل مع طرف آخر باستخدام مجموعة معينة من البروتوكولات، يجب أن تكون لديه البرامج المناسبة التي تمثل هذه المجموعة من البروتوكولات. من هذا يمكن أن تستنتج أن البرمجيات التي تمثّل بروتوكولات TCP/IP مثبتّة على كل جهاز متصل بشبكة الإنترنت (وإلا لم يكن متصلاً بشبكة الإنترنت، لأنه غير قادر على التفاهم مع بقية الأطراف)، وهذه البروتوكولات مدعومة حتى في أنظمة التشغيل التي تقوم بتطبيق بروتوكولات من مجموعات أخرى، مثل نتوير NetWare. تستخدم TCP/IP كذلك في شبكات أخرى، مثل الشبكات المحلية المعزولة، وهذا ما يجعل الدراسة والتجربيب مع بروتوكولاتها ممكناً، سواء داخل مختبر محلي مستقل، أو عبر الشبكة العالمية.
مفهوم الطبقات
كما ذكرت في الفقرات أعلاه، نحتاج عادة إلى البروتوكولات في شكل مجموعات (لا يمكن أن يكفي بروتوكول واحد لإتمام عمليات التواصل بين الأجهزة)، ومجموعة البروتوكولات التي تستخدم معاً لإدارة الاتصالات عبر شبكة اتصال تسمى protocol suit أو protocol stack. الحاجة إلى عدة بروتوكولات تأتي من حقيقة أن سلاسل البايتات المتبادلة في كل رسالة بين نقطتي نهاية، تتعلق بكائنات أو وحدات مختلفة في كل طرف. ليست كل البايتات في رسالة تحمل المحتوى الفعلي الذي يهم المستخدم النهائي عند كل طرف، إذ أن هناك حاجة إلى بعض هذه الباياتات من أجل توفير بعض الوظائف الأساسية لجعل التواصل ممكناً (في الحقيقة، هناك أنواع من الرسائل المتبادلة لا تحوي على الإطلاق أي بيانات تهم المستخدم مباشرة، وإنما تستخدم في تشغيل الشبكة). هذه الوظائف تشمل التزامن synchronization، والعنونة addressing، والكشف عن أخطاء الإرسال وربما تصحيحها error detection and correction، والتحكم في التدفق flow control (هذا يعني أساساً عدم السماح لمرسل سريع بغمر مستقبل بطيء بالبايتات المرسلة)، التوجيه routing (توجيه الرسائل من جهاز إلى آخر حتى تصل إلى الجهاز المقصود كوجهة والذي قد يبعد عن الجهاز المصدر عدة خطوات)، التحكم في الازدحام congestion control (المقصود هو ازدحام الرسائل في مسار واحد من عدة مسارات محتملة مما يستدعي اكتشاف هذا الاختناق ومعالجته)، والأمن security، وغيرها. ويتم تنفيذ العديد من هذه المهام على أكثر من مستوى واحد من قبل أكثر من كائن واحد، في كل من طرفي الاتصال. لأن الأجزاء التي تحقق هذه الوظائف ضمن الرسائل المتبادلة لا تمثّل المحتوى النهائي الذي يستقبله المستخدم، فإنها تسمى مجتمعة بالأعباء الإضافية overhead.
باتباع القاعدة الذهبية القديمة في علوم الحاسب الآلي، فرّق تسد، جزء تسلسل البايتات الذي يمثل هذه الأعباء الإضافية يقسّم إلى عدة أجزاء، وكل جزء يستقبل بواسطة كائن أو وحدة معينة داخل أحد طرفي الاتصال، لديه اهتمام بالوظيفة المقدمة من هذا الجزء. لذا، فإن عدة كائنات في أحد الطرفين تساهم في إرسال كل سلسلة بايتات (رسالة)، ويتم استقبال مساهمات كل كائن من قبل كائنات مماثلة في الجانب الآخر، لأن كلاً منها يتحمل مسؤولية الوظيفة نفسها في كل طرف، وكلاً منها سوف تستخدم نفس البروتوكول للاتصال مع نظيره، ومن هنا تتضح الحاجة إلى بروتوكولات متعددة في عملية الاتصال ككل. أمثلة على الكائنات التي تشارك في هذه العملية هي تعريف جهاز واجهة الشبكة (كرت الشبكة)، وعدة وحدات من نظام التشغيل، وغيرها من وحدات التطبيق الذي يعمل عليه المستخدم. من الواضح في هذه الأمثلة أن وظائف الاتصال مقسمة على كائنات ابتداءً من مستوى منخفض، بالقرب من وسائط الاتصال المادية (مستوى الآلة)، حتى تصل إلى مستوى رفيع، بالقرب من المستخدم النهائي للاتصال. كل كائن في المستويات الدنيا يخفي التعقيدات التي ينطوي عليها توفير وظيفته الخاصة من جميع الكائنات الأخرى في المستويات الأعلى، وتقدم خدماتها إلى الكائن الذي يقع منطقياً فوقها مباشرةً، من خلال واجهة واضحة. هذه الواجهة عبارة عن استدعاءات دوال يقوم بها الكائن الذي يطلب وظيفة ما (خدمة) من الكائن الذي يقع أسفل منه في التقسيم المنطقي للكائنات، عادة مع بعض البارامترات (تذكّر أن كل عمل البروتوكولات في النهاية هو عبارة عن برامج مكونة من دوال كما تفعل ذلك في أي برمجة).
في هذا السياق، كل مستوى يعدّ طبقة، ويتم تقسيم وظائف الاتصالات كلها إلى طبقات، كل واحدة منها هي المعنية بمجموعة معينة من المهام، وتستفيد من الخدمات التي تقدمها الطبقة تحتها، أو تقدم خدماتها إلى الطبقة أعلاها. ولأن عدة مهام يتم تعيينها لكل طبقة، فإنه من الممكن أن نجد عدداً من البروتوكولات المختلفة تعمل في كل طبقة. يوضح الشكل رقم 1 مفهوم طبقات الشبكة، والكائنات المتماثلة أو النظائر أو الأنداد peers، والواجهات بين كل طبقة وأخرى interfaces، والبروتوكولات، في سياق نموذج TCP/IP، حيث تقسم البروتوكولات تقليدياً إلى أربع طبقات: طبقة الوصول إلى الشبكة network access، الشبكة inter-network، والنقل transport، وطبقة التطبيقات applications، على الترتيب من المستويات الأدنى إلى المستويات العليا.
يتبع إن شاء الله
هذه السلسلة: