پروتکل TCP یا همان Transition Control Protocol
پروتکل TCP مجموعه ای از پروتکل ها است که پایه و اساس ارتباط در اینترنت می باشد. برقراری ارتباط براساس یکی از پروتکل های TCP و یا UDP صورت می گیرد. تفاوت این دو ارتباط در حالت کلی دقت و امنیت در ارتباط TCP و سرعت در ارتباط UDP است.
مهمترین وظیفه پروتکل TCP اطمینان از صحت ارسال اطلاعات است. پروتکل فوق اصطلاحاً «ارتباط اتصالگرا» نامیده میشود. علت این امر ایجاد یک ارتباط مجازی بین کامپیوترهای فرستنده و گیرنده، قبل از ارسال اطلاعات است. در این پروتکل اصطلاحا مبدا و مقصد قبل از انتقال دیتا از اتصال به یکدیگر اطمینان حاصل میکنند. در انتهای انتقال دیتا نیز از قطع اتصال مطمئن میشوند. مرحله اتصال از یک handshake سه مرحله (همانطور که در تصویر مشخص است) استفاده میشود.
پس از برقراری ارتباط جریان انتقال دیتا را کنترل می کنند. پروتکلهایی از این نوع، امکانات بیشتری را به منظور کنترل خطاهای احتمالی در ارسال اطلاعات فراهم نموده ولی به دلیل افزایش بار عملیاتی سیستم، کارایی آنان کاهش خواهد یافت. از پروتکل TCP به عنوان یک پروتکل قابل اطمینان نیز یاد میشود. به این علت که برای آگاهی از صحت اطلاعات ارسال شده، اطلاعات دیگری نیز به گیرنده فرستاده میشود. در صورتی که بستههای اطلاعاتی به درستی دراختیار فرستنده قرار نگیرند ، فرستنده مجدداً اقدام به ارسال اطلاعات مینماید.
نحوه انتقال اطلاعات
انتقال اطلاعات در پروتکل TCP به این صورت است که بروی هر بسته شماره ای به نام sequence number زده میشود. پس از چندین ارسال، سرویس گیرنده به سرور پیغامی مبیتنی بر دریافت براساس شماره های بسته ها برای سرویس دهنده ارسال میکند. اگر بسته در انتها آسیب دیده باشد یا به دست مقصد نرسیده باشد، سرویس گیرنده آن شماره را از شماره های تاییدی حذف می کند. به این ترتیب سرور مجددا اقدام به ارسال پکت از بین رفته می کند.
ساختار بسته TCP
source port: آدرس پورت فرستنده – 16 بیت
destination port: آدرس پورت مقصد – 16 بیت
Number: شماره ترتیب آخرین بایتی را که در فیلد داده از بسته جاری قرار دارد را نشان میدهد. در پرتکل TCP شماره ترتیب، بر حسب شماره آخرین بایتی است که در بسته جاری قرار دارد. به عنوان مثال اگر در این فیلد عدد ۱۹۳۴۱ قرار بگیرد به این معناست که دادهها تا بایت ۱۹۳۴۱ درون این فیلد دادهها قرار دارد – 32 بیت
Acknowledgment number: شماره ترتیبی بایتی است گیرنده بسته برای تأیید به فرستنده ارسال میکند که دادها تا بایت که در این فیلد قرار دارد به درستی دریافت شدهاست. به عنوان مثال اگر در این فیلد عدد ۱۲۳۶۵ قرار گرفته شود به این معنی است که دادها تا بایت ۱۲۳۶۵ صحیح و کامل دریافت شدهاست و در انتظار بایتهای ۱۲۳۶۷ به بعد میباشد – 32 بیت
Length: عددی که در این فیلد قرار میگیرد طول کل سرآیند بسته TCP بر مبنای کلمات ۳۲ بیتی تعیین میکند. به عنوان مثال اگر در این فیلد عدد ۷ قرار بگیرد طول سر آیند بسته برابر است با ۲۸=۷*۴ بایت خواهد بود (این فیلد کلاً چهار بیتی است).
Window size: مقدار قرار گرفته در این فیلد مشخص میکند که مقدار بافر گیرنده چند بایت دیگر فضای خالی دارد.
Checksum: در این فیلد ۱۶ بیتی کد کشف خطا قرار میگیرد.
TCP Segment length: در آن طول کل بسته TCP قرار میگیرد
Pointer: در این فیلد عدد به عنوان اشاره گر قرار میگیرد که موقعیت دادههای اضطراری را درون بسته مشخص میکند. این دادهها زمانی ارسال میشود که عملی شبیه وقوع وقفه در هنگام اجرای یک برنامه کاربردی رخ دهد. بدون آنکه ارتباط قطع شود دادهها درون همین بسته جاری قرار گرفته و ارسال میشود. لازم است ذکر شود که از این فیلد لایههای بالاتر استفاده میکنند.
بیتهای پرچم:
• بیت URG: در صورتی که در این بیت عدد ۱ قرار گیرد معین میشود که در فیلد Urgent Pointer مقدار قابل معتبری قرار دارد و بایستی مورد پردازش قرار گیرد.
• بیت ACK: اگر در این بیت عدد ۱ قرار داشته باشد به این معنا است که در فیلد Acknowledgment number عدد معتبری قرار دارد. بیتهای ACKو SYN نقش دیگری نیز دارند که در ادامه بدان اشاره خواهد شد.
• بیتPSH: اگر این بیت مقدار ۱ قرار گرفته باشد از گیرنده تقاضا میشود که دادههای موجود را بافر نکرده و در اسرع وقت تحویل برنامه کاربردی صاحب آن شود.
• بیت RST: اگر در این بیت عدد ۱ قرار گرفته شود به این معنی است که این ارتباط به صورت یک طرفه خاتمه یافتهاست.
• بیت SYN: این بیت نقش اساسی در ارتباط یک بسته TCP بازی میکند. برقراری ارتباط یک طرفه TCP از روند زیر تبعیت میکند
• شروعکننده ارتباط یک بستهTCP بدون هیچ دادهای و با تنظیم بیتهای ۱= SYN و ACK=۰ تقاضای یک ارتباط جدید میکند
• در صورتی که طرف مقابل تمایل به بر قراری ارتباط داشته باشد برای طرف مقابل یک بسته با قرار دادن بیتهای ۱= SYN و ACK=۱ تمایل خود را برای برقراری ارتباط به طرف مقابل اعلام میکند
• بیت FIN: اگر یکی از طرفین هیچ داده دیگری برای فرستادن نداشته باشد این بیت را در آخرین بسته برابر ۱ قرار میدهد و ارتباط را یک طرفه قطع میکند باید توجه داشته که ارتباط هنوز بهطور کامل قطع نشدهاست و باید طرف مقابل نیز در آخرین بسته خود این فیلد را برابر ۱ قرار داده تا ارتباط کامل قطع شود.
Checksum
در برخی موارد امکان دارد دیتا به صورت معیوب به دست سرویس گیرنده برسد. به همین دلیل بایستی محاسباتی به منظور تایید سلامت دریافت دیتا انجام شود. سرور براساس الگوریتم های مشخص در checksum بروی دیتا محاسباتی را انجام میدهد و نتیجه بدست آمده را در این فیلد قرار میدهد. درخواست دهنده سرویس نیز پس از دریافت همان محاسبات رو بروی داده دریافتی خود انجام میدهد، در صورتیکه محسابات سمت خود با مقدار فیلد checksum برابر باشد، دیتا سالم به دستش رسیده است.