كان هذا سؤال طرحه أحد مهندسي البرمجيات في مؤسستي. أنا مهتم بأوسع تعريف.
مأخذ التوصيل TCP هو نقطة نهاية مثيلمعرّف بواسطة عنوان IP ومنفذ في سياق اتصال معين TCP أو حالة الاستماع.
المنفذ هو معرف للمحاكاة الافتراضية تعريف نقطة نهاية خدمة (على أنها متميزة عن خدمة مثيل نقطة نهاية تعرف باسم الجلسة).
مأخذ التوصيل TCP هو لا اتصال ، هو نقطة النهاية لاتصال معين.
يمكن أن يكون هناك اتصالات متزامنة لنقطة نهاية الخدمة ، لأنه يتم تعريف الاتصال بواسطة نقاطه المحلية والبعيدة ، مما يسمح بتوجيه حركة المرور إلى مثيل خدمة محدد.
لا يمكن أن يكون هناك سوى مأخذ توصيل مستمع واحد لمجموعة عنوان/منفذ معين .
كان هذا سؤالًا مثيرًا للاهتمام أجبرني على إعادة النظر في عدد من الأشياء التي اعتقدت أنني أعرفها من الداخل إلى الخارج. كنت تعتقد أن اسمًا مثل "المقبس" سيكون واضحًا ذاتيًا: تم اختياره بوضوح لاستحضار صور لنقطة النهاية التي تقوم فيها بتوصيل كبل الشبكة ، حيث توجد أوجه تشابه وظيفية قوية. ومع ذلك ، في لغة الشبكة ، يحمل "مأخذ توصيل" Word الكثير من الأمتعة بحيث يلزم إعادة الفحص الدقيق.
بمعنى أوسع نطاق ممكن ، المنفذ هو نقطة الدخول أو الخروج. على الرغم من عدم استخدامها في سياق شبكة ، فإن الكلمة الفرنسية {porte تعني حرفيًا {door أو gateway ، مما يؤكد على حقيقة أن المنافذ هي نقاط نهاية للنقل سواء أكنت تقوم بشحن البيانات أو حاويات فولاذية كبيرة.
لغرض هذه المناقشة ، سأقصر النظر على سياق شبكات TCP-IP. إن نموذج OSI جيد جدًا ولكن لم يتم تنفيذه بالكامل ، ولم يتم نشره على نطاق واسع في ظروف الضغط العالي المرتفعة.
يُعرف الجمع بين عنوان IP والمنفذ تمامًا كنقطة نهاية ويسمى أحيانًا مأخذ التوصيل. ينشأ هذا الاستخدام مع RFC793 ، مواصفات TCP الأصلية.
يتم تعريف TCP اتصال بنقطتي نهاية ويعرفان باسم {مآخذ التوصيل.
يتم تعريف نقطة النهاية (مأخذ التوصيل) عن طريق الجمع بين عنوان الشبكة ومعرف منفذ. لاحظ أن العنوان/المنفذ لا يحدد المقبس بالكامل (المزيد حول هذا لاحقًا).
الغرض من المنافذ هو التمييز بين نقاط النهاية المتعددة على عنوان شبكة معين. يمكنك القول أن المنفذ هو نقطة نهاية افتراضية. هذا المحاكاة الافتراضية يجعل الاتصالات المتزامنة المتعددة على واجهة شبكة واحدة ممكنة.
هو زوج المقبس (المكون من 4 نقاط والذي يتكون من عنوان IP للعميل ورقم منفذ العميل وعنوان IP للخادم ورقم منفذ الخادم) الذي يحدد نقطتي النهاية التي تحدد بشكل فريد كل اتصال TCP في الإنترنت. (TCP-IP Illustrated Volume 1، W. Richard Stevens)
في معظم اللغات المشتقة من C ، يتم إنشاء TCP اتصالات ومعالجتها باستخدام طرق في مثيل لفئة Socket. على الرغم من أنه من الشائع العمل على مستوى أعلى من التجريد ، وعادةً ما يكون مثيل لفئة NetworkStream ، إلا أن هذا يكشف بشكل عام مرجعًا إلى كائن مأخذ توصيل. بالنسبة إلى المبرمج ، يبدو أن كائن المقبس يمثل الاتصال لأنه يتم إنشاء الاتصال ومعالجته باستخدام طرق كائن مأخذ التوصيل.
في C # ، لتأسيس اتصال TCP (إلى مستمع موجود) أولاً ، تقوم بإنشاء TcpClient. إذا لم تقم بتحديد نقطة نهاية إلى المُنشئ TcpClient فإنه يستخدم الإعدادات الافتراضية - بطريقة أو بأخرى ، يتم تعريف نقطة النهاية المحلية. ثم تستدعي طريقة Connect في المثال الذي قمت بإنشائه. تتطلب هذه الطريقة معلمة تصف نقطة النهاية الأخرى.
كل هذا مثير للارتباك بعض الشيء ويؤدي بك إلى الاعتقاد بأن المقبس هو اتصال ، وهو bollocks. كنت أعمل تحت هذا المفهوم الخاطئ حتى طرح ريتشارد دورمان السؤال.
بعد أن قمت بالكثير من القراءة والتفكير ، أنا مقتنع الآن أنه سيكون من المنطقي أن يكون لديك فصل TcpConnection مع مُنشئ يأخذ وسيطين ، LocalEndpoint و RemoteEndpoint. ربما يمكنك دعم وسيطة واحدة RemoteEndpoint عندما تكون الإعدادات الافتراضية مقبولة لنقطة النهاية المحلية. هذا غامض على أجهزة الكمبيوتر متعددة طرق الاتصال ، ولكن يمكن حل الغموض باستخدام جدول التوجيه عن طريق تحديد الواجهة مع أقصر طريق إلى نقطة النهاية البعيدة.
سيتم تعزيز الوضوح في نواح أخرى ، أيضًا. يتم تعريف المقبس لا بمزيج من عنوان IP والمنفذ:
[...] TCP demultiplexes القطاعات الواردة باستخدام القيم الأربعة التي تشمل العناوين المحلية والأجنبية: عنوان IP الوجهة ، رقم منفذ الوجهة ، عنوان IP المصدر ، ورقم المنفذ المصدر. لا يمكن TCP تحديد العملية التي تحصل على شريحة واردة من خلال النظر في منفذ الوجهة فقط. أيضًا ، واحدة من نقاط النهاية [المختلفة] في [رقم منفذ معين] والتي ستتلقى طلبات اتصال واردة هي تلك الموجودة في حالة الاستماع. (p255 ، TCP-IP Illustrated Volume 1، W. Richard Stevens)
كما ترى ، ليس من الممكن فقط ولكن من المحتمل جدًا أن يكون لدى خدمة شبكة اتصال مآخذ متعددة لها نفس العنوان/المنفذ ، ولكن مأخذ توصيل مستمع واحد فقط على مجموعة عنوان/منفذ معين. تقدم تطبيقات المكتبة النموذجية فئة مأخذ توصيل ، حيث يتم استخدام مثيل لإنشاء اتصال وإدارته. هذا أمر مؤسف للغاية ، لأنه يسبب الارتباك ويؤدي إلى الخلط على نطاق واسع بين المفهومين.
لا تصدقني Hagrawal (انظر التعليقات) ، لذا إليك نموذج حقيقي. قمت بتوصيل متصفح ويب بـ http://dilbert.com ثم ركضت netstat -an -p tcp
. تحتوي الأسطر الستة الأخيرة من الإخراج على مثالين على حقيقة أن العنوان والمنفذ ليسا كافيين لتحديد مأخذ توصيل فريد. هناك اتصالان متميزان بين 192.168.1.3 (محطة العمل الخاصة بي) و 54.252.92.236:80
TCP 192.168.1.3:63240 54.252.94.236:80 SYN_SENT
TCP 192.168.1.3:63241 54.252.94.236:80 SYN_SENT
TCP 192.168.1.3:63242 207.38.110.62:80 SYN_SENT
TCP 192.168.1.3:63243 207.38.110.62:80 SYN_SENT
TCP 192.168.1.3:64161 65.54.225.168:443 ESTABLISHED
نظرًا لأن المقبس هو نقطة النهاية للاتصال ، يوجد مقبسان مع تركيبة العنوان/المنفذ 207.38.110.62:80
واثنين آخرين مع تركيبة العنوان/المنفذ 54.252.94.236:80
.
أعتقد أن سوء فهم هجروال ينشأ عن استخدامي الدقيق للكلمة "يحدد". أعني "تماما ، بشكل لا لبس فيه ويحدد فريد". في العينة أعلاه ، هناك نقطتي النهاية مع تركيبة العنوان/المنفذ 54.252.94.236:80
. إذا كان كل ما لديك هو العنوان والمنفذ ، فليس لديك معلومات كافية لتمييز هذه المقابس عن بعضها. لا توجد معلومات كافية لـ {تحديد مأخذ توصيل.
الفقرة الثانية من القسم 2.7 من RFC793 تقول
يتم تحديد اتصال بالكامل من قبل زوج من مآخذ في النهايات. قد يشارك مأخذ توصيل محلي في العديد من الاتصالات بمآخذ أجنبية مختلفة.
هذا التعريف للمقبس ليس مفيدًا من منظور البرمجة لأنه ليس مثل مأخذ التوصيل {كائن ، وهو نقطة النهاية لاتصال معين. للمبرمج ، ومعظم جمهور هذا السؤال هم مبرمجون ، وهذا فرق وظيفي حيوي.
يتكون المقبس من ثلاثة أشياء:
المنفذ هو رقم بين 1 و 65535 ضمنيًا يدل على بوابة منطقية في الجهاز. كل اتصال بين العميل والخادم يتطلب مقبسًا فريدًا.
فمثلا:
مأخذ توصيل يمثل اتصال واحد بين اثنين من تطبيقات الشبكة. يعمل هذان التطبيقان اسمياً على أجهزة كمبيوتر مختلفة ، ولكن يمكن أيضًا استخدام المقابس للاتصال بين العمليات على جهاز كمبيوتر واحد. يمكن للتطبيقات إنشاء مآخذ متعددة للتواصل مع بعضها البعض. مآخذ التوصيل ثنائية الاتجاه ، مما يعني أن أي جانب من الاتصال قادر على إرسال واستقبال البيانات. لذلك يمكن إنشاء مأخذ نظريًا على أي مستوى من نموذج OSI من 2 إلى أعلى. غالبًا ما يستخدم المبرمجون مآخذ في برمجة الشبكات ، وإن كان ذلك بشكل غير مباشر. تخفي مكتبات البرمجة مثل Winsock العديد من التفاصيل ذات المستوى المنخفض لبرمجة المقبس. تستخدم المآخذ على نطاق واسع منذ أوائل الثمانينات.
منفذ يمثل نقطة نهاية أو "قناة" لاتصالات الشبكة. تسمح أرقام المنافذ للتطبيقات المختلفة على نفس الكمبيوتر باستخدام موارد الشبكة دون التدخل في بعضها البعض. تظهر أرقام المنافذ بشكل شائع في برمجة الشبكات ، وخاصة برمجة المقبس. في بعض الأحيان ، على الرغم من أن أرقام المنافذ تكون مرئية للمستخدم العادي. على سبيل المثال ، تستخدم بعض مواقع الويب التي يزورها شخص ما على الإنترنت عنوان URL مثل ما يلي:
http://www.mairie-metz.fr:8080/ في هذا المثال ، يشير الرقم 8080 إلى رقم المنفذ المستخدم من قبل مستعرض الويب للاتصال بخادم الويب. عادةً ما يستخدم موقع الويب رقم المنفذ 80 ولا يلزم تضمين هذا الرقم في عنوان URL (على الرغم من أنه يمكن أن يكون).
في شبكات IP ، يمكن أن تتراوح أرقام المنافذ نظريًا من 0 إلى 65535. ومع ذلك ، فإن معظم تطبيقات الشبكة الشائعة ، على الرغم من ذلك ، تستخدم أرقام المنافذ في نهاية النطاق المنخفضة (مثل 80 لـ HTTP).
ملاحظة: يشير مصطلح المنفذ أيضًا إلى العديد من الجوانب الأخرى لتكنولوجيا الشبكة. يمكن أن يشير المنفذ إلى نقطة اتصال فعلية للأجهزة الطرفية مثل المنافذ التسلسلية والمتوازية و USB. يشير مصطلح المصطلح أيضًا إلى بعض نقاط اتصال Ethernet ، مثل تلك الموجودة على لوحة وصل أو محول أو جهاز توجيه.
المرجع http://compnetworking.about.com/od/basicnetworkingconcepts/l/bldef_port.htm
المرجع http://compnetworking.about.com/od/itinformationtechnology/l/bldef_socket.htm
مع بعض القياس
على الرغم من وجود الكثير من العناصر التقنية المذكورة أعلاه من أجل مآخذ ... أود أن أضيف إجابتي ، فقط في حالة ، إذا كان شخص ما لا يزال يتعذر عليه الفرق بين الملكية الفكرية والمنفذ والمقابس
النظر في خادم S ،
وقل الشخص X ، Y ، Z بحاجة إلى خدمة (قل خدمة الدردشة) من ذلك الخادم S
ثم
عنوان IP يخبر -> من؟ هو أن خادم الدردشة 'S' الذي يريد X و Y و Z الاتصال به
حسنًا ، لديك "من هو الخادم"
لكن لنفترض أن الخادم 'S' يقدم بعض الخدمات الأخرى لأشخاص آخرين أيضًا ، قل 'S' يوفر خدمات التخزين للشخص A و B و C
ثم
ميناء يقول ---> أي؟ service you (X، Y، Z) need أي خدمة الدردشة وليس خدمة التخزين هذه
حسناً ، أنت تجعل الخادم يتعرف على أن "خدمة الدردشة" هي ما تريده وليس التخزين
لكن
أنت ثلاثة و قد يرغب الخادم في تحديد الثلاثة بشكل مختلف
هناك يأتي المقبس
الآن مقبس يقول -> أي واحد؟ اتصال معين
هذا هو ، قل ،
المقبس 1 للشخص X
المقبس 2 للشخص Y
ومأخذ 3 للشخص Z
آمل أن يساعد شخص ما زال في حيرة من أمره :)
أولاً ، أعتقد أننا يجب أن نبدأ بفهم قليل لما يشكل الحصول على حزمة من A إلى B.
التعريف الشائع للشبكة هو استخدام OSI Model الذي يفصل الشبكة إلى عدد من الطبقات وفقًا للغرض. هناك عدد قليل منها ، والتي سنقوم بتغطيتها هنا:
يحتوي TCP ، من بين أشياء أخرى ، على مفهوم المنافذ . هذه هي نقاط نهاية بيانات مختلفة بشكل فعال على نفس عنوان IP الذي يمكن ربط مأخذ توصيل الإنترنت (AF_INET
) به.
كما يحدث ، وكذلك الحال بالنسبة لـ UDP ، وبروتوكولات طبقة النقل الأخرى. لا تقنياً تحتاج إلى ميزة المنافذ ، ولكن هذه المنافذ توفر طريقة لتطبيقات متعددة في الطبقات أعلاه لاستخدام نفس الكمبيوتر لتلقي (وصنع بالفعل) الاتصالات الصادرة.
وهو ما يقودنا إلى تشريح اتصال TCP أو UDP. يحتوي كل منها على منفذ مصدر وعنوان ، ومنفذ وعنوان مستهدف. هذا حتى يتسنى للتطبيق المستهدف في أي جلسة معيّنة الاستجابة ، وكذلك تلقي ، من المصدر.
لذا فإن المنافذ هي في الأساس طريقة تفرضها المواصفات للسماح باتصالات متعددة متزامنة تشترك في نفس العنوان.
الآن ، نحن بحاجة إلى إلقاء نظرة على كيفية تواصلك من وجهة نظر التطبيق إلى العالم الخارجي. للقيام بذلك ، يجب عليك أن تطلب من نظام التشغيل التفضل ، ولأن معظم أنظمة التشغيل تدعم طريقة Berkeley Sockets للقيام بالأشياء ، نرى أنه يمكننا إنشاء مآخذ تنطوي على منافذ من تطبيق مثل هذا:
int fd = socket(AF_INET, SOCK_STREAM, 0); // tcp socket
int fd = socket(AF_INET, SOCK_DGRAM, 0); // udp socket
// later we bind...
عظيم! لذلك في هياكل sockaddr
، سنقوم بتحديد منفذنا و bam! تم إنجاز المهمة! حسنا ، تقريبا ، باستثناء:
int fd = socket(AF_UNIX, SOCK_STREAM, 0);
ممكن ايضا أورج ، هذا ألقى مفتاح ربط في الأعمال!
حسنا ، في الواقع لم يحدث ذلك. كل ما نحتاج إلى القيام به هو التوصل إلى بعض التعاريف المناسبة:
/var/run/database.sock
.فويلا! أن يرتب الأمور. لذلك في مخططنا إذن ،
حقًا يمثل المنفذ مجموعة فرعية من متطلبات تكوين مقبس إنترنت. لسوء الحظ ، يحدث فقط أنه تم تطبيق معنى مأخذ توصيل Word على العديد من الأفكار المختلفة. لذا فإنني أنصحك بحرارة بتسمية مقبس مشروعك التالي ، فقط للإضافة إلى الارتباك ؛)
مقبس = عنوان IP + منفذ (عنوان رقمي)
يعرّفان معًا نقطة نهاية لاتصال الشبكة على جهاز. (هل قمت فقط بشبكة الشبكة 101؟)
بشكل عام ، سوف تحصل على الكثير من النظرية ولكن واحدة من أسهل الطرق للتمييز بين هذين المفهومين هي كما يلي:
من أجل الحصول على خدمة ، تحتاج إلى رقم خدمة. يُطلق على رقم الخدمة هذا منفذ. سهل هكذا.
على سبيل المثال ، يتم تشغيل HTTP كخدمة على المنفذ 80.
الآن ، يمكن للعديد من الناس طلب الخدمة وإنشاء اتصال من خادم العميل. سيكون هناك الكثير من الاتصالات. كل اتصال يمثل عميل. من أجل الحفاظ على كل اتصال ، يقوم الخادم بإنشاء مقبس لكل اتصال للحفاظ على عميله.
إجابة موجزة قصيرة.
يمكن وصف A port بأنه عنوان داخلي داخل مضيف يحدد برنامجًا أو عملية.
A socket يمكن وصفها بأنها واجهة برمجة السماح لبرنامج بالاتصال ببرامج أو عمليات أخرى ، على الإنترنت ، أو محليًا.
يبدو أن هناك الكثير من الإجابات التي تساوي مأخذ التوصيل مع الاتصال بين جهازي كمبيوتر .. وأعتقد أنه غير صحيح تمامًا. كان المقبس دائمًا هو نقطة النهاية على جهاز كمبيوتر واحد ، قد يكون أو لا يكون متصلاً - بالتأكيد استخدمنا جميعًا مآخذ توصيل المستمع أو UDP * في مرحلة ما. الجزء المهم هو أنه عنونة ونشطة. إرسال رسالة إلى 1.1.1.1:1234 ليس من المرجح أن تعمل ، لأنه لا يوجد مأخذ توصيل محدد لنقطة النهاية هذه.
مآخذ التوصيل خاصة بالبروتوكول - وبالتالي فإن تنفيذ التفرد هو أن كلا TCP / IP و UDP / IP يستخدم * (ipaddress: port) ، يختلف عن eg. ، IPX (Network ، Node ، و ... ahem ، socket - لكن مأخذ توصيل مختلف عن المقصود بمصطلح "socket" العام. أرقام مأخذ توصيل IPX تعادل منافذ IP ). ولكن ، كلهم يقدمون نقطة نهاية فريدة عنونة.
منذ أن أصبح بروتوكول الإنترنت هو البروتوكول السائد ، أصبح المنفذ (من حيث شبكات الاتصال) متوافقًا مع رقم منفذ UDP أو TCP - وهو جزء من عنوان المقبس.
UDP أقل اتصالًا - مما يعني أنه لم يتم إنشاء دائرة افتراضية بين نقطتي النهاية. ومع ذلك ، ما زلنا نشير إلى مآخذ UDP كنقطة النهاية. توضح وظائف واجهة برمجة التطبيقات (API) أن كلاهما مجرد نوع مختلف من المقابس - SOCK_DGRAM
هو UDP (أرسل رسالة فقط) و SOCK_STREAM
هو TCP (إنشاء دائرة افتراضية).
من الناحية الفنية ، يحتفظ رأس IP بعنوان IP ، ويحمل البروتوكول الموجود أعلى IP (UDP أو TCP) رقم المنفذ. هذا يجعل من الممكن أن يكون لديك بروتوكولات أخرى (على سبيل المثال. ICMP التي ليس لها أرقام منافذ ، ولكن لديها معلومات عن عناوين IP).
وهي عبارة عن مصطلحات من مجالين مختلفين: "port" هو مفهوم من شبكات TCP/IP ، و "socket" هو واجهة برمجة تطبيقات (API). يتم إجراء "مأخذ توصيل" (في الرمز) عن طريق أخذ منفذ واسم مضيف أو محول شبكة والجمع بينهما في بنية بيانات يمكنك استخدامها لإرسال البيانات أو استلامها.
بعد قراءة الإجابات الممتازة الممتازة ، وجدت أن النقطة التالية تحتاج إلى تأكيد بالنسبة لي ، قادم جديد في برمجة الشبكات:
اتصالات TCP-IP هي مسارات ثنائية الاتجاه تربط عنوانًا واحدًا: تركيبة المنفذ مع عنوان آخر: تركيبة المنفذ. لذلك ، عندما تفتح اتصالًا من جهازك المحلي إلى منفذ على خادم بعيد (مثل www.google.com:80) ، فأنت أيضًا تربط رقم منفذ جديد على جهازك بالاتصال ، للسماح للخادم بإرسال الأشياء تعود إليك (على سبيل المثال 127.0.0.1:65234). قد يكون من المفيد استخدام netstat للنظر في اتصالات جهازك:
> netstat -nWp tcp (on OS X)
Active Internet connections
Proto Recv-Q Send-Q Local Address Foreign Address (state)
tcp4 0 0 192.168.0.6.49871 17.172.232.57.5223 ESTABLISHED
...
123.132.213.231 # IP address
:1234 # port number
123.132.213.231:1234 # socket address
يحدث اتصال عندما يتم ربط مآخذ 2 معًا.
المقبس هو نوع خاص من مقبض الملفات يتم استخدامه بواسطة عملية لطلب خدمات الشبكة من نظام التشغيل. عنوان المقبس هو الثلاثي: {بروتوكول ، عنوان محلي ، عملية محلية} حيث يتم تحديد العملية المحلية برقم منفذ.
في مجموعة TCP/IP ، على سبيل المثال:
{tcp ، 193.44.234.3 ، 12345}
المحادثة هي رابط الاتصال بين عمليتين ، وبالتالي تصور وجود علاقة بين عمليتين. الرابطة هي 5-Tuple التي تحدد تمامًا العمليتين التي تشتمل على اتصال: {بروتوكول ، عنوان محلي ، عملية محلية ، عنوان خارجي ، عملية خارجية}
في مجموعة TCP/IP ، على سبيل المثال:
{tcp ، 193.44.234.3 ، 1500 ، 193.44.234.5 ، 21}
يمكن أن تكون جمعية صالحة.
نصف الاقتران هو: {بروتوكول ، عنوان محلي ، عملية محلية}
أو
{بروتوكول ، عنوان أجنبي ، عملية أجنبية}
التي تحدد كل نصف اتصال.
ويسمى نصف الاقتران أيضًا بمقبس أو عنوان نقل. أي أن المقبس هو نقطة نهاية للاتصال يمكن تسميتها ومعالجتها في شبكة. تعد واجهة مأخذ التوصيل إحدى واجهات برمجة التطبيقات المتعددة (APIs) لبروتوكولات الاتصال. تم تصميمه ليكون واجهة برمجة اتصالات عامة ، تم تقديمه لأول مرة بواسطة نظام UNBS 4.2BSD. على الرغم من أنه لم يتم توحيده ، فقد أصبح معيارًا صناعيًا بحكم الواقع.
كان المنفذ أسهل جزء ، إنه مجرد معرف فريد لمقبس. المقبس هو شيء يمكن أن تستخدمه العمليات لإنشاء اتصالات والتواصل مع بعضها البعض. كان لدى التل جيف تشبيه هاتفي رائع لم يكن مثاليًا ، لذلك قررت إصلاحه:
من Oracle Java Tutorial :
يمثل المقبس نقطة نهاية لارتباط اتصال ثنائي الاتجاه بين برنامجين يعملان على الشبكة. يرتبط المقبس برقم منفذ حتى تتمكن طبقة TCP من التعرف على التطبيق الذي يتم إرسال البيانات إليه.
المقبس هو بنية في البرنامج الخاص بك. إنه أكثر أو أقل من ملف ؛ لديها عمليات مثل القراءة والكتابة. ليس شيئًا ماديًا ؛ إنها وسيلة لبرنامجك للإشارة إلى الأشياء المادية.
المنفذ هو شيء يشبه الجهاز. كل مضيف لديه شبكة واحدة أو أكثر (تلك مادية) ؛ المضيف لديه عنوان على كل شبكة. يمكن أن يحتوي كل عنوان على آلاف المنافذ.
قد يستخدم مأخذ توصيل واحد منفذًا في عنوان ما. يقوم المقبس بتخصيص المنفذ تقريبًا مثل تخصيص جهاز لنظام الإدخال/الإخراج. بمجرد تخصيص المنفذ ، لا يمكن لأي مقبس آخر الاتصال بهذا المنفذ. سيتم تحرير المنفذ عند إغلاق المقبس.
ألقِ نظرة على مصطلحات TCP/IP .
يتكون التطبيق من زوج من العمليات التي تتصل عبر الشبكة (زوج خادم عميل). تقوم هذه العمليات بإرسال واستقبال الرسائل ، من وإلى الشبكة من خلال واجهة برنامج تسمى socket . بالنظر إلى التشابه الوارد في كتاب "شبكات الكمبيوتر: نهج من أعلى إلى أسفل". هناك منزل يريد التواصل مع منزل آخر. هنا ، المنزل مماثل لعملية ، والباب إلى المقبس. تفترض عملية الإرسال وجود بنية تحتية على الجانب الآخر من الباب لنقل البيانات إلى الوجهة. بمجرد وصول الرسالة على الجانب الآخر ، فإنها تمر عبر باب المستقبِل (المقبس) إلى المنزل (العملية). هذا التوضيح من نفس الكتاب يمكن أن يساعدك:
المقابس جزء من طبقة النقل ، والتي توفر اتصال منطقي للتطبيقات. هذا يعني أنه من وجهة نظر التطبيق ، فإن كلا المضيفين متصلان مباشرة ببعضهما البعض ، على الرغم من وجود العديد من أجهزة التوجيه و/أو التبديل بينهما. وبالتالي ، فإن المقبس ليس اتصالًا بحد ذاته ، إنه نقطة النهاية للاتصال. يتم تطبيق بروتوكولات طبقة النقل فقط على الأجهزة المضيفة ، وليس على أجهزة التوجيه المتوسطة.
الموانئ توفر وسائل عنونة داخلية للجهاز. الغرض الأساسي منه هو السماح لعمليات متعددة بإرسال واستقبال البيانات عبر الشبكة دون التدخل في العمليات الأخرى (بياناتهم). يتم توفير جميع المقابس مع رقم المنفذ. عندما تصل شريحة إلى مضيف ، تفحص طبقة النقل رقم منفذ الوجهة للجزء. ثم يعيد توجيه القطعة إلى المقبس المقابل. تسمى مهمة تسليم البيانات في مقطع طبقة النقل إلى المقبس الصحيح إلغاء الإرسال . ثم يتم إعادة توجيه بيانات القطاع إلى العملية المرتبطة بالمقبس.
يمكن مقارنة المنفذ والمآخذ بفرع البنك.
رقم بناء "البنك" مماثل لعنوان IP. يحتوي البنك على أقسام مختلفة مثل:
لذلك 1 (قسم حساب الادخار) ، 2 (قسم القروض الشخصية) ، 3 (قسم القروض السكنية) و 4 (قسم التظلمات) هي موانئ.
الآن دعنا نقول أنك تذهب لفتح حساب التوفير ، تذهب إلى البنك (عنوان IP) ، ثم تذهب إلى "قسم حساب التوفير" (المنفذ رقم 1) ، ثم تلتقي بأحد الموظفين الذين يعملون تحت "إدارة حسابات التوفير" ". دعنا نتصل به SAVINGACCOUNT_EMPLOYEE1 لفتح الحساب.
SAVINGACCOUNT_EMPLOYEE1 هو واصف المقبس الخاص بك ، لذا قد يكون هناك SAVINGACCOUNT_EMPLOYEE1 إلى SAVINGACCOUNT_EMPLOYEEN. هذه كلها واصفات مأخذ التوصيل.
وبالمثل ، سيكون هناك إدارات أخرى تعمل لديها تحت إشرافها ، وهي تشبه المقابس.
المقبس هو نقطة نهاية الاتصالات. لا يرتبط مأخذ التوصيل مباشرة بعائلة بروتوكول TCP/IP ، ويمكن استخدامه مع أي بروتوكول يدعمه نظامك. تتوقع واجهة برمجة تطبيقات مأخذ التوصيل C أن تحصل أولاً على كائن مأخذ توصيل فارغ من النظام ، يمكنك عندئذٍ ربط عنوان مأخذ توصيل محلي (لاسترداد حركة المرور الواردة مباشرةً لبروتوكولات أقل اتصال أو قبول طلبات الاتصال الواردة للبروتوكولات الموجهة للاتصال) أو أنه يمكنك الاتصال بعنوان مأخذ توصيل بعيد (لأي نوع من البروتوكول). يمكنك القيام بالأمرين معا إذا كنت تريد التحكم في كليهما ، وعنوان المقبس المحلي الذي يرتبط به المقبس وعنوان المقبس البعيد الذي تتصل به المقبس. بالنسبة لبروتوكولات الاتصال الأقل التي تتصل بمقبس ، تكون اختيارية ، لكن إذا لم تقم بذلك ، فسيتعين عليك أيضًا تمرير عنوان الوجهة مع كل حزمة تريد إرسالها عبر المقبس ، فكيف يعرف المقابس مكان إرساله؟ هذه البيانات ل؟ ميزة أنه يمكنك استخدام مأخذ توصيل واحد لإرسال الحزم إلى عناوين مأخذ توصيل مختلفة. بمجرد تكوين المقبس الخاص بك وربما توصيله ، اعتبره أنبوب اتصال ثنائي الاتجاه. يمكنك استخدامه لتمرير البيانات إلى جهة ما ويمكن أن تستخدمها جهة أخرى لنقل البيانات إليك. ما تكتبه إلى مأخذ توصيل يتم إرساله وما تم استلامه متاح للقراءة.
المنافذ من ناحية أخرى هي شيء يحتوي على بروتوكولات معينة فقط من مكدس بروتوكول TCP/IP. TCP وحزم UDP لها منافذ. المنفذ هو مجرد رقم بسيط. يحدد مزيج المنفذ المصدر والمنفذ الوجهة قناة اتصال بين مضيفين. مثلا قد يكون لديك خادم يكون كلاهما خادم HTTP بسيط وخادم FTP بسيط. إذا وصلت الآن حزمة لعنوان ذلك الخادم ، فكيف ستعرف ما إذا كانت هذه هي حزمة HTTP أو خادم FTP؟ حسنًا ، سيعرف ذلك لأنه سيتم تشغيل خادم HTTP على المنفذ 80 وخادم FTP على المنفذ 21 ، لذلك إذا وصلت الحزمة مع منفذ الوجهة 80 ، فهذا يعني لخادم HTTP وليس لخادم FTP. تحتوي الحزمة أيضًا على منفذ مصدر لأنه بدون مثل هذا المنفذ المصدر ، يمكن أن يكون للخادم اتصال واحد فقط بعنوان IP واحد في كل مرة. يتيح المنفذ المصدر للخادم إمكانية التمييز بين الاتصالات المتماثلة بطريقة أخرى: جميعها لها نفس منفذ الوجهة ، على سبيل المثال المنفذ 80 ، نفس عنوان IP الوجهة ، دائمًا نفس عنوان الخادم ونفس عنوان IP المصدر ، حيث إنهم جميعًا يأتون من نفس العميل ، ولكن نظرًا لأن لديهم منافذ مصدر مختلفة ، فيمكن للخادم تمييزها عن بعضها البعض. وعندما يرسل الخادم ردودًا ، فسوف يقوم بذلك إلى المنفذ الذي جاء منه الطلب ، وبهذه الطريقة يمكن للعميل أيضًا تمييز الردود المختلفة التي يتلقاها.
المصطلحات النسبية لبروتوكول TCP/IP وهو ما أفترضه ضمنيًا من خلال السؤال. في شروط للشخص العادي:
يشبه المنفذ رقم هاتف منزل معين في رمز بريدي معين. يمكن اعتبار الرمز البريدي للمدينة عنوان IP للمدينة وجميع المنازل في تلك المدينة.
SOCKET من ناحية أخرى يشبه إلى حد كبير مكالمة هاتفية قائمة بين هواتف زوج من المنازل تتحدث مع بعضها البعض. يمكن إجراء هذه الدعوات بين المنازل في نفس المدينة أو منزلين في مدن مختلفة. إنه المسار المؤسس المؤقت بين زوجي الهواتف الذين يتحدثون مع بعضهم البعض وهو SOCKET.
هذه هي مفاهيم الشبكات الأساسية لذلك سوف أشرح لهم بطريقة سهلة ولكن شاملة لفهم في التفاصيل.
إذن المقبس في الشبكات هو جهاز اتصال افتراضي مرتبط بزوج (ip ، منفذ) = (العنوان ، الخدمة).
ملحوظة:
آمل أن يخلصك الشكوك
بمعنى واسع ، Socket - هو ذلك تمامًا ، مثل المقبس ، تمامًا مثل مقبس الكهرباء أو الكابل أو الهاتف. نقطة يمكن أن تخرج منها "الأشياء الضرورية" (الطاقة والإشارة والمعلومات). يخفي الكثير من الأشياء التفصيلية ، وهو أمر غير مطلوب لاستخدام "الأشياء المطلوبة". في لغة البرمجيات ، يوفر طريقة عامة لتحديد آلية الاتصال بين كيانين (يمكن أن تكون هذه الكيانات أي شيء - تطبيقان ، وجهازي منفصلان فعليًا ، ومساحة User & Kernel داخل نظام التشغيل ، إلخ)
المنفذ هو تمييز نقطة النهاية. إنه يميز نقطة نهاية واحدة عن أخرى. على مستوى الشبكات ، فإنه يميز تطبيقًا واحدًا عن آخر ، بحيث يمكن لمكدس الشبكة نقل المعلومات إلى التطبيق المناسب.
يمكن أن يحتوي المنفذ الواحد على مآخذ توصيل واحدة أو أكثر متصلة بعناوين IP خارجية مختلفة مثل مأخذ كهربائي متعدد.
TCP 192.168.100.2:9001 155.94.246.179:39255 ESTABLISHED 1312
TCP 192.168.100.2:9001 171.25.193.9:61832 ESTABLISHED 1312
TCP 192.168.100.2:9001 178.62.199.226:37912 ESTABLISHED 1312
TCP 192.168.100.2:9001 188.193.64.150:40900 ESTABLISHED 1312
TCP 192.168.100.2:9001 198.23.194.149:43970 ESTABLISHED 1312
TCP 192.168.100.2:9001 198.49.73.11:38842 ESTABLISHED 1312
Socket هو عبارة عن تجريد تم توفيره بواسطة kernel لتطبيقات المستخدم الخاصة ببيانات الإدخال/الإخراج. يتم تعريف نوع المقبس بواسطة البروتوكول الذي يتعامل معه ، والاتصال IPC وما إلى ذلك. إذا قام شخص ما بإنشاء مأخذ توصيل TCP فيمكنه القيام بمعالجات مثل قراءة البيانات لمقبس البيانات وكتابتها بطرق بسيطة و تتم معالجة بروتوكول المستوى الأدنى مثل تحويلات TCP وحزم إعادة التوجيه إلى بروتوكولات الشبكة ذات المستوى الأدنى من خلال تنفيذ مقبس معين في النواة. الميزة هي أن المستخدم لا داعي للقلق بشأن التعامل مع التفاصيل المحددة في البروتوكول ، ويجب عليه فقط قراءة وكتابة البيانات للمأخذ مثل المخزن المؤقت العادي. وينطبق الشيء نفسه في حالة IPC ، يقوم المستخدم فقط بقراءة وكتابة البيانات إلى المقبس ويعالج kernel جميع تفاصيل المستوى الأدنى بناءً على نوع المقبس الذي تم إنشاؤه.
يشبه المنفذ إلى جانب توفير عنوان للمقبس ، رغم أنه ليس ضروريًا ، ولكنه يساعد في اتصالات الشبكة.
المقبس هو آلية إدخال/إخراج بيانات. المنفذ هو تعاقدي مفهوم بروتوكول الاتصال. يمكن أن يوجد مأخذ بدون منفذ. يمكن أن يوجد منفذ بدون مأخذ توصيل معين (على سبيل المثال إذا كانت عدة مآخذ نشطة على نفس المنفذ ، مما قد يسمح لبعض البروتوكولات).
يتم استخدام المنفذ لتحديد المقبس الذي يجب على جهاز الاستقبال توجيه الحزمة إليه ، مع العديد من البروتوكولات ، لكنه ليس مطلوبًا دائمًا ويمكن تحديد اختيار مأخذ الاستقبال بوسائل أخرى - المنفذ هو أداة بالكامل يستخدمها معالج البروتوكول في النظام الفرعي للشبكة. مثلا إذا لم يستخدم البروتوكول منفذًا ، فيمكن للحزم الانتقال إلى جميع مآخذ الاستماع أو أي مقبس.
تم بالفعل إعطاء إجابات نظرية لهذا السؤال. أود أن أقدم مثالاً عمليًا على هذا السؤال ، والذي سيوضح فهمك حول Socket و Port.
لقد وجدت هنا
سيرشدك هذا المثال خلال عملية الاتصال بموقع ويب ، مثل Wiley. ستفتح متصفح الويب الخاص بك (مثل Mozilla Firefox) واكتب www.wiley.com في شريط العناوين. يستخدم متصفح الويب الخاص بك خادم نظام اسم المجال (DNS) للبحث عن الاسم www.wiley.com لتحديد عنوان IP الخاص به. على سبيل المثال ، العنوان هو 192.0.2.100.
يقوم Firefox بإجراء اتصال بعنوان 192.0.2.100 والمنفذ الذي يعمل عليه خادم الويب لطبقة التطبيق. يعرف Firefox ما هو المنفذ المتوقع لأنه منفذ معروف. المنفذ المعروف لخادم الويب هو TCP المنفذ 80.
تتم كتابة مأخذ الوجهة الذي يحاول Firefox الاتصال كمقبس: منفذ ، أو في هذا المثال ، 192.0.2.100:80. هذا هو جانب الخادم الخاص بالاتصال ، ولكن يحتاج الخادم إلى معرفة مكان إرسال صفحة الويب التي تريد عرضها في Mozilla Firefox ، بحيث يكون لديك مقبس لجانب العميل من الاتصال أيضًا.
يتكون اتصال جانب العميل من عنوان IP الخاص بك ، مثل 192.168.1.25 ، ورقم منفذ ديناميكي تم اختياره عشوائيًا. يشبه المقبس المقترن بـ Firefox 192.168.1.25:49175. نظرًا لأن خوادم الويب تعمل على TCP المنفذ 80 ، فإن كلا المآخذ هذه هي TCP مآخذ ، بينما إذا كنت متصلاً بخادم يعمل على منفذ UDP ، فإن مآخذ الخادم والخادم يكون مآخذ UDP.
أعلم أن هناك الكثير من التفسيرات. ولكن ، هناك طريقة واحدة أكثر سهولة لفهم مع مثال عملي. يمكننا جميعًا الاتصال بمنفذ HTTP 80 ، ولكن هل يعني ذلك أنه يمكن لمستخدم واحد فقط الاتصال بهذا المنفذ في وقت واحد؟ ومن الواضح ان الجواب لا'. يمكن لعدة مستخدمين لأغراض متعددة الوصول إلى منفذ HTTP 80 ولكنهم لا يزالون يحصلون على الاستجابة المناسبة التي ينتظرونها ، من الخادم ، ألا يستطيعون ذلك ؟. فكر الآن في الأمر لمدة دقيقة ، كيف؟ نعم أنت محق ، عنوانه IP الخاص به يحدد بشكل فريد المستخدمين المختلفين الذين يتصلون بأغراض مختلفة. إذا كنت قد قرأت الإجابات السابقة قبل الوصول إلى هنا ، فأنت تعلم أن عنوان IP هو جزء من المعلومات التي يتكون منها المقبس. فكر في الأمر ، هل من الممكن أن يكون لديك اتصال بدون مآخذ؟ الإجابة هي "نعم" ، لكن لا يمكنك تشغيل أكثر من تطبيق واحد في المنفذ ، لكننا نعرف أننا لسنا مفتاح "تفريغ" يعمل على الأجهزة فقط.
يعد المقبس نقطة نهاية للاتصال بالشبكة ، ويتألف من عنوان IP على الأقل ومنفذ. في Java/C # ، يعتبر المقبس تطبيقًا أعلى مستوى لجانب واحد من اتصال ثنائي الاتجاه.
أيضا ، تعريف في وثائق جافا .
ميناء:
يمكن أن يشير المنفذ إلى نقطة اتصال فعلية للأجهزة الطرفية مثل المنافذ التسلسلية والمتوازية و USB. يشير مصطلح المصطلح أيضًا إلى بعض نقاط اتصال Ethernet ، مثل تلك الموجودة على لوحة وصل أو محول أو جهاز توجيه.
قابس كهرباء:
يمثل المقبس اتصالًا واحدًا بين تطبيقين للشبكة. يعمل هذان التطبيقان اسمياً على أجهزة كمبيوتر مختلفة ، ولكن يمكن أيضًا استخدام المقابس للاتصال بين العمليات على جهاز كمبيوتر واحد. يمكن للتطبيقات إنشاء مآخذ متعددة للتواصل مع بعضها البعض. مآخذ التوصيل ثنائية الاتجاه ، مما يعني أن أي جانب من الاتصال قادر على إرسال واستقبال البيانات.
يشير المنفذ إلى نقطة نهاية اتصال في النقل [TCP و UDP لبروتوكول شبكة IP. مأخذ التوصيل عبارة عن تجريد برنامج لنقطة نهاية اتصال شائعة الاستخدام في تطبيقات هذه البروتوكولات (socket API). تطبيق بديل هو XTI/TLI API.
أنظر أيضا:
Stevens، W. R. 1998، UNIX Network Programming: Networking APIs: Sockets and XTI؛ المجلد 1 ، برنتيس هول.
Stevens، W. R.، 1994، TCP/IP Illustrated، Volume 1: The Protocols، Addison-Wesley.
المقبس هو تجريد SW لنقطة نهاية الشبكة ، التي تستخدم كواجهة للتطبيق. في Java ، C # يتم تمثيله بالكائن ، في Linux ، Unix هو ملف.
المنفذ هو مجرد خاصية مأخذ توصيل تحدده إذا كنت تريد إنشاء اتصال. لاستلام الحزمة من مأخذ توصيل ، عليك ربطها بمنفذ محلي محدد و NIC (بعنوان IP محلي) أو جميع بطاقات NIC (تم تحديد INADDR_ANY في استدعاء الربط). لإرسال الحزمة ، يجب عليك تحديد منفذ و IP للمقبس البعيد.