پروتکل کنترل انتقال (Transmission Control Protocol)
پروتکل کنترل انتقال، پروتکل انتقال اتصالگرا (connection-oriented) اینترنت است که یک جریان بایت قابل اعتماد، مرتب و تمامدوطرفه (full-duplex) را بین دو فرآیند فراهم میکند و کنترل جریان (flow control) و کنترل ازدحام (congestion control) در آن تعبیه شده است.
Definition
پروتکل کنترل انتقال یک پروتکل لایه انتقال اتصالگرا است که تحویل قابل اعتماد، مرتب و بررسیشده از نظر خطا را برای یک جریان بایت بین فرآیندهای کاربردی، همراه با راهاندازی و خاتمه اتصال، کنترل جریان و کنترل ازدحام فراهم میکند.
Scope
این موضوع به طور خاص TCP را پوشش میدهد: ساختار سگمنت آن، دستدهی سهطرفه (three-way handshake) که اتصال را برقرار میکند و رویههایی که آن را خاتمه میدهند، شمارههای توالی (sequence numbers) و تأییدیه (acknowledgment numbers)، تأییدیههای تجمعی (cumulative acknowledgments)، ارسال مجدد (retransmission) با تخمین زمانبندی انطباقی (adaptive timeout estimation) و ارسال مجدد سریع (fast retransmit)، و کنترل جریان از طریق پنجره دریافت (receive window). این موضوع TCP را به عنوان تحقق عینی اصول انتقال داده قابل اعتماد به علاوه مدیریت اتصال معرفی میکند. رفتار کنترل ازدحام آن در اینجا خلاصه شده است اما به طور عمیق در موضوع کنترل ازدحام مورد بررسی قرار میگیرد.
Core questions
- دستدهی سهطرفه چه کاری انجام میدهد و چگونه یک اتصال بسته میشود؟
- شمارههای توالی و تأییدیه TCP چگونه یک جریان بایت را ردیابی میکنند؟
- TCP چگونه زمانبندیها را تخمین میزند و از ارسال مجدد سریع برای بازیابی از دسترفتگی استفاده میکند؟
- پنجره دریافت چگونه کنترل جریان را پیادهسازی میکند؟
- TCP چگونه قابلیت اطمینان، کنترل جریان و کنترل ازدحام را در یک پروتکل ترکیب میکند؟
Key concepts
- سرویس اتصالگرا
- دستدهی سهطرفه
- ساختار سگمنت TCP
- شمارههای توالی و تأییدیه
- تأییدیه تجمعی
- تخمین زمانبندی ارسال مجدد
- ارسال مجدد سریع
- کنترل جریان و پنجره دریافت
- انتزاع جریان بایت
Key theories
- مدیریت اتصال
- TCP یک اتصال را با یک دستدهی سهطرفه که شمارههای توالی اولیه را همگامسازی میکند، برقرار میسازد و آن را با یک تبادل منظم (graceful exchange) خاتمه میدهد، و به هر دو طرف یک وضعیت ثابت برای یک جریان بایت قابل اعتماد و تمامدوطرفه ارائه میدهد.
- تحویل جریان بایت قابل اعتماد
- TCP هر بایت را شمارهگذاری میکند، از تأییدیههای تجمعی و تایمرهای ارسال مجدد انطباقی استفاده میکند، و ارسال مجدد سریع را بر روی ACKهای تکراری اعمال میکند، و یک جریان قابل اعتماد و مرتب را به جای پیامهای گسسته تحویل میدهد.
- کنترل جریان از طریق پنجره دریافت
- گیرنده میزان فضای بافر موجود خود را اعلام میکند، و فرستنده دادههای در حال انتقال خود را به آن پنجره محدود میکند، و از این طریق از غلبه یک فرستنده سریع بر یک گیرنده کند، مستقل از ازدحام شبکه، جلوگیری میکند.
Clinical relevance
TCP بخش عمدهای از ترافیک قابل اعتماد اینترنت، از جمله وب، ایمیل و انتقال فایل را حمل میکند، بنابراین رفتار آن مستقیماً تعیین میکند که این برنامهها چگونه عمل میکنند. راهاندازی اتصال آن تأخیر (latency) ایجاد میکند که پروتکلهای جدیدتر به دنبال کاهش آن هستند، کنترل جریان و ازدحام آن توان عملیاتی (throughput) را شکل میدهد، و درک TCP برای تنظیم عملکرد، رفتار فایروال و NAT، و تشخیص اتصالات متوقف یا کند ضروری است.
History
TCP در پروتکل Cerf-Kahn در سال 1974 برای شبکهسازی بینشبکهای (internetworking) سرچشمه گرفت، ابتدا به عنوان یک پروتکل واحد که بعدها به TCP و IP تقسیم شد. این پروتکل در RFC 793 (1981) استاندارد شد و طی دههها بهبود یافت — زمانبندیهای انطباقی، ارسال مجدد و بازیابی سریع، مقیاسبندی پنجره (window scaling) و تأییدیه انتخابی (selective acknowledgment) — با مشخصاتی که در RFC 9293 (2022) یکپارچه و بهروزرسانی شد.
Key figures
- Vinton Cerf
- Robert Kahn
- Van Jacobson
Related topics
Seminal works
- cerf1974
- rfc9293
- kurose2021
Frequently asked questions
- دستدهی سهطرفه TCP چیست؟
- این تبادلی است که یک اتصال TCP را باز میکند: کلاینت یک SYN با شماره توالی اولیه خود ارسال میکند، سرور با یک SYN-ACK که آن را تأیید میکند و شماره توالی خود را میدهد پاسخ میدهد، و کلاینت یک ACK نهایی ارسال میکند. پس از این، دو طرف بر روی شمارههای توالی شروع توافق میکنند و میتوانند دادهها را به طور قابل اعتماد مبادله کنند.
- TCP چه تفاوتی با UDP دارد؟
- TCP اتصالگرا است و یک جریان بایت قابل اعتماد و مرتب با کنترل جریان و ازدحام فراهم میکند، به قیمت تأخیر راهاندازی و سربار. UDP بدون اتصال است و یک سرویس دیتاگرام حداقل و با بهترین تلاش (best-effort) را بدون هیچ یک از این تضمینها ارائه میدهد، که آن را سبکتر و با تأخیر کمتر میکند اما قابلیت اطمینان را به برنامه واگذار میکند.