4-bo‘lim

IP manzil va tarmoq maskasi

IPv4 manzil 32 bit sifatida, maska va CIDR yozuvi, tarmoq va tarqatish manzillari, xususiy diapazonlar va "bir tarmoqdami" savoli.

🕑 9 daqiqa o‘qish 📄 857 so‘z 👁 0 marta ko‘rilgan
Ushbu bo‘lim mundarijasi
  1. IP manzil - bu 32 bitli son
  2. Maska: qayeri tarmoq, qayeri qurilma
  3. Asosiy savol: bir tarmoqdami?
  4. Xususiy va ommaviy manzillar
  5. Bitta tarmoqni bo'lish (subnetting)
  6. Xulosa

Kanal qatlami faqat qo'shnisini ko'radi. Butun dunyo bo'ylab manzil berish uchun boshqa raqam kerak - IP manzil.

IP manzil - bu 32 bitli son #

192.168.1.10 nuqtali yozuv odamlar uchun. Kompyuter uchun bu shunchaki bitta son:

Python
import ipaddress

manzil = ipaddress.IPv4Address("192.168.1.10")

print("manzil    :", manzil)
print("son sifati:", int(manzil))
print("ikkilikda :", format(int(manzil), "032b"))

# Har bayt - bitta oktet
oktetlar = str(manzil).split(".")
print()
print("oktet  o'nlik  ikkilik")
for o in oktetlar:
    print(f"  {o:>3}      {int(o):>3}   {int(o):08b}")
Natija
manzil    : 192.168.1.10
son sifati: 3232235786
ikkilikda : 11000000101010000000000100001010

oktet  o'nlik  ikkilik
  192      192   11000000
  168      168   10101000
    1        1   00000001
   10       10   00001010

To'rt oktet, har biri 8 bit - jami 32 bit. Demak IPv4 da jami 2³² = 4 294 967 296 ta manzil bor. Ko'pdek tuyuladi, lekin ular allaqachon tugagan - bu haqda 6-bo'limda gaplashamiz.

Nima uchun har oktet 0 dan 255 gacha?

8 bit bilan yozish mumkin bo'lgan eng katta son - 11111111, ya'ni 255.

Shuning uchun 192.168.1.300 degan manzil mavjud emas va uni yozishga urinish xato beradi.

Maska: qayeri tarmoq, qayeri qurilma #

IP manzil ikki qismdan iborat:

  • tarmoq qismi - qaysi tarmoqqa tegishli;
  • qurilma qismi - o'sha tarmoq ichidagi raqami.

Qayerda chegara turishini maska aytadi.

192.168.1.10 / 24 manzil 11000000 10101000 00000001 00001010 maska 11111111 11111111 11111111 00000000 tarmoq qismi - 24 bit qurilma - 8 bit "/24" nimani anglatadi Maskadagi birlar soni. /24 - birinchi 24 bit tarmoq, qolgan 8 bit qurilma uchun. Bu yozuv CIDR deb ataladi va 255.255.255.0 bilan bir xil ma'noni beradi. Qurilma bitlari qancha ko'p bo'lsa, tarmoq shuncha katta.
Maska - bu shunchaki "nechta bit tarmoqqa tegishli" degan raqam
Python
import ipaddress

for matn in ["192.168.1.0/24", "10.0.0.0/8", "172.16.5.0/28"]:
    t = ipaddress.IPv4Network(matn)
    print(matn)
    print("  maska        :", t.netmask)
    print("  maska bitlari:", format(int(t.netmask), "032b"))
    print("  tarmoq manzili:", t.network_address)
    print("  tarqatish     :", t.broadcast_address)
    print("  jami manzil   :", t.num_addresses)
    print("  qurilma uchun :", t.num_addresses - 2)
    print()
Natija
192.168.1.0/24
  maska        : 255.255.255.0
  maska bitlari: 11111111111111111111111100000000
  tarmoq manzili: 192.168.1.0
  tarqatish     : 192.168.1.255
  jami manzil   : 256
  qurilma uchun : 254

10.0.0.0/8
  maska        : 255.0.0.0
  maska bitlari: 11111111000000000000000000000000
  tarmoq manzili: 10.0.0.0
  tarqatish     : 10.255.255.255
  jami manzil   : 16777216
  qurilma uchun : 16777214

172.16.5.0/28
  maska        : 255.255.255.240
  maska bitlari: 11111111111111111111111111110000
  tarmoq manzili: 172.16.5.0
  tarqatish     : 172.16.5.15
  jami manzil   : 16
  qurilma uchun : 14
