آموزش ARM, کارگاه آموزشی

راه اندازی کتابخانه LWIP با STM32 (بخش دوم)

فهرست مطالب

برنامه نویسی سوکت روشی برای اتصال دو Node در یک شبکه برای تبادل داده است. یکی از دو Node بعنوان Server و دیگری بعنوان Client عمل می­‌کنند. Server همواره به پورت خاصی گوش می‌­دهد و هنگامی­ که یک Client بخواهد به Server وصل شود، ابتدا به آن درخواست اتصال می­‌دهد و در صورت پذیرش Server اتصال ایجاد شده و پس از آن می­‌توانند با هم داده تبادل کنند. در حالت کلی تعداد Client ها می‌­تواند بیشتر از یک باشد.

نحوه اتصال Server و Client در شبکه Ethernet
نحوه اتصال Server و Client در شبکه Ethernet

 از دید برنامه‌نویس 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 نشان داده شده‌است.

ساختار فریم TCP
ساختار فریم TCP

پروتکل UDP

در پروتکل UDP  مشابه پروتکل TCP ، گره­‌های شبکه قادر به ارسال داده در شبکه هستند. همانطور که در بخش پروتکل TCP اشاره شد، پروتکل UDP برخلاف پروتکل TCP ، پروتکلی Connectionless است که از مدل انتقال ساده بدون استفاده از تکنیک Handshaking که برای ایجاد قابلیت اطمینان، مرتب‌سازی و یکپارچه‌سازی داده بکار میرود، بهره می­‌برد؛ بنابراین  UDP سرویس غیرمطمئنی ارائه می‌دهد و ممکن است بسته­‌های داده نامرتب یا تکراری و یا بدون اطلاع قبلی از دست بروند.

از UDP در کاربردهایی استفاده می‌شود که نیازی به انجام عملیات خطایابی و تصحیح خطا وجود ندارد یا این عملیات در سطح لایه­‌های نرم‌افزاری صورت می­‌پذیرد.

برنامه‌­های که نسبت به زمان حساس هستند از UDP استفاده می­‌کنند، زیرا از دست دادن بسته بهتر از منتظر ماندن برای بسته است. اگر برنامه‌ای نیاز به امکانات تصحیح خطا در سطح واسط شبکه داشته باشد، می‌­تواند از پروتکل TCP یا SCTP که به­‌طور خاص برای این منظور طراحی شده است، استفاده کند.

ساختار فریم پروتکل UDP در  شکل 3 نشان داده شده است.

ساختار فریم UDP
ساختار فریم UDP

سوکت TCP

  •  شکل 4 نحوه اتصال و تبادل داده را بین Server و Client را نشان می­‌دهد. همانطور که از شکل مشخص است، سرور ابتدا سوکت را ایجاد کرده و آن را به پورت مشخص Bind می‌­کند. سپس دائما به پورت موردنظر گوش می­‌دهد. هنگامی­‌که یک Client بخواهد به Server متصل شود ابتدا یک درخواست اتصال از طرف به Server ارسال می­‌کند، Server می­‌تواند Client را بررسی کند و در صورت پذیرش درخواست، لینک بین Server و Client ایجاد می­‌شود و بعد از آن هر دو می‌­توانند داده ارسال و یا دریافت کنند.
نحوه کار TCP Server و TCP Client
نحوه کار TCP Server و TCP Client

سوکت UDP

در شکل 5 نحوه کار سوکت UDP نشان داده شده است. همانطور که در قسمت‌­های قبل بیان شد، در سوکت UDP قبل از تبادل داده، هیچگونه لینکی بین Server و Client ایجاد نمی‌­شود. در این حالت Server به پورت مشخصی گوش می‌­دهد و دائما منتظر دریافت داده است.

نحوه کار UDP Server و UDP Client
نحوه کار UDP Server و UDP Client

نظرتان را درباره این مقاله بگویید 16 نظر

راه اندازی کتابخانه LWIP با STM32 (بخش دوم)

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *