Cisco CCNA · 200-301 v2.0

Subnet Mask، CIDR و محاسبات باینری

Subnet Mask و CIDR دو روش برای بیان یک مرز واحد هستند: مرزی که مشخص می‌کند چه مقدار از IPv4 به Network و چه مقدار به Host تعلق دارد. هدف این درس حفظ کردن فهرست Maskها نیست؛ باید بتوانی Prefix را به Mask تبدیل کنی، تعداد بیت‌های Host را بفهمی و اعتبار Mask را در Configuration واقعی بررسی کنی.

در پایان این درس باید بتوانی
  • Subnet Mask و CIDR را به‌عنوان دو نمایش یک مفهوم توضیح بدهی
  • Prefix را به Mask ده‌دهی تبدیل کنی
  • Mask را به Prefix برگردانی
  • تعداد بیت Host و ظرفیت پایه Subnet را محاسبه کنی
  • Mask معتبر و نامعتبر را تشخیص بدهی
  • Mask واقعی Interface را در Cisco IOS بررسی کنی

Subnet Mask و CIDR

Subnet Mask هم مثل IPv4 Address یک عدد ۳۲ بیتی است و به شکل چهار Octet نوشته می‌شود. تفاوتش این است که بیت‌های ۱ از سمت چپ پشت سر هم قرار می‌گیرند و بخش Network را مشخص می‌کنند. بعد از اولین ۰، دیگر نباید دوباره ۱ ببینی. به همین دلیل Maskهای معتبر الگوی مشخصی دارند.

نمونه /24
۱۱۱۱۱۱۱۱.۱۱۱۱۱۱۱۱.۱۱۱۱۱۱۱۱.۰۰۰۰۰۰۰۰
255.255.255.0

۲۴ بیت ۱  →  /24

سه Octet اول کاملاً ۱ هستند و هرکدام ۲۵۵ می‌شوند. Octet آخر کاملاً ۰ است و مقدار ۰ می‌گیرد. پس 255.255.255.0 همان /24 است. CIDR روشی است که به‌جای نوشتن Mask کامل، تعداد بیت‌های ۱ را بعد از علامت / می‌نویسد. مثلاً /24 همان 255.255.255.0 و /16 همان 255.255.0.0 است. در کار روزمره هر دو شکل را می‌بینی، پس باید بتوانی بین آن‌ها تبدیل انجام بدهی. مزیت Prefix این است که مرز Network را مستقیم نشان می‌دهد. وقتی /27 می‌بینی، می‌دانی ۲۷ بیت اول Network و ۵ بیت آخر Host هستند. هنوز لازم است Mask /27 را هم بشناسی، چون Cisco IOS و سیستم‌عامل‌ها ممکن است Mask را به صورت ده‌دهی نمایش دهند. Subnet Mask یک عدد ۳۲ بیتی است که مرز Network و Host را مشخص می‌کند. بخش Network در Mask با بیت‌های ۱ و بخش Host با بیت‌های ۰ نشان داده می‌شود. نکته مهم این است که این ۱ها باید از سمت چپ پیوسته باشند؛ یعنی Mask معتبر چیزی مثل ۱۱۱۱۱۱۱۱.۱۱۱۱۱۱۱۱.۱۱۱۱۰۰۰۰.۰۰۰۰۰۰۰۰ است، نه الگویی که وسط آن ۰ و دوباره ۱ ظاهر شود. Prefix همان تعداد بیت‌های ۱ پیوسته را به شکل کوتاه‌تر نشان می‌دهد.

بنابراین /20 و 255.255.240.0 دو روش نوشتن یک Mask هستند. در CLI بعضی دستورها Mask ده‌دهی می‌خواهند و در مستندات یا Routeها معمولاً Prefix دیده می‌شود. باید بتوانی بین این دو شکل رفت‌وبرگشت کنی تا وقتی یک طرف /27 و طرف دیگر 255.255.255.224 می‌بینی، آن‌ها را دو چیز متفاوت فرض نکنی.

