پروتکل هدایت انتقال
ساختار بسته‌های پروتکل 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 از روند زیر تبعیت می‌کند:
1. شروع‌کننده ارتباط یک بستهTCP بدون هیچ داده‌ای و با تنظیم بیتهای ۱= SYN و ACK=۰ تقاضای یک ارتباط جدید می‌کند.
2. در صورتی که طرف مقابل تمایل به برقراری ارتباط داشته باشد برای طرف مقابل یک بسته با قرار دادن بیتهای ۱= SYN و ACK=۱ تمایل خود را برای برقراری ارتباط به طرف مقابل اعلام می‌کند.
•  بیت FIN: اگر یکی از طرفین هیچ داده دیگری برای فرستادن نداشته باشد این بیت را در آخرین بسته برابر ۱ قرار می‌دهد و ارتباط را یک طرفه قطع می‌کند باید توجه داشت که ارتباط هنوز به‌طور کامل قطع نشده‌است و باید طرف مقابل نیز در آخرین بسته خود این فیلد را برابر ۱ قرار داده تا ارتباط کامل قطع شود.
فیلد Window size: مقدار قرار گرفته در این فیلد مشخص می‌کند که مقدار بافر گیرنده چند بایت دیگر فضای خالی دارد.
فیلد Checksum: در این فیلد ۱۶ بیتی کد کشف خطا قرار می‌گیرد
فیلد TCP Segment length: در آن طول کل بسته TCP قرار می‌گیرد
فیلدUrgent Pointer: در این فیلد عدد به عنوان اشاره گر قرار می‌گیرد که موقعیت داده‌های اضطراری را درون بسته مشخص می‌کند. این داده‌ها زمانی اتفاق می‌افتد و ارسال می‌شود که عملی شبیه وقوع وقفه در هنگام اجرای یک برنامه کاربردی رخ دهد. بدون آنکه ارتباط قطع شود داده‌ها درون همین بسته جاری قرار گرفته و ارسال می‌شود. لازم است ذکر شود که از این فیلد، لایه‌های بالاتر استفاده می‌کنند.
| Offsets> Octet | Octet> بیت (رایانه) | ۰>  0 | ۰>  1 | ۰>  2 | ۰>  3 | ۰>  4 | ۰>  5 | ۰>  6 | ۰>  7 | ۱>  8 | ۱>  9 | ۱> ۱۰ | ۱> ۱۱ | ۱> ۱۲ | ۱> ۱۳ | ۱> ۱۴ | ۱> ۱۵ | ۲> ۱۶ | ۲> ۱۷ | ۲> ۱۸ | ۲> ۱۹ | ۲> ۲۰ | ۲> ۲۱ | ۲> ۲۲ | ۲> ۲۳ | ۳> ۲۴ | ۳> ۲۵ | ۳> ۲۶ | ۳> ۲۷ | ۳> ۲۸ | ۳> ۲۹ | ۳> ۳۰ | ۳> ۳۱ |
| --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- |
| ۰ |   0 | Source port | Source port | Source port | Source port | Source port | Source port | Source port | Source port | Source port | Source port | Source port | Source port | Source port | Source port | Source port | Source port | Destination port | Destination port | Destination port | Destination port | Destination port | Destination port | Destination port | Destination port | Destination port | Destination port | Destination port | Destination port | Destination port | Destination port | Destination port | Destination port |
| ۴ |  32 | Sequence number | Sequence number | Sequence number | Sequence number | Sequence number | Sequence number | Sequence number | Sequence number | Sequence number | Sequence number | Sequence number | Sequence number | Sequence number | Sequence number | Sequence number | Sequence number | Sequence number | Sequence number | Sequence number | Sequence number | Sequence number | Sequence number | Sequence number | Sequence number | Sequence number | Sequence number | Sequence number | Sequence number | Sequence number | Sequence number | Sequence number | Sequence number |
| ۸ |  64 | Acknowledgment number (if ACK set) | Acknowledgment number (if ACK set) | Acknowledgment number (if ACK set) | Acknowledgment number (if ACK set) | Acknowledgment number (if ACK set) | Acknowledgment number (if ACK set) | Acknowledgment number (if ACK set) | Acknowledgment number (if ACK set) | Acknowledgment number (if ACK set) | Acknowledgment number (if ACK set) | Acknowledgment number (if ACK set) | Acknowledgment number (if ACK set) | Acknowledgment number (if ACK set) | Acknowledgment number (if ACK set) | Acknowledgment number (if ACK set) | Acknowledgment number (if ACK set) | Acknowledgment number (if ACK set) | Acknowledgment number (if ACK set) | Acknowledgment number (if ACK set) | Acknowledgment number (if ACK set) | Acknowledgment number (if ACK set) | Acknowledgment number (if ACK set) | Acknowledgment number (if ACK set) | Acknowledgment number (if ACK set) | Acknowledgment number (if ACK set) | Acknowledgment number (if ACK set) | Acknowledgment number (if ACK set) | Acknowledgment number (if ACK set) | Acknowledgment number (if ACK set) | Acknowledgment number (if ACK set) | Acknowledgment number (if ACK set) | Acknowledgment number (if ACK set) |
| ۱۲ |  96 | Data offset | Data offset | Data offset | Data offset | Reserved 0 0 0 | Reserved 0 0 0 | Reserved 0 0 0 | N S | C W R | E C E | U R G | A C K | P S H | R S T | S Y N | F I N | Window Size | Window Size | Window Size | Window Size | Window Size | Window Size | Window Size | Window Size | Window Size | Window Size | Window Size | Window Size | Window Size | Window Size | Window Size | Window Size |
| ۱۶ | ۱۲۸ | Checksum | Checksum | Checksum | Checksum | Checksum | Checksum | Checksum | Checksum | Checksum | Checksum | Checksum | Checksum | Checksum | Checksum | Checksum | Checksum | Urgent pointer (if URG set) | Urgent pointer (if URG set) | Urgent pointer (if URG set) | Urgent pointer (if URG set) | Urgent pointer (if URG set) | Urgent pointer (if URG set) | Urgent pointer (if URG set) | Urgent pointer (if URG set) | Urgent pointer (if URG set) | Urgent pointer (if URG set) | Urgent pointer (if URG set) | Urgent pointer (if URG set) | Urgent pointer (if URG set) | Urgent pointer (if URG set) | Urgent pointer (if URG set) | Urgent pointer (if URG set) |
| ۲۰ ... | ۱۶۰ ... | Options (if Data Offset > 5, padded at the end with "0" bytes if necessary) ... | Options (if Data Offset > 5, padded at the end with "0" bytes if necessary) ... | Options (if Data Offset > 5, padded at the end with "0" bytes if necessary) ... | Options (if Data Offset > 5, padded at the end with "0" bytes if necessary) ... | Options (if Data Offset > 5, padded at the end with "0" bytes if necessary) ... | Options (if Data Offset > 5, padded at the end with "0" bytes if necessary) ... | Options (if Data Offset > 5, padded at the end with "0" bytes if necessary) ... | Options (if Data Offset > 5, padded at the end with "0" bytes if necessary) ... | Options (if Data Offset > 5, padded at the end with "0" bytes if necessary) ... | Options (if Data Offset > 5, padded at the end with "0" bytes if necessary) ... | Options (if Data Offset > 5, padded at the end with "0" bytes if necessary) ... | Options (if Data Offset > 5, padded at the end with "0" bytes if necessary) ... | Options (if Data Offset > 5, padded at the end with "0" bytes if necessary) ... | Options (if Data Offset > 5, padded at the end with "0" bytes if necessary) ... | Options (if Data Offset > 5, padded at the end with "0" bytes if necessary) ... | Options (if Data Offset > 5, padded at the end with "0" bytes if necessary) ... | Options (if Data Offset > 5, padded at the end with "0" bytes if necessary) ... | Options (if Data Offset > 5, padded at the end with "0" bytes if necessary) ... | Options (if Data Offset > 5, padded at the end with "0" bytes if necessary) ... | Options (if Data Offset > 5, padded at the end with "0" bytes if necessary) ... | Options (if Data Offset > 5, padded at the end with "0" bytes if necessary) ... | Options (if Data Offset > 5, padded at the end with "0" bytes if necessary) ... | Options (if Data Offset > 5, padded at the end with "0" bytes if necessary) ... | Options (if Data Offset > 5, padded at the end with "0" bytes if necessary) ... | Options (if Data Offset > 5, padded at the end with "0" bytes if necessary) ... | Options (if Data Offset > 5, padded at the end with "0" bytes if necessary) ... | Options (if Data Offset > 5, padded at the end with "0" bytes if necessary) ... | Options (if Data Offset > 5, padded at the end with "0" bytes if necessary) ... | Options (if Data Offset > 5, padded at the end with "0" bytes if necessary) ... | Options (if Data Offset > 5, padded at the end with "0" bytes if necessary) ... | Options (if Data Offset > 5, padded at the end with "0" bytes if necessary) ... | Options (if Data Offset > 5, padded at the end with "0" bytes if necessary) ... |