بايثون وبرمجة الشبكات

توفِّر البايثون مستويين من الوصول إلى مكونات الشبكة. المستوى الأول يُدعى المستوى المنخفض؛ حيث يُمكِّن برمجة ما يُسمَّى socket والذي يسمح لك ببناء تطبيقات الخادم والعملاء client – server لكل من البروتوكولات المعروفة في اتصال الشبكة كما يمكن الوصول الى دعم المقبس الأساسي لنظام التشغيل كما يمكن تنفيذ العميل والخادم لكل من البروتوكولات الموجهة للاتصال المستوى الآخر هو المستوى العالي؛ فيه تحتوي لغة البرمجة بايثون على مكتبات توفر وصولاً عالي المستوى إلى بروتوكولات الشبكة المختلفة على مستوى التطبيق Application level مثل FTP، HTTP وما إلى ذلك.

والآن سوف نتعرف على برمجة مقبس الشبكة لكن قبل البدء بذلك لنفهم ماهي المقابس.

مفهوم المقابس concept of sockets

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

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

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

هنا يأتي دور بروتوكولات أخرى من نفس مجموعة بروتوكولات  TCP/IPفي طبقة أخرى هي طبقة النقل. هذه البروتوكولات في الغالب هي إمّا TCP /IP هي المسؤولة عن إنشاء الاتصال ليس بين طرفين فحسب، وإنَّما بين تطبيقين محددين على كل طرف. هي مسؤولة عن تمييز الرسائل الواردة والصادرة، وإعطاء كل ذي حق حقه. الوسيلة التي يتم بها ذلك تشبه فكرة العنونة في بروتوكول IP، لكن العناوين هنا أبسط وأقصر، وتميز فقط كل الخدمات (التطبيقات) ضمن جهاز واحد بعنوان IP واحد. العنوان لكل تطبيق في هذه الطبقة يُسمى رقم منفذ port number. ولذلك تسمع كثيراً عن المنافذ المفتوحة والمغلقة في كل جهاز، والتي تعبِّر في النهاية عن الخدمات المتوفرة (أو التطبيقات الشغالة) في كل جهاز. بعض أرقام المنافذ المتعارف عليها لخدمات شهيرة، منفذ 80 لخدمة الويب HTTP، منفذ 25 لخدمة البريد SMTP، منفذ 20 لخدمة نقل الملفات من ذلك تعرف أن التطبيقات إن أرادت أن تتواصل فيما بينها، فلا بدَّ لها من تحديد عنوان الطرف الآخر، وعنوان التطبيق النظير على ذلك الطرف. عندما يكتب المبرمجون التطبيقات فإنهم يحددون هذه الأشياء، أو يتركون تحديدها للمستخدم، كما هو الحال في المتصفح. ربما كان من المفيد أن أذكر هنا أن المبرمج أو المستخدم قد لا يضطر لتحديد عنوان IP مباشرة (من الصعب جداً تذكر هذه العناوين)، لأن هناك نظاماً خاصاً يحول بين عناوين IP وبين أسماء أكثر تعبيراً وأسهل للتذكر تسمى أسماءdomain names  المهم هنا أن هناك ثلاثة عناصر تحدد كل اتصال: عنوان IP، رقم المنفذ، نوع البروتوكول في طبقة النقل TCP،  UDPحيث يمكن أن يستخدم نفس رقم المنفذ مع أي من هذين البروتوكولين. هذه الثلاث عناصر على طرف، مع ما يقابلها من ثلاث عناصر على الطرف الثاني، تحدد اتصالاً فريداً بين تطبيقين محددين.

باختصار، مجموع المكونات الثلاثة: عنوان IP ورقم منفذ وبروتوكول محدد هو اصطلاحاً مقبس. تخيَّل أن الاتصال بين تطبيقين هو عبارة عن سلك طويل في كلا طرفيه قابس plug. وتخيَّل أنك تريد أن يكون هذا الاتصال بين تطبيقين محددين على حاسوبين محددين. هذا يعني أنك تريد أن تُدخل القابس على أحد أطراف سلك الاتصال في مكان، وتُدخل القابس على الطرف الثاني في مكان آخر. القابس يحتاج إلى مقبس socket ليدخل فيه. المقبس هنا هو مجموع عنوان الحاسوب مع رقم المنفذ مع نوع البروتوكول (منطقياً).

