وبلاگ جوجه مهندس ها

یادداشت های دو دانشجوی مهندسی کامپیوتر

وبلاگ جوجه مهندس ها

یادداشت های دو دانشجوی مهندسی کامپیوتر

مقایسه TCP و UDP _قسمت اول

TCP_IP

TCP و UDP دو پروتکل معمول لایه انتقال یا همون Transport Layer در مدل TCP/IP است. که الان می خواهیم تفاوت این دو تا رو یادبگیریم.

 

TCP

TCP از حروف اول کلمات Transmission Control Protocol  گرفته شده  و یکی از پروتکلهای اصلی در شبکه های مبتنی بر TCP/IP است.

TCP برقرارای ارتباط بین دو هاست و انتقال داده بین اون ها رو برقرار و صحت انجام این کار رو ضمانت می کنه .

TCP در RFC 793 به طور کامل تشریح شده. و سه ویژگی رو برای اون ذکر کرده :

Connection Oriented

Reliable

Stream Oriented

یک پروتکل اتصال گرا (Connection Oriented) یعنی قبل از اتقال واقعی داده بین دو هاست باید ارتباط بین آن ها برقرار یا اصطلاحا باز شود. ارتباط به صورت full duplex است یعنی ارسال و دریافت داده ها بر روی یک خط ارتباطی میسر است. همچنین پس از انتقال داده باید این اتصال رو بست تا منابع سیستم آزاد بشه. هر دو هاستی که در دو سمت این اتصال قرار دارند از باز بودن و شروع اتصال و همچنین از پایان آن اطلاع دارند. و انتقال داده ها بدون توافق طرفین اتصال بر برقراری اتصال امکان پذیر نیست.

Reliable یعنی قابل اعتماد. به این مفهوم که صحت ارسال و دیافت داده ها رو تضمین می کنه.

Stream Oriented  یعنی داده ها به صورت رشته ای از بایت ها انتقال می یابند و هیچ چیز قابل مشهود برای مشخص کردن حدود داده وجود ندارد. گیرنده هیچ اطلاعی از چگونگی داده های اولیه که ارسال شده ندارد .ممکن است فرستنده داده را در قالب چندین قطعه کوچک بفرستد و گیرنده تنها یک رشته بزرگ از داده ها را دریافت کند و یا برعکس. فرستنده یک رشته طولانی از داده ها را ارسال کند ولی در آن سمت گیرنده چند قطعه کوچک از داده ها را دریافت کند.تنها چیزی که در این میان اهمیت داره و گارانتی میشه ارسال و دریافت داده ها بدون هیچ خطائی است .که اگر هم خطائی رخ دهد با تقاضای ارسال مجدد داده ها در واقع خطا برطرف می شود.

ایزوله کردن این سرویس ها در سطح یک لایه، به برنامه های کاربردی ما این امکان رو میده که بدون نیاز به کنترل خطا ها و در نظر گرفتن اونها طراحی و پیاده سازی بشه.

 

 

 برقراری ارتباط و ارسال داده

پیام از یک application در لایه بالایی که همون application layer سرچشمه میگیره و در قالب Stream یعنی جریانی از کاراکتر ها به صورت آسنکرون به لایه transport فرستاده میشه.

این مساله در مقابل بسیاری از پروتکل های دیگه که داده ها در قالب بلاک هایی با اندازه ثابت دریافت می کنند قرار گرفته.

لایه انتقال داده ها رو میگیره و در قالب سگمنت هایTCP (یا UDP )باز سازی کرده و اطلاعات اضافی مربوطه را در قالب  Header های سگمنت ابتدای داده اضافه میکنه.اگر ارتباط دو طرفه ای مثلTELNET یا FTP مورد نیاز باشه. یک ارتباط (virtual circuit) بین ماشین فرستنده و گیرنده برقرار میشه.

پروسه با تقاضای یک ارتباط TCP از طرف ماشین فرستنده به ماشین گیرنده شروع میشه. در این پیام یک عدد یکتا به نام socket number ، ارتباط ماشین فرستنده را مشخص میکنه. ماشین گیرنده هم شماره سوکت خودش رو به ماشین فرستنده ارسال میکنه. این دو شماره سوکت ارتباط بین دو ماشین رو تا زمان اتمام کار تعیین میکنه.

بعد از اینکه این ارتباط بین بین ماشینهای گیرنده و فرستنده برقرار شد، پیام به لایه IP که که داده ها را در قالب دیتاگرام بر روی شبکه منتشر می کند، انتقال داده می شود.

لایه IP میتونه هر عملیاتی از قبیل قطعه قطعه سازی و یا جمع کردن قطعه ها و تبدیل آن به پیام اولیه در سمت ماشین گیرنده را انجام بده.که چگونگی این عمایات برای لایه انتقال قابل درکه.

