خب بریم سراغ مدل OSI یا حالت سادهتر اون مدل TCP/IP (ممکنه به این مدل Internet protocol Suite و یا TCP stack هم گفته بشه). پروتکلهای شبکه، لایه روی لایه چیده شدن. در سمت فرستنده، اولین لایهای که تولیدکننده داده هست؛ در سمت گیرنده آخرین لایهای خواهد بود که داده نهایی رو دریافت میکنه. بهمین دلیل بهش stack (به فارسی، پشته) میگن.
ما تا اینجا با دو لایه پایینی آشنا شدیم و با استفاده از ENC اون ها رو به وجود آوردیم.
پایینترین لایه یا لایه اول رو به اسم لایه فیزیکال میشناسیم و لایه دوم که در اینجا فریمهایی به فرمت Ethenet ii رو ارسال/دریافت میکنه؛ در مدل OSI بهش میگن لایه ارتباط داده (Data Lick Layer) درحالیکه در مدل TCP/IP بهش فقط میگن لایه ارتباط (Link Layer) .
خب تا اینجا ما یک فریم دریافت کردیم؛ یادمون هست که بعد از مک آدرسها، دو بایت با اسم Ether Type وجود داشت که گفتیم اعداد داخل اون بزرگتر از 0x0600 خواهند بود و در جدولی، تعدادی از اعداد رزرو شده رو نشون دادیم و همچنین گفتیم که دو عدد 0x800 و 0x0806 برای ما حایز اهمیت هستند.
يك نكته كه باعث سردرگمي خواننده ميشه رو اينجا براتون باز كنيم. گفتيم كه مک آدرسها باید در شبکه منحصربهفرد و یکتا باشند. در مراجع مختلف هم اين جمله به همين نحو گفته ميشه ولي درستش اینه که بگيم در يك شبكه داخلي يا محلي؛ بايد مك آدرسها يكتا باشه. متأسفانه ما، يك ساختار كه چند هاست رو به هم متصل میکنند رو ميگيم “شبكه”؛ ساختاري كه در اون تعداد زيادي شبکههای كوچك با استفاده از روترها، به هم متصلاند رو هم باز ميگيم “شبكه”. براي عدم آشفتگي ذهني خواننده بهتر اينه كه به اولي بگيم شبكه محلي؛ شبكه داخلي يا حتی زيرشبكه. خب كمي سخت ميشه چون اونطوري بايد در تمام اين نوشتار از “شبكه محلي” بهجای شبكه استفاده كنيم. خواننده حواسش بايد باشه كه در قسمت اعظم اين نوشتار منظور از شبكه؛ يك شبكه داخلیست.
اجازه بديد يه مثال بزنم. در سيستم پستي و هنگامي كه نامهها داخل يك شهر توزيع ميشن؛ اسم محله بايد يكتا باشه. اما هنگامي كه سيستم پستي بين شهرهاي مختلف انجام ميشه؛ در اين حالت شما ميتونيد دو محله در دو شهر مختلف با يك اسم داشته باشيد. در اين حالت اسم يكسان محلات باعث سردرگمي نخواهد شد؛ چون قبل از اسم محله؛ باتوجهبه اسم شهر؛ نامهها از هم تفكيك خواهند شد. در مبحث شبكه هم همين طوره؛ در يك شبكه داخلي يا شبكه محلي؛ مك آدرس بايد يكتا باشه. اما در هنگام اتصال شبکههای مختلف به هم (مثل شبكه اينترنت)؛ میشود كه دو دستگاه، مك آدرس يكسان داشته باشند؛ اما بايد در دو شبكه داخلي مختلف قرار داشته باشند.
در هنگام اتصال بين شبکهها؛ ارتباط توسط روترها برقرار ميشه و دراینارتباط چيزي كه مهم هست، آدرسی است كه بهش ميگيم آدرس IP. در فریمهای ارسالي براي شبکههای ديگه؛ روترها موقعي كه يك فريم رو دريافت میکنند، بهجای مك آدرس مبدأ، مك آدرس خودشون رو قرار ميدن؛ بهجای مک آدرس مقصد هم باتوجهبه اینکه هاست مقصد در شبکه بعدی قرار داره یا در یک شبکه دیگه ای؛ فرق خواهد کرد. در حالت اول مک آدرس هاست مقصد و در حالت دوم، مک آدرس روتر بعدی قرار میگیره.
همونطور که گفتیم ممکنه دستگاههای مختلفی درون یک شبکه باشند که سازندههای مختلف (با OUI مختلفی) دارند. از طرفی مک آدرسها، اصطلاحاً Hard code هستند؛ یعنی از قبل درون حافظه تراشه ثبت میشن درنتیجه ما نمیتونیم فقط بر اساس اونها یک زیرشبکه بسازیم، یعنی شبکه مون رو به بخشهای مختلفی تقسیمبندی کنیم كه هر زيرشبكه داراي محدوده آدرس خاصي باشند، به آدرسدهی پستي دقت كنيد؛ اگه فقط در يك شهر بخواهيد نامه بفرستيد؛ كافيه فقط اسم منطقه یا محله بعلاوه خيابون رو بنويسيد؛ اگر در يك كشور بخواهيد نامه ارسال كنيد؛ بايستي اسم شهر رو هم اضافه كنيد؛ اين وضعيت در آدرسدهی شبكه تلفن هم هست، در تلفن داخلشهری نياز به كد شهر نيست؛ اما بين شهرها، بايد از كد شهر و در بين كشورها از كد كشور استفاده كنيد.
وجود زیرشبکه به دلایل مختلف نیازه؛ یکیش دلایل امنیتیه که بتونیم دسترسی به شبکه رو محدود کنیم یا بتونیم قسمتهای مختلف رو از هم تفکیک کنیم. مثلاً در شبکه یک سازمان؛ بخش مالی از فنی جدا باشن و هر بخش تنها به دادههای خودش دسترسی داشته باشه. اما خب تنها با اتكا به مك آدرسها اين امكان وجود نداره و درنتيجه نیاز هست که یک ساختار آدرسدهی جداگانه به وجود بیاد که اصطلاحاً بهش میگن آدرس منطقی (در مقابل آدرس فیزیکی یا همون مک آدرس). اصلیترین پروتکل شبکه یعنی IP یا همون Internet Protocol از این روش آدرسدهی استفاده میکنه. در ارتباط بین شبکهها بهجای مک آدرس؛ از آدرس IP استفاده میشه. آدرس منطقی در این حالت یک نوع آدرس 4 بایتی است که بهش IP Address میگن.
آدرس IP و Subnet Mask
این آدرس معمولاً بهصورت دهدهی (decimal) نمایش داده میشه؛ بهعنوانمثال 192.168.2.30
این آدرس دو بخش داره که اندازه هاشون بر حسب تعداد بایت، متفاوته (اما واضحه که جمعشون میشه 4 ) قسمت سمت چپ میشه آدرس زیرشبکه و مابقی آدرس که سمت راست آدرس زیرشبکه قرار میگیرن، میشه آدرس یا شماره host در اون زیرشبکه. در آدرسي كه مثال زديم اعداد 192.168.2 آدرس زیر شبکه و 30 شماره کامپیوتر در اون زیرشبکه است. اينجا اين سؤال ممكنه مطرح بشه كه از كجا ميدونيم كدام بخشهای آدرس متعلق به زير شبكه ن و كدام بخشها متعلق به شماره host؟ مفهومي بنام subnet mask داريم كه اون هم مثل آدرس IP چهار بايتي هست. هر بيتي از subnet mask داراي مقدار ‘1’ باشه؛ بيت متناظرش در آدرس IP جزو قسمت آدرس شبكه است و هر بيتي ‘0’ باشه؛ بيت متناظرش در آدرس آیپی متعلق به آدرس host در زيرشبكه است. در آدرسي كه مثال زديم subnet mask برابره با 255.255.255.0 در نتيجه سه بايت سمت چپ؛ آدرس زيرشبكه ست و فقط بايت سمت راست؛ آدرس host در زيرشبكه رو مشخص میکنه. توجه داشته باشيد كه اگر subnet mask رو بهصورت باينري بنويسيم؛ یکها از سمت چپ شروع ميشن و يك جايي تموم ميشن و بين یکها، صفري نخواهيم داشت (1 ها در سمت چپ و 0 ها در سمت راست قرار میگیرند و تنها در يك محل تغيير از 1 به 0 خواهيم داشت). گاهي هم subnet mask رو با يك عدد در جلوي آدرس IP ممكنه ببينيد؛ مثلاً آدرس بهصورت 192.168.2.30/24 نمايش داده ميشه به اين معني كه 24 بيت اوليه آدرس، نشون دهنده آدرس زيرشبكه ست. در ضميمه [10] در مورد کلاسهای تخصيص آدرس IP و subnet mask بيشتر توضيح داديم.
همونطور که گفتیم در بخش نوع اترنت (دو بایت بعد از مک آدرسها در فریم اترنت) عدد 0x0800 نشاندهنده اینه که فریم فعلی دادههایی رو در خودش داره که با فرمت پروتكل IP ارسال شده ن. اگه بخوایم روی مدل OSI یا TCP/IP توضیح بدیم نتیجه مثل شکل زیر هست. توجه داشته باشيد كه هر جا ميگيم IP منظورمون Ipv4 هست.
در سمت فرستنده، اطلاعات از لایه 4 به لایه 3 که در مدل OSI به اون لایه شبکه (Network) میگن؛ تحویل داده میشه. لایه سوم با استفاده از پروتکل IP ، روي داده دريافتي از لايه چهارم، بسته بندی مخصوص به خودش رو انجام میده، این بسته بندی دو وظيفه اساسي داره. وظيفه اول كه هميشه انجام ميشه، طبق معمول، اضافه کردن بخشی بنام هدر (Header ؛ سرآمد یا سرآیند) به داده ها است؛ گاهی هم كه حجم داده هاي دريافتي از لايه 4 بسيار زياد هست و در يك فريم جا نميشه؛ وظيفه تکه تکه کردن داده های لایه چهارم به قطعات کوچکتر و ارسال اون ها در چند بسته (Packet) هم اضافه ميشه.
خب تا اینجا چی یاد گرفتیم؛ اینکه لایه 3 به دادههای دریافتی از لایه 4 یه هدر اضافه میکنه؛ بعلاوه متوجه شدیم که در لایه 3 اصلیترین پروتکل شبکه اینترنت یا همون IP protocol قرار داره و اینکه این پروتکل از آدرسدهی جداگانهای (نسبت به آدرس فیزیکی یا همون مک آدرس) با نام آدرس منطقی یا IP Address استفاده میکنه.
آدرس IP ؛ یا از قبل (مثلاً موقع کدنویسی میکروکنترلر) مشخص میشه که بهش میگیم حالت استاتیک و یا درون شبکه و با پروتکلهای مخصوص مثل پروتکل DHCP (Dynamic Host Configuration Protocol) به host تعلق میگیره که به این حالت میگیم تخصیص دینامیک آدرس. در واقع در حالت دینامیک، هاست موقع اتصال به شبکه آدرس IP نداره؛ اما جزو اولین کارهاش، گرفتن آدرس IP هست. همینجا هم بگیم که پروتکل DHCP رو در موقع خودش توضیح میدیم. ما فعلاً از حالت استاتیک استفاده میکنیم؛ چون هنوز چیزی از پروتکل DHCP نمیدونیم.
میدونیم که پروتکل IP از آدرس IP استفاده میکنه (البته هنوز با خود پروتکل IP درگير نشدیم) اما یادمون هست که قبلاً متوجه شدیم که لایه 2 از آدرس فیزیکی یا همون MAC Address استفاده میکرد، لذا اولین سؤالی که باید برای ما پیش بیاد اینه که یک هاست چطور میتونه بفهمه آدرس فیزیکی مرتبط با یک آدرس IP چیه؟ بهعنوانمثال در همین برد خودمون؛ برد الکترونیکی قصد ارتباط با کامپیوتر رو داره؛ در این حالت نه آدرس آیپی و نه مک آدرس کامپیوتر رو نداریم! يك هاست، مك آدرس و IP آدرس خودش رو ميدونه؛ فرض میکنیم آدرس IP طرف مقابل رو هم ميدونه (اينكه چطور ميدونه، الان برامون مهم نيست، به وقتش توضیح میدیم که معمولاً با استفاده از سرويس DNS پيدا میشه یا به طور ثابت در برنامه اضافه شده!) اما لايه دوم بايد مك آدرس طرف مقابل رو داشته باشه تا فريم رو ارسال كنه. اينجاست كه لزوم داشتن فرایندی، كه قبل از هر كاري، بتونه مك آدرس طرف گيرنده رو بدست بياره؛ احساس ميشه. اين وظيفه به عهده پروتكلي بنام ARP گذاشته شده.
نویسنده شو !
سیسوگ با افتخار فضایی برای اشتراک گذاری دانش شماست. برای ما مقاله بنویسید.