Thuta Learning
Computer Networking
BasicDevOps & Toolsbeginner

Subnetting လက်တွေ့ အသုံးချမှု

ဒီခန်းပြီးရင် ဘာတတ်သွားမလဲ

  • Subnetting လက်တွေ့ အသုံးချမှု concept ကို နားလည်ရှင်းပြနိုင်ရန်
  • Diagram ကို ဖတ်ပြီး packet/data ဘယ်လိုသွားလာသလဲ ခြေရာခံနိုင်ရန်
  • နမူနာ code ကို ကိုယ်တိုင် run ပြီး output စစ်နိုင်ရန်

နားလည်ထားရမယ့် အချက်

Subnetting ဆိုတာ network တစ်ခုကို ယူပြီး host အပိုင်းကနေ bit တွေ ချေးယူကာ network အပိုင်းကို ပေးလိုက်ခြင်းဖြင့် သေးငယ်တဲ့ network များစွာအဖြစ် ခွဲထုတ်တာ ဖြစ်ပါတယ်။ /24 မှာ host bit ရှစ်လုံး ရှိပါတယ်၊ နှစ်လုံး ချေးယူလိုက်ရင် /26 ရပါတယ် — 256 လုံးပါတဲ့ network တစ်ခုအစား 64 လုံးစီပါတဲ့ network လေးခု ဖြစ်သွားပါတယ်။

ဒါကို လုပ်ရတဲ့ အကြောင်းရင်း သုံးမျိုး သီးခြားစီ ရှိပြီး၊ လူတွေက မကြာခဏ ရောထွေးတတ်ပါတယ်။ ပထမတစ်ခုက broadcast ကို ကန့်သတ်ခြင်းပါ — broadcast တစ်ခုဟာ သူ့ subnet ထဲက host တိုင်းဆီ ရောက်ပြီး တိုင်းက စစ်ဆေးရလို့၊ စက်ထောင်ပေါင်းများစွာပါတဲ့ ပြားချပ်ချပ် network တစ်ခုဟာ ဘယ်သူမှ မလိုချင်တဲ့ traffic အတွက် တကယ့် CPU နဲ့ bandwidth ကို ဖြုန်းပစ်ပါတယ်။ ဒုတိယက ခွဲထုတ်ခြင်းနဲ့ policy ပါ — subnet တွေကြား traffic က router ကို ဖြတ်ရမှာဖြစ်ပြီး၊ အဲဒီနေရာက filtering ထားလို့ ရတဲ့နေရာ အတိအကျ ဖြစ်ပါတယ်၊ ဒါကြောင့် printer, server, guest Wi-Fi ကို သီးခြား subnet တွေ ခွဲထားရင် စည်းမျဉ်း အတည်ပြုစရာ နေရာ ရသွားပါတယ်။ တတိယက address ကို ချွေတာခြင်းပါ — router နှစ်ခုကြား point-to-point link တစ်ခုအတွက် address နှစ်ခုပဲ လိုအပ်ပြီး၊ /24 တစ်ခုလုံး ပေးလိုက်ရင် 254 လုံး အလဟဿ ဖြစ်သွားပါတယ်။

Subnet တစ်ခုစီအတွင်းမှာ address နှစ်ခုကို သီးသန့် ဖယ်ထားပါတယ်။ host bit အားလုံး သုည ဖြစ်တဲ့ address က network address — subnet ကိုယ်တိုင်ရဲ့ အမည် ဖြစ်ပါတယ်၊ host bit အားလုံး တစ် ဖြစ်တဲ့ address ကတော့ directed broadcast address ပါ။ နှစ်ခုစလုံးကို စက်တစ်လုံးအတွက် သတ်မှတ်ပေးလို့ မရပါဘူး — ဒါက 2^n − 2 ဆိုတဲ့ ပုံသေနည်း လာရာ ဖြစ်ပါတယ် — host bit n လုံးက address 2^n လုံး ပေးပြီး၊ အဲဒီနှစ်ခုကို နုတ်လိုက်တာပါ။ ဒီပုံသေနည်းမှာ သိထားသင့်တဲ့ ခြွင်းချက်တွေ ရှိပါတယ် — RFC 3021 က point-to-point link တွေမှာ /31 ရဲ့ address နှစ်ခုစလုံးကို သုံးခွင့်ပေးထားပြီး၊ /32 ကတော့ host route တစ်ခုတည်း ဖြစ်ပါတယ်။ ဒါကြောင့် "/24 မှာ host 254 ရှိတယ်" လို့ အလွတ်ကျက်မထားဘဲ တကယ့် prefix ကနေ တွက်ထုတ်ပါ။

text
SPLITTING 192.168.1.0/24 INTO FOUR /26 SUBNETS
----------------------------------------------
BEFORE: one /24 -- 256 addresses, 254 usable, ONE broadcast domain

 +-------------------------------------------------------------+
 |                      192.168.1.0/24                         |
 |   .0 = network        .1 - .254 usable        .255 = bcast  |
 +-------------------------------------------------------------+