بعد از اینکه بسته TCP مسیر طولانی و پر پیچ و خم!! خودش رو در شبکه طی کرد و به ماشین گیرنده رسید به لایه TCP تحویل داده میشه و این لایه هم به لایه بالایی خودش که برنامه کاربردی قرار گرفته تحویل میده.

اگر بسته TCP از چند سگمنت تشکیل شده باشه، نرم افزار لایه TCP در ماشین گیرنده سگمنت ها رو جمع آوری کرده و با توجه به فیلد sequence number که در header سگمنت ها قرار داده شده، به ترتیب پشت سر هم قرار میده .

در صورتی که اطلاعات بدون خطا در ماشین گیرنده دریافت بشه، ماشین گیرنده پاسخی مبنی بر دریافت داده ها به ماشین فرستنده (ACK) ارسال میکنه.

 

ولی اگر بسته به صورت صحیح دریافت نشه چی !!

هیچی !در این حالی ماشین گیرنده هیچ پاسخی برای فرستنده نمی فرستد.اصطلاحا پاسخ (NAK) نمیده. کاملا مودبانه ، هیچ سرو صدایی راه نمیندازه که آقا جون این بسته نرسیده!!! از اون طرف ماشین فرستنده یک تایمر داره که اگر زمان معمول در نظر گرفته شده برای برای دریافت پاسخ (ACK) سپری شد ولی پاسخ نیامد، متوجه میشه که بسته نرسیده یا خراب شده و بسته را دوباره ارسال می کنه.

 

قالب این بسته TCP چه جوریه؟؟

شکل زیر ساختار header یک بسته TCP رو نشون میده.

TCP Header

·               Port : یک فیلد 16 بیتی که شماه پورت و در واقع برنامه کاربردی در ماشین فرستنده را مشخص میکنه.

·               Destination port : فیلد مشابه ، اما آدرس پورت ماشین گیرنده.

·               Sequence Number : شماره ا که موقعیت بلاک جاری در کل پیام رو مشخص میکنه.که ماشین گیرنده برای رسیدن به پیام ارسال شده و سر هم گذاشتن قطعه های دریافت شده از این فیلد استفاده میکنه.

·               Acknowledgement Number : شماره ای که seq no. بعدی مورد انتظارش رو مشخص میکنه. و این نشون میده که بسته با seq no. قبلی دریافت شده. در واقع نشاندهنده آخرین seq no. دریافت شده است +1

·               Data offset : این فیلد برای تعیین شروع فیلد data که داده اصلی ارسالی است، استفاده میشه. عددی که در این فیلد قرار می گیره، طول سرآیند بسته TCP را بر اساس کلمات 32 بیتی تعیین میکنه. مثلا اگر در این فیلد عدد 7 قرار داده بشه( 224 = 32 * 7   )224 بیت یا در واقع 28 بایت برای header و بقی داده است.(توجه کنید که طول header ثابت نیست.)

·               Reserved : 6 بیت رزرو شده برای روز مبادا!! شاید در آینده مورد استفاده قرار بگیره.

 

6 بیت بعدی نقش چند پرچم را بازی می کنند.

·                URG :اگر 1 باشه یعنی مقداری که در فیلد Urgent Pointer (در ادامه...) قرار گرفته مقدار معتبری است.

·               ACK : اگر 1 باشه نشاندهنده اعتبار فیلد Acknowledgement Number است.

·               PSH : اگر 1 باشه، تعیین میکنه که تابع Push باید اجرا بشه. در واقع با این فیلد فرستنده از گیرنده تقاضا میکنه که که داده های این سگمنت رو بافر نکنه و سریع برای پردازش های بعدی تحویل برنامه بده.

·               RST : اگر 1 باشه یعنی اشکالی ( سخت افزاری یا نرم افزاری) به وجود آمده و ارتباط باید reset بشه.

·               SYN : در هنگام برقراری ارتباط از مقدار 1 در این فیلد استفاده میشه.

·               FIN : خاتمه ارسال

·               Window : تعداد بلاک های دیگری که که ماشین گیرنده می تونه بپذیره، با مقداردهی در این فیلد مشخص میشه.اگر صفر باشه یعنی بافر گیرنده پر شده و اگر دوباره داده ای ارسال بشه!! دور ریخته میشه.!

·               Checksum : کد کشف خطا

·               Urgent Pointer : قبلا گفتیم که اگر بیت URG 1 باشه یعنی مقداری که در فیلد Urgent Pointer قرار گرفته معتبره. حالا ببینیم تو این فیلد چی باید قرار بگیره؟؟؟ اشاره گری در این فیلد قرار می گیره که موقعیت داده های اضطراری رو در بسته TCP مشخص میکنه. لایه TCP هیچ پردازشی روی این داده ها انجام نمیده و لایه بالاتر که برنامه کاربردی قرار داره، پردازش لازم روی داده ها انجام میده.

