قرارداد هدایت انتقال،[۱] یا TCP (به انگلیسی: Transmission Control Protocol) که همچنین قرارداد کنترل انتقال یا پروتکل کنترل انتقالنیز گفته میشود؛ مجموعهای از پروتکلهای قراردادی است که پایه و اساس اینترنت میباشد.
TCP/IP(بر اساس IPv4) شامل چهار لایهاست:
- لایه واسط شبکه (Network Interface Physical)
- لایه ارتباط اینترنتی یا اینترنت (اینترنت)
- لایه ارتباطات میزبان به میزبان یا انتقال (ترابری)
- لایه سرویسهای کاربردی (Application)
برای برقراری یک ارتباط گفتاری بوسیله اینترنت، در لایه انتقال از دو پروتکل TCP و UDP استفاده میشود. پروتکل TCP انتقال داده را با دقت و امنیت بالا انجام میدهد در حالیکه ویژگی پروتکل UDP انتقال سریع اطلاعات، بدون در نظر گرفتن مسائل امنیتی برای انتقال داده است.
ساختاره بستههای پروتکل TCP
در این قسمت ساختار یک بسته TCP را تشریح خواهیم کرد
- فیلد source port: این فیلد ۱۶ بیتی آدرس پورت فرستنده را به همراه دارد
- فیلد destination port: این فیلد ۱۶ بیتی آدرس پورت مقصد را که باید تحویل شود را دارا است.
- فیلدSequence Number: این فیلد سی ودو بیتی شماره ترتیب آخرین بایتی را که در فیلد داده از بسته جاری قرار دارد را نشان میدهد.
در پرتکل TCP شماره ترتیب، بر حسب شماره آخرین بایتی است که در بسته جاری قرار دارد. به عنوان مثال اگر در این فیلد عدد ۱۹۳۴۱ قرار بگیرد به این معناست که دادهها تا بایت ۱۹۳۴۱ درون این فیلد دادهها قرار دارد.
فیلد Acknowledgment number: این فیلد ۳۲ بیتی شماره ترتیبی بایتی است گیرنده بسته برای تأیید به فرستنده ارسال میکند که دادها تا بایت که در این فیلد قرار دارد به درستی دریافت شدهاست. به عنوان مثال اگر در این فیلد عدد ۱۲۳۶۵ قرار گرفته شود به این معنی است که دادها تا بایت ۱۲۳۶۵ صحیح و کامل دریافت شدهاست و در انتظار بایتهای ۱۲۳۶۷ به بعد میباشد.
فیلد قرارداد هدایت انتقال Length: عددی که در این فیلد قرار میگیرد طول کل سرآیند بسته TCP بر مبنای کلمات ۳۲ بیتی تعیین میکند. به عنوان مثال اگر در این فیلد عدد ۷ قرار بگیرد طول سر آیند بسته برابر است با ۲۸=۷*۴ بایت خواهد بود (این فیلد کلاً چهار بیتی است).
بیتهای پرچم: • بیت URG: در صورتی که در این بیت عدد ۱ قرار گیرد معین میشود که در فیلد Urgent Pointer مقدار قابل معتبری قرار دارد و بایستی مورد پردازش قرار گیرد. • بیت ACK: اگر در این بیت عدد ۱ قرار داشته باشد به این معنا است که در فیلد Acknowledgment number عدد معتبری قرار دارد. بیتهای ACKو SYN نقش دیگری نیز دارند که در ادامه بدان اشاره خواهد شد. • بیتPSH: اگر این بیت مقدار ۱ قرار گرفته باشد از گیرنده تقاضا میشود که دادههای موجود را بافر نکرده و در اسرع وقت تحویل برنامه کاربردی صاحب آن شود. • بیت RST: اگر در این بیت عدد ۱ قرار گرفته شود به این معنی است که این ارتباط به صورت یک طرفه خاتمه یافتهاست. • بیت SYN: این بیت نقش اساسی در ارتباط یک بسته TCP بازی میکند. برقراری ارتباط یک طرفه TCP از روند زیر تبعیت میکند • شروعکننده ارتباط یک بستهTCP بدون هیچ دادهای و با تنظیم بیتهای ۱= SYN و ACK=۰ تقاضای یک ارتباط جدید میکند • در صورتی که طرف مقابل تمایل به بر قراری ارتباط داشته باشد برای طرف مقابل یک بسته با قرار دادن بیتهای ۱= SYN و ACK=۱ تمایل خود را برای برقراری ارتباط به طرف مقابل اعلام میکند • بیت FIN: اگر یکی از طرفین هیچ داده دیگری برای فرستادن نداشته باشد این بیت را در آخرین بسته برابر ۱ قرار میدهد و ارتباط را یک طرفه قطع میکند باید توجه داشته که ارتباط هنوز بهطور کامل قطع نشدهاست و باید طرف مقابل نیز در آخرین بسته خود این فیلد را برابر ۱ قرار داده تا ارتباط کامل قطع شود.
فیلد Window size: مقدار قرار گرفته در این فیلد مشخص میکند که مقدار بافر گیرنده چند بایت دیگر فضای خالی دارد.
فیلد Checksum: در این فیلد ۱۶ بیتی کد کشف خطا قرار میگیرد
فیلد TCP Segment length: در آن طول کل بسته TCP قرار میگیرد
فیلدUrgent Pointer: در این فیلد عدد به عنوان اشاره گر قرار میگیرد که موقعیت دادههای اضطراری را درون بسته مشخص میکند. این دادهها زمانی اتفاق میافتد و ارسال میشود که عملی شبیه وقوع وقفه در هنگام اجرای یک برنامه کاربردی رخ دهد. بدون آنکه ارتباط قطع شود دادهها درون همین بسته جاری قرار گرفته و ارسال میشود. لازم است ذکر شود که از این فیلد لایههای بالاتر استفاده میکنند.