جواب پرسش های شبکه (2)

خب به زبان خیلی ساده و مختصر شده میخوام توضیح بدم که ارتباط شبکه/اینترنت چطوری انجام میشه.

خب پایه ای ترین پروتکل اینترنت رو میتونیم پروتکل IP بدونیم.
این پروتکل کارش چیه؟
این پروتکل از یکسری بسته (packet) اطلاعات با فرمت و حداکثر سایز مشخص تشکیل شده. بطور کلی توی این بسته ها آدرس IP گیرنده درج شده و یکسری header ها بعلاوه دیتا.

خب تا اینجا که ساده است. نه؟
شما به سادگی یک بسته IP درست میکنید و ارسال میکنید. البته این کار رو درواقع اکثرا سیستم عامل پشت پرده انجام میده و انواع داده های پروتکل های مختلف دیگر رو هم روی پروتکل IP سوار و ارسال میکنه.
خب چرا ما به پروتکل های دیگر نیاز داریم؟
چون پروتکل IP خیلی ساده و مختصر است و فقط میگه یک مقدار کمی دیتا رو چطوری فرمت کنیم و بفرستیم برای مقصد. هیچ چیز دیگه ای نمیگه کار دیگری نمیکنه! مثلا فرض شما یک بستهء IP ساختید و ارسال کردید، خب درواقع تضمینی وجود نداره که این بسته به مقصد برسه! ممکنه به هزار و یک دلیل به مقصد نرسه. ضمنا داده های ما که میخوایم بفرستیم اکثرا زیادتر از اونی هستن که توی یک بسته IP جا بشن و بنابراین نیاز داریم تعداد زیادی بسته IP بسازیم و ارسال کنیم، و از این همه بسته تعدادی ممکنه اصلا به مقصد نرسن، و ترتیب دریافت اونا توسط گیرنده هم لزوما با ترتیبی که ما اونا رو ارسال کردیم تطابق نمیکنه و به دلایل مختلف بطور مثال ممکنه بسته شماره 21 قبل از بسته شماره 20 به مقصد برسه، و حتی گاهی ممکنه یک بسته IP چند بار به مقصد تحویل داده بشه!
بنابراین میبینیم که پروتکل IP به تنهایی یک چیز خیلی پایه و ساده و مختصر است و کار کردن باهاش به این سادگی نیست. این پروتکل مثل تعریف مشخصات و طرز ساخت آجر میمونه، و با هر دانه این آجرها نمیشه کار خاصی کرد، ولی میتونیم با این آجرها یک دیوار یا چهاردیواری درست کنیم و بعد سودمندتر میشن.
خب پروتکل TCP درواقع همین کار رو برای ما میکنه. این پروتکل میگه دیتای خودت رو بده من، بعد دیتا رو برامون ارسال میکنه، و پشت صحنه تمام این مشکلات و امکانها رو تحت نظر داره و شناسایی و هندل میکنه، مثلا در این پروتکل گیرنده باید تایید بسته هایی رو که دریافت میکنه برای فرستنده ارسال کنه و بنابراین بسته هایی که به گیرنده نرسن مجددا تا چند بار ارسال میشن تا سرانجام در سمت گیرنده دریافت بشن، همچنین دیتای ارسال شده در بسته های IP ای که این پروتکل ارسال میکنه در خودش شماره ارسال هر بسته رو داره و به این شکل وقتی گیرنده بسته ها رو دریافت میکنه اونا رو بر اساس شماره شون مرتب میکنه و دیتای ما بصورت درستی در سمت گیرنده سرهم میشه.
حالا جزییات زیاد هست ولی من یکسری کلیات مهم و مفهوم کلی رو گفتم و رسوندم.
ضمنا دقت کنید بسته های IP خودشون حتی محتوی شماره پورت هم نیستن! یعنی یک بسته IP که به گیرنده میرسه، گیرنده نمیتونه بفهمه این بسته برای چه برنامه و سرویسی روی اون سیستم ارسال شده، چون پروتکل IP فقط یک پروتکل انتقال پایه است و فقط برای انتقال داده ها از یک مبداء به مقصد طراحی شده و هیچ جزییات دیگری درش نیست، معلوم نیست این داده ها مال چه کاری هستن به چه برنامه و سرویسی روی سیستم مقصد باید تحویل داده بشن. و خب این بخش رو پروتکل TCP (و همچنین UDP) پیاده سازی کرده که یه عدد دیگه به اسم شماره پورت هم توی بخش دیتای بسته های IP گذاشته که برنامه ها/سرویسهایی رو که این دیتاهای ارسالی باید به اونا تحویل داده بشه به این شکل مشخص میکنه. این فقط یک شماره قراردادی هست و دیگر هیچ. بطور مثال وقتی شما آدرس سایتی رو در مرورگر خودتون باز میکنید، مرورگر ابتدا یک اتصال TCP به آدرس مقصد با IP سایت مورد نظر (که این IP رو از طریق پروتکل DNS از سرورهای خاصی بدست میاره) و شماره پورت پیشفرضی که سرویسهای وب روی اون اجرا میشن، یعنی پورت 80، برقرار میکنه. البته در پشت صحنه این سیستم عامل و کتابخانه های اون است که پروتکل TCP رو اجرا میکنه و دیتاهای ما/مرورگر رو به بسته های IP تبدیل و ارسال میکنه، و مرورگر فقط از API یا رابط برنامه نویسی ای که برای این منظور در اختیارش گذاشته شده استفاده میکنه.