Borrow 2 host bits (8 host bits -> 6), giving 2^2 = 4 subnets:

 AFTER:
 +--------------+--------------+--------------+--------------+
 | .0    - .63  | .64   - .127 | .128  - .191 | .192  - .255 |
 |     /26      |     /26      |     /26      |     /26      |
 +--------------+--------------+--------------+--------------+
   network .0     network .64    network .128   network .192
   first   .1     first   .65    first   .129   first   .193
   last    .62    last    .126   last    .190   last    .254
   bcast   .63    bcast   .127   bcast   .191   bcast   .255
   usable  62     usable  62     usable  62     usable  62

Each block loses 2 addresses (network id + broadcast), so
4 x 62 = 248 usable -- six fewer than the original 254.

လက်တွေ့ scenario နဲ့ ချိတ်ကြည့်မယ်

ရုံးခန်းငယ်တစ်ခုအတွက် 192.168.1.0/24 ကို ပေးထားပြီး staff စက်တွေ၊ server တွေ၊ guest Wi-Fi ကို ခွဲထားခိုင်းတယ် ဆိုပါစို့။ /26 လေးခုအဖြစ် ခွဲလိုက်ရင် 192.168.1.0/26, .64/26, .128/26, .192/26 ရပြီး တစ်ခုစီမှာ address 64 လုံးစီ ရှိပါတယ်။ ပထမတစ်ခုကို staff, ဒုတိယကို server, တတိယကို guest ပေးပြီး၊ စတုတ္ထကို နောင်တိုးချဲ့ရန် ချန်ထားလိုက်ပါ။

အခု block တစ်ခုကို ဂရုတစိုက် လိုက်ကြည့်ရအောင်၊ ဘာလို့လဲဆိုတော့ ဒီနေရာမှာပဲ အမှားတွေ ဖြစ်တတ်လို့ပါ။ 192.168.1.64/26 မှာ network address က 192.168.1.64 ဖြစ်ပြီး broadcast address က 192.168.1.127 ဖြစ်ပါတယ်။ သုံးလို့ရတဲ့ host တွေက 192.168.1.65 ကနေ 192.168.1.126 အထိ — ၆၂ လုံး ဖြစ်ပါတယ်။ အဖြစ်များတဲ့ bug တစ်ခုက .64 ဒါမှမဟုတ် .127 ကို "အားနေသလို မြင်လို့" စက်တစ်လုံးအတွက် ပေးလိုက်တာပါ — .64 ကို ငြင်းပယ်ခံရမယ် ဒါမှမဟုတ် ထူးဆန်းစွာ ပြုမူပါလိမ့်မယ်၊ .127 ကတော့ subnet ထဲက host တိုင်းကို သူ့ဆီ လာတဲ့ traffic တိုင်းကို စစ်ဆေးခိုင်းပါလိမ့်မယ်။

ဂဏန်းဆိုင်ရာ ကုန်ကျစရိတ်ကိုလည်း သတိထားပါ။ /24 တစ်ခုက သုံးလို့ရတဲ့ address 254 လုံး ပေးခဲ့ပေမယ့်၊ /26 လေးခုက 4 × 62 = 248 လုံးပဲ ပေးပါတယ်။ Subnetting က subnet တစ်ခုစီအတွက် address နှစ်လုံးစီ အမြဲ ဆုံးရှုံးစေတာမို့၊ အလွန်သေးငယ်တဲ့ subnet အများကြီး ခွဲလွန်းရင် address space ကို မြန်မြန် ကုန်စေပါတယ်။ အောက်က code က block လေးခုလုံးရဲ့ range တွေကို တွက်ပြီး၊ prefix တိုးလာတာနဲ့အမျှ သုံးလို့ရတဲ့ အရေအတွက် ဘယ်လို ကျဆင်းလဲ — /31 ခြွင်းချက်အပါအဝင် — ပြသပေးပါတယ်။

အတူတူ စမ်းရေးကြည့်မယ်

python
import ipaddress

parent = ipaddress.ip_network("192.168.1.0/24")
print("parent %s: %d addresses, %d usable"
      % (parent, parent.num_addresses, parent.num_addresses - 2))
print()

print("%-17s%-14s%-15s%s"
      % ("subnet", "network", "broadcast", "usable range"))
print("-" * 72)
for sub in parent.subnets(new_prefix=26):
    hosts = list(sub.hosts())
    print("%-17s%-14s%-15s%s - %s"
          % (sub, sub.network_address, sub.broadcast_address,
             hosts[0], hosts[-1]))
print()

# Why "2^n - 2": the all-zeros host is the network id and the
# all-ones host is the broadcast address, so neither is assignable.
for prefix in (24, 26, 28, 30, 31, 32):
    net = ipaddress.ip_network("10.0.0.0/%d" % prefix)
    usable = len(list(net.hosts()))
    print("/%-3d %5d addresses -> %5d usable" % (prefix, net.num_addresses,
                                                 usable))
You should see
parent 192.168.1.0/24: 256 addresses, 254 usable