·               Options : فعلا فقط 3 تا option تعریف شده:

 0  ، انتهای لیست Option ها

  1 ، هیچی!!!

  2 ، ماکزیمم اندازه سگمنت

Padding: برای اینکه طول header به صورت ضریبی از 32 بیت حفظ بشه از این بیت ها با مقادیر الکی!! استفاده میشه.

نظرات 8 + ارسال نظر
امیرحسین جمعه 14 اردیبهشت‌ماه سال 1386 ساعت 12:23 ق.ظ http://www.group2helpcenter.blogsky.com

سلام ممنون از اینکه به وبلاگ ما سر زدید خوشحال میشم که شما هم تو این وبلاگ من رو یاری کنید
جواب کامنت قبلیتون رو هم دادم
درضمن میتونم بدونم شما دانشجوی کجا هستید ؟
احتمالا هم ترم بالایی هستید چون با UML و SoftWare Engineering هم ظاهرا آشنایی دارید.
البته مشخصه که شما خیلی اطلاعاتتون از سطح دانشگاه بالاتر هستش خودتون مطالعه آزاد دارید یا جای دیگه ای هم مشغول به تحصیل هستید ؟

با اجازتون دانشجوی ترم آخر هستم.ترم آخر نرم افزار

امیرحسین جمعه 14 اردیبهشت‌ماه سال 1386 ساعت 09:22 ب.ظ http://www.group2helpcenter.blogsky.com

کمک
به وبلاگ من سر بزنین ببینین میتونین کمک کنین ؟!!!؟

حمیدآقا سه‌شنبه 1 خرداد‌ماه سال 1386 ساعت 11:10 ق.ظ http://www.shri.blogfa.com

سلام خانوم مهندس!
نمیدونم چرا بر عکس پست قبلی ، از این ست کم حالیم شد! البته مشکل از آیییییییییی کییییییییییو من نیست. چون به شهادت خیلی ها من خیلی نابغه ام . نخواهید که خودشون بیایند بهتون بگن، چون خوب همه شهید شدند.
میشه در مورد نصب داس روی ویندوز به من اطلااتی بدین؟ میخواهم روی ویندوز اکس پی ، داس بریزم تا بتونم به طور نرم افزاری هاردم رو تصحیح کنم. ممنون میشم.

اولا که پست کاملا توپی بود.توووووووووووووووووپ!
در باره تصحیح نرم افزاری هارد هم نیازی به نصبDOS نیست.با خودwindows xp هم میشه.اگر مشکلت تصحیح هارد و این چیزاست. اسکن هارد دیفرگ وحتی پارتیشن بندی و............رو هم میتونی با ویندوز xp انجام بدی.
حالا اگه به هر دلیل دیگه ای می خوای DOS نصب کنی ، به لینک زیر یه سر بزن.مراحل انجام کار رو به صورت ویژوال کامل توضیح داده:

http://www.windowsreinstall.com/install/msdos/install622/

وقتی به این لینک رفتی روی Begin MSDos 6.22 Install Step by Step Guide کلیک کن.

موفق باشی!!

حمیدآقا جمعه 11 خرداد‌ماه سال 1386 ساعت 11:12 ق.ظ http://www.shri.blogfa.com

جناب مهندس
سلام
با عرض پوزش از محضر گرامیتان ، به علت مشغله همه جوره ، فرصتی دست نداد تا زودتر خدمت برسیم و از محبت شما متشکر بشویم. پس با اجازه شما الان مراسم سپاسگزاری را بجا آوریم :
خانوم مهندس خیـــلی ممنـــــــــــــون (۲ بار با صدای بلند)
مستدام و پیروز بمانید و امتحانات آخر ترم با موفقیت انشاءالله

پویا جمعه 27 اردیبهشت‌ماه سال 1387 ساعت 07:18 ب.ظ

دمت گرم زری خانم

من جمعه 27 دی‌ماه سال 1387 ساعت 11:26 ق.ظ

سلام .
بدک نیست اما از یه چیزت خوشم نیومد این که با افتخار نمیگی کودوم دانشگاه درس خوندی .
به دانشگات افتخار کن.
اساتیدی مثل یوسفی -فرزانه-عظیمی-رافع-کرمانجانی و .....

تبلیغ کن.

رضا یکشنبه 22 آبان‌ماه سال 1390 ساعت 12:27 ق.ظ

سلام خدمت خانم مهندس خیلی ممنونم از این همه مطالب که در وبلاگتون قرار دادین اگه میشه بیشترشون کنید.مرسی

فاطمه دوشنبه 15 خرداد‌ماه سال 1391 ساعت 04:09 ب.ظ

مرسی.خیلی بم کمک کرد.ممنونم

برای نمایش آواتار خود در این وبلاگ در سایت Gravatar.com ثبت نام کنید. (راهنما)
ایمیل شما بعد از ثبت نمایش داده نخواهد شد