تکنولوژی

ساختار بسته های پروتکل TCP

ساختار بسته های پروتکل TCP

در زیر ساختار یک بستۀ TCP به تصویر کشیده شده است.

فیلد Source Port : در این فیلد یک شمارۀ 16 بیتی بعنوان آدرس پورت پروسۀ مبدأ (که این بسته را جهت ارسال تولید کرده) ، قرار خواهد گرفت.

فیلد Destination Port : در این فیلد ، آدرس پورتِ پروسۀ مقصد که آنرا تحویل خواهد گرفت، تعیین خواهد شد . همانگونه که در بخش قبلی اشاره شد این دو آدرس مشخص میکنند که این بستۀ از چه برنامۀ کاربردی در لایه بالاتر تولید و باید به چه برنامه ای در ماشین مقصد تحویل داده شود. برخی از پروسه های کاربردی و استاندارد دارای شماره پورت استاندارد و جهانی هستند؛ مثلاًُ سرویس دهنده پست الکترونیکی دارای شماره پورت 25 است.

فیلد Sequence Number : این فیلد سی و دو بیتی ، شمارۀ ترتیب آخرین بایتی را که در ”فیلد داده“از بستۀ جاری قرار دارد ، نشان میدهد. در پروتکل TCP شمارۀ ترتیب ، بر حسب شمارۀ آخرین بایتی است که در بستۀ جاری قرار گرفته و ارسال شده است. بعنوان مثال اگر در این فیلد عددی معادل 19341 قرار بگیرد به این معناست که داده ها تا بایت شمارۀ 19341 درون فیلد داده قرار دارد . دقت کنید که این عدد بمعنای آن نیست که به تعدادِ 19341 بایت ، درون قسمت داده قرار دارد ، بلکه همیشه به شمارۀ ترتیب آخرین بایت داده ، اشاره مینماید. یعنی ممکن است که کلاً درون فیلد داده فقط یک بایت قرار داشته باشد در حالی که در فیلد شمارۀ ترتیب عدد 19341 قرار داشته باشد. دقّت شود که شمارۀ ترتیبِ اولین بایت ، از صفر شروع نمیشود بلکه از یک عدد تصادفی که در هنگام برقراری ارتباط به اطلاع طرفین میرسد ، شروع خواهد شد.

فیلد Acknowledgment Number : این فیلد 32 بیتی نیز شمارۀ ترتیب بایتی که فرستندۀ بسته منتظرِ دریافت آن است را تعیین میکند. بعنوان مثال اگر دراین فیلد عددی معادل 342310 قرار گرفته باشد بدین معناست که از رشته داده ها (که مشخص نیست چند بایت است) تا شماره 342310 صحیح و کامل دریافت شده است و منتظر بایت های از 342311 به بعد میباشد

فیلد TCP Header Length : عددی که در این فیلد قرار میگیرد ، طول سرآیند بستۀ TCP را بر مبنای کلمات 32 بیتی تعیین میکند . بعنوان مثال اگر در این فیلد عدد 7 قرار بگیرد طول سرآیند مقدار 28 = 7 * 4 بایت خواهد بود. ( این فیلد کلاً چهار بیتی است ) دقّت کنید که قسمت ثابت و اجباری در یک بستۀ TCp حداقل 20 بایت است ولی در فیلد اختیاری option میتواند اطلاعاتی قرار بگیرد و بنابراین گیرندۀ یک بستۀ TCP باید بتواند مرز بین سرآیندِ بسته و قسمت داده را تشخیص بدهد . پس عددی که در این فیلد قرار میگیرد میتواند بعنوان یک ”اشاره گر“ ، محل شروع داده ها را در یک بستۀ TCP تعیین کند (توجه دارید که مبنای این عدد کلمات 32 بیتی ( چهار بایتی ) هستند)

بیت های (Code Bits) Flag : شش بیت بعدی در بستۀ TCP هر کدام نقش یک بیت پرچم را که معنا و کاربرد مختلفی دارند را بازی میکنند.

بیت URG : در صورتی که این بیت مقدار 1 داشته باشد ، معین میکند که در فیلد Urgent ​​​​​​Pointer​​​​​​ مقداری قابل استناد و معتبر قرار دارد و بایستی مورد پردازش قرار گیرد . درصورتی که این بیت صفر باشد فیلد Urgent Pointer شامل مقدار معتبر و قابل استنادی نیست و از آن چشمپوشی میشود.

بیت ACK : اگر در این بیت مقدار 1 قرار گرفته باشد ، نشان میدهد که عددی که در فیلد Acknowledgement Number قرار گرفته است ، دارای مقداری معتبر و قابل استناد است .

