معرفی ساختار بسته TCP : تشریح TCP Packet و فیلدهای بسته

ساختار بسته​هاي پروتکل TCP:

دوره های شبکه، برنامه نویسی، مجازی سازی، امنیت، نفوذ و ... با برترین های ایران
ساختار يک بسته TCP
  • فیلد Source Port: در این فیلد یک شماره 16 بیتی به عنوان ادرس پورت "پروسه مبداء " که این بسته را جهت ارسال تولید کرده، قرار خواهد گرفت.
  • فيلد :Destination Port در این فیلد، ادرس پورت پروسه مقصد یعنی همان پروسهای که ان را تحویل خواهد گرفت، درج خواهد شد. این دو آدرس پورت ، مشخص میکنند که این بسته از چه برنامه کاربردی در لایه بالاتر تولید و باید به چه برنامهای در ماشین مقصد تحویل داده شود.برخی ار پروسههای کاربردی مشهور دارای شماره پورت استاندارد و جهانی هستند: مثلا سرویس دهنده پست الکترونیکی دارای شماره پورت 25 و شماره پورت سرویس دهنده وب عموما 80 است.
  • فيلد Sequence Number: این فیلد 32 بیتی، شماره ترتیب اخرین بایتی را که در "فیلد داده" از بسته جاری قرار دارد، نشان میدهد. در پروتکل TCP شماره ترتیب، بر حسب شماره اخرین بایتی است که در بسته جاری قرار گرفته و ارسال شده است.

مثلا اگر در این فیلد عدد 19341 درج شود بدین معنی است که دادهها تا بایت شماره 19341 درون فیلد داده قرار دارد.دقت کنيد که اين عدد به معناي ان نيست که بايت در اين بسته قرار داده شده است، بلکه به شماره اخرين بايت داده اشاره دارد.

  • فيلد :Acknowledgement Number  : این فیلد 32 بیتی نیز شماره ترتیب بایتی که فرستنده بسته منتظر دریافت ان استرا تعیین میکند. به عنوان مثال اگر در این فیلد عدد 342311 قرار گرفته باشد بدین معناست که از رشته دادهها (که با این عدد مشخص نمیشود چند بایت است) تا شماره 342310 صحیح و کامل دریافت شده و منتظر بایتهای از 342311 به بعد است.
  • فيلد TCP Header Length: عددی که در این فیلد قرار میگیرد، طول سرایند بسته TCP را بر مبنای کلمات 32 بیتی تعیین میکند. به عنوان مثال اگر در این فیلد عدد 7 قرار بگیرد طول سرایند مقدار 28=4*7 بایت خواهد بود.
  • 6 بیت بلا استفاده : پس از فیلد TCP Header Length شش بیت بلااستفاده رها شده است که شاید برای استفاده در اینده رزرو شده اند.
  • بيتهاي Flag : شش بيت بعدي در بسته TCP هر کدام نقش يک بيت پرچم را که معنا و کاربرد مختلفي دارند را بازي ميکنند. پس تک تک بيت ها و معناي ان ها را بررسي ميکنيم:
  • بیت URG : در این صورتی که این بیت مقدار 1 داشته باشد، معین میکند که در فیلد Urgent Pointer که در ادامه معرفی خواهد شد مقداری قابل استناد و معتبر قرار دارد و بایستی مورد پردازش قرار گیرد. در این صورتی که این بیت صفر باشد فیلدUrgent Pointer شامل مقدار معتبر و قابل استنادی نیست و از ان چشم پوشی می شود.
  • بیت ACK :اگر در این بیت مقدار 1 قرار گرفته باشد، نشان میدهد که عددی که در فیلد Acknowledgement Number قرار گرفته است، دارای مقدار معتبر و قابل استناد است، بیت ACK و SYN برای برقراری یک اتصال TCP نیز به کار میاید.
  • بيت PSH (PUSH) : اگر در اين بيت مقدار 1 قرار گرفته باشد فرستنده اطلاعات از گيرنده تقاضا مينمايد که دادههاي موجود در اين بسته را بافر نکند و در اسرع وقت ان را جهت پردازشهاي بعدي تحويل برنامه کاربردي صاحب ان بدهد. اين عمل گاهي براي برنامههاي مشابه Telnet ضروري است.
  • بیت RST : اگر در این بیت مقدار 1 قرار بگیرد ارتباط به صورت یکطرفه و ناتمام قطع خواهد شد. بدین معنا که به هر دلیلی (اعم از لحاظ سخت افزاری و نرم افزاری) اشکالی بوجود امده که یکی از طرفین اعتبار اشکالی بوجود امده که یکی از طرفین ارتباط مجبور به خاتمه ارتباط فعلی شده است. همچنین بیت RST میتواند به عنوان علامت عدم پذیرش برقراری ارتباط به کار برود. اگر يکي از طرفين ارتباط يک بسته دريافت کند که در ان بيت RST مقدار 1 داشته باشد، ارتباط به صورت ناهماهنگ و نامتعادل، قطع خواهد شد.
  • بيت SYN : اين بيت نقش اساسي در برقراري يک ارتباط بازي ميکند، برقراري يک ارتباط TCP از روند زير تبعيت ميکند:

الف: شروع کننده ارتباط یک بسته TCP بدون هیچگونه داده و با تنظیم بیتهای (ACK=0,SYN=1) برای طرف مقابل ارسال میکند. در حقیقت ارسال چنین بستهای به معنای "تقاضای برقراری تماس" Connection Request تلقی میشود.

ب: در پاسخ به درخواست تماس، در صورتي که طرف مقابل به برقراري ارتباط تمايل داشته باشد بستهاي برميگرداند که در ان بيت SYN=1 و بیت ACK=1 است. این بسته نقش "پذیرش یک تماس" Connection Accept را بازی میکند.

  • بیت FIN : اگر یکی از طرفین ارتباط، داده دیگری برای ارسال نداشته باشد در هنگام ارسال اخرین بسته خود این بیت را 1 میکند و در حقیقت ارسال اطلاعات خودش را یک طرفه قطع میکند. در این حالت اگر چه ارسال اطلاعات قطع شده ولیکن طرف مقابل ممکن است هنوز به ارسال اطلاعات مشغول باشد. زمانی ارتباط کاملا خاتمه مییابد که طرف مقابل نیز در یک بسته با 1 کردن بیت FIN ارسال اطلاعات را خاتمه بدهد.
  • فیلد Windows Size :مقدار قرار گرفته در این فیلد مشخص میکند که فضای بافر گیرنده چند بایت دیگر ظرفیت خالی دارد. یعنی به طرف مقابل اعلام میکند که مجاز است از بایت با شماره ترتیبی که در فیلد Acknowledgement مشخص شده است، حداکثر به اندازه مقداری که در این فیلد درج شده، ارسال داشته باشد و در غیر این صورت فضای کافی برای دریافت دادهها وجود نداشته و ناگریز دور ریخته خواهد شد. اگر مقدار این فیلد صفر باشد به این معناست که بافر گیرنده تماما پر شده است و امکان دریافت دادههای بعدی وجود ندارد و طبعا پروسه فرستنده متوقف خواهد شد.
  • فيلد Checksum : در اين فيلد 16 بيتي، کد کشف خطاي کل بسته قرار ميگيرد که مبتني بر يک جمع ساده است.
  • فيلد Urgent Pointer :در اين فيلد يک عدد به عنوان اشاره قرار ميگيرد که موقعيت دادههاي اظطراري را درون بسته TCP معين ميکند. توليد اين دادهها، زماني اتفاق ميافتد که عملي شبيه وقوع وقفهها در هنگام اجراي يک برنامه کاربردي رخ بدهد. بدون انکه ارتباط قطع شود دادههاي لازم در همين بسته جاري ارسال خواهد شد. دقت کنيد که دادههاي اظطراري توسط برنامه کاربردي درلايه بالاتر پردازش خواهد شد. و براي پروتکل TCP کاربردي ندارد.
  • فيلد Option :اين فيلد اختياري است و مقداري نظير حداکثر طول بسته TCP در ان قرار ميگيرد. گزينه خاص ديگري در اين فيلد تعريف نشده است.

موفق باشيد.

مرتضي پاک نيت

#فيلد #بيت #ساختار_يک_بسته_tcp


مرتضی  پاک نیت
مرتضی پاک نیت

"کلام صادقانه نفوذ دارد" با صداقت به پیروزی خواهیم رسید""النجات و فی صدق" http://matlabtehran.blog.ir کانال آموزشی ما در آپارات: http://www.aparat.com/farscoders کانال ما در تلگرام: telegram.me/freelanceri

نظرات