در این قسمت به بررسی سرآیند یک بسته ی TCP و فیلدهای آن پرداخته میشود. شکل 3 نمایش دهنده ی ساختار بسته ی TCP است.در ادامه کاربرد هر کدام از فیلدهای بسته ی TCP مشخص شده است
ساختار بسته TCP
فیلد Source port : یک شماره ی 16 بیتی مشخص کننده ی برنامه ی کاربردی (یا پروسه (Process)) اجرا شده در سیستم انتهایی مبدأ است.
فیلد Destination port : یک شماره ی 16 بیتی مشخص کننده ی برنامه ی کاربردی اجرا شده در سیستم انتهایی مقصد است.
فیلد Sequence number: این فیلد 32 بیتی است و شماره ی ترتیب اولین بایتی را که در”فیلد داده” از بسته ی جاری قرار دارد نشان میدهد. به طور مثال اگر مقدار این فیلد در یک بسته ی TCP برابر با 287 باشد، بدین معناست که دادهها تا بایت 286 در بسته های قبلی به سمت مقصد ارسال شده اند و داده ی موجود در بسته ی جاری از بایت 287 ام از داده ی تولید شده توسط برنامه ی کاربردی آغاز میشود. لازم به ذکر است که بهتر است مقدار این فیلد در آغاز ارتباط از صفر شروع نشود و یک مقدار تصافی به جای آن انتخاب گردد (به منظور پیشگیری از برخی حملات امنیتی).
فیلد Acknowledgement number : این فیلد 32 بیتی شماره ی ترتیب بایتی را که فرستنده ی بسته منتظر آن است مشخص میکند. به عنوان مثال اگر در این فیلد مقدار این فیلد برابر با 2921 باشد، به این معنی است که تا بایت 2920 ام به درستی تحویل داده شده است و گیرنده منتظر بایت 2921 ام است.
فیلد Header length : این فیلد طول سرآیند بسته ی TCP را بر مبنای کلمات 32 بیتی تعیین میکند. این فیلد ۴ بیتی است. همانطور که در شکل 3 مشاهده میشود طول قسمت اجباری سرآیند 20 بایت است و با توجه به اینکه بخش Options از اندازه ی متغیری برخوردار است، این فیلد میتواند به منظور تعیین محل شروع داده ها بکار رود.
فیلد Receive window : مقدار مشخص شده در این فیلد ظرفیت باقیمانده از بافر گیرنده را مشخص مینماید. این فیلد حداکثر اندازهی مجاز داده ی ارسال شده توسط فرستنده را مشخص میکند، زیرا در صورت بیشتر بودن اندازه ی بسته، به ناچار دور انداخته میشود.
فیلد Checksum : یک کد کشف خطای 16 بیتی است. نحوه ی محاسبه ی آن اندکی متفاوت از روشهای معمول است:
همانند قبل کل بسته ی TCP شامل قسمت سرآیند و قسمت داده دوبایت دوبایت و در قالب کلمات 16 بیتی در نظر گرفته میشوند.
یک سرآیند فرضی که در بسته ی TCP وجود ندارد با قالب مشخص شده در شکل 2 ساخته شده و آن نیز به صورت کلمات 16 بیتی در نظر گرفته میشود. این سرآیند فرضی شامل 32 بیت آدرس IP مربوط به سیستم انتهایی مبدأ، 32 بیت آدرس IP مربوط به سیستم انتهایی مقصد، یک فیلد ۸ بیتی کاملاً صفر، فیلد ۸ بیتی پروتکل که برای پروتکل TCP برابر با مقدار 6 است و فیلد TCP Segment Length (مشخص کننده ی طول کل بسته ی TCP ) است.
سپس تمام کلمات ایجاد شده برای محاسبهی checksum بر اساس محاسبات مکمل 1 بکار گرفته میشوند.
فیلد Urgent Pointer : مقدار موجود در این فیلد موقعیت داده های اضطراری را درون بسته ی TCP معین میکند.
فیلد Options : این فیلد اختیاری است و شامل گزینه های اضافی میباشد.
بیت های Flag در بسته tcp
بیت URG : اگر مقدار این فیلد 1 باشد، مشخص میشود که در فیلد Urgent data pointer یک مقدار معتبر قرار دارد که باید مورد پردازش قرار بگیرد.
بیت ACK : مقدار 1 برای این پرچم (Flag)مشخص میکند که مقدار موجود در فیلد Acknowledgement number مقداری معتبر است.
بیت PSH : مقدار 1 در این فیلد مشخص کننده ی تقاضای فرستنده از گیرنده مبنی بر بافر نکردن داده ی موجود در بسته و ارسال سریع آن به لایه ی بالاتر میباشد.
بیت RST : بسته های RST در این پروتکل به منظور قطع ارتباط به صورت یکطرفه بکار میروند. به این معنا که یکی از طرفین ارتباط مجبور به خاطمه ی ارتباط فعلی شده است. همچنین، بیت RST میتواند به عنوان علامت عدم پذیرش یک ارتباط مورد استفاده قرار بگیرد.
بیت SYN : یکی از علامتهای آغاز ارتباط TCP است که در ادامه به طور مفصلتر مورد بررسی قرار خواهد گرفت.
بیت FIN : اگر یکی از طرفین داده ی دیگری برای ارسال نداشته باشد، همراه با آخرین بسته ی خود این پرچم را 1 میکند و ارتباط را به صورت یکطرفه قطع مینماید. اما ارتباط زمانی به طور کامل قطع میشود که طرف مقابل نیز ارسال دادههای خود را به پایان برساند و یک بسته شامل فیلد FIN برابر با 1 را ارسال کند.