Nima uchun "jami" va "qurilma uchun" farq qiladi?

Har tarmoqda ikkita manzil band:

ManzilNima uchun ishlatib bo'lmaydi
Birinchisi (192.168.1.0)Tarmoqning o'z nomi
Oxirgisi (192.168.1.255)Tarqatish - hammaga

Shuning uchun /24 da 256 emas, 254 ta qurilma joylasha oladi.

/28 kabi kichik tarmoqda bu sezilarli: 16 tadan faqat 14 tasi foydali.

Asosiy savol: bir tarmoqdami? #

Har safar paket yuborishdan oldin operatsion tizim bitta savolga javob beradi: manzil mening tarmog'imdami?

  • Ha bo'lsa - ARP bilan MAC topiladi va to'g'ridan-to'g'ri yuboriladi.
  • Yo'q bo'lsa - paket marshrutizatorga beriladi.
Python
import ipaddress

MENING_IP = ipaddress.IPv4Interface("192.168.1.10/24")
MENING_TARMOQ = MENING_IP.network

print("mening manzilim :", MENING_IP.ip)
print("mening tarmog'im:", MENING_TARMOQ)
print()

for manzil in ["192.168.1.20", "192.168.1.255", "192.168.2.7", "8.8.8.8"]:
    m = ipaddress.IPv4Address(manzil)
    ichkarida = m in MENING_TARMOQ
    if ichkarida:
        yol = "to'g'ridan-to'g'ri (ARP + Ethernet)"
    else:
        yol = "marshrutizator orqali"
    belgi = "ha " if ichkarida else "yoq"
    print(f"{manzil:<15} bir tarmoqdami: {belgi}  -> {yol}")
Natija
mening manzilim : 192.168.1.10
mening tarmog'im: 192.168.1.0/24

192.168.1.20    bir tarmoqdami: ha   -> to'g'ridan-to'g'ri (ARP + Ethernet)
192.168.1.255   bir tarmoqdami: ha   -> to'g'ridan-to'g'ri (ARP + Ethernet)
192.168.2.7     bir tarmoqdami: yoq  -> marshrutizator orqali
8.8.8.8         bir tarmoqdami: yoq  -> marshrutizator orqali
192.168.1.255 uchun "ha" chiqdi - bu xatomi?

Yo'q. in operatori "shu diapazon ichidami" degan savolga javob beradi, 192.168.1.255 esa haqiqatan shu diapazonda.

Lekin u tarqatish manzili, ya'ni alohida qurilmaga tegishli emas. Ikki savolni aralashtirmaslik kerak:

SavolJavob
Diapazon ichidami?Ha
Qurilmaga berish mumkinmi?Yo'q

Haqiqiy kodda ikkinchi savol uchun alohida tekshiruv yoziladi.

192.168.2.7 ga e'tibor bering: u atigi bitta oktet bilan farq qiladi, lekin /24 maska uchun bu butunlay boshqa tarmoq. Paket marshrutizatorga ketadi.

Xususiy va ommaviy manzillar #

Hamma IP manzil ham internetda ishlamaydi. Ba'zi diapazonlar faqat ichki tarmoqlar uchun ajratilgan:

Python
import ipaddress

manzillar = [
    "192.168.1.10",   # uy tarmog'i
    "10.20.30.40",    # katta tashkilot ichida
    "172.16.0.5",     # Docker odatda shu yerdan oladi
    "8.8.8.8",        # ommaviy DNS
    "127.0.0.1",      # loopback
    "169.254.7.9",    # DHCP javob bermaganda
]

print(f"{'manzil':<15} {'xususiymi':<10} {'turi'}")
print("-" * 46)
for m in manzillar:
    a = ipaddress.IPv4Address(m)
    if a.is_loopback:
        tur = "loopback"
    elif a.is_link_local:
        tur = "havola-mahalliy"
    elif a.is_private:
        tur = "xususiy"
    else:
        tur = "ommaviy"
    print(f"{m:<15} {'ha' if a.is_private else 'yoq':<10} {tur}")
Natija
manzil          xususiymi  turi
----------------------------------------------
192.168.1.10    ha         xususiy
10.20.30.40     ha         xususiy
172.16.0.5      ha         xususiy
8.8.8.8         yoq        ommaviy
127.0.0.1       ha         loopback
169.254.7.9     ha         havola-mahalliy

Uchta asosiy xususiy diapazon bor:

