در این مقاله به معرفی پروتکل Socket میپردازیم. به طور خلاصه از لحاظ مفهوم پروتکل Socket مثل همه پروتکلها مجموعه ای از قواعد و استاندارهایی است برای برقراری ارتباط در شبکه.
Socket چیست؟
socket شبکه یک ساختار نرم افزاری در یک node شبکه از یک شبکه کامپیوتری است که به عنوان نقطه پایانی برای ارسال و دریافت دیتا در سراسر شبکه عمل میکند. در معماری شبکه تنظیمات و ساختار socket توسط API تعریف میشود. سوکتها فقط در طول عمر فرآیند برنامه ایجاد کننده آنها کار میکنند.
در استفاده از پروتکل Socket در شبکه، سوکت با سه مشخصه تعریف میشود:
نوع ارتباط یا همان protocol
آی پی یا آدرس Host
Port
از آن جا که این ساختار نرم افزاری شبیه به سوکت مادگی در مفاهیم الکتریکی است آن را socket مینامند. درست شبیه به پورت که در node های فیزیکی شبکه نیز مفهومی به اسم Port داریم. مثلا Port Lan یا USB و… .
فرایند استفاده از پروتکل Socket
برنامهنویس با تعریف سوکت عملا تمایل خود را برای مبادله دیتا به سیستم عامل اعلام میکند و بدون درگیر شدن با جزئیات پروتکل TCP یا UDP از سیستم عامل میخواهد تا فضا و منابع مورد نیاز را جهت برقراری یک ارتباط، ایجاد کند.
در زمان ایحاد API برای اتصال Socket به یک مجموعه از پروتکلهای شبکه، یک آدرس Host و یک Port نیاز است. Port نیز یک ساختار نرمافزاری است که برای اتصال hostهای بیرونی به پردازشهای یک host استفاده میشود.
سیستم عامل با استخراج اطلاعات آدرس سوکت از هدرهای IP و پروتکل انتقال و حذف هدرها از دیتا برنامه، بستههای IP ورودی را به برنامه مربوطه ارسال می کند.
به interface های استفاده شده در برنامه نویسی سوکت اصطلاحا Socket API میگویند.
پیاده سازی
API های سوکت اینترنت معمولاً بر اساس استاندارد سوکت های برکلی هستند. در استاندارد سوکتهای برکلی، سوکتها شکلی از توصیف کننده فایل هستند، به دلیل فلسفه یونیکس که “همه چیز یک فایل است” و تشابهات بین سوکت ها و فایلها. هر دو دارای عملکردهایی برای خواندن، نوشتن، باز کردن و بستن هستند. در عمل، تفاوت ها قیاس را تحت فشار قرار میدهند. رابط های مختلف (ارسال و دریافت) در یک سوکت استفاده میشود. ارتباطات بین فرآیندی، هر انتهایی معمولاً سوکت مخصوص به خود را دارد.
در پروتکلهای استاندارد اینترنت TCP و UDP، یک آدرس سوکت ترکیبی از یک آدرس IP و یک شماره پورت است. دقیقاً مانند یک انتهای یک اتصال تلفنی ترکیبی از یک شماره تلفن و یک برنامه افزودنی خاص. به عنوان مثال، سوکت ها نیازی به داشتن یک آدرس منبع ندارند، به عنوان مثال، فقط برای ارسال داده، اما اگر یک برنامه یک سوکت را به یک آدرس منبع متصل کند، سوکت می تواند برای دریافت داده های ارسال شده به آن آدرس استفاده شود. بر اساس این آدرس، سوکت های اینترنت بسته های داده های دریافتی را به فرآیند برنامه مناسب تحویل می دهند.
سوکت اغلب به طور خاص به یک سوکت اینترنت یا سوکت TCP اشاره دارد. یک سوکت اینترنت حداقل با موارد زیر مشخص می شود:
آدرس سوکت محلی، متشکل از آدرس IP محلی و (برای TCP و UDP، اما نه IP) یک شماره پورت
پروتکل: یک پروتکل انتقال، به عنوان مثال، TCP، UDP، IP خام. این بدان معنی است که نقاط پایانی (محلی یا راه دور) با پورت TCP 53 و پورت UDP 53 سوکت های مجزا هستند، در حالی که IP پورت ندارد.
سوکتی که به سوکت دیگری وصل شده است، به عنوان مثال، در طول برقراری یک اتصال TCP، یک آدرس سوکت راه دور نیز دارد.
یک مثال ساده
در کد زیر یک مثال ساده از کابرد پروتکل Socket در زبان پایتون آورده ایم. در این مثال از پروتکل TCP استفاده شده است:
(کد سمت کلاینت)
#!/usr/bin/env python3 import socket HOST = '127.0.0.1' # The server's hostname or IP address PORT = 65432 # The port used by the server with socket.socket(socket.AF_INET, socket.SOCK_STREAM) as s: s.connect((HOST, PORT)) s.sendall(b'Hello, world') data = s.recv(1024) print('Received', repr(data)) # #
آدرس Host
یک نرم افزار میتواند با یک فرایند راه دور (Remote Process) از طریق ترکیبی از پروتکلهای شبکه، آدرس IP و Port ارتباط بگیرد. به ترکیب این موارد آدرس شبکه میگویند.
انواع Socket
اگر بخواهیم انواع پروتکل Socket را معرفی کنیم سه نوع مهم دارد:
1-سوکتهای نوع Stream
سوکتهای نوع Stream که را سوکتهای اتصال گرا (connection oriented) مینامند . روش ارسال برای سوکتهای نوع Stream همان روش TCP است و بنابراین دیتا با رعایت ترتیب، با اطمینان صد در صد و با نظارت کافی بر خطاهای احتمالی مبادله میشوند. به عنوان مثال پروتکل انتقال فایل (FTP)، HTTP یا پروتکل SMTP همگی نیازمند برقراری یک ارتباط مطمئن و بدون خطا هستند و طبعا از سوکتهای نوع Stream بهره میبرند. سوکتهای نوع Stream دقیقا بر روی پروتکل TCP بوده و طبیعتا قبل از مبادله دیتا باید یک اتصال به روش Three Way Handshake بین دو پروسهٔ نهایی برقرار بشود.به زبان ساده تر یعنی قبل ازمبادله دیتا باید یک اتصال مطمئن برقرار شود که دیتا با یک نظم و ترتیب خاصی ارسال و دریافت شوند و تضمینی برای رسیدن دیتا وجود داشته باشد.
معرفی کامل لایه های پروتکل TCP
سوالی که در کنار “پروتکل TCP چیست” می آید، این است که این پروتکل چند لایه دارد؟ پروتکل TCP دارای 4 لایه مجزا است که باعث می شود اطلاعات به صورت صحیح به رایانه کلاینت ارسال شود.
لایه Datalink:
datalink در واقع همان چیزی است که بخشهای فیزیکی ارسال و دریافت دیتا را با استفاده از کابل LAN، WiFi، کارت شبکه، درایور دستگاه در کامپیوتر انجام میدهد.
لایه اینترنت :
اینترنت حرکت بستهها در سطح شبکه را بررسی و کنترل میکند.
لایه Transport:
Transport در واقع همان چیزی است که یک اتصال دیتا قابل اعتماد بین دو رایانه مختلف در یک سازمان و یا حتی در سراسر دنیا را برای شما فراهم می کند. این دیتا را در بستههای مختلف تقسیم میکند و سپس بستههایی را که از دستگاه دیگر دریافت کرده است، بهم دیگر متصل میکند و به آن کامپیوتر میدهد.
لایه Application به عنوان یکی از لایه های پروتکل TCP چیست؟
لایه کاربردی یا Application در واقع گروه برنامه هایی است که نیاز به ارتباطات شبکه دارند. این همان چیزی است که کاربر به طور معمول با آنها ارتباط برقرار می کند و برای مثال نیز می توان به ایمیل اشاره کرد.
2-سوکتهای نوع Datagram
سوکتهای نوع دیتاگرام را سوکتهای بدون اتصال (connectionless) مینامند. سوکت نوع دیتاگرام نامطمئن است و هیچگونه تضمینی در ترتیب جریان دیتا وجود ندارد. سوکت نوع دیتاگرام مبتنی بر پروتکل UDP است و بدون نیاز به برقراری هیچ ارتباط یا اتصال، دیتا مبادله میشوند. بنابراین تضمینی در رسیدن دیتا، صحت دیتا و حفظ ترتیب دیتا وجود ندارد. ولی با تمام این مشکلات باز هم در برخی از کاربردها مثل انتقال صدا و تصویر استفاده میشوند.
سرعت تحویل دادهها در پروتکل Socket از نوع UPD
تنها حسن UPD سرعت تحویل دیتا است.براساس شرایط این پروتکل، اگر در روند انتقال اطلاعات مشکلی پیش بیاید و بستهی ارسالی، بهصورت کامل به مقصد نرسد، بستهی فوق، مجددا برای کامپیوتر مقصد ارسال نمیشود. به عنوان مثال، در سایتهایی که اقدام به پخش موسیقی از طریق اینترنت میکنند، از این پروتکل استفاده میشود. در بعضی لحظات در حین گوش کردن به موسیقی، متوجه قطع و وصل شدن یا مکث در پخش موسیقی میشویم. علت این امر نیز همانطور که گفتیم،این است یک یا چند بسته از بستههای ارسالی ناقص بوده است.
الزامات UDP
سؤالی که اینک پیش میآید این است که ما چرا باید به یک پروتکل Socket غیر قابل اتکا برای انتقال دیتا نیاز داشته باشیم؟ ما از UDP جایی استفاده میکنیم که تأیید وصول بستهها پهنای باند قابل توجهی را به همراه دادههای واقعی اشغال میکند. برای نمونه در مورد Stream کردن ویدئو، هزاران بسته به سمت کاربران فوروارد میشوند. تأیید وصول همه این بستهها دشوار است و میتواند موجب هدررفت پهنای باند زیادی شود. بهترین مکانیسم تحویل پروتکل IP زیرین، نهایت تلاش را برای تحویل بستههایش تضمین میکند، اما حتی اگر برخی بستهها در جریان استریم کردن ویدئو از دست بروند، تأثیر آن زیاد نیست و میتوان آن را به سادگی نادیده گرفت. حذف چند بسته در ترافیک ویدئویی و صوتی در اغلب موارد اصلاً قابل تشخیص نیست.
موارد کاربرد UDP به شرح زیر است :
مناسب برای ارتباطات یکسو و همچنین برای پخش اطلاعات .
برای راه اندازی خودکار (bootstrapping) یا دیگر اهداف بدون استفاده از پشته کامل پروتکل مناسب است مانند DHCP و FTP
Datagram به وجود می آورد که برای دیگر مدل های پروتکل مثل IP tunneling و Remote Procedure Call و NFS مناسب است
سرویس معامله گرایی (انتقال گرایی) است که برای مواردی مثل DNS و Network Time Protocol استفاده می شود
مناسب برای مشتریان به تعداد زیاد ، مانند برنامه های streaming media مثل IPTV
نوع پروتکل | TCP | UPD |
ارتباط (connection) | ارتباط محور(connection oriented) | غیر ارتباط محور( connectionless ) |
استفاده | قابلیت اطمینان بالا – سرعت کم – اشغال زیاد پهنای باند |
سریع – اشغال کم پهنای باند – تعداد کلاینت زیاد – بدون تضمین |
چیدمان بستههای ارسالی | ارسال بستهها با تضمین حفظ ترتیب | بدون تضمین حفظ ترتیب |
قابلیت اطمینان | بله | خیر |
نوع Stream | به صورت Byte | بصورت مستقل |
خطایابی | خطایابی و اصلاح | خطایابی ساده |
تصدیق(acknowledgement) | سگمنتهای تصدیق | بدون تصدیق |
مقایسه UPD و TCP
3-سوکتهای نوع Raw
پروتکل Socket Raw یا همان سوکت خام نوع سادهتری از سوکت است که از لایههایی که در UPD و TCP استفاده میشود، استفاده نمیکند. در این سوکت استفاده از هدرها اختیاری است.
بیشتر رابط های برنامه نویسی کاربردی سوکت (API ها)، به عنوان مثال، آن هایی که مبتنی بر سوکت های برکلی هستند، از سوکت های خام پشتیبانی می کنند. ویندوز XP در سال 2001 با پشتیبانی از سوکت خام منتشر شد، اما سه سال بعد، مایکروسافت پشتیبانی از سوکت خام Winsock را به دلیل نگرانی های امنیتی محدود کرد. سوکتهای خام معمولاً در تجهیزات شبکه در دسترس هستند و برای مسیریابی پروتکلهایی مانند پروتکل مدیریت گروه اینترنت (IGMP) و Open Shortest Path First (OSPF) و در پروتکل پیام کنترل اینترنت (ICMP) مورد استفاده قرار میگیرند. ابزار پینگ.
تاریخچه پروتکل Socket
اصطلاح سوکت به انتشار RFC 147 در سال 1971 برمی گردد، زمانی که در ARPANET استفاده شد. اکثر پیاده سازی های مدرن سوکتها بر اساس سوکتهای برکلی (1983) و پشته های دیگر مانند Winsock (1991) هستند. API سوکتهای برکلی در توزیع نرمافزار برکلی (BSD)، با سیستمعامل یونیکس 4.2BSD بهعنوان یک API سرچشمه گرفت. با این حال، تنها در سال 1989، UC Berkeley توانست نسخههایی از سیستم عامل و کتابخانه شبکهاش را آزاد از محدودیتهای مجوز یونیکس محافظتشده با حق چاپ AT&T منتشر کند.