subnet           network       broadcast      usable range
------------------------------------------------------------------------
192.168.1.0/26   192.168.1.0   192.168.1.63   192.168.1.1 - 192.168.1.62
192.168.1.64/26  192.168.1.64  192.168.1.127  192.168.1.65 - 192.168.1.126
192.168.1.128/26 192.168.1.128 192.168.1.191  192.168.1.129 - 192.168.1.190
192.168.1.192/26 192.168.1.192 192.168.1.255  192.168.1.193 - 192.168.1.254

/24    256 addresses ->   254 usable
/26     64 addresses ->    62 usable
/28     16 addresses ->    14 usable
/30      4 addresses ->     2 usable
/31      2 addresses ->     2 usable
/32      1 addresses ->     1 usable

၅ မိနစ် စမ်းကြည့်

new_prefix=26 ကို 28 အဖြစ် ပြောင်းပြီး subnet ဘယ်နှစ်ခု ထွက်လာလဲ၊ တစ်ခုစီမှာ သုံးလို့ရတဲ့ host ဘယ်နှစ်လုံး ရှိလဲ ကြည့်ပါ။ ပြီးရင် /24 တစ်ခုကို /26 ခွဲတာနဲ့ /28 ခွဲတာ ဘယ်ဟာက address ပိုဆုံးရှုံးလဲ တွက်ချက်ပြီး၊ router-to-router link တွေအတွက် /30 နဲ့ /31 ဘယ်လောက် ကွာလဲ နှိုင်းယှဉ်ပါ။

သတိလေးတစ်ချက်

/24 ဆိုတိုင်း host 254 လုံး အမြဲရှိတယ်လို့ တွက်ခြင်း — တကယ့် mask ကို မစစ်ဘဲ ယူဆလိုက်ရင် /26 (62 လုံး) ဒါမှမဟုတ် /30 (2 လုံး) မှာ IP စာရင်း လုံးဝ မှားသွားပါတယ်

Subnet တစ်ခုရဲ့ ပထမဆုံး address (network id) ဒါမှမဟုတ် နောက်ဆုံး address (broadcast) ကို host တစ်ခုအဖြစ် ပေးမိခြင်း — /26 မှာ .64 က network address ဖြစ်ပေမယ့် /24 မှာတော့ သာမန် host address ဖြစ်နေလို့ မှားလွယ်ပါတယ်

RFC 3021 — Using 31-Bit Prefixes on IPv4 Point-to-Point LinksComputer Networking

ဒီနေရာမှာ လူအများမှားတတ်တယ်

  • /24 ဆိုတိုင်း host 254 လုံး အမြဲရှိတယ်လို့ တွက်ခြင်း — တကယ့် mask ကို မစစ်ဘဲ ယူဆလိုက်ရင် /26 (62 လုံး) ဒါမှမဟုတ် /30 (2 လုံး) မှာ IP စာရင်း လုံးဝ မှားသွားပါတယ်
  • Subnet တစ်ခုရဲ့ ပထမဆုံး address (network id) ဒါမှမဟုတ် နောက်ဆုံး address (broadcast) ကို host တစ်ခုအဖြစ် ပေးမိခြင်း — /26 မှာ .64 က network address ဖြစ်ပေမယ့် /24 မှာတော့ သာမန် host address ဖြစ်နေလို့ မှားလွယ်ပါတယ်
  • နမူနာ code ကို production network ပေါ် တိုက်ရိုက်မစမ်းဘဲ local/test environment တွင် အရင်အတည်ပြုပါ။

လေ့ကျင့်ခန်း

new_prefix=26 ကို 28 အဖြစ် ပြောင်းပြီး subnet ဘယ်နှစ်ခု ထွက်လာလဲ၊ တစ်ခုစီမှာ သုံးလို့ရတဲ့ host ဘယ်နှစ်လုံး ရှိလဲ ကြည့်ပါ။ ပြီးရင် /24 တစ်ခုကို /26 ခွဲတာနဲ့ /28 ခွဲတာ ဘယ်ဟာက address ပိုဆုံးရှုံးလဲ တွက်ချက်ပြီး၊ router-to-router link တွေအတွက် /30 နဲ့ /31 ဘယ်လောက် ကွာလဲ နှိုင်းယှဉ်ပါ။

You'll know it worked when: parent 192.168.1.0/24: 256 addresses, 254 usable subnet network broadcast usable range ------------------------------------------------------------------------ 192.168.1.0/26 192.168.1.0 192.168.1.63 192.168.1.1 - 192.168.1.62 192.168.1.64/26 192.168.1.64 192.168.1.127 192.168.1.65 - 192.168.1.126 192.168.1.128/26 192.168.1.128 192.168.1.191 192.168.1.129 - 192.168.1.190 192.168.1.192/26 192.168.1.192 192.168.1.255 192.168.1.193 - 192.168.1.254 /24 256 addresses -> 254 usable /26 64 addresses -> 62 usable /28 16 addresses -> 14 usable /30 4 addresses -> 2 usable /31 2 addresses -> 2 usable /32 1 addresses -> 1 usable

Subnetting လက်တွေ့ အသုံးချမှု | Thuta Learning