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

شبكات الند للند Peer-to-Peer Networks


Ola Abbas

أدخلت تطبيقات مشاركة الموسيقى مثل Napster و KaZaA مصطلح الند للند في اللغة العامية الشعبية، ولكن ما الذي يعنيه بالضبط أن يكون النظام ندًا لند أو نظيرًا لنظير؟ يعني ذلك، ضمن سياق مشاركة ملفات MP3، عدم الاضطرار إلى تحميل الموسيقى من موقعٍ مركزي، ولكن القدرة على الوصول إلى ملفات الموسيقى مباشرةً من أي شخصٍ على الإنترنت لديه نسخةٌ مخزنةٌ على حاسوبه. يمكننا القول أن شبكة الند للند تسمح لمجتمع المستخدمين بتجميع مواردهم، مثل المحتوى والتخزين وحيز النطاق التراسلي للشبكة وحيز نطاق القرص الصلب ووحدة المعالجة المركزية، وبالتالي توفير الوصول إلى متجرٍ مؤرشَف أكبر، ومؤتمرات فيديو أو صوت أكبر، وعمليات بحثٍ وحوسبةٍ أعقد مما يستطيع أي مستخدمٍ تحمل تكاليفه بمفرده.

تُذكَر سماتٌ مثل اللامركزية والتنظيم الذاتي عند مناقشة شبكات الند للند في كثيرٍ من الأحيان، مما يعني أن العُقد تنظّم نفسها في شبكةٍ دون أي تنسيقٍ مركزي. إذا فكرت في الأمر، فيمكنك استخدام مصطلحات مثلها لوصف الإنترنت نفسه، ولكن من المفارقات أن تطبيق نابستر Napster لم يكن نظام ندٍ لند حقيقيًا بهذا التعريف بسبب اعتماده على سجلٍ مركزيٍ للملفات المعروفة، وكان على المستخدمين البحث في هذا الدليل للعثور على الجهاز الذي يقدم ملفًا معينًا. الخطوة الأخيرة المتمثلة بتحميل الملف فعليًا هي فقط التي حدثت بين الأجهزة التي تنتمي إلى مستخدمين اثنين، ولكن هذا ليس أكثر من معاملةٍ تقليديةٍ بين العميل والخادم؛ حيث أن الفارق الوحيد هو أن الخادم مملوكٌ لشخصٍ مثلك تمامًا وليس لشركةٍ كبيرة.

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

شبكة جنوتيلا Gnutella

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

ExampleTopologyOfAGnutellaPeer-to-peerNetwork.png

إذا أراد المستخدم في عقدةٍ معينة العثور على كائنٍ ما، ترسل شبكة جنوتيلا رسالة استعلام QUERY عن هذا الكائن (مثل تحديد اسم الملف) إلى جيران العقدة في الرسم البياني؛ فإذا كان لدى أحد الجيران هذا الكائن، فإنه يستجيب للعقدة التي أرسلت إليه الاستعلام برسالة استجابة QUERY RESPONSE، مع تحديد مكان تحميل الكائن، مثل عنوان IP ورقم منفذ TCP، ويمكن لهذه العقدة فيما بعد استخدام رسائل GET أو PUT للوصول إلى الكائن؛ وفي حال لم تتمكن العقدة من تحليل الاستعلام، فإنها تعيد توجيه رسالة QUERY إلى كل جيرانها باستثناء العقدة التي أرسلت لها الاستعلام، وتتكرر العملية، أي يغمر بروتوكول جنوتيلا شبكة التراكب لتحديد موقع الكائن المطلوب. يضبط بروتوكول شبكة جنوتيلا مدة البقاء أو العُمر TTL على كل استعلامٍ حتى لا يستمر هذا الغمر إلى أجلٍ غير مسمى.

تحتوي كل رسالةٍ من رسائل QUERY على معرف استعلام فريد query identifier -أو اختصارًا QID- بالإضافة إلى مدة TTL وسلسلة الاستعلامات، ولكنها لا تحتوي على هوية مصدر الرسالة الأصلي، حيث تحتفظ كل عقدةٍ بدلًا من ذلك بسجلٍ لرسائل QUERY التي شاهدتها مؤخرًا، والذي يحتوي على كلٍ من معرّف QID والجار الذي أرسل رسالة QUERY إلى هذه العقدة.