و اما سوکت چیه؟
خب سوکت به سادگی یک ساختمان داده ای هست که موقعی که برنامه درخواست ارسال اطلاعاتی رو در شبکه میده، این ساختمان داده توسط سیستم عامل برای اون برنامه در حافظه ایجاد میشه که توش مثلا آدرس IP و شماره پورتی که برنامه میخواد دیتاهاش رو بهش ارسال کنه و یکسری جزییات لازم دیگر ذخیره میشه، و بعد سیستم عامل یک هندل، هرچی میخواد اسمش باشه، به اون برنامه میده که اون برنامه تحت اسم سوکت یا هندل سوکت خلاصه اسمش هرچی مهم نیست، ازش استفاده میکنه؛ یعنی این برنامه هروقت میخواد اطلاعاتی رو ارسال کنه با این هندل این کار رو انجام میده که این هندل در اصل فقط محتوی یک عدد است مثلا 291 که در جدول اطلاعات سوکت ها در سیستم عامل به اطلاعات مشخصات ارتباطی که توسط این برنامه از سیستم عامل درخواست شده اشاره میکنه و بنابراین سیستم عامل میتونه بفهمه که باید دیتای ارسال شده توسط برنامه رو به چه آدرس IP و شماره Port ای ارسال کنه. به همین سادگی! پس سوکت فقط یه رابط برنامه نویسیه و دیگر هیچ. پشت صحنه این همون سیستم عامل و توسط پروتکل هایی مثل TCP است که دیتای برنامه ما رو ارسال و دریافت میکنه، و اسم کتابخانه و رابط برنامه نویسی (API) ای که در اختیار میذاره سوکت است (سوکت یه اسم کلی و تاحدی غیردقیق و مبهم است – گاهی ممکنه بگیم کتابخانه سوکت، گاهی بگیم هندل سوکت که اون متغییر یا آبجکت ای هست که در کدنویسی استفاده میکنیم، بگیم برنامه نویسی سوکت، بگیم جدول سوکت های سیستم عامل … خلاصه اصطلاح زیاد دقیقی نیست).

خب پس متوجه شدید که اول پروتکل IP رو داریم، بعد پروتکل TCP بخاطر چی میاد روی پروتکل IP دوباره پیاده میشه و کارش چیه. دوباره روی پروتکل TCP هم پروتکل های سطح بالاتر یعنی سطح اپلیکیشن هستن، مثل پروتکل FTP و HTTP و SMTP و POP3 و غیره. اینها هم به سادگی پروتکل هایی هستن که برنامه ها و سرویسهای مختلف تعریف کردن و فرمت و معنای داده های ارسال و دریافت شده رو مشخص کردن. مثلا ما با سوکت TCP یک داده ای رو ارسال میکنیم، اما این برنامه های ارسال کننده و دریافت کننده هستن که باید تعریف کنن فرمت این داده ها دقیقا به چه شکلی باید باشه و چه معنا و هدفی دارن. مثلا موقعی که مرورگر میخواد درخواست یک صفحهء وب رو از یک سرور بکنه، فرمانها و داده هاش باید در چه فرمتی باشن؟ این فرمت و فرمانهای معین چیزی هستن که پروتکل HTTP تعریف میکنه. پروتکلهای ارسال و دریافت ایمیل (مانند SMTP و POP3) هم به همین شکل فقط تعریف فرمت این داده ها و فرمانهاست.

من تا اینجا هدفم از این پست تمام شد. فقط باید به این نکته اشاره کنم که من فقط چندتا از پروتکل های اساسی و پرکاربردترین ها رو انتخاب کردم که بتونید کلیت این مفاهیم رو درک کنید، وگرنه مثلا ما حتی پایین تر از IP هم پروتکل داریم که خود بسته های IP بر اون پروتکل سوار میشن (قبلا اشاره کرده بودم که مثلا Ethernet)، و ضمنا اینطور هم نیست که مثلا در دنیا فقط یک پروتکل IP وجود داشته و داره و پروتکل های دیگری که در همین لایه و سطح کار کنن و مشابه کار پروتکل IP رو انجام بدن و بتونن جایگزین پروتکل IP بشن وجود نداشته و ندارند. درواقع در هر لایه پروتکل های متعددی بوده و هست که میتونن کار مشابهی رو انجام بدن و جایگزین همدیگر بشن، ولی خب پروتکل IP بخش عمدهء ارتباطات و استاندارد شبکه های امروزی رو تشکیل میده و معروف ترین و پرکاربردترین است. همچنین مثلا در یک لایه بالاتر، برای پروتکل TCP هم پروتکل های مشابه دیگری وجود دارن، که البته لزوما قصدشون جایگزینی کامل پروتکل TCP نیست و بعضی امکانات و خواص دیگری دارن که در یکسری کاربردها ممکنه بجای TCP استفاده بشن. بهرحال اکثر اینا از نظر اساس و مفهوم و روش کار کلی شباهت زیادی با هم دارن و مهم نیست کدوم پروتکل رو بعنوان مثال استفاده کنیم و اسم ببریم؛ مثلا سگ سگ است، حالا میخواد از هر نژاد و رنگی باشه، قصد ما نشون دادن و معرفی خانواده و خصوصیات و قیافه کلی سگ است، و میشه گفت تمام سگ ها چهار دست و پا دارن و پارس میکنن و گوشت میخورن!

پاسخ دهید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *

*

شما می‌توانید از این دستورات HTML استفاده کنید: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>