پروتکل کنترل انتقال در شبکه های کامپیوتری — راهنمای جامع
«پروتکل کنترل انتقال» (TCP) یکی از مهمترین پروتکلها در میان مجموعه پروتکلهای اینترنت محسوب میشود. این پروتکل استفاده گستردهای در زمینه انتقال دادهها در شبکه ارتباطی مانند اینترنت دارد. برای مطالعه بخش قبلی این نوشته به لینک زیر مراجعه کنید:
قابلیتها
در ادامه به برخی از کلیدیترین قابلیتهای پروتکل کنترل انتقال یا همان TCP پرداختهایم.
- TCP یک پروتکل قابل اطمینان است. یعنی گیرنده همواره اطلاعات مثبت یا منفی در مورد بسته داده دریافتی به فرستنده ارسال میکند و بدین ترتیب فرستنده همواره سرنخی در مورد این که بسته مورد نظر به مقصد رسیده یا باید آن را مجدد ارسال کند در دست دارد.
- TCP تضمین میکند که دادهها به همان ترتیبی که ارسال شدهاند به مقصد مورد نظر میرسند.
- TCP مبتنی بر اتصال است و الزام میکند که پیش از ارسال واقعی دادهها باید یک اتصال بین دو نقطه ریموت برقرار شود.
- TCP امکان بررسی خطا و مکانیسم بازیابی را دارد.
- TCP ارتباط سر به سر را ارائه میکند.
- TCP امکان کنترل گردش و کیفیت سرویس را ارائه میدهد.
- TCP در حالت نقطه به نقطه کلاینت/سرور عمل میکند.
- TCP سرور full duplex ارائه میکند، یعنی میتواند نقشهای هر دو سمت گیرنده و فرستنده را ایفا کند.
هدر
کمینه طول هدر TCP بیست بایت و بیشینه آن 60 بایت است.
- پورت مبدأ (Source Port) به طول 16 بیت - این بخش پورت مبدأ پردازش درخواست را در دستگاه فرستنده تعیین میکند.
- پورت مقصد (Destination Port) به طول 16 بیت – این بخش پورت مقصد پردازش اپلیکیشن را در دستگاه گیرنده تعیین میکند.
- شماره تأیید وصول (Acknowledgement Number) به طول 32 بیت - زمانی که فلگ ACK تعیین شده باشد، این شماره شامل شماره توالی بعدی دادهها است که انتظار میرود دریافت شود و به عنوان تأیید وصول دادههای دریافتی قبلی عمل میکند.
- آفست دادهها (Data Offset) به طول 4 بیت - این فیلد هم به معنی اندازه هدر TCP (کلمههای 32 بیتی) و هم آفست دادهها در بسته کنونی در کل قطعه TCP است.
- ذخیره شده (Reserved) به طول 3 بیت - این بخش برای استفادههای آتی ذخیره شده و همه آنها به صورت پیشفرض روی صفر تنظیم میشوند.
- فلگها (Flags) هر کدام، به طول 1 بیت:
- NS – بیت Nonce Sum برای پردازش سیگنال رسانی «اعلان تراکم صریح» (Explicit Congestion Notification) استفاده میشود.
- CWR – زمانی که یک میزبان بستهای با بیت ECE درافت میکند، اقدام به کاهش پنجرههای تراکم میکند تا تصدیق کند که ECE دریافت شده است.
- ECE دو معنا دارد:
- اگر بیت Syn به مقدار صفر تنظیم شده باشد، در این صورت ECE به این معنی است که بسته IP دارای CE (تجربه تراکم یا congestion experience) خاص خود است.
- اگر Syn روی 1 تنظیم شده باشد، ECE به این معنی است که دستگاه قابلیت ECT دارد.
- URG – این مقدار نشان میدهد که فیلد «اشارهگر ضروری» (Urgent Pointer) دادههای مهمی دارد و باید مورد پردازش قرار گیرد.
- ACK – این بخش اعلام میکند که فیلد تأیید وصول اهمیت دارد. اگر ACK به مقدار 0 تنظیم شده باشد، نشان میدهد که بسته شامل هیچ تأییدی نیست.
- PSH – زمانی که تنظیم شده باشد، یک درخواست به دستگاه دریافتکننده میفرستد تا دادهها را (به محض رسیدن) بدون بافر کردن به اپلیکیشن دریافتکننده PIUSH کند.
- RST – فلگ ریست است و قابلیتهای زیر را دارد:
- برای نپذیرفتن اتصال ورودی استفاده میشود.
- برای رد کردن اتصال ورودی استفاده میشود.
- برای ریاستارت کردن اتصال ورودی استفاده میشود.
- SYN – این فلگ برای راهاندازی یک اتصال بین میزبانها استفاده میشود.
- FIN – این فلگ برای آزادسازی یک اتصال استفاده میشود و هیچ داده اضافی پس از آن مبادله نخواهد شد. از آنجا که بستهها با فلگ SYN و FIN شماره توالی دارند، با ترتیب صحیح پردازش میشوند.
- اندازه پنجره (Windows Size) – این فیلد برای کنترل گردش بین دو دستگاه استفاده میشود و نشاندهنده مقدار بافر برحسب بایت است که گیرنده برای یک قطعه تخصیص داده است. یعنی گیرنده انتظار دارد چه مقدار داده درافت کند.
- بررسی مجموع (Checksum) - این فیلد شامل مقدار بررسی مجموع هدر، دادهها و شبه هدرها است.
- اشارهگر ضروری (Urgent Pointer) – این مقدار در صورت تعیین شدن فلگ URG روی 1 به بایت دادههای ضروری اشاره میکند.
- گزینهها (Options) – موجب تسهیل گزینههای اضافی میشود که از سوی هدر معمولی پوشش نیافتهاند. فیلد Option همواره به وسیله کلمههای 32 بیتی توصیف میشود. اگر این فیلد شامل دادههایی کمتر از 32 بیت باشد، از «فاصلهگذاری» (Padding) برای پوشش بیتهای باقیمانده برای رسیدن به کران 32 بیت استفاده میشود.
آدرسدهی
ارتباط TCP بین دو میزبان ریموت به کمک شماره پورتها (TSAP) برقرار میشود. شمارههای پورت در بازه بین 0 تا 65535 قرار دارند که به صورت زیر تقسیم میشوند:
- پورتهای سیستم از 0 تا 1023 هستند.
- پورتهای کاربر از 1024 تا 49151 هستند.
- پورتهای خصوصی/دینامیک از 49152 تا 65535 هستند.
مدیریت اتصال
ارتباط TCP در حالت سرور/کلاینت عمل میکند. کلاینت اتصال را آغاز میکند و سرور آن را پذیرفته یا رد میکند. بدین ترتیب فرایند handshaking سهطرفه برای مدیریت اتصال استفاده میشود.
برقراری اتصال
کلاینت اتصال را آغاز کرده و قطعه مربوطه را به همراه شماره توالی ارسال میکند. سرور با ارسال شماره توالی خود و ACK قطعه کلاینت که یک واحد بیشتر از شماره توالی کلاینت است، آن را تأیید میکند. کلاینت پس از دریافت ACK قطعهاش، تأیید پاسخ سرور را ارسال میکند.
آزادسازی
هر کدام از سرور و کلاینت میتوانند قطعه TCP را با تنظیم فلگ FIN روی 0 ارسال کنند. زمانی که سمت گیرنده با تأیید FIN پاسخ میدهد، آن جهت ارتباط TCP بستهشده و اتصال آزادسازی میشود.
مدیریت پهنای باند
TCP از مفهوم اندازه پنجره برای رفع نیاز به مدیریت پهنای باند کمک میگیرد. اندازه پنجره به فرستنده در سمت ریموت اعلام میکند که گیرنده در این سمت چه تعداد بایت را میتواند دریافت کند. TCP از فاز شروع آهسته با اندازه پنجره 1 آغاز میکند و اندازه پنجره را به صورت نمایی پس از هر برقراری ارتباط موفق افزایش میدهد.
برای نمونه کلاینت از اندازه پنجره 2 استفاده میکند و 2 بایت داده ارسال میکند. زمانی که تأیید وصول این قطعه دریافت شد، اندازه پنجره دو برابر شده و در قطعه بعدی 4 بایت داده ارسال میشود. هنگامی که تأیید وصول قطعه داده 4 بایتی دریافت شد، کلاینت اندازه پنجره را روی 8 تنظیم میکند و همین طور تا آخر.
اگر یک تأیید وصول دریافت نشود، یعنی دادهها در شبکه انتقال از دست رفته باشند یا سیگنال NACK دریافت شود، در این صورت اندازه پنجره به نصف کاهش پیدا میکند و فاز شروع آهسته از نو آغاز میشود.
کنترل خطا و گردش کنترل
TCP از شمارههای پورت برای دانستن این که قطعه داده را باید به کدام پردازش اپلیکیشن تحویل دهد استفاده میکند. علاوه با آن از شمارههای توالی برای همگامسازی خود با میزبان ریموت استفاده میکند. همه قطعات داده به همراه شمارههای توالی ارسال و دریافت میشوند. فرستنده در زمان دریافت ACK میداند که کدام قطعه داده اخیراً از سوی گیرنده دریافت شده است. گیرنده نیز با اشاره به شماره توالی بسته دریافتی اخیر در مورد قطعه اخیراً ارسال شده از سوی فرستنده اطلاع دارد.
اگر شماره توالی قطعه اخیراً دریافت شده با آن شماره توالی که گیرنده انتظار دارد دریافت کند، مطابقت نداشته باشد، در این صورت بسته رد شده و یک سیگنال NACK بازگشت مییابد. اگر دو قطعه با شماره توالی یکسان دریافت شوند، مقدار زمان (timestamp) پروتکل TCP برای تصمیمگیری در مورد اولویت هر کدام مورد بررسی قرار میگیرد.
Multiplexing
مالتیپلکس تکنیکی است که برای ترکیب دو یا چند جریان داده در یک نشست مورد استفاده قرار میگیرد. زمانی که یک کلاینت TCP اتصالی با سرور برقرار میکند، همواره به شماره پورت کاملاً تعریفشدهای که پردازش اپلیکیشن را مشخص میکند اشاره خواهد کرد. کلاینت خودش از یک شماره پورت تصادفی از مجموع شماره پورتهای خصوصی استفاده میکند.
کلاینت با استفاده از Multiplexing در TCP میتواند با چند پردازش اپلیکیشن مختلف در یک نشست واحد ارتباط بگیرد. برای نمونه یک کلاینت صفحه وبی را درخواست میکند که به نوبه خود شامل بایتهای مختلف داده (HTTP، SMTP ،FTP و غیره) است. Timeout نشست TCP افزایش پیدا میکند و نشست برای مدتی طولانیتر باز میماند تا از سربار handshake سهطرفه جلوگیری شود.
بدین ترتیب سیستم کلاینت میتواند چند اتصال را روی یک اتصال مجازی واحد دریافت کند. البته این اتصالهای مجازی در صورتی که timeout زیادی داشته باشند، برای سرور خوب نیستند.
کنترل تراکم
زمانی که مقدار دادههای ورودی به سیستم آن قدر باشد که سیستم نتواند آنها را مدیریت کند، پدیده «تراکم» (congestion) رخ میدهد. TCP تراکم را از طریق مکانیسم پنجره کنترل میکند. این پروتکل یک اندازه پنجره تعیین میکند که به سمت دیگر اعلام میکند باید چه مقدار داده ارسال کند. TCP میتواند از سه الگوریتم زیر برای کنترل تراکم بهره بگیرد:
- افزایش جمعی، کاهش ضربی
- آغاز آهسته
- واکنش Timeout
مدیریت تایمر
TCP از انواع متفاوتی از تایمر برای کنترل و مدیریت وظایف متنوع بهره میگیرد:
تایمر Keep-alive
- از این تایمر برای بررسی یکپارچگی و اعتبار یک اتصال استفاده میشود.
- زمانی که تایمر Keep-alive منقضی شود، میزبان یک بسته ارسال میکند تا بررسی کند آیا اتصال همچنان برقرار است یا نه.
تایمر Retransmission
این تایمر «نشست حالتداری» (stateful session) از دادههای ارسال را نگهداری میکند. اگر تأیید وصول دادههای ارسالی در طی زمان Retransmission دریافت نشود، قطعه داده دوباره ارسال میشود.
تایمر Persist
- نشست TCP میتواند از سوی هر یک از دو میزبان با ارسال اندازه پنجره 0 متوقف شود.
- برای ازسرگیری نشست، یک میزبان باید اندازه پنجرهای با مقدار بزرگتر ارسال کند.
- اگر این قطعه هرگز به سمت دیگر نرسد، هر دو سمت تا ابد منتظر همدیگر خواهند ماند.
- زمانی که تایمر Persist منقضی میشود، میزبان اندازه پنجره را مجدداً ارسال میکند تا سمت دیگر اطلاع پیدا کند.
- تایمر Persist از بروز بنبست در ارتباط جلوگیری میکند.
Timed-Wait
- پس از آزادسازی یک اتصال، هر دو میزبان به اندازه زمان Timed-Wait منتظر میمانند تا اتصال به طور کامل خاتمه یابد.
- این زمان به این جهت تعیین شده که مطمئن شویم سمت دیگر تأیید وصول درخواست خاتمه اتصال را دریافت کرده است.
- Timed-Wait در بیشینه حالت خود میتواند حداکثر 240 ثانیه (4 دقیقه) طول بکشد.
بازیابی Crash
TCP پروتکلی کاملاً مطمئن است. این پروتکل از شماره توالی برای هر بایت ارسالی در قطعه استفاده میکند. همچنین مکانیسم بازخورد دارد، یعنی زمانی که یک میزبان بستهای را دریافت میکند، به همراه یک سیگنال ACK است که شماره توالی بعدی مورد انتظار را نمایش میدهد (این در صورتی است که آخرین بسته نباشد).
زمانی که سرور TCP در میانه ارتباط از کار بیافتد و فرایند خود را راهاندازی مجدد بکند، یک انتشار TPDU به همه میزبانهایش ارسال میکند. سپس میزبانها میتوانند آخرین قطعه دادهای را که هرگز تأیید وصول نکرده بودند ارسال کرده و از آن جا به بعد کار خود را ادامه دهند. برای مطالعه بخش بعدی این سری مقالات به لینک زیر مراجعه کنید:
اگر این مطلب برای شما مفید بوده است، آموزشهای زیر نیز به شما پیشنهاد میشوند:
- مجموعه آموزشهای شبکههای کامپیوتری
- مجموعه آموزشهای دروس علوم و مهندسی کامپیوتر
- مجموعه آموزشهای ابزارهای مهندسی کامپیوتر
- لایه شبکه چیست؟ — به زبان ساده
- انواع شبکههای کامپیوتری — راهنمای جامع
- آموزش مانیتورینگ شبکه | راهنمای کامل و رایگان — به زبان ساده
==