بیت PSH : اگر در این بیت مقدار 1 قرار گرفته باشد فرستندۀ اطلاعات از گیرنده تقاضا میکند که داده های موجود در این بسته را بافر نکند و در اسرع وقت آنرا جهت پردازش های بعدی تحویل برنامۀ کاربردی صاحب آن بدهد. این عمل گاهی برای برنامه هائی مشابه Telnet ضروری است.

بیت RST : اگر در این بیت مقدار 1 قرار بگیرد ارتباط بصورت یکطرفه و ناتمام قطع خواهد شد ، بدین معنا که به هر دلیلی ( اعم از نقص سخت افزاری یا نرم افزاری) اشکالی بوجود آمده که یکی از طرفین ارتباط مجبور به خاتمه ارتباط فعلی شده است. همچنین بیت RST میتواند بعنوان علامت عدم پذیرش برقراری ارتباط بکار برود.اگر یکی از طرفین ارتباط یک بسته دریافت کند که در آن بیت RST مقدار 1 داشته باشد ، ارتباط بصورت ناهماهنگ و نامتعادل ، قطع خواهد شد.

بیت SYN : این بیت نقش اساسی در برقراری یک ارتباط بازی میکند . برقراریِ یک ارتباط TCP از روند زیر تبعیت میکند:

  1. شروع کننده ارتباط یک بستۀ TCP بدون هیچگونه داده و با تنظیم بیت های (ACK=0, SYN=1) ، برای طرف مقابل ارسال میکند . در حقیقت ارسال چنین بسته ای به معنای ”تقاضای برقراری ارتباط“ تلقی میشود.
  2. در پاسخ به درخواست ارتباط ، در صورتیکه طرف مقابل به برقراری ارتباط تمایل داشته باشد بسته ای بر میگرداند که در آن بیت SYN = 1 و ACK=1 است . این بسته نقش ”پذیرش یک ارتباط“ را بازی میکند.

بیت FIN : اگر یکی از طرفین ارتباط ، داده دیگری برای ارسال نداشته باشد در هنگام ارسال آخرین بستۀ خود این بیت را 1 میکند و در حقیقت ارسال اطلاعات خودش را یکطرفه قطع میکند. در این حالت اگر چه ارسال اطلاعات قطع شده و لیکن طرف مقابل هنوز ممکن است به ارسال اطلاعات مشغول باشد. زمانی ارتباط کاملاً خاتمه مییابد که طرف مقابل نیز در یک بسته با 1 کردن بیت FIN ، ارسال اطلاعات را خاتمه بدهد.

بیت Windows Size : مقدار قرار گرفته در این فیلد مشخص میکند که فضای بافرِ گیرنده چند بایت دیگر ظرفیت خالی دارد. یعنی به طرف مقابل اعلام میکند که مجاز است از بایت با شمارۀ ترتیبی که در فیلد Acknowledgement مشخص شده است، حداکثر به اندازۀ مقداری که در این فیلد درج شده ، ارسال داشته باشد و در غیر اینصورت فضای کافی برای دریافت دادهها وجود نداشته و ناگزیر دور ریخته خواهد شد. اگر مقدار این فیلد صفر باشد بدین معناست که بافر گیرنده تماماً پر شده است و امکان دریافت داده های بعدی وجود ندارد و پروسۀ فرستنده متوقف خواهد شد؛ در این مورد نیز بیشتر توضیح خواهیم داد.

فیلد Checksum : در این فیلد 16 بیتی ، کد کشف خطا قرار میگیرد.

فیلد TCP Segment Length که در آن طول کل بستۀ TCP مشخص میشود.

فیلد Urgent Pointer : در این فیلد یک عدد بعنوان اشاره گر قرار میگیرد که موقعیت داده های اضطراری را درون بستۀ TCP​​​​​​​ معین میکند . این دادهها ، زمانی اتفاق میافتند و ارسال میشوند که​​​​​​​ عملی شبیه وقوع وقفه ها در هنگام اجرای یک برنامۀ کاربردی رخ بدهد. بدون آنکه ارتباط قطع شود داده های لازم در همین بستۀ جاری ارسال خواهد شد. دقّت کنید که دادههای اضطراری توسط برنامۀ کاربردی در لایۀ بالاتر پردازش خواهد شد و برای پروتکل TCP کاربردی ندارد.

فیلد Options : در این فیلد اختیاری است و مقداری نظیر حداکثر طول بستۀ TCP در آن قرار میگیرد. برای آنکه طول بسته ضریبی از 4 باقی بماند از این فیلد با کدهای بی ارزش استفاده میشود. گزینۀ خاص دیگری در این فیلد تعریف نشده است.

محمد

محمد

برنامه نویس و کارشناس شبکه
دیدن ادامه مقالات

کارشناس شبکه و نرم افزار


برای ارسال دیدگاه لطفا ثبت نام کنید

نظرات کاربران