Dev Fuel
خواندن ۴ دقیقه·۱ روز پیش

TCP چیست؟ و چطور کار می‌کنه؟

TCP چیست و چطور کار می‌کند؟
TCP چیست و چطور کار می‌کند؟


تو دنیای شبکه‌های کامپیوتری، اگه بخوایم داده‌ای رو از دستگاهی به دستگاه دیگه‌ای بفرستیم، نیاز به یه سیستم مطمئن داریم که خیالمون رو راحت کنه.
اینجاست که TCP وارد عمل میشه. این بزرگوار مخفف "Transmission Control Protocol" هست (پروتکل کنترل انتقال) که یکی از مهمترین پروتکل‌های لایه انتقال (Transport Layer) توی مدل OSI و TCP/IP هست. این پروتکل برای انتقال داده بین دو دستگاه (مثلا کلاینت و سرور) طراحی شده و یک سری ویژگی خاص داره که باعث میشه قابل اعتماد، منظم، و کارآمد باشه.
در ادامه مقاله به این می‌پردازیم که TCP دقیقا چطور کار می‌کنه و چرا اینقدر مهمه؟

OSI چیه؟

قبل اینکه به اصل مطلب بپردازیم ، چون توی مقدمه به OSI و TCP/IP اشاره کردم ، پس اول مشخص کنیم که OSI چیه تا یک دید واضح تری داشته باشیم.
مدل OSI یه چارچوب تئوریه که به ما کمک می‌کنه شبکه‌ها رو بهتر بفهمیم و TCP توی این چارچوب نقش کلیدی داره، مخصوصاً توی اینترنت. به همین سادگی :) چیز خاصی نیست.

TCP چطور کار می‌کنه؟

خب، ما فرض رو بر این می‌گیریم که TCP یه شرکت حمل و نقل هوشمند هست و ما یه عالمه بسته داریم که TCP وظیفه داره این بسته‌ها رو به درستی به مقصد برسونه.
اما قبل از اینکه بسته‌ها ارسال بشن، TCP یه فرآیند خاصی داره که دنبالش میکنه:

۱. هندشیک سه مرحله‌ای (Three-Way Handshake)
TCP قبل از شروع انتقال داده، یک ارتباط مطمئن ایجاد میکنه. این فرآیند برای اینه که مطمئن بشه بین سرور و کلاینت اتصال به درستی برقرار شده.

Three-Way Handshake در TCP
Three-Way Handshake در TCP
  • کلاینت: «می‌خوام وصل شم» (SYN)
  • سرور: «اوکی، منم آمادم» (SYN-ACK)
  • کلاینت: «حله، شروع کنیم» (ACK)
    خب حالا که اتصال برقرار شد، میریم که بسته‌ها رو ارسال کنیم.

۲. تقسیم‌بندی و شماره‌گذاری (Segmentation and Sequencing)
چون داده‌هایی که قراره ارسال کنیم بزرگ هستند، TCP اون‌ها رو به بسته‌های کوچیک‌تر (Packets) تقسیم می‌کنه و هر بسته یه شماره مخصوص (Sequence Number) می‌گیره تا وقتی گیرنده اون‌ها رو تحویل گرفت، به ترتیب کنار هم بذاره.
مثلاً اگه پیام ما «Hello world!» باشه، TCP اینو می‌شکنه به:

  • بسته ۱: «Hello»
  • بسته ۲: «World!»
    حالا گیرنده می‌دونه ترتیب بسته‌ها چیه و می‌تونه اونا رو درست کنار هم بذاره.

۳. ارسال و تأیید دریافت (Data Transfer and Acknowledgment)
TCP بسته‌ها رو یکی‌یکی می‌فرسته و بعدش منتظر می‌مونه تا گیرنده تأیید کنه که بسته‌ها رسیدن.
اگه گیرنده یه پیام ACK بفرسته، یعنی بسته رو سالم دریافت کرده.
اگه گیرنده ACK نفرسته، TCP می‌فهمه که بسته گم شده و دوباره ارسالش می‌کنه (Retransmission).
این فرآیند باعث میشه که هیچ بسته‌ای گم نشه.