ساخت Mask از روی Prefix

در Octetی که مرز Network و Host داخل آن قرار می‌گیرد، فقط چند مقدار معتبر داریم: ۰، ۱۲۸، ۱۹۲، ۲۲۴، ۲۴۰، ۲۴۸، ۲۵۲، ۲۵۴ و ۲۵۵. دلیلش این است که بیت‌های ۱ باید از چپ و بدون فاصله باشند.

الگوی بیت‌ها
00000000 = 0
10000000 = 128
11000000 = 192
11100000 = 224
11110000 = 240
11111000 = 248
11111100 = 252
11111110 = 254
11111111 = 255

مثلاً 255.255.255.160 Mask معتبر نیست، چون ۱۶۰ در Binary برابر ۱۰۱۰۰۰۰۰ است و بین بیت‌های ۱ یک ۰ قرار گرفته. Subnet Mask عادی چنین الگویی ندارد. برای ساخت Mask از روی Prefix، بیت‌های ۱ را از چپ پر می‌کنیم. /26 یعنی ۲۶ بیت ۱. سه Octet اول ۲۴ بیت را می‌سازند. دو بیت دیگر در Octet چهارم روشن می‌شوند: ۱۲۸ و ۶۴. جمع آن‌ها ۱۹۲ است. پس /26 می‌شود ۲۵۵.۲۵۵.۲۵۵.۱۹۲.

محاسبه /26
/26
۲۴ بیت اول = ۲۵۵.۲۵۵.۲۵۵
۲ بیت بعدی = ۱۲۸ + ۶۴ = ۱۹۲

Subnet Mask = 255.255.255.192

برای /27 سه بیت از Octet آخر روشن است: ۱۲۸ + ۶۴ + ۳۲ = ۲۲۴. پس Mask برابر 255.255.255.224 می‌شود. با همین روش هر Prefix را می‌توانی بسازی. برای ساخت Mask از روی Prefix، اول تعداد Octetهای کامل را مشخص کن. هر Octet کامل ۸ بیت است. مثلاً /26 شامل ۲۴ بیت کامل در سه Octet اول و دو بیت دیگر در Octet چهارم است. دو بیت روشن در Octet چهارم یعنی ۱۱۰۰۰۰۰۰ که برابر ۱۹۲ می‌شود؛ پس Mask برابر 255.255.255.192 است. همین روش برای /18، /21 یا /29 هم کار می‌کند.

نمونه تبدیل /21
/21 = 16 bit کامل + 5 bit در Octet سوم

Octet سوم:
۱۱۱۱۱۰۰۰ = ۲۴۸

Subnet Mask:
255.255.248.0

برای سرعت بیشتر می‌توانی مقادیر رایج یک Octet ماسک را بشناسی: ۱۲۸، ۱۹۲، ۲۲۴، ۲۴۰، ۲۴۸، ۲۵۲، ۲۵۴ و ۲۵۵. اما بهتر است این اعداد را نتیجه تعداد بیت‌های ۱ بدانی، نه یک جدول بی‌معنی. وقتی منطق روشن باشد، حتی اگر عدد را یادت برود می‌توانی دوباره آن را بسازی.

تبدیل Mask به Prefix و تعداد Host

حالا مسیر برعکس را انجام بده. Mask برابر 255.255.255.240 است. سه Octet اول هرکدام ۸ بیت ۱ دارند؛ یعنی ۲۴ بیت. عدد ۲۴۰ در Binary برابر ۱۱۱۱۰۰۰۰ است و چهار بیت ۱ دارد. ۲۴ + ۴ = ۲۸، پس Prefix برابر /28 است. اگر این تبدیل را چند بار با Binary انجام بدهی، بعد از مدتی Maskهای رایج را سریع تشخیص می‌دهی. حفظ کردن جدول می‌تواند سرعتت را بیشتر کند، ولی در آزمون و کار واقعی اگر جدول یادت رفت باید بتوانی منطق را از صفر بازسازی کنی. IPv4 همیشه ۳۲ بیت است. پس تعداد بیت‌های Host از رابطه ۳۲ منهای Prefix به دست می‌آید. برای /24 هشت بیت Host داریم، برای /26 شش بیت و برای /30 دو بیت.