يُستخدم هذا السجل بطريقتين. أولًا، إذا استلمت العقدة في أي وقت استعلامًا بمعرف QID يطابق معرّفًا رأته مؤخرًا، فلن تمرر رسالة QUERY. يعمل هذا على قطع حلقات التمرير بسرعةٍ أكبر مما قد تفعله مدة TTL. ثانيًا، عندما تتلقى العقدة استجابة QUERY RESPONSE من جارٍ يقع تحتها في الشجرة، فإنها تمرر الاستجابة إلى الجار الرئيسي الذي أرسل إليها رسالة QUERY في الأصل. تعود الاستجابة في طريقها باستخدام هذه الطريقة إلى العقدة الأصلية دون أن تعرف أيًّا من العقد الوسيطة هي العقدة التي أرادت تحديد موقع هذا الكائن المحدد في المقام الأول.

يجب أن تعرف العقدة عقدةً أخرى على الأقل عندما تنضم إلى شبكة تراكب جنوتيلا، حيث تُضاف العقدة الجديدة إلى شبكة التراكب بواسطة هذا الرابط على الأقل، ثم تتعرف عقدةٌ معينةٌ على العقد الأخرى نتيجة لرسائل QUERY RESPONSE، سواء بالنسبة للكائنات التي طلبتها أو للاستجابات التي تمر عبرها. العقدة حرةٌ في تحديد العقد التي تُكتشف بهذه الطريقة والتي تريد الاحتفاظ بها مثل جار، حيث يوفر بروتوكول جنوتيلا رسائل PING و PONG التي تتحرى العقدة بواسطتها ما إذا كان جارٌ معين لا يزال موجودًا أم لا وأن هذا الحار يستجيب، على التوالي.

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

شبكات التراكب المهيكلة Structured Overlays

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

هناك سؤالان يجب مراعاتهما، هما: كيف يمكننا ربط الكائنات مع العقد، وكيف نوجه طلبًا إلى العقدة المسؤولة عن كائن معين؟ نبدأ بالسؤال الأول، الذي يحتوي على عبارةٍ بسيطة: كيف يمكننا ربط كائنٍ x مع عنوان بعض العقد n التي يمكنها خدمة هذا الكائن؟ لا تتحكم شبكات الند للند التقليدية في تحديد العقدة التي تستضيف الكائن x، فإذا تمكنا من التحكم في كيفية توزيع الكائنات عبر الشبكة، فقد نتمكن من فعل أمرٍ أفضل للعثور على هذه الكائنات في وقتٍ لاحق.

من الأساليب المعروفة لربط الأسماء مع عنوان هي استخدام جدول التعمية hash كما يلي:

hash(x)  n

حيث يُوضَع الكائن x أولًا على العقدة n، وسيتعين في وقتٍ لاحق على العميل الذي يحاول تحديد موقع x، تنفيذ تعمية x لتحديد أنه موجود على العقدة n. يتميز النهج القائم على التعمية بخاصيةٍ تتمثل في ميله إلى نشر الكائنات بالتساوي عبر مجموعة العقد، لكن خوارزميات التعمية المباشرة تعاني من عيبٍ هو: ماهو عدد القيم n الممكنة التي يجب أن نسمح بها؟ أو باستخدام مصطلحات التعمية، كم عدد المجموعات buckets التي يجب أن تكون موجودة؟ يمكننا أن نقرر ببساطةٍ أن هناك 101 قيمةً معمَّاةً محتملةً على سبيل المثال، ونستخدم دالة تعميةٍ نمطيةٍ هي:

hash(x)
    return x % 101

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

BothNodesAnd ObjectsMap(hash)OntoTheIDSpace.png

تستخدم شبكات الند للند المهيكلة، لمعالجة هذه المشكلات خوارزميةً تُعرف باسم إجراء التعمية المستقرة consistent hashing، والتي تطبّق تعميةً على مجموعة من الكائنات بصورةٍ موحدة عبر حيز معرّفاتٍ كبير. يوضح الشكل السابق حيز معرّفات ذا 128 بت على شكل دائرة، حيث نستخدم الخوارزمية لوضع كلٍ من الكائنات:

hash(ObjectName)  ObjectID

