پروتکل 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 متفاوت است:
- حفظ ترتیب بستهها: پروتکل TCP در مقصد، ترتیب بستهها را اصلاح کرده و آنها را همانند ترتیب ارسالی قرار میدهد. در پروتکل UDP تضمینی برای حفظ ترتیب بستهها وجود ندارد.
- ارسال مجدد بستههای گم شده: در مسیر ارتباطی ممکن است تعدادی از پیامها گم شوند. TCP گم شدن بستهها را تشخیص میدهد و مجددن آنها را ارسال میکند. در حالیکه پروتکل UDP از بستههای گمشده صرف نظر میکند.
- حفظ صحت پیام: پروتکل TCP با استفاده از روشهای خاصی وجود خطا در بستهی دریافت شده را شناسایی و آنها را مجددن ارسال میکند.
بهشکل کلی استفاده از پروتکل UDP در مواردی توصیه میشود که سرعت ارسال اهمیت بالایی داشته باشد ولی ترتیب و صحت ارسال دادهها از اهمیت کمتری برخوردار باشد. موارد استفادهی TCP بیشتر به کاربردهایی برمیگردد که اولویت اصلی، سرعت ارسال و دریافت نباشد.