نمونه
/26 → 32 - 26 = 6 Host bits
/28 → 32 - 28 = 4 Host bits
/30 → 32 - 30 = 2 Host bits

تعداد بیت Host بعداً برای محاسبه اندازه Subnet و تعداد آدرس‌های قابل استفاده به کار می‌رود. فعلاً رابطه را بفهم: Prefix بزرگ‌تر یعنی Host bit کمتر و Subnet کوچک‌تر. برای تبدیل Mask به Prefix، تعداد بیت‌های ۱ را می‌شماری. سه Octet برابر ۲۵۵ یعنی ۲۴ بیت ۱. اگر Octet آخر ۲۴۰ باشد، ۲۴۰ در Binary برابر ۱۱۱۱۰۰۰۰ است و چهار بیت دیگر به Network اضافه می‌شود؛ بنابراین Mask برابر /28 است. این روش از حدس زدن بسیار مطمئن‌تر است، مخصوصاً در Maskهایی که مرز در Octet دوم یا سوم قرار دارد. بعد از دانستن Prefix، تعداد بیت Host از رابطه ۳۲ - Prefix به دست می‌آید. در /27 پنج بیت Host داریم. پنج بیت می‌تواند ۲^۵ یعنی ۳۲ آدرس بسازد. در Subnetهای معمولی IPv4، Network Address و Broadcast Address برای Host عادی استفاده نمی‌شوند، پس ۳۰ آدرس قابل استفاده باقی می‌ماند. این رابطه را باید بفهمی چون انتخاب Prefix در طراحی شبکه دقیقاً به ظرفیت موردنیاز وابسته است.

منطق باینری Subnet Mask

ممکن است با Calculator یا ابزارهای آنلاین Subnetting را در چند ثانیه انجام بدهی، ولی در CCNA باید بتوانی نتیجه را بررسی کنی. اگر ابزار اشتباه استفاده شود یا Prefix را نادرست وارد کنی، فقط کسی که منطق را می‌فهمد متوجه خروجی غیرعادی می‌شود. Binary برای ما ابزار فهم است، نه هدف درس. هرجا Mask یا Prefix گیج‌کننده شد، آن Octet را به بیت تبدیل کن و مرز Network و Host را ببین. این روش تقریباً همه ابهام‌های Subnetting را روشن می‌کند. اگر Prefixی را یادت نیست، از ۳۲ خانه ذهنی استفاده کن. به تعداد Prefix از سمت چپ ۱ قرار بده و بقیه را ۰ کن. بعد هر گروه ۸ بیتی را جداگانه به Decimal تبدیل کن. مثلاً /21 یعنی ۱۶ بیت کامل در دو Octet اول و پنج بیت ۱ در Octet سوم.

محاسبه /21
11111111.11111111.11111000.00000000
255      .255      .248      .0

/21 = 255.255.248.0

این روش کندتر از حفظ جدول است ولی قابل اعتماد است. وقتی چند بار انجامش بدهی، مقادیر ۱۲۸، ۱۹۲، ۲۲۴، ۲۴۰، ۲۴۸، ۲۵۲ و ۲۵۴ کم‌کم طبیعی می‌شوند. Binary در Subnetting برای پیدا کردن مرزها و کنترل جواب استفاده می‌شود. اگر فقط فرمول Block Size را حفظ کنی، در Prefixهای غیرمعمول یا محاسبه داخل Octet سوم ممکن است اشتباه کنی. Binary به تو نشان می‌دهد کدام بیت‌ها ثابت و کدام بیت‌ها قابل تغییرند. مثلاً در /26 شش بیت اول Octet چهارم متعلق به Network هستند و فقط دو بیت آخر می‌توانند بین Hostها تغییر کنند؛ به همین دلیل هر Subnet 64 آدرس دارد. روش خوب برای تمرین این است که Prefix را یک بار به Mask، یک بار به تعداد بیت Host و یک بار به اندازه Subnet تبدیل کنی. اگر هر سه نتیجه با هم سازگار باشند، احتمال خطا خیلی کمتر می‌شود. مثلاً /29 باید Mask برابر 255.255.255.248، سه بیت Host و هشت آدرس در هر Subnet داشته باشد. اگر یکی از این سه نتیجه با بقیه جور نبود، محاسبه را دوباره بررسی کن.