والعقد:

hash(IPAddr)  NodeID

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

ObjectsAreLocatedByRoutingThroughThePeer-to-peerOverlayNetwork.png

ننتقل الآن إلى السؤال الثاني الذي يدور حول كيفية معرفة المستخدم الذي يريد الوصول إلى الكائن x العقدةَ الأقرب في معرّف x ضمن هذا الحيّز. تتمثل إحدى الإجابات المحتملة في احتفاظ كل عقدةٍ بجدولٍ كامل لمعرّفات العقد وعناوين IP المرتبطة بها، ولكن هذا لن يكون عمليًا لشبكةٍ كبيرة، والبديل هو توجيه رسالةٍ إلى هذه العقدة، وهو النهج الذي تستخدمه شبكات ند لند المهيكلة. فإذا أنشأنا شبكة التراكب بطريقةٍ ذكية، والذي يعني أننا بحاجةٍ إلى اختيار مدخلات لجدول توجيه العقدة بطريقةٍ ذكية، فسنجد عقدةً ببساطة عن طريق التوجيه نحوها، ويُطلَق على هذا النهج أحيانًا جدول التعمية الموزَّع distributed hash table -أو اختصارًا DHT-، نظرًا لأنه نظريًا يُوزَّع جدول التعمية على جميع العقد في الشبكة. يوضّح الشكل السابق ما يحدث لحيز معرّف بسيطٍ ذي 28 بت، حيث افترضنا تسمية النهج الذي تستخدمه شبكة ند لندٍ معينة باسم Pastry للحفاظ على طبيعة المناقشة محددةً، وتعمل الأنظمة الأخرى بطريقةٍ مماثلة.

افترض أنك في العقدة ذات المعرّف 65a1fc (عدد ست عشري) وتحاول تحديد موقع locate الكائن ذي المعرّف d46a1c، حيث تدرك أن معرّفك لا يتشارك شيئًا مع الكائن، لكنك تعرف عقدةً تشترك في البادئة d على الأقل، وهذه العقدة أقرب منك في حيز المعرّفات ذي 128 بت، لذلك تمرر الرسالة إلى هذه العقدة. لا نعطي صيغة الرسالة المُمررة، ولكن يمكنك التفكير في الأمر مثل تحديد موقع الكائن d46a1c. افترض أن العقدة d13da3 تعرف عقدةً أخرى تشترك في بادئةٍ أطول مع الكائن، لذلك تمرر الرسالة إليها. تستمر عملية الاقتراب في حيز المعرّفات حتى تصل إلى عقدةٍ لا تعرف أي عقدةٍ أقرب؛ هذه العقدة، بحكم التعريف، هي التي تستضيف الكائن. ضع في بالك أنه تُمرر الرسالة بالفعل من عقدةٍ إلى أخرى عبر شبكة الإنترنت الأساسية، بينما نتحرك منطقيًا عبر حيز المعرّفات.

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

Route(D)
    if D is within range of my leaf set
        forward to numerically closest member in leaf set
    else
        let l = length of shared prefix
        let d = value of l-th digit in D's address
        if RouteTab[l,d] exists
            forward to RouteTab[l,d]
        else
            forward to known node with at least as long a shared prefix
            and numerically closer than this node

جدول التوجيه المشار إليه باسم RouteTab، هو مصفوفةٌ ثنائية الأبعاد، ويحتوي على سطرٍ لكل رقمٍ ست عشري في المعرّف (يوجد 32 رقمًا في معرّف 128 بت) وعمودٍ لكل قيمةٍ ست عشرية (هناك 16 قيمة)، حيث تشترك كل مدخلةٍ في السطر i ببادئة طولها i مع هذه العقدة، وتكون للمُدخلة في العمود j في هذا السطر القيمة الست عشرية j في الموضع i + 1. يوضح الشكل الآتي السطور الثلاثة الأولى من جدول توجيه العقدة 65a1fcx، حيث تشير x إلى لاحقةٍ غير محددة. يوضّح هذا الشكل أيضًا بادئة المعرّف المطابقة لكل مدخلةٍ في الجدول، ولكنه لا يُظهر القيمة الفعلية المضمَّنة في هذه المدخلة، والتي هي عنوان IP للعقدة التالية للتوجيه إليها.

ExampleRoutingTableAtTheNodeWithID65alcx.png

تعمل إضافة عقدةٍ إلى شبكة التراكب إلى حدٍ كبير مثل توجيه رسالة تحديد موقع locate object message إلى كائن، حيث يجب أن تعرف العقدة الجديدة عضوًا حاليًا واحدًا على الأقل، وتطلب من هذا العضو توجيه رسالة إضافة عقدة add node message إلى العقدة الأقرب عدديًا لمعرّف عقدة الانضمام، كما هو موضح في الشكل الآتي. تتعرّف العقدة الجديدة على العقد الأخرى ذات البادئة المشتركة من خلال عملية التوجيه، وتستطيع بدء ملء جدول التوجيه الخاص بها. تمتلك العقد الحالية أيضًا بمرور الوقت وانضمام العقد الإضافية إلى شبكة التراكب، خيارَ تضمين معلوماتٍ حول العقدة المنضمَّة حديثًا في جداول التوجيه الخاصة بها، حيث تقوم بذلك عندما تضيف العقدة الجديدة بادئةً أطول مما هو موجود حاليًا في جداولها. كما تتبادل العقد الجيران في مجموعات الأوراق جداول التوجيه مع بعضها بعضًا، مما يعني أنه بمرور الوقت تنتشر معلومات التوجيه عبر شبكة التراكب.

AddingANodeToTheNetwork.png

من المُلاحظ أن شبكات التراكب المهيكلة توفر حدًا محتمَلًا لعدد قفزات التوجيه المطلوبة لتحديد موقع كائنٍ معين، لكن عدد القفزات في آلية Pastry محددٌ بالقيمة log<sub>16</sub>N، حيث تمثل N عدد العقد في شبكة التراكب. قد تساهم كل قفزةٍ في تأخيرٍ كبير، لأن كل عقدةٍ وسيطة قد تكون في موقعٍ عشوائيٍ على الإنترنت، وقد تكون كل عقدةٍ في قارةٍ مختلفة في أسوأ الأحوال. التأخير المتوقَع لكل قفزة هو متوسط التأخير بين جميع أزواج العقد في الإنترنت في شبكة تراكبٍ عالمية باستخدام الخوارزمية كما هو موضح أعلاه، ولكن يمكن فعل شيءٍ أفضل بكثير عمليًا؛ حيث تكمن الفكرة في اختيار كل مدخلةٍ في جدول التوجيه بحيث تشير إلى عقدةٍ قريبةٍ في الشبكة الفيزيائية الأساسية، من بين جميع العقد ذات بادئة المعرّف المناسبة للمدخلة. اتضح أن فعل ذلك يؤدي إلى تأخيراتٍ في التوجيه من طرفٍ إلى طرف بمعامل تأثيرٍ صغير من إجمالي التأخير بين عقدة المصدر والوجهة.

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

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

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

اقرأ أيضًا


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

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

مرحبًا

بتاريخ 12 ساعة قال عبدالستار الجميلي:

ماهي فائدة البايثون في ربط البير تو بيير

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

إذن كيف يمكن لبايثون أن يفيدنا في التواصل بنظام الند للند Peer-to-Peer؟

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

ومن أشهر المكتبات التي تستخدم لهذا الغرض هي مكتبة السوكيت socket، ونستخدما كثيرًا عند التعامل مع الشبكات، وكذلك تستخدم في الأمن السيبراني لاختبار الخادم.

وأعتقد أن بعضنا - إن لم يكن أغلبنا - قد تعامل مع تطبيق يوتورنت utorrent الذي يسمح بمشاركة الملفات عبر الأجهزة بنظام الند للند (النظيرين). وتوفر بايثون مكتبة تمكننا من تطوير تطبيقات مثل يوتورنت مثل مكتبة PyBitTorrent

وهذا مثال للشيفرات التي يمكن استخدامها لتنفيذ هذا الأمر

from PyBitTorrent import TorrentClient

client = TorrentClient('~/Downloads/Big Buck Bunny (1920x1080 h.264).torrent')
client.start()

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

 

رابط هذا التعليق
شارك على الشبكات الإجتماعية



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

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

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

×   لقد أضفت محتوى بخط أو تنسيق مختلف.   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.


×
×
  • أضف...