DiapazonHajmiOdatda qayerda
10.0.0.0/8~16,7 mlnKatta tashkilotlar
172.16.0.0/12~1 mlnDocker, o'rta tarmoqlar
192.168.0.0/1665 536Uy routerlari

Shu manzillar butun dunyoda takrorlanadi: sizning 192.168.1.10 ingiz va qo'shningizniki - ikki xil qurilma. Ular internetga chiqqanda NAT orqali o'tadi (10-bo'lim).

169.254.x.x ni ko'rsangiz - DHCP ishlamayapti

Bu manzilni kompyuter o'ziga o'zi beradi, agar tarmoqdan manzil ololmasa.

Uni ko'rsangiz, sabab deyarli har doim bitta: router javob bermayapti yoki kabel ulanmagan.

Windows da bu "cheklangan ulanish" deb ko'rsatiladi.

Bitta tarmoqni bo'lish (subnetting) #

/24 tarmog'ingizda 254 ta joy bor, lekin sizga ikkita alohida guruh kerak - masalan xodimlar va mehmonlar. Maskani uzaytirish yo'li bilan uni bo'lish mumkin:

CIDRQurilma uchun joyNechta bo'lak (/24 dan)
/242541
/251262
/26624
/27308
/281416
/30264

Har qo'shilgan bit tarmoqlar sonini ikki barobar ko'paytiradi va har biridagi joyni ikki barobar kamaytiradi.

/30 alohida holat: ikkita manzil - aynan ikki marshrutizatorni bir-biriga ulash uchun yetarli.

Maskani noto'g'ri qo'yish - eng ko'p uchraydigan xato

Ikki kompyuterga bir xil tarmoq, lekin turli maska bersangiz, aloqa bir tomonlama bo'lib qoladi:

QurilmaManzilNima deb o'ylaydi
A192.168.1.10/24B qo'shnim
B192.168.1.20/25A qo'shnim
A192.168.1.200/24C qo'shnim
B-C boshqa tarmoqda

Natijada A javob yuboradi, B esa uni marshrutizatorga jo'natadi - va paket yo'qoladi.

Shuning uchun bir tarmoqdagi hamma qurilmada maska bir xil bo'lishi shart.

Amaliy topshiriq
  1. O'z kompyuteringizning IP manzilini toping (ip addr yoki ipconfig).
  2. Uni ikkilik ko'rinishda chop eting.
  3. O'z tarmog'ingiz uchun tarmoq va tarqatish manzillarini hisoblang.
  4. /26 tarmoqda nechta qurilma joylashishini hisoblang.
  5. 10.0.0.0/8 ni sakkizta teng bo'lakka bo'ling.
  6. "Bir tarmoqdami" misolini o'z manzillaringiz bilan ishlating.
  7. Maskani /16 ga o'zgartiring - qaysi javoblar o'zgardi?
  8. Uchta xususiy diapazonni yodlab, ularni yozib chiqing.
  9. 169.254.x.x manzilni ko'rsangiz nima qilishni yozing.
  10. Turli maskali ikki qurilma nima uchun gaplasha olmasligini tushuntiring.

Xulosa #

  • IPv4 manzil - 32 bitli son, to'rt oktetga bo'lib yoziladi.
  • Jami 2³² ta manzil bor va ular allaqachon tugagan.
  • Manzil ikki qismdan iborat: tarmoq va qurilma.
  • Maska chegara qayerda ekanini aytadi; /24 - 24 bit tarmoqqa tegishli.
  • Har tarmoqda ikki manzil band: tarmoq nomi va tarqatish.
  • Har yuborishdan oldin OT "manzil mening tarmog'imdami?" degan savolga javob beradi.
  • Ha bo'lsa - ARP orqali to'g'ridan-to'g'ri; yo'q bo'lsa - marshrutizatorga.
  • Uchta xususiy diapazon: 10/8, 172.16/12, 192.168/16 - internetda ishlamaydi.
  • 169.254.x.x - DHCP javob bermaganining belgisi.
  • Maskani uzaytirish tarmoqni bo'ladi; bir tarmoqda maska hammada bir xil bo'lishi shart.

Keyingi bo'limda marshrutizator ichiga kiramiz va paket yo'lni qanday topishini ko'ramiz.

Xatolik topdingizmi?

Imlo xatosi, ishlamaydigan kod yoki noto‘g‘ri ma‘lumotni ko‘rsangiz - bizga xabar bering. Har bir xabar administrator tomonidan ko‘rib chiqiladi.