9.2. البروتوكولات الطبقية

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

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

A vertical stack of five boxes labelled from bottom to top: physical, link, network, transport, application. An arrow on the right points up the stack labelled "what we build". An arrow on the left points down the stack labelled "what is provided".

تحل كل طبقة من كومة الشبكة مشكلة واحدة وتُسلّم تجريدًا نظيفًا إلى الطبقة التالية.

9.2.1. الطبقات الخمس

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

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

طبقة الوصلة. نقل الإطارات (كتل صغيرة من البايتات) بين جهازين يتشاركان مقطعًا محليًا. وتضيف عناوين عتادية بحيث يمكن توجيه كل إطار إلى جار واحد محدد. وEthernet وWi-Fi هما تقنيتا الوصلة اللتان تصادفهما الكاميرا عمليًا.

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

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

طبقة التطبيق. كل ما هو فوق طبقة النقل: البروتوكولات التي تمنح البايتات معنىً. تلك التي يتحدث بها متصفح الويب لتحميل الصفحات -- وتلك الكامنة خلف كل خدمة إنترنت أخرى تقريبًا يستخدمها القارئ يوميًا بالفعل -- تقيم هنا. ويغطي هذا الدرس طبقة النقل بعمق؛ أما هذه الطبقة فلها قسم لاحق خاص بها.

9.2.2. كيف تتراكم الطبقات أثناء التشغيل

عندما ترسل الكاميرا بايتات عبر الشبكة، تضيف كل طبقة ترويستها الخاصة أمام البيانات، تمامًا كتداخل مظروف داخل مظروف آخر:

  • تدخل بايتات التطبيق أولًا.

  • تغلّفها طبقة النقل بترويسة صغيرة تقول إلى أي برنامج تنتمي (رقم المنفذ).

  • تغلّف طبقة الشبكة ذلك بترويسة تقول إلى أي مضيف هي موجَّهة (العنوان على مستوى البرمجيات).

  • تغلّف طبقة الوصلة ذلك بترويسة تقول إلى أي جهاز على المقطع المحلي تُسلَّم بعد ذلك (العنوان العتادي).

  • تحوّل الطبقة المادية الحزمة كاملةً إلى بتات على سلك.

في الطرف الآخر، تنزع كل طبقة ترويستها الخاصة وتُسلّم الباقي للأعلى. ويستعيد التطبيق المستقبِل بايتاته دون أن يدري أن طبقات الشبكة والوصلة والمادية وُجدت يومًا.

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