بررسی Mask در شبکه واقعی

در مراحل مربوط به ACL با Wildcard Mask روبه‌رو می‌شوی. ظاهر آن هم چهار عدد نقطه‌دار است، ولی کارش با Subnet Mask فرق دارد. مثلاً برای Subnet Mask برابر 255.255.255.0، Wildcard متناظر معمولاً 0.0.0.255 است. فعلاً فقط این تفاوت را بشناس تا وقتی بعداً Wildcard دیدی آن را به‌اشتباه Subnet Mask تفسیر نکنی. Subnet Mask برای مشخص کردن بیت‌های Network و Host در Addressing استفاده می‌شود. Wildcard در ACL و بعضی تنظیمات Cisco معنی متفاوتی دارد و در مرحله امنیت کامل آموزش داده می‌شود. اگر در Configuration با Mask غیرعادی روبه‌رو شدی، آن Octet را به Binary تبدیل کن. Mask معتبر باید از چپ فقط ۱های پیوسته داشته باشد و بعد فقط ۰ بیاید. 255.255.255.192 معتبر است چون Octet آخر ۱۱۰۰۰۰۰۰ است. ولی 255.255.255.200 معتبر نیست چون ۲۰۰ در Binary الگوی پیوسته ۱ و ۰ لازم را ندارد. این بررسی ساده در عیب‌یابی تنظیمات دستی مفید است. بعضی سیستم‌عامل‌ها Mask نامعتبر را اصلاً قبول نمی‌کنند، ولی فهم دلیل رد شدن آن مهم‌تر از دیدن یک پیام خطاست. بعضی Prefixها مثل /18 یا /20 مرز را در Octet سوم قرار می‌دهند، نه Octet چهارم. روش محاسبه هیچ فرقی نمی‌کند. برای /18، دو Octet اول ۱۶ بیت کامل هستند و دو بیت دیگر در Octet سوم روشن می‌شوند. دو بیت ۱۲۸ و ۶۴ با هم ۱۹۲ می‌شوند، پس Mask برابر 255.255.192.0 است.

نمونه /18 و /20
/18 = 255.255.192.0
/20 = 255.255.240.0

دیدن Maskهایی مثل 255.255.240.0 در شروع ممکن است عجیب باشد، چون بیشتر مثال‌های ساده روی Octet آخر هستند. اگر فقط بیت‌های همان Octet مرزی را جدا کنی، محاسبه همان چیزی است که قبلاً انجام دادی. در Cisco IOS معمولاً هنگام تنظیم IPv4 روی Interface، آدرس را همراه Subnet Mask ده‌دهی می‌نویسی. مثلاً ip address 10.10.20.1 255.255.255.192. اگر Prefix را اشتباه تبدیل کنی، Interface وارد Subnet متفاوتی می‌شود و دستگاه‌های همان LAN ممکن است Local و Remote را متفاوت تشخیص دهند.

نمونه Cisco IOS
interface GigabitEthernet0/0
 ip address 10.10.20.1 255.255.255.192

