فهرست مطالب
برنامه نویسی سوکت روشی برای اتصال دو Node در یک شبکه برای تبادل داده است. یکی از دو Node بعنوان Server و دیگری بعنوان Client عمل میکنند. Server همواره به پورت خاصی گوش میدهد و هنگامی که یک Client بخواهد به Server وصل شود، ابتدا به آن درخواست اتصال میدهد و در صورت پذیرش Server اتصال ایجاد شده و پس از آن میتوانند با هم داده تبادل کنند. در حالت کلی تعداد Client ها میتواند بیشتر از یک باشد.
از دید برنامهنویس Socket شبیه یک descriptor فایل عمل میکند چرا که میتواند فرامینی نظیر read و write را مشابه یک فایل انجام دهد.
در حالت کلی دو نوع سوکت UDP و TCP وجود دارد. سوکت TCP بصورت Connection-oriented است ولی سوکت UDP بصورت Connectionless است. برای درک چگونگی نوشتن برنامهنویسی Socket آشنایی با پروتکلهای TCP و UDP بسیار ضروری است، لذا ابتدا این پروتکلها را بصورت مختصر معرفی میکنیم :
پروتکل TCP
پروتکل TCP پروتکلی connection-oriented است. علت این امر ایجاد یک ارتباط مجازی بین Node فرستنده و گیرنده بعد از ارسال اطلاعات است.
پروتکلهایی از این نوع، امکانات بیشتری را برای کنترل خطاهای احتمالی در ارسال اطلاعات فراهم نموده ولی به دلیل افزایش بار عملیاتی سیستم، کارایی آن کاهش خواهد یافت. از پروتکل TCP به عنوان یک پروتکل قابل اطمینان نیز یاد میشود، به این علت که برای آگاهی از صحت اطلاعات ارسال شده، اطلاعات دیگری نیز به گیرنده ارسال میکند. درصورتی که بستههای داده به درستی به گیرنده نرسد، فرستنده مجدداً اقدام به ارسال بستهها مینماید.
در مقابل آن، پروتکل UDP برخلاف پروتکل TCP به صورت connection-less است. بدیهی است که سرعت پروتکل فوق نسبت به TCP سریعتر بوده ولی از بعد کنترل خطا، تنظیمات لازم را ارائه نخواهد داد. بهترین جایگاه استفاده از پروتکل UDP در مواردی است که برای ارسال و دریافت اطلاعات به یک سطح بالا از نیازی به اطمینان نیاز نباشد.
TCP در کاربردهایی مانند اتصال به شبکه جهانی وب یا همان اینترنت، ارسال و دریافت ایمیل، پروتکل انتقال فایل، ارسال فایلهای چند رسانهای و … استفاده میشود. در کاربردهای real-time مانند انتقال صدا در بستر شبکه (VOIP)، استفاده از پروتکلهایی مانند پروتکل انتقال همزمان ( Real-time Transport Protocol یا RTP)، استفاده از UDP پیشنهاد میشود.
در پروتکل TCP برای اینکه از انتقال صحیح داده اطمینان حاصل شود، از تکنیکی به نام Positive acknowledgement with re-transmission استفاده میشود. در این تکنیک پس از ارسال یک بسته توسط فرستنده، یک تایمر در فرستنده فعال میشود. گیرنده وظیفه دارد بلافاصله پس از دریافت بسته، یک پیام تصدیق به معنی دریافت موفقیت آمیز پیام برای فرستنده ارسال کند. در صورتیکه در مدت زمان مشخص شده، فرستنده پیام تصدیق گیرنده را دریافت نکند، متوجه میشود که گیرنده پیام را به شکل صحیحی دریافت نکرده است و مجدداً پیام را برای گیرنده ارسال میکند.
TCP وظیفه ایجاد سگمنتها (بستههای کوچک داده که از تقسیم فریمها تشکیل میشود) برای انتقال در بستر شبکه را دارد. به عنوان مثال اگر وب سرور قصد ارسال یک فایل HTML را داشته باشد، پروتکل TCP این فایل را تبدیل به بستههای اطلاعاتی کوچکتر میکند و آنها را به پروتکل IP تحویل میدهد. پروتکل IP فرایند بستهبندی را برای تشکیل بستههای داده IP (از طریق اضافه کردن سرآیند پروتکل IP که شامل مواردی مانند IP مقصد میشود) روی بستههای دریافت شده از پروتکل TCP انجام میدهد. در گیرنده پس از دریافت بستههای داده، پروتکل TCP بستهها را برای نداشتن خطا و همچنین مرتب بودن آنها بررسی میکند. سپس سگمنتهای مختلف به یکدیگر متصل میشوند تا داده اصلی فایل HTML تشکیل شود.
بستههای TCP مانند دیگر پروتکلها شامل یک بخش سرآیند و یک بخش داده میباشد. ساختار فریم TCP در شکل 2 نشان داده شدهاست.
پروتکل UDP
در پروتکل UDP مشابه پروتکل TCP ، گرههای شبکه قادر به ارسال داده در شبکه هستند. همانطور که در بخش پروتکل TCP اشاره شد، پروتکل UDP برخلاف پروتکل TCP ، پروتکلی Connectionless است که از مدل انتقال ساده بدون استفاده از تکنیک Handshaking که برای ایجاد قابلیت اطمینان، مرتبسازی و یکپارچهسازی داده بکار میرود، بهره میبرد؛ بنابراین UDP سرویس غیرمطمئنی ارائه میدهد و ممکن است بستههای داده نامرتب یا تکراری و یا بدون اطلاع قبلی از دست بروند.
از UDP در کاربردهایی استفاده میشود که نیازی به انجام عملیات خطایابی و تصحیح خطا وجود ندارد یا این عملیات در سطح لایههای نرمافزاری صورت میپذیرد.
برنامههای که نسبت به زمان حساس هستند از UDP استفاده میکنند، زیرا از دست دادن بسته بهتر از منتظر ماندن برای بسته است. اگر برنامهای نیاز به امکانات تصحیح خطا در سطح واسط شبکه داشته باشد، میتواند از پروتکل TCP یا SCTP که بهطور خاص برای این منظور طراحی شده است، استفاده کند.
ساختار فریم پروتکل UDP در شکل 3 نشان داده شده است.
سوکت TCP
- شکل 4 نحوه اتصال و تبادل داده را بین Server و Client را نشان میدهد. همانطور که از شکل مشخص است، سرور ابتدا سوکت را ایجاد کرده و آن را به پورت مشخص Bind میکند. سپس دائما به پورت موردنظر گوش میدهد. هنگامیکه یک Client بخواهد به Server متصل شود ابتدا یک درخواست اتصال از طرف به Server ارسال میکند، Server میتواند Client را بررسی کند و در صورت پذیرش درخواست، لینک بین Server و Client ایجاد میشود و بعد از آن هر دو میتوانند داده ارسال و یا دریافت کنند.
سوکت UDP
در شکل 5 نحوه کار سوکت UDP نشان داده شده است. همانطور که در قسمتهای قبل بیان شد، در سوکت UDP قبل از تبادل داده، هیچگونه لینکی بین Server و Client ایجاد نمیشود. در این حالت Server به پورت مشخصی گوش میدهد و دائما منتظر دریافت داده است.