آدرس IP چیست؟ بررسی ساختار IP + مفاهیم Subnets و CIDR
۱۸ بهمن ۱۴۰۳
مقدمه
هر مکان یا دستگاهی در یک شبکه باید آدرس منحصر به فردی داشته باشد به بیان بهتر آدرس های IP شناسه هایی هستند که اجازه ارسال اطلاعات بین دستگاه های موجود در یک شبکه را صادر می کنند. این شناسه ها حاوی اطلاعات مکان جغرافیایی دستگاه هستند به همین علت منابع شبکه را از طریق یک واسط شبکه قابل دسترس می کنند.
هر آدرس IP باید در شبکه ای که در آن قرار دارد منحصر به فرد باشد. شبکه ها می توانند ایزوله باشند یا از طریق پلزنی (Bridging) و ترجمه آدرس به یکدیگر متصل شوند تا دسترسی بین شبکه های مجزا فراهم شود. سیستمی به نام ترجمه آدرس شبکه (NAT) این امکان را می دهد که آدرس ها هنگام عبور از بسته ها از مرزهای شبکه بازنویسی شوند تا به مقصد درست خود برسند. این قابلیت به یک آدرس IP اجازه می دهد تا در چندین شبکه ایزوله به طور همزمان استفاده شود در حالی که در صورت پیکربندی درست این شبکه ها می توانند با یکدیگر ارتباط برقرار کنند.
تفاوت بین IPv4 و IPv6
در حال حاضر دو نسخه از پروتکل IP بهطور گسترده در سیستمها پیادهسازی شدهاند: IPv4 و IPv6.
پروتکل IPv6 بهدلیل بهبودهایی که در ساختار آن ایجاد شده و همچنین محدودیتهای فضای آدرسدهی IPv4، بهآرامی در حال جایگزینی نسخه قبلی است. به بیان بهتر تعداد دستگاههای متصل به اینترنت در جهان از میزان آدرسهای موجود در IPv4 فراتر رفته است.
آدرسهای IPv4 دارای طول 32 بیت هستند که هر بخش از آدرس که شامل 1 بایت یا 8 بیت است، با یک نقطه از هم جدا میشود. اگرچه این اعداد برای درک آسان بهصورت دهدهی نمایش داده میشوند، اما هر بخش معمولاً بهعنوان یک اکتت (Octet) شناخته میشود تا تأکید شود که نمایانگر 8 بیت داده است.