من ناحية تقنية في البرمجيات التي تمثل بروتوكولات TCP/IPيرتبط المقبس بهيكل بيانات معين data structure إلى جانب عدد صحيح فريد يعرِّف المقبس. تحتوي هياكل البيانات هذه على معلومات تتعلق برقم المنفذ للتطبيق المصدر والتطبيق الوجهة، وعنوان بروتوكول الإنترنتIP  للطرف المصدر والطرف الوجهة، وربما معلومات أخرى اعتماداً على نوع المقبس.

أساسيات مقبس الشبكة

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

FIFO هي اختصار First in First Out

IPCهي اختصار Internet Process communication

 TCP/IPاختصار Transmission Contril Protocol /Internet protocol 

أنواع المقابس في الشبكة

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

كيفية انشاء مقبس الشبكة

يتم إنشاء المقبس عن طريق توصيل رقمIP  للنظام ورقم منفذ البرنامج وليس رقم منفذ الجهاز، كما يسمح هذا للعملية بمعرفة عنوان النظام أي عنوان IP والعنوان الذي يجب إرسال المعلومات إليه أي رقم المنفذ ويتم فصل رقم IP ورقم المنفذ بواسطة:

  • المقبس:

هو ببساطة مزيج من عنوانIP والمنفذ، وبشكل أكثر واقعية يعتبر المقبس نقطة نهاية واحدة لوصلة اتصال ثنائية الاتجاه بين برنامجين يعملان على الشبكة، كما يرتبط المقبس برقم منفذ حتى تتمكن طبقة “TCP” من تحديد التطبيق المراد إرسال البيانات إليه.

  • مقبس الشبكة:

هو نقطة النهاية للاتصالات بين العمليات على شبكة الكمبيوتر مثل الانترنت، كما يتم تعريفه بشكل فريد من خلال عنوان IP ورقم المنفذ وبروتوكول الاتصالات، وعلى سبيل المثال يمكن إجراء اتصال بروتوكول TCP بالمنفذ 1234 على جهاز كمبيوتر موجود على عنوان IP 192.168.1.2 والذي يُطلق عليه TCP socket 1234 على هذا الكمبيوتر.

يمكن لمقبس شبكة واحد الاتصال بالعديد من العملاء البعيدين في وقت واحد وفي هذه الحالة يُقال أنَّ هذا “المقبس المحلي” المحدد يحتوي على “مآخذ بعيدة” متعددة.

أشكال مقبس الشبكة

  1. مآخذ الشبكة: من حيث شبكات الكمبيوتر، يتم تعيين عنوان بروتوكول الإنترنت “IP” لكل جهاز متصل بالإنترنت، كما يمكن الوصول إلى كل تطبيق يعمل على هذا الجهاز بواسطة زوج مماثل من الأرقام، ويُشار إليه باسم “IP” ورقم المنفذ ويُعرف هذا الزوج بمقبس الشبكة
  2. مآخذ التيار: تعتمد واجهة مقبس الدفق على بروتوكول التحكم في الإرسال TCP وُيشار إليها باسم SOCK-STREAM في مراجع برمجة الشبكة، كما يقوم مقبس الدفق بإنشاء اتصال جدير بالثقة أو خدمة موجهة للاتصال بين المقابس، ويمكنك أن تطمئن إلى أنّ البيانات التي يتم إرسالها بين المقابس يتم استلامها بنفس ترتيب إرسالها، ولا تحتوي على أخطاء أو تكرارات وهذا مفيد عندما تكون هناك حاجة ذات أولوية عالية للحفاظ على سلامة البيانات.
  3. مآخذ مخطط البيانات: تعتمد واجهة مأخذ توصيل مخطط البيانات على بروتوكول مخطط بيانات المستخدم UDP ويُشار إليها على أنّها SOCK-DGRAM في مراجع برمجة الشبكة، كما يقوم مقبس مخطط البيانات بإنشاء خدمة اتصال أقل بين المقابس. وليس مضموناً أنَّ المعلومات المرسلة من مأخذ واحد ستصل إلى مقبس الوجهة وإذا وصلت إلى الوجهة فلا يمكنك التأكد من أنَّ المعلومات المنقولة ستكون بنفس الترتيب أو بدون أي أخطاء، ومع ذلك فإنَّ مآخذ مخطط البيانات أسهل في الاستخدام ولها معدلات أداء أعلى مقارنة بمآخذ التيار. 

أنواع عنوان المقبس

  • عنوان المقبس في مجال UNIX:

هو سلسلة أحرف والتي هي في الأساس ادخال في نظام الملفات.

  • عنوان المقبس في مجال الانترنت:

يتألف عنوان المقبس في مجال الإنترنت من عنوان الإنترنت الخاص بالجهاز المضيف كل كمبيوتر على الإنترنت له عنوان “32 بت فريد” ويُدل عليه غالباً باسم عنوان IP الخاص به، وبالإضافة إلى ذلك يحتاج كل مقبس إلى رقم منفذ على هذا المضيف وأرقام المنافذ هي أعداد صحيحة “16 بت” بدون إشارة.

البرمجيات التي تمثِّل مجموعة بروتوكولات TCP/IP (هذا يعني أنَّها تقوم بعمل البروتوكولات) هي أساساً جزء من نظام التشغيل، لكن مبرمجي التطبيقات لهم القدرة على كتابة تطبيقات الشبكات باستخدام المقابس من خلال مكتبات واجهات برمجية خاصة، مزودة من قبل نظام التشغيل، وتضم مجموعة من الدوال التي تضع الوظيفة المنفّذة من قبل نظام التشغيل في متناول المبرمجين. تُسمى هذه المكتبات واجهات برمجة التطبيقاتAPI، والمكتبة الأصل في هذا الصدد هي واجهة مقابس بيركلي Berkeley sockets API التي بُنيت على أساسها العديد من الواجهات، بما في ذلك مقابس ويندوز WinSock تمت كتابة هذه المكتبات بلغة سي C، لذلك فإن مبرمجي هذه اللغة مدعومين بشكل افتراضي. ومع ذلك، تملك العديد من لغات البرمجة مكتبات غنية بدوال الشبكات، والتي توفر واجهات مماثلة لتلك التي كتبت بلغة سي، مثل لغة البرمجة جافا، وبايثون، وبيرل.

هذه التقنية (برمجة المقابس) أساسية جداً لكتابة تطبيقات الشبكات ومنها الإنترنت، بما في ذلك جميع أدوات الشبكات التي تستخدم إما كوسيلة مساعدة في إدارة الشبكة، أو لتنفيذ تقنيات كسر/اختبار أمن الشبكات.

Socket

تنشئ مقبساً جديداً من نوع محدد، وتعرّفه برقم صحيح، وتخصص له موارد النظام اللازمة.

Bind

تستخدم عادة في جانب الخادم، وتربط مقبساً بهيكل عنوان مقبس، مما يعني رقم منفذ محلياً وعنوان IP.

Listen

تستخدم في جانب الخادم، وتجعل مقبس TCP مربوطاً يدخل في حالة الاستماع.

Connect

تُستخدم في جانب العميل، وتعيّن رقم منفذ محلياً وغير مستخدم من قبل لمقبس. في حالة مقبس من نوع TCP، تتسبب هذه الدالة في محاولة إنشاء اتصال TCP جديد.

Accept

تستخدم في جانب الخادم. تقوم بقبول المحاولات المستقبلة القادمة من عميل بعيد من أجل إنشاء اتصال TCP، وتنشئ مقبساً جديداً مرتبطاً بالعنوان القادم مع طلب الاتصال.

Send, recv, أو write, read أو sendto, recvfrom

تستخدم لإرسال واستقبال البيانات إلى/من مقبس بعيد.

Close

تتسبب في أن يحرر النظام الموارد التي خصّصت لمقبس. في حالة TCP، ينتهي الاتصال.

Gethostbyname, gethostbyaddr

تحول بين أسماء وعناوين الأجهزة. فقط في Ipv4.

Select

تستخدم من أجل فحص مجموعة معطاة من المقابس لتحديد تلك الجاهزة للقراءة أو الكتابة أو التي تعاني من أخطاء.

Poll

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

Getsockopt

تستخدم لاستعادة القيمة الحالية لخيار معين من خيارات المقبس المحدد.

Stockpot

تستخدم لتعيين خيار معين من خيارات المقبس المحدد.

رأينا أنَّ socket  في بايثون هو عبارة عن مكتبة تتيح للمستخدمين التواصل بين عمليات المعالجة في شبكة الإنترنت . تحتوي المكتبة على وظائف مختلفة لإنشاء وإدارة الاتصالات عبر الإنترنت. يمكن استخدام المكتبة لإرسال واستقبال الرسائل والبيانات والتحكم في مدى الوصول إلى الشبكة. يمكن استخدام Socket في Python لبناء تطبيقات الشبكات مثل العميل / الخادم وإرسال / استقبال البيانات بين العميل والخادموتستطيع من خلاله استخدام بروتوكول TCP/IP الذي يشمل نموذج طبقات OSI، بالإضافة إلى بدائله مثل UDP.

Facebook
Twitter
YouTube
LinkedIn