در لایه های بالاتر از لایه چهارم؛ پروتکل های بسیار زیادی تعریف شده اند که تعدادی بر اساس UDP کار می کنند (یعنی روی UDP پیاده سازی شده ن). از میان این پروتکل ها؛ دو تاشون خیلی معروف هستند و کاربرد زیادی دارند. اولی به نام DNS (Domain Name Service) شناخته میشه و دومی به نام DHCP (Dynamic Host Control Protocol)
تا اینجا دیدیم که هنگام برقراری یک ارتباط، دونستن آدرس IP مقصد ضروری هست و فرض کردیم که این آدرس رو داریم. در ابتدای پیدایش شبکه ها؛ چون تعداد IP ها در یک شبکه داخلی کم بود؛ این وظیفه ادمین ها بود که IP ها رو به صورت دستی تنظیم کنند. با گسترش یک شبکه و در نتیجه گسترش فضای آدرس دهی و علاوه بر اون استفاده عمومی از شبکه ها توسط افراد غیرمتخصص؛ داشتن پروتکلی که بشه IP یک هاست رو به طور خودکار تنظیم کرد یا بدست آورد؛ ضروری به نظر می رسید. علاوه بر این، کار با اعداد (در آدرس IP) معمولا سخت تر و نامفهوم تر از به کار بردن اسامی هست. هدف این بود که به جای استفاده از اعداد برای آدرس دهی؛ از اسم یا متن استفاده بشود. واضحه که برای کاربر، استفاده از آدرس یا اسمی مثل google.com بسیار راحت تر و مفهوم تر هست نسبت به آدرسی به شکل14.151.6.17؛ حفظ کردنش هم ساده تره به علاوه تعداد آدرس ها که زیاد بشه؛ استفاده از روش آدرس دهی عددی برای کاربر، بسیار مشکل میشه.
در دهه های قبل از اختراع کامپیوتر و شبکه، در موارد مشابه، مثلا در سیستم تلفن ثابت، راهکارهایی مثل چاپ کتابچه شماره تلفن ها یا استفاده از مرجع شماره تلفن ها (مثل شماره 118 در ایران) کار رو راه مینداخت. اما در دنیای کامپیوترها، این وظیفه هم به عهده خود کامپیوتر و پروتکل ها گذاشته شده. یک سیستمی (کامپیوتر، دیتابیس، سرور؛ سیستم خلاصه!) به اسم DNS سرور وجود داره که شما بهش اسم سایت رو میدید؛ سیستم موردنظر، آدرس IP متعلق به اون اسم رو بهتون میده. به عنوان مثال وقتی در جستجوگر اینترنت (Browser) مینویسید google.com ابتدا یک پیغام برای سرور DNS در شبکه ارسال میشه، اگر آدرس IP این سایت در جداول این سرور باشه؛ بهتون میده وگرنه این پیغام رو به یه DNS سرور دیگه میده تا اون بهتون جواب بده. بهرحال در نهایت شما IP اون سایت رو با این سرویس به دست خواهید آورد.
ما بیشتر از این DNS رو توضیح نمیدیم و شما برای اطلاعات بیشتر میتونید به سند RFC 882 و بروزرسانی های اون مراجعه کنید.
و اما DHCP. پروتکل دیگه ای که بر روی UDP کار میکنه؛ DHCP هست که وظیفه ش، دریافت و اعمال تنظیمات یک کلاینت هست. این تنظیمات میتونه شامل خیلی موارد باشه؛ از دریافت آدرس IP تا دریافت فایل بوت (boot) کلاینت، آدرس سرور DNS ، مقدار subnet mask ، آدرس gateway و …
جهت برآورده کردن این منظور؛ در ابتدا از پروتکلی بنام BOOTP (BOOT Protocol ) استفاده میشد اما در نهایت BOOTP با DHCP جایگزین شد. یکی از اصلیترین دلایل تعریف استانداردهای BOOTP و DHCP این موضوع بود که تخصیص آدرس IP به کلاینت ها، کاملا خودکار (اما با اعمال نظر ادمین شبکه) باشه تا احیانا تداخل آدرس (دو یا چند سیستم با یک آیپی) در شبکه نداشته باشیم. تا اینجای کار، ما (برنامه نویس) آدرس IP رو داخل کد به صورت ثابت نوشته بودیم؛ اما واضحه که این روش، روش درستی برای این کار نیست. فرض کنید در یک شبکه صدها سیستم وجود داشته باشه؛ آیا میخواهیم به صورت دستی، تک تک اون ها رو آدرس دهی کنیم؟ به علاوه، از امکانات یک شبکه، ممکنه تعداد بسیار زیادی سیستم، بخواهند استفاده کنند و ما با محدودیت آدرس مواجه باشیم. لذا در DHCP، تمهید لازم برای اختصاص موقت یک آدرس IP به یک هاست هم دیده شده.
اگر قرار بود هر سیستمی یک آیپی دایمی داشته باشه؛ به سرعت با کمبود آدرس مواجه می شدیم. وقتی یک ارتباط قطع میشه یا مهلت اجاره آدرس تموم میشه؛ سرور DHCP، از اون آیپی برای دستگاه های دیگه استفاده خواهد کرد.
در یک ارتباط اینترنتی نیز اگر دقت کرده باشید؛ احتمالا متوجه این موضوع شده اید که گاهی در حین ارتباط، آدرس IP شما تغییر میکنه. به این مفهوم اصطلاحا lease Time یا زمان اجاره گفته میشه. قبل از سرآمدن مهلت اجاره؛ هاست میهمان (کلاینت) باید تقاضای تمدید مهلت رو بکنه که ممکنه پذیرفته نشه؛ یا اگر پذیرفته بشه؛ یک آدرس جدید به هاست اختصاص داده بشه.
یک سوال؛ الان میدونیم که DHCP از UDP استفاده میکنه. خود UDP هم بر روی پروتکل IP بنا شده ؛ این سیستم که هنوز IP نداره، پس چطوری کار میکنه ؟! (سیستمی که هنوز آدرس IP نداره؛ از پروتکل IP استفاده میکنه تا آدرس IP خودشو بدست بیاره!)
در پروتکل IP هم مثل استاندارد Ethernet ii ؛ یک آدرس خاص داریم که تمام قسمت های اون با بیت های ‘1’ پر شده؛ پس مقدار این IP خاص هست 255.255.255.255 به این آدرس اصطلاحا آدرس عمومی در لایه سوم گفته میشه. در پیاده سازی پروتکل IP و برای برقراری یک ارتباط DHCP ؛ سخت افزار شما (میکروکنترلر) ؛ باید بتونه بسته هایی با آدرس عمومی رو دریافت و پردازش کنه تا بتونه با استفاده از این پروتکل، آدرس IP خودش رو از DHCP server بگیره.
فرآیند یک ارتباط مبتنی بر DHCP و اختصاص آدرس IP و تنظیمات دیگه، در چهار مرحله اجرا میشه:
به این چهار مرحله اصطلاحا DORA گفته میشه که سرنام چهار مرحله فوق هست. این فرآیند با یک سوال از طرف کلاینت شروع میشه:
“کسی هست بتونه بمن IP بده؟ ترجیح من آیپی فلان هست!” ترجیح یک آدرس خاص؛ مال وقتیه که دستگاه از قبل در شبکه بوده و مدت زمان اجاره ش (Lease Time) تموم شده.
در جواب DHCP server میگه که “فلان آیپی رو دارم، میخوای؟” البته قبلش ممکنه سرور با یک عملیات خاص مثلا ping يا ARP بررسی کنه که در شبکه دستگاهی با آیپی پیشنهادی وجود نداشته باشه! كلاينت هم ممكنه قبل از درخواست خودش، همين كار رو بكنه.
یک نکته مهم هم اینکه در یک شبکه ممکنه چند DHCP server داشته باشیم و حتا ممکنه این سرورها با هم، همپوشانی آدرس داشته باشند؛ یعنی بخشی از محدوده آدرس دهی آنها یکسان باشه. در نتیجه، کلاینت ممکنه بعد از درخواست اولیه، چندین پیشنهاد دریافت کنه!
در مرحله سوم؛ کلاینت باید از بین جواب های رسیده از سرورهای احتمالی، یکی رو انتخاب کنه و به اون سرور جواب بده که “من فلان آیپی رو برمیدارم” ( مابقی سرورها بدون جواب بمونن، داستان رو فراموش میکنند )
در مرحله آخر (چهارم) هم سرور یک پیغام به کلاینت میفرسته که بگه درخواست پذيرفته يا رد شده؛ هر جای این مراحل، عملیات دچار خطا بشه؛ باید از ابتدا شروع بشه. در نهایت هم، معمولا سرور، آدرس اختصاص یافته رو در جدولی ذخیره میکنه تا از اختصاص مجدد اون به یه سیستم دیگه جلوگیری کنه. کلاینت هم میتونه برای استفاده های بعدی آدرس سرور رو نگه داره.
در ابتدای فرآیند؛ كلاينت فقط مك آدرس خودش رو داره. خودش كه آدرس آيپي نداره، هيچ! مك آدرس و آيپي آدرس سرور رو هم نداره پس پیغام مرحله اول یک پیغام عمومی (هم آیپی آدرس در لایه سوم و هم مک آدرس در لایه دوم) هست، اما در مراحل بعدی که کلاینت و سرور؛ آیپی و مک آدرس های هم رو دارند، ميتونند پیغام ها رو بصورت خصوصی ارسال کنند. البته در حالت خاصي كه كلاينت از قبل، آدرسي رو اجاره كرده باشه؛ داستان فرق ميكنه و چون اون ها همديگه رو ميشناسند، ميتونن از ابتدا پيغام خصوصي (unicast) بفرستن.
تا الان مقدار آدرس IP رو بطور مستقیم در کد تعریف کرده بودیم، به این وضعیت اصطلاحا Static IP میگن. با استفاده از پروتکل DHCP قادریم به سه گونه یا روش، مقدار آدرس IP كلاينت رو تعیین کنیم. در اولین حالت بنام Automatic Allocation یک آدرس دایمی به کلاینت داده میشه.
در حالت دوم، سرور یک آدرس IP موقتی (برای مدت زمان مشخص) به کلاینت اختصاص میده. در این حالت، کلاینت میتونه قبل از سر اومدن زمان اجاره؛ این آدرس رو رها (Release) کنه یا اینکه درخواست تمدید بکنه. این حالت رو Dynamic Allocation میگن.
در حالت سوم به نام Manual Allocation؛ اختصاص آدرس بطور مستقیم توسط ادمین شبکه تعیین میشه. این حالت رو با حالت استاتیک نباید اشتباه گرفت. در این حالت، درخواست آدرس IP همچنان توسط پروتکل DHCP انجام میشه؛ اما آدرس، بطور خودکار توسط سرور اختصاص داده نمیشه؛ بلکه ادمین خودش آدرس رو مشخص میکنه.
در دو حالت دیگه هم، بازه ی آدرسی (range) که توسط سرور میتونه اختصاص پیدا کنه؛ عموما توسط ادمین مشخص میشه. مثلا ادمین مشخص میکنه که آدرس اختصاص یافته از 192.168.1.5 تا 192.168.1.150 انتخاب و پیشنهاد بشه. به این بازه در زبان شبکه، مخزن ( pool ) آدرس گفته میشه. در شبکه جهانی اینترنت، از نوع دوم یعنی Dynamic Allocation یا اختصاص پویا استفاده میشه.
از آنجاییکه پروتکل DHCP در لایه چهارم کار میکنه؛ دو پورت، 68 برای کلاینت و 67 برای سرور، جهت استفاده در این پروتکل اختصاص یافته اند.
اطلاعات کاملتری از پیاده سازی ؛ روش ها ، مفاهیم و الزامات پروتکل DHCP رو میتونید در سند RFC 1541 و ارجاعات اون پیدا کنید.
و اما پیاده سازی در میکروکنترلر. ابتدا بریم هدر DHCP رو بررسی کنیم.
در شکل زیر فرمت یک پیام DHCP رو مشاهده میکنید، توجه داشته باشید که فرمت هدر در پروتکل های BOOTP, DHCP یکسان هست. اعداد داخل پرانتز تعداد بایت های هر بخش رو مشخص کرده:
در صورتيكه تعداد بايت مورد نياز، كمتر از 312 بایت باشه ، انتهاي اون رو با آپشن 0xFF به عنوان انتهاي بخش گزينه ها پر مي كنيم ؛ همچنین بین گزینه ها میتوان با آپشن 0x00 عملیات pad رو انجام داد. توجه داشته باشید که در پروتکل DHCP گزینه 0xFF بعنوان end of option list است و نه 0x00. معمول هم اینه که افزودن 0x00 طوری صورت میگیره که گزینه ها در مرزهایی با مضرب 4 قرار بگیرند تا پردازش آنها در سمت گیرنده راحت تر باشه.
نویسنده شو !
سیسوگ با افتخار فضایی برای اشتراک گذاری دانش شماست. برای ما مقاله بنویسید.