قبل از Apply کردن Addressing روی تجهیزات واقعی، Prefix و Mask را یک بار جداگانه کنترل کن. اشتباه یک بیت در Mask می‌تواند روی تمام Hostهای متصل به آن Interface اثر بگذارد. Wildcard Mask را با Subnet Mask قاطی نکن. Wildcard بعدها در بعضی Configurationها مثل ACL و OSPF دیده می‌شود و منطق نمایش آن با Subnet Mask فرق دارد. در Addressing خود Interface، Mask معمولی یا Prefix همان چیزی است که باید بررسی شود. وارد کردن Wildcard به جای Subnet Mask می‌تواند Configuration را کاملاً اشتباه کند. روی Cisco IOS آدرس Interface معمولاً با IP و Mask ده‌دهی تنظیم می‌شود. بعد از Configuration باید خروجی دستگاه را ببینی و مطمئن شوی مقدار ثبت‌شده همان چیزی است که طراحی کرده‌ای. اگر مستندات /27 نوشته‌اند اما روی Interface 255.255.255.0 دیده می‌شود، نباید به شباهت IPها اعتماد کنی؛ اختلاف Mask باید بررسی و اصلاح شود، چون روی تشخیص شبکه متصل و Routing دستگاه اثر می‌گذارد.

نمونه Configuration و کنترل
interface GigabitEthernet0/0
 ip address 192.168.50.1 255.255.255.224
 no shutdown

show running-config interface GigabitEthernet0/0
show ip interface GigabitEthernet0/0
سناریوی عملی

برای Prefix /29، ۲۹ بیت Network داریم. ۲۴ بیت در سه Octet اول قرار می‌گیرند و پنج بیت دیگر در Octet چهارم روشن می‌شوند: ۱۲۸ + ۶۴ + ۳۲ + ۱۶ + ۸ = ۲۴۸. پس Mask برابر 255.255.255.248 است. سه بیت Host باقی می‌ماند، بنابراین هر Subnet در مجموع ۲^۳ یعنی ۸ آدرس دارد. در درس‌های بعد مشخص می‌کنیم از این ۸ آدرس چند مورد برای Host قابل استفاده‌اند.

اشتباهات رایج

اشتباه‌های رایج در Mask و Prefix

  • Mask را فقط از روی ظاهر حفظ نکن
  • در Mask عادی بعد از شروع بیت‌های ۰ دوباره بیت ۱ قرار نده
  • تعداد Host bit را با خود Prefix اشتباه نگیر
  • /26 را 26 Host bit تفسیر نکن؛ ۲۶ بیت Network است
تمرین عملی

تمرین Mask و Prefix

  1. Prefixهای /20، /25، /26، /27، /28 و /29 را به Mask تبدیل کن
  2. Maskهای 255.255.0.0 و 255.255.255.224 را به Prefix تبدیل کن
  3. برای هر Prefix تعداد Host bit را بنویس
  4. عددهای ۱۹۲، ۲۲۴، ۲۴۰ و ۲۴۸ را به Binary تبدیل کن و تعداد بیت ۱ را مشخص کن

نکته‌هایی که باید با خودت ببری

  • Subnet Mask مرز Network و Host را با بیت‌های ۱ و ۰ نشان می‌دهد
  • CIDR Prefix تعداد بیت‌های Network را مستقیم بیان می‌کند
  • Maskهای معتبر الگوی پیوسته ۱ سپس ۰ دارند
  • ۳۲ منهای Prefix تعداد Host bit را می‌دهد
  • Binary راه مطمئن برای بازسازی Mask و Prefix است
خودسنجی

Mask و Prefix را از روی منطق پیدا کن

/27 چه Subnet Maskی دارد؟

۲۵۵.۲۵۵.۲۵۵.۲۲۴.

255.255.255.240 چه Prefixی است؟

/28.

یک /29 چند Host bit دارد؟

۳ بیت، چون ۳۲ - ۲۹ = ۳.

منابع رسمی

منابع مرجع این درس

مطالعه همیشه آزاد است

برای ذخیره پیشرفت وارد حساب شو

حساب کاربری برای آزمون و ثبت مرحله‌ها استفاده می‌شود

ورود یا ثبت‌نام