به عنوان مثال این یک آدرس IPv4 می باشد:
192.168.0.1
هر بخش از این آدرس میتواند از 0 تا 255 باشد؛ بنابراین، بازه کامل آدرسدهی IP کامل از۰.۰.۰.۰ تا ۲۵۵.۲۵۵.۲۵۵.۲۵۵ است؛ در واقع کمترین مقدار در هر اکتت برابر با 0 و بیشترین مقدار 255 است.
برای درک بهتر ساختار چهار اکتت، میتوانیم این آدرس را بهصورت باینری نمایش دهیم. برای خوانایی بیشتر، هر 4 بیت را با یک فاصله جدا کرده و نقاط را با خط تیره جایگزین میکنیم، آدرس IP بالا با فرمت باینری به صورت زیر میباشد:
1100 0000 - 1010 1000 - 0000 0000 - 0000 0101
با اینحال تفاوتهای دیگری نیز در پروتکلها و عملکردهای IPv4 و IPv6 وجود دارد، اما مهم ترین تفاوت بین آنها در فضای آدرسدهی است. IPv6 آدرسها را به صورت یک عدد 128 بیتی نمایش می دهد. برای درک بهتر این تفاوت، باید گفت که IPv6 فضای آدرس دهی ای بیش از از 7.9 × 10²⁸ برابر بیشتر از IPv4 فراهم میکند.
برای اینکه آدرس های طولانی تر IPv6 راحت تر خوانده شوند، معمولا به صورت هشت بخش نمایش داده می شوند که هر بخش شامل چهار رقم هگزادسیمال است.اعداد هگزادسیمال شامل اعداد 10 تا 15 می باشند.
به عنوان مثال این یک آدرس IPv6 می باشد:
1203:8fe0:fe80:b897:8990:8a7c:99bf:323d
همانطور که می بینید این آدرس ها طولانی هستند و البته ممکن است این آدرسها را به صورت فشرده نیز مشاهده کنید. قوانین IPv6 به شما اجازه میدهد که هر صفر ابتدایی در هر بخش را حذف کنید و همچنین میتوانید یک مجموعه از گروههای صفر پشت سر هم را با دونقطه دوبل (::) جایگزین کنید.
برای مثال، اگر بخشی از یک آدرس IPv6 به این صورت باشد:
...:00bc:...
میتوانید آن را به شکل سادهتر زیر بنویسید:
...:bc:...
برای نشان دادن حالت دوم، اگر در یک آدرس IPv6 چندین گروه پشت سر هم شامل صفر باشند، مانند:
...:18bc:0000:0000:0000:00ff:...
میتوانید این آدرس را به این صورت فشرده کنید و همچنین صفرهای ابتدایی را مانند مثال قبل حذف کنید:
...:18bc::ff...
توجه: شما فقط یکبار میتوانید از نماد (::) در هر آدرس استفاده کنید، زیرا در غیر این صورت امکان بازسازی آدرس کامل وجود نخواهد داشت.
اگرچه استفاده از IPv6 به سرعت در حال افزایش است، در این مقاله از لیارا مفاهیم باقی مانده را با تمرکز بر آدرس های IPv4 بررسی می کنیم، چرا که سادهتر و قابلدرکتر هستند.
کلاس های آدرس IPv4 و محدوده های رزروز شده
آدرس های IPv4 معمولا دو بخش دارند. بخش اول برای شناسایی شبکه ای که آدرس به آن تعلق دارد. بخش دوم برای تعیین میزبان آن شبکه. اینکه دقیقاً کدام بخش از آدرس به شبکه و کدام بخش به میزبان اختصاص دارد، به تنظیمات شبکه بستگی دارد که در ادامه به آن خواهیم پرداخت.
کلاس های آدرس IPv4
آدرسهای IPv4 بهطور سنتی به پنج کلاس مختلف تقسیم میشدند که با حروف A تا E نامگذاری شدهاند. این کلاسها برای تفکیک بخشهای مختلف فضای آدرسدهی IPv4 تعریف شدهاند.
هر کلاس بر اساس چهار بیت ابتدایی آدرس مشخص میشود و با بررسی این بیتها میتوان تشخیص داد که یک آدرس به کدام کلاس تعلق دارد.
بیایید در این بخش به هرکدام از این کلاس بندی ها نگاهی بیندازیم و آن ها را بررسی کنیم.
کلاس A
—0 : اگر اولین بیت یک آدرس IPv4 برابر با 0 باشد، این آدرس به کلاس A تعلق دارد. بنابراین، هر آدرسی در بازهی 0.0.0.0 تا 127.255.255.255 در دستهی کلاس A قرار میگیرد.
کلاس B
–10 : آدرسهایی که با 10 شروع میشوند، در کلاس B قرار دارند. این کلاس شامل تمامی آدرسهای موجود در بازهی 128.0.0.0 تا 191.255.255.255 میشود.
کلاس C
– 110: آدرسهایی که با 110 شروع میشوند، متعلق به کلاس C هستند. این کلاس شامل آدرسهایی در بازهی 192.0.0.0 تا 223.255.255.255 است.
کلاس D
1110 : آدرسهایی که با سه بیت ابتدایی 1 و یک بیت چهارم 0 شروع میشوند، به کلاس D تعلق دارند. این کلاس شامل آدرسهایی در بازهی 224.0.0.0 تا 239.255.255.255 میشود. آدرسهای کلاس D بهطور خاص برای چندپخشی (Multicasting) طراحی شدهاند، به این معنی که میتوان یک بسته داده را بهطور همزمان به چندین میزبان در یک شبکه ارسال کرد.
کلاس E
1111 : آدرسهایی که با چهار بیت ابتدایی 1 شروع میشوند، به کلاس E تعلق دارند. این کلاس شامل آدرسهایی در بازهی 240.0.0.0 تا 255.255.255.255 است. کلاس E معمولاً برای اهداف تحقیقاتی یا رزروهای خاص استفاده میشود.
حالا که با انواع کلاس بندی ها آشنا شدید، بیایید نگاهی دقیق تر به کاربرد و اجزای مختلف آن بیندازیم و ببینیم از گذشته تا حال دستخوش چه تحولاتی بوده اند.
آدرسهای کلاس D برای پروتکلهای چندپخشی (Multicasting) رزرو شدهاند بطوریکه این پروتکلها به شما اجازه میدهند که یک بسته داده را بهطور همزمان برای گروهی از دستگاهها (میزبانها) ارسال کنید. این روش زمانی کاربرد دارد که بخواهید اطلاعاتی مثل ویدیو یا صدا را به چندین کاربر به صورت همزمان منتقل کنید.
آدرسهای کلاس E نیز برای کاربردهای آزمایشی در نظر گرفته شدهاند و در حال حاضر تقریباً استفادهای در شبکهها ندارند.
در گذشته، آدرسهای IP به سه کلاس اصلی A تا C تقسیم میشدند تا بتوانند نیازهای شبکههایی با اندازههای مختلف را برآورده کنند:
- کلاس A: این کلاس برای شبکههای خیلی بزرگ طراحی شده بود. در این نوع آدرسدهی، بخش بزرگی از آدرس به میزبانها اختصاص پیدا میکرد، یعنی شما میتوانستید تعداد زیادی دستگاه را در یک شبکه داشته باشید. فقط بخش کوچکی از آدرس برای شناسایی خود شبکه استفاده میشد.
- کلاس B: این کلاس برای شبکههای متوسط مناسب بود. در اینجا، نیمی از آدرس برای شناسایی شبکه و نیم دیگر برای شناسایی میزبانها به کار میرفت. این باعث میشد که تعداد شبکهها و میزبانها به شکلی متعادلتر تقسیم شوند.
- کلاس C: این کلاس برای شبکههای کوچکتر استفاده میشد. در این روش، بخش بزرگی از آدرس به شناسایی شبکه اختصاص داشت و فقط تعداد محدودی میزبان میتوانستند در هر شبکه قرار بگیرند.
با پیشرفت دنیای فناوری، تقسیمبندی کلاسهای IP به مفهومی قدیمی تبدیل شده است. در ادامه، روشهای جدیدتری مانند CIDR را معرفی میکنیم که مدیریت و تخصیص آدرسهای IP را بهینهتر کردهاند.
محدوده های رزرو شده خصوصی
در فضای آدرسدهی IPv4، بخشهایی برای کاربردهای خاص رزرو شدهاند که یکی از مهمترین آنها، محدودهی لوپبک (Loopback) است. این محدوده شامل آدرسهایی از 127.0.0.0 تا 127.255.255.255 میشود و برای تست ارتباط شبکهای روی خود سیستم استفاده میشود. رایجترین آدرس در این محدوده 127.0.0.1 است که به عنوان آدرس لوکال هاست (localhost) شناخته میشود.
علاوه بر این، هر یک از کلاسهای IP (کلاسهای A، B و C) دارای محدودههایی هستند که برای شبکههای خصوصی در نظر گرفته شدهاند:
- کلاس A: آدرسهای بین 10.0.0.0 تا 10.255.255.255 برای شبکههای خصوصی رزرو شدهاند.
- کلاس B: محدودهی 172.16.0.0 تا 172.31.255.255 برای استفاده خصوصی اختصاص یافته است.
- کلاس C: آدرسهای بین 192.168.0.0 تا 192.168.255.255 برای شبکههای خصوصی مورد استفاده قرار میگیرند.
هر سیستمی که به طور مستقیم به اینترنت متصل نیست (مانند دستگاههایی که از طریق یک روتر یا سیستم NAT به اینترنت وصل میشوند)، میتواند از این آدرسهای خصوصی استفاده کند.
Subnetting چیست؟
زیرشبکهبندی (Subnetting) فرآیندی است که در آن یک شبکه به بخشهای کوچکتر تقسیم میشود. این کار می تواند به دلایل مختلف مفید باشد و به تفکیک گروههای میزبان (Hosts) از یکدیگر کمک کند تا مدیریت آنها آسانتر شود.
همانطور که قبلاً توضیح داده شد، هر آدرس IP به دو بخش تقسیم میشود: بخش شبکه (Network Portion) و بخش میزبان (Host Portion). اینکه چه مقدار از آدرس به شبکه و چه مقدار به میزبان اختصاص داده میشود، بستگی به کلاس آدرس دارد. به عنوان مثال، در کلاس C، سه اکتت اول (هر اکتت ۸ بیت دارد) برای توصیف شبکه استفاده میشود. برای آدرس 192.168.0.15، بخش 192.168.0 نمایانگر شبکه است و عدد 15 نشاندهنده میزبان در آن شبکه میباشد.
Netmask چیست؟
نتماسک (Netmask) ابزاری است که مشخص میکند چه تعداد از بیتهای یک آدرس IP به بخش شبکه تعلق دارند. به طور پیشفرض، هر شبکه تنها یک زیر شبکه (Subnet) دارد که شامل تمام آدرسهای میزبان تعریفشده در آن شبکه است. نتماسک (Netmask) در اصل مشخصکننده تعداد بیتهایی از آدرس است که به بخش شبکه اختصاص داده میشود. سابنت ماسک (Subnet Mask) نیز نوعی نتماسک است که برای تقسیم بیشتر شبکه به زیرشبکههای کوچکتر استفاده میشود. بنابراین هر بیتی از آدرس که برای توصیف بخش شبکه اهمیت دارد، باید در نتماسک (Netmask) با عدد “1” نمایش داده شود.
برای مثال، آدرسی که قبلاً به آن اشاره کردیم یعنی 192.168.0.15 را میتوان به صورت باینری اینگونه نمایش داد:
1100 0000 - 1010 1000 - 0000 0000 - 0000 1111
همانطور که بالاتر توضیح دادیم، بخش شبکه برای آدرسهای کلاس C شامل سه اکتت اول یا به عبارتی 24 بیت اول است. از آنجایی که این بیتها برای شناسایی شبکه اهمیت دارند و باید ثابت بمانند، نتماسک به صورت زیر خواهد بود:
1111 1111 - 1111 1111 - 1111 1111 - 0000 0000
این نتماسک را میتوان در قالب استاندارد IPv4 به شکل 255.255.255.0 نوشت. هر بیتی که در نمایش باینری نتماسک مقدار 0 دارد، به بخش میزبان تعلق دارد و میتواند متغیر باشد. در مقابل، بیتهایی که مقدار 1 دارند، بخش ثابت آدرس هستند و برای شناسایی شبکه یا زیرشبکه به کار میروند. برای تعیین بخش شبکهای یک آدرس، از عملیات AND بیتی (Bitwise AND) بین آدرس و نتماسک استفاده میکنیم. این عملیات، بخش شبکهای آدرس را حفظ کرده و بخش میزبان را حذف میکند.
نتیجه این عملیات روی مثال قبلی ما (192.168.0.15 با نتماسک 255.255.255.0) به صورت زیر خواهد بود:
1100 0000 - 1010 1000 - 0000 0000 - 0000 0000
این آدرس در قالب استاندارد به شکل 192.168.0.0 نمایش داده میشود که نشاندهنده آدرس شبکه است. بخش میزبان یا Host نیز تفاوت بین مقدار اصلی آدرس و بخش شبکهای آن است. در مثال ما، بخش میزبان به صورت باینری 0000 1111 است که معادل 15 میشود.
هدف ما از زیرشبکهبندی (Subnetting) این است که بخشی از فضای میزبان یک آدرس را جدا کرده و از آن برای مشخص کردن زیرشبکههای بیشتر استفاده کنیم. این کار به ما اجازه میدهد تا یک شبکه بزرگ را به چندین بخش کوچکتر تقسیم کنیم، چرا که به مدیریت و سازماندهی بهتر کمک میکند.
برای مثال، وقتی از نتماسک 255.255.255.0 استفاده میکنیم، ۲۵۴ میزبان در شبکه قابل استفاده خواهند بود. دلیل این محدودیت این است که آدرسهایی که به ۰ و ۲۵۵ ختم میشوند، رزرو شده و قابل استفاده نیستند.
حال اگر بخواهیم این شبکه را به دو زیرشبکه تقسیم کنیم، میتوانیم از یک بیت از بخش میزبان برای تعریف زیرشبکه استفاده کنیم.
ادامه مثال:
بخش شبکهای (Network Portion):
1100 0000 - 1010 1000 - 0000 0000
بخش میزبان (Host Portion):
0000 1111
تقسیم شبکه:
برای تعریف زیرشبکه، اولین بیت از بخش میزبان را به عنوان بخشی از ماسک زیرشبکه در نظر میگیریم. به این ترتیب، ماسک زیرشبکه (Subnet Mask) از این شکل:
1111 1111 - 1111 1111 - 1111 1111 - 0000 0000
به این شکل تغییر می کند:
1111 1111 - 1111 1111 - 1111 1111 - 1000 0000
در نمادگذاری استاندارد IPv4، ماسک زیرشبکه فوق به صورت 255.255.255.128 نمایش داده میشود. با این تغییر، اولین بیت از آخرین اکتت (Octet) به عنوان بخشی از آدرس شبکه در نظر گرفته شده و شبکه به دو زیرشبکه تقسیم میشود:
- زیرشبکه اول: از 192.168.0.1 تا 192.168.0.127
- زیرشبکه دوم: از 192.168.0.129 تا 192.168.0.255
نکته: آدرسهای 192.168.0.0 (آدرس شبکه) و 192.168.0.128 (آدرس زیرشبکه دوم) نباید به عنوان آدرس میزبان استفاده شوند.
اگر بیتهای بیشتری از بخش میزبان به شبکه اختصاص داده شود، میتوانیم تعداد زیرشبکهها را افزایش دهیم. البته با این کار، تعداد دستگاههایی که داخل هر زیرشبکه میتوانند قرار بگیرند کمتر خواهد شد.
CIDR چیست؟
سیستمی به نام Classless Inter-Domain Routing یا به اختصار CIDR به عنوان جایگزینی برای روش سنتی زیرشبکهبندی (Subnetting) معرفی شد. ایده اصلی CIDR این است که به جای استفاده از کلاسهای IP، میتوانید دقیقاً مشخص کنید چند بیت از آدرس IP مربوط به بخش شبکه (network) است.
برای مثال، اگه بخواهیم بگوییم، آدرس 192.168.0.15 با نتماسک 255.255.255.0 مرتبط است، میتوانیم از این فرمت استفاده کنیم:
192.168.0.15/24
این عدد /24 یعنی 24 بیت اول این آدرس مربوط به بخش شبکه می باشد و باقی بیتها مربوط به میزبانها (hosts) است.
یکی از مزیت های جالب CIDR این است که به ما اجازه می دهد به راحتی محدوده های بزرگتری از آدرس ها را مدیریت کنیم، چیزی که با روش های سنتی زیرشبکه بندی ممکن نبود. برای مثال در شبکه های کلاس C مانند مثال بالا نمی توانستیم شبکه های 192.168.0.0 و 192.168.1.0 را با هم ترکیب کنیم، زیرا Netmask کلاس C همیشه 255.255.255.0 است و هر کدام به عنوان یک شبکه جداگانه شناخته می شدند.
اما با استفاده از CIDR می توانیم این دو شبکه را به هم وصل کنیم و به صورت یک بلوک بزرگتر آدرس دهی کنیم. این کار با نوشتن 192.168.0.0/23 انجام می شود. به این معنی است که 23 بیت اول مربوط به بخش شبکه و باقی بیت ها برای میزبان می باشد.
اولین شبکه (192.168.0.0) میتواند به این صورت به شکل باینری نمایش داده شود:
1100 0000 - 1010 1000 - 0000 0000 - 0000 0000
شبکه دوم (192.168.1.0) به این صورت نمایش داده میشود:
1100 0000 - 1010 1000 - 0000 0001 - 0000 0000
آدرسی که با CIDR مشخص کردیم نشان میدهد که ۲۳ بیت اول برای شناسایی بخش شبکه مورد استفاده قرار میگیرد. این مقدار معادل نتماسک 255.255.254.0 است، یا به شکل باینری زیر نشان داده می شود:
1111 1111 - 1111 1111 - 1111 1110 - 0000 0000
همانطور که میبینید، در این بلوک شبکه، بیت ۲۴ام میتواند ۰ یا ۱ باشد و همچنان به همان شبکه تعلق داشته باشد، چون فقط ۲۳ بیت اول برای شناسایی شبکه اهمیت دارد.
استفاده از CIDR کنترل بیشتری بر روی تخصیص بلوکهای پیوسته از آدرسهای IP به ما میدهد. این روش نسبت به زیرشبکهبندی سنتی که قبلاً توضیح دادیم، انعطافپذیری و کارایی بسیار بیشتری دارد.
نتیجه گیری
امیدواریم در این مقاله از لیارا با جنبههای مختلف پروتکل IP و تأثیرات آن روی شبکه آشنا شده باشید. برای اینکه بتوانید نرمافزارها و تجهیزات شبکهای خود را به درستی پیکربندی کنید، آشنایی با این مفاهیم کاملاً ضروری است. خوشبختانه، ابزارها و ماشینحسابهای آنلاین زیادی وجود دارند که میتوانند فرآیند کار را برای شما سادهتر کنند. این ابزارها به شما کمک میکنند تا آدرسهای IP و محدودههای مورد نیاز خود را بهراحتی پیدا کنید. برای مثال، وبسایت CIDR.xyz این امکان را فراهم میکند که آدرسهای IP دهدهی را به فرمت باینری (اکتتها) تبدیل کنید و بهصورت بصری، نتماسکهای مختلف CIDR رو مشاهده و درک کنید.