پروتکل UDP و TCP چیست؟ چه تفاوتهایی با یکدیگر دارند؟
پروتکل TCP، مخفف عبارت Transmission Control Protocol به معنی پروتکل کنترل انتقال، یک پروتکل ارتباطی دو طرفه است که انتقال پیام بین تجهیزات در یک شبکه را ممکن میکند. TCP مهمترین و پرکاربردترین پروتکل ارتباطی شبکه به حساب میآید. این پروتکل پیامها را از برنامههای کاربردی دریافت میکند و آنها را به بستههای جداگانهای میشکند که میتوانند در شبکه بهوسیلهی سوییچها و روترها جابجا شوند و به مقصد برسند. TCP این بستهها را شمارهگذاری میکند تا در مقصد بتواند ترتیب درست آنها را تشخیص دهد و با کنارهم گذاشتن محتوای بستهها، پیام را بهشکل کامل به برنامهی کاربردی در دستگاه مقصد تحویل دهد.
پروتکل TCP چگونه کار میکند؟
تصور کنید میخواهیم از سرور ایمیل یک ایمیل را ارسال کنیم. پروتکل TCP پیادهسازی شده در سرور، آن ایمیل را به تعدادی بسته تقسیم میکند، آنها را شمارهگذاری میکند و به پروتکل IP تحویل میدهد تا پروتکل IP آنها را به دست مقصد مورد نظر برساند. در مقصد نیز پروتکل IP این بستهها را تحویل پروتکل TCP میدهد و در نهایت پروتکل TCP آنها را به هم متصل میکند و به برنامهی ایمیل میرساند. این بستههای ارسالی گرچه به مقصدی یکسان ارسال میشوند ولی ممکن است با توجه به وضعیت شبکه، اختلالات و کندیها مسیرهای متفاوتی را طی کنند و با ترتیب متفاوتی به مقصد برسند. پروتکل TCP وظیفه دارد بستهها را با ترتیبی صحیح به برنامهی کاربردی در مقصد ارایه دهد.
TCP یک پروتکل مبتنی بر اتصال است به این معنا که تا زمان اتمام تبادل پیام بین دو دستگاه (که ممکن است شامل تعداد زیادی بسته باشد) اتصال بین آنها باید برقرار بماند و بستههای مربوطه در همان اتصال جابجا شوند. درست برخلاف پروتکل IP که در آن هر واحد داده بهشکل مستقل آدرس دهی میشود و از دستگاه مبدا به مقصد میرسد. به این ترتیب، وجود پروتکلی مانند TCP ضرورت پیدا میکند تا بتوانیم ترتیب پیامها را حفظ کنیم.
Handshaking در TCP
برای ایجاد اتصال در پروتکل TCP یک Handshake سه مرحلهای (Three-way Handshaking) انجام میشود. ابتدا مبدا، یک پیام SYN به مقصد ارسال میکند تا مکالمه شروع شود. سپس مقصد پیام SYN/ACK را به مبدا ارسال میکند تا موافقت خود را برای ایجاد مکالمه ابراز کند و در نهایت نیز مبدا یک پیام ACK به مقصد میفرستد تا پس از آن فرایند انتقال پیام آغاز شود. برای اتمام اتصال نیز یک Handshake چهار مرحلهای (Four-way Handshaking) لازم است. هر کدام از طرفین مکالمه میتواند آغازگر فرایند اتمام اتصال باشند. به این ترتیب، طرف آغازکنندهی فرایند،یک پیام FIN به طرف دیگر ارسال میکند و طرف دیگر نیز با ACK به آن پاسخ میدهد و همچنین یک پیام FIN دیگر را به آن طرف اول میفرستد. در ادامه طرف اول با ACK به طرف مقابل پاسخ میدهد و پس از مدت زمانی مشخص، اتصال را قطع میکند. طرف مقابل نیز با دریافت ACK، اتصال را از سمت خود خاتمه میدهد.
تفاوتهای پروتکل TCP با پروتکل UDP
هر دو پروتکل TCP و UDP وظیفهای مشابه، یعنی انتقال Packetها را برعهده دارند. هرچند تفاوتهایی میان این دو پروتکل وجود دارد که باعث میشود در هر نوع استفادهای، یکی از این دو پروتکل انتقال مورد استفاده قرار گیرد. پروتکل TCP از نظرهای زیر با UDP متفاوت است:
1. حفظ ترتیب بستهها: پروتکل TCP در مقصد، ترتیب بستهها را اصلاح کرده و آنها را همانند ترتیب ارسالی قرار میدهد. در پروتکل UDP تضمینی برای حفظ ترتیب بستهها وجود ندارد.
2. ارسال مجدد بستههای گم شده: در مسیر ارتباطی ممکن است تعدادی از پیامها گم شوند. TCP گم شدن بستهها را تشخیص میدهد و مجددن آنها را ارسال میکند. در حالیکه پروتکل UDP از بستههای گمشده صرف نظر میکند.
3. حفظ صحت پیام: پروتکل TCP با استفاده از روشهای خاصی وجود خطا در بستهی دریافت شده را شناسایی و آنها را مجددن ارسال میکند.
به شکل کلی استفاده از پروتکل UDP در مواردی توصیه میشود که سرعت ارسال اهمیت بالایی داشته باشد ولی ترتیب و صحت ارسال دادهها از اهمیت کمتری برخوردار باشد. موارد استفادهی TCP بیشتر به کاربردهایی برمیگردد که اولویت اصلی، سرعت ارسال و دریافت نباشد.
پروتکل UDP چیست؟
UDP، مخفف عبارت User Datagram Protocol، یک پروتکل ارتباطی است که برای کاربردهای حساس به زمان مانند VoD، پخش زنده و جستجوی DNS در اینترنت استفاده میشود. UDP همانند TCP و سایر پروتکلهای ارتباطی، پیامهای برنامههای کاربردی را دریافت کرده و به تعدای بسته میشکند و سپس آن بستهها را در شبکه به سمت مقصد ارسال میکند. این پروتکل که در کنار پروتکل TCP از پرکاربردترین پروتکلهای انتقال در بستر اینترنت به حساب میآید، به خاطر تشکیل ندادن اتصال قبل از انتقال داده سرعت ارتباطات را بسیار افزایش میدهد. همین سرعت بالای انتقال دلیل استفاده از UDP برای مصرفهای حساس به زمان شده است. البته باید در نظر داشت که تشکیل ندادن اتصال به منظور افزایش سرعت انتقال دادهها، باعث خواهد شد که بستهها در حین انتقال گم شوند و کیفیت تحت تاثیر این اتفاق قرار گیرد.
کاربردهای UDP
UDP برای کاربردهایی استفاده میشود که در آن از دست دادن بستههای یا بههم خوردن ترتیب آنها اهمیت کمتری نسبت به صبر کردن برای رسیدن بستهها دارد. بهعنوان مثال برای ارسال صوت و فیلم آنلاین از این پروتکل استفاده میشود، چرا که از یک سو این کاربردها حساس به زمان هستند و نیاز به انتقال سریع دادهها بسیار پررنگ است و از سوی دیگر در طراحی آنها قابلیت تحمل از دست دادن دادهها در نظر گرفته شده است. یک نمونهی کاربردی دیگر از استفاده از پروتکل UDP، سیستم Voice over IP یا VoIP است. VoIP مبنای کار بسیاری از سیستمهای تلفنی بر پایهی اینترنت است که در آن، یک تماس تلفنی کم کیفیت ولی بدون تاخیر نسبت به یک تماس بسیار باکیفیت ولی با تاخیر زیاد مناسبتر است. به دلیلی مشابه، برای بازیهای آنلاین نیز استفاده از UDP گزینه مناسبی است.
تفاوتهای پروتکل UDP و TCP
UDP یک روش استاندارد انتقال داده بین دو دستگاه در شبکه است. این پروتکل مکانیزم انتقال را بسیار ساده میکند؛ چرا که بدون ایجاد اتصال و فرایندی زمانگیر مانند Handshake در TCP، انتقال اطلاعات آغاز میشود. از سوی دیگر، در UDP الزامی برای حفظ ترتیب بستهها و بررسی صحت بستههای دریافت شده وجود ندارد. این موارد در کنار هم باعث میشوند تا انتقال یک فایل یکسان در UDP نسبت به TCP با سرعت بیشتری انجام شود. از طرف دیگر، UDP در مقابل حملههای منع سرویس توزیع شده یا DDoS آسیبپذیر است. از آنجایی که در UDP نیازی به Handshake نیست، حمله کنندگان میتوانند یک سرور قربانی را با ترافیک UDP مورد هجوم قرار دهند. درحالیکه در پروتکل TCP چون باید در ابتدا Handshake برقرار شود، سرور بهراحتی میتواند به ارتباط های مشکوک پاسخ نداده و از ترافیک ناخواسته پرهیز کند. در یک حمله DDoS مبتنی برUDP، حجم بسیار زیادی ترافیک UDP به پورتهای گوناگونی از سرور ارسال خواهند شد که منابع پردازشی سرور را برای پاسخدهی به آنها اشغال میکند.
نظرات
رضا محمدی
بسیار عالی !!!
شمس
@رضا محمدی: بله