۴. کنترل جریان (Flow Control)
خب، بیاید فرض کنیم گیرنده سرعتش از فرستنده کمتره. اگه TCP هی داده بفرسته و گیرنده نتونه پردازش کنه، چه اتفاقی میفته؟ بسته‌ها تو صف می‌مونن و بعضیاشون ممکنه از بین برن.

Flow-Control در TCP
Flow-Control در TCP


اینجا TCP از یه مکانیزم به اسم «پنجره لغزان» (Sliding Window) استفاده می‌کنه تا سرعت ارسال رو تنظیم کنه.
مثلا گیرنده میگه که من ظرفیت ۴ تا بسته رو دارم، بیشتر از این نفرست. و بعد که پردازش کرد، میگه که حالا اوکیه، ۴ تا دیگه بفرست.

۵. کنترل ازدحام (Congestion Control)
اگه ترافیک شبکه زیاد بشه، TCP می‌فهمه که شبکه داره شلوغ می‌شه و سرعت ارسالش رو کم میکنه تا ترافیک رو کنترل کنه و مبادا بسته‌ها تو راه تصادف بشه !
و این کارو با الگوریتم‌هایی مثل «شروع آهسته» (Slow Start) و «اجتناب از ازدحام» (Congestion Avoidance) انجام میده.
مثلا اگه ترافیک شبکه کم بود، سرعت ارسال رو بیشتر میکنه و اگه زیاد بود، کم. به همین سادگی :)

۶. بستن اتصال (Connection Termination)
وقتی کار تموم شد، TCP با یه فرآیند چهار مرحله‌ای ارتباط رو می‌بنده:

  • کلاینت یه پیام FIN (Finish) می‌فرسته و میگه که داده‌هام تموم شد، خدانگهدارت.
  • سرور یه ACK می‌فرسته و میگه عه؟ حله پس.
  • سرور یه FIN می‌فرسته و میگه منم دیگه کارم تموم شد.
  • کلاینت یه ACK نهایی می‌فرسته و میگه حله دیگه، ارتباط بسته شد.
    و در نهایت، ارتباط بسته می‌شه.

مقایسه پروتکل TCP با پروتکل UDP

خب، ما که تا اینجا اومدیم و فهمیدیم TCP چطور کار میکنه و چقدر دقت و کیفیت براش مهمه. پس یه مقایسه و اشاره ریزی هم به پروتکل UDP بکنیم، بد نیست نه؟
UDP (User Datagram Protocol) برعکس TCP، روی سرعت تمرکز داره و تضمینی نمیده که همه داده‌ها رو کامل تحویل بده!
این یعنی اگه بسته‌ای گم بشه، مثل TCP اینهمه به خودش زحمت نمیده که دوباره یکی دیگه ارسال کنه و کلی دردسر دیگه بکشه (یه پروتکل بیخیال تشریف داره ایشون :|).
اما چون هیچ تأخیری برای بررسی و تأیید نداره، توی جاهایی مثل استریم ویدیو، تماس‌های اینترنتی، بازی‌های آنلاین و ... که سرعت مهم‌تر از دقت هست، استفاده میشه (نتیجه می‌گیریم بیخیالی هم فواید خودشو داره :) ).

جمع‌بندی

توی این مقاله ما راجع به اینکه TCP چی هست و چطور کار میکنه توضیح دادیم و یه مقایسه ریزی هم با پروتکل دوست و برادر همسایه‌اش، یعنی UDP کردیم. مواردی که جا داشت و دوست داشتم بیشتر بهشون اشاره کنم ولی توی این مقاله نگنجید:

  • لایه‌های TCP/IP
  • OSI
  • تفاوت TCP با پروتکل‌های دیگه مثل SCTP
  • کاربردهای عملی TCP توی برنامه‌نویسی (مثل سوکت‌ها)


و در آخر مرسی که تا اینجا همراهی کردید، اگه پیشنهاد یا انتقادی داشتید زیر همین پست مطرح کنید، خوشحال میشم :)

یه برنامه نویس ساده با باگ های پیشرفته ، که عاشق تکنولوژیه :)
شاید از این پست‌ها خوشتان بیاید
نظرات