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.
Ushbu bo‘lim mundarijasi
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:
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}")
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.
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.
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()
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
Har tarmoqda ikkita manzil band:
| Manzil | Nima 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.
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}")
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:
| Savol | Javob |
|---|---|
| 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:
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}")
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:
| Diapazon | Hajmi | Odatda qayerda |
|---|---|---|
10.0.0.0/8 | ~16,7 mln | Katta tashkilotlar |
172.16.0.0/12 | ~1 mln | Docker, o'rta tarmoqlar |
192.168.0.0/16 | 65 536 | Uy 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 ishlamayaptiBu 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:
| CIDR | Qurilma uchun joy | Nechta bo'lak (/24 dan) |
|---|---|---|
/24 | 254 | 1 |
/25 | 126 | 2 |
/26 | 62 | 4 |
/27 | 30 | 8 |
/28 | 14 | 16 |
/30 | 2 | 64 |
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.
Ikki kompyuterga bir xil tarmoq, lekin turli maska bersangiz, aloqa bir tomonlama bo'lib qoladi:
| Qurilma | Manzil | Nima deb o'ylaydi |
|---|---|---|
| A | 192.168.1.10/24 | B qo'shnim |
| B | 192.168.1.20/25 | A qo'shnim |
| A | 192.168.1.200/24 | C 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.
- O'z kompyuteringizning IP manzilini toping (
ip addryokiipconfig). - Uni ikkilik ko'rinishda chop eting.
- O'z tarmog'ingiz uchun tarmoq va tarqatish manzillarini hisoblang.
/26tarmoqda nechta qurilma joylashishini hisoblang.10.0.0.0/8ni sakkizta teng bo'lakka bo'ling.- "Bir tarmoqdami" misolini o'z manzillaringiz bilan ishlating.
- Maskani
/16ga o'zgartiring - qaysi javoblar o'zgardi? - Uchta xususiy diapazonni yodlab, ularni yozib chiqing.
169.254.x.xmanzilni ko'rsangiz nima qilishni yozing.- 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.
O‘qish tarixini saqlamoqchimisiz?
Tizimga kirsangiz, tugatgan bo‘limlaringiz saqlanadi va qoldirgan joyingizdan davom etasiz.
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.