5-bo‘lim
Marshrutlash
Marshrutlash jadvali, eng uzun prefiks qoidasi, standart yo'l, TTL va traceroute qanday ishlaydi.
Ushbu bo‘lim mundarijasi
Paket 192.168.1.10 dan 93.184.216.34 ga ketyapti. Orada
o'nlab qurilma bor va ularning hech biri butun yo'lni
bilmaydi.
Har biri faqat bitta savolga javob beradi: keyingi qadam kim?
Marshrutlash jadvali #
Har bir kompyuterda va har bir marshrutizatorda jadval bor. Undagi har qator: "bu tarmoqqa borish uchun - mana bunga ber".
import ipaddress
# Marshrutlash jadvali: (tarmoq, keyingi qadam, interfeys)
JADVAL = [
("192.168.1.0/24", None, "eth0"), # to'g'ridan-to'g'ri ulangan
("192.168.2.0/24", "192.168.1.1", "eth0"),
("10.0.0.0/8", "192.168.1.1", "eth0"),
("10.5.0.0/16", "192.168.1.9", "eth0"), # aniqroq yo'l
("0.0.0.0/0", "192.168.1.1", "eth0"), # standart yo'l
]
def yol_topish(manzil):
m = ipaddress.IPv4Address(manzil)
mos = []
for tarmoq, keyingi, interfeys in JADVAL:
t = ipaddress.IPv4Network(tarmoq)
if m in t:
mos.append((t.prefixlen, tarmoq, keyingi, interfeys))
if not mos:
return None
# ENG UZUN prefiks yutadi
return max(mos)
for manzil in ["192.168.1.50", "10.5.7.2", "10.9.0.1", "93.184.216.34"]:
uzunlik, tarmoq, keyingi, interfeys = yol_topish(manzil)
qadam = keyingi if keyingi else "to'g'ridan-to'g'ri"
print(f"{manzil:<15} -> {tarmoq:<15} /{uzunlik:<2} {qadam}")
192.168.1.50 -> 192.168.1.0/24 /24 to'g'ridan-to'g'ri
10.5.7.2 -> 10.5.0.0/16 /16 192.168.1.9
10.9.0.1 -> 10.0.0.0/8 /8 192.168.1.1
93.184.216.34 -> 0.0.0.0/0 /0 192.168.1.1
Eng uzun prefiks qoidasi #
Diqqat qiling: 10.5.7.2 ikkita qatorga mos keldi -
10.0.0.0/8 ham, 10.5.0.0/16 ham uni o'z ichiga oladi.
Tanlov qoidasi bitta va u juda muhim: eng uzun prefiks
yutadi. /16 /8 dan aniqroq, demak u tanlanadi.
Mantiq oddiy: aniqroq bilgan odam haqli.
"Butun 10.x.x.x ni Anvarga bering" - bu umumiy qoida. "Lekin 10.5.x.x ni Malikaga bering" - bu aniqroq ko'rsatma.
Aniqroq ko'rsatma umumiysini bekor qiladi. Xuddi shu qoida tufayli katta tarmoqlarni buzmasdan, ichidan kichik bo'lakni boshqa yo'lga burish mumkin.
Standart yo'l #
Oxirgi qator - 0.0.0.0/0 - alohida diqqatga loyiq. Uning
prefiksi nol bit, ya'ni u hamma manzilga mos keladi.
Prefiksi eng qisqa bo'lgani uchun u har doim oxirgi tanlov bo'ladi: boshqa hech narsa mos kelmasa, paket shu yo'ldan ketadi.
Uni standart shlyuz (default gateway) deb atashadi. Uy tarmog'ingizda bu - routeringiz.
| Jadvaldagi qator | Ma'nosi |
|---|---|
192.168.1.0/24 dev eth0 | Qo'shnilarim - o'zim yetkazaman |
10.5.0.0/16 via 192.168.1.9 | Bu tarmoq uchun maxsus yo'l |
0.0.0.0/0 via 192.168.1.1 | Qolgan hamma narsa - routerga |
Linux va macOS da:
ip route
Windows da:
route print
default via ... deb boshlanadigan qator - aynan sizning
standart shlyuzingiz. Internet ishlamay qolganda birinchi
tekshiriladigan narsa - shu qator bormi.
TTL - cheksiz aylanishdan himoya #
Marshrutlash jadvallari noto'g'ri sozlansa, paket halqa ichiga tushib qolishi mumkin: A B ga yuboradi, B A ga qaytaradi, va hokazo.
Buning oldini olish uchun har IP paketda TTL (*time to live*) maydoni bor. Har marshrutizator undan bittani ayiradi. Nolga yetsa - paket tashlanadi.
# Har marshrutizator TTL ni bittaga kamaytiradi
YOL = ["uy-routeri", "provayder-1", "magistral", "chet-el-tuguni",
"manzil-serveri"]
def jonat(ttl):
print(f"TTL = {ttl} bilan jo'natildi")
for tugun in YOL:
ttl -= 1
if ttl == 0:
print(f" {tugun}: TTL tugadi -> paket tashlandi")
print(f" {tugun}: ICMP 'vaqt tugadi' javobi qaytariladi")
return tugun
print(f" {tugun}: TTL = {ttl}, uzatildi")
print(" manzilga yetib bordi")
return None
# traceroute aynan shunday ishlaydi: TTL ni 1 dan oshirib boradi
for ttl in [1, 2, 3]:
kim = jonat(ttl)
print(f" => {ttl}-qadamdagi qurilma: {kim}")
print()
jonat(10)
TTL = 1 bilan jo'natildi
uy-routeri: TTL tugadi -> paket tashlandi
uy-routeri: ICMP 'vaqt tugadi' javobi qaytariladi
=> 1-qadamdagi qurilma: uy-routeri
TTL = 2 bilan jo'natildi
uy-routeri: TTL = 1, uzatildi
provayder-1: TTL tugadi -> paket tashlandi
provayder-1: ICMP 'vaqt tugadi' javobi qaytariladi
=> 2-qadamdagi qurilma: provayder-1
TTL = 3 bilan jo'natildi
uy-routeri: TTL = 2, uzatildi
provayder-1: TTL = 1, uzatildi
magistral: TTL tugadi -> paket tashlandi
magistral: ICMP 'vaqt tugadi' javobi qaytariladi
=> 3-qadamdagi qurilma: magistral
TTL = 10 bilan jo'natildi
uy-routeri: TTL = 9, uzatildi
provayder-1: TTL = 8, uzatildi
magistral: TTL = 7, uzatildi
chet-el-tuguni: TTL = 6, uzatildi
manzil-serveri: TTL = 5, uzatildi
manzilga yetib bordi
traceroute ning butun siri - shu yerdaE'tibor bering: TTL ni 1, 2, 3 deb oshirib borsak, har safar yo'ldagi navbatdagi qurilma javob beradi.
traceroute (Windows da tracert) aynan shundan foydalanadi.
Uning hech qanday sehri yo'q - u shunchaki TTL ni oshirib,
kim shikoyat qilganini yozib boradi:
traceroute softromeda.com
Ba'zi qatorlarda * * * chiqadi - bu qurilma ICMP javobini
o'chirib qo'ygani, paket yo'qolgani emas.
Marshrutlar qayerdan keladi? #
| Turi | Kim qo'shadi | Misol |
|---|---|---|
| Bevosita ulangan | OT o'zi | Sizning /24 tarmog'ingiz |
| Statik | Administrator qo'lda | 10.5.0.0/16 via ... |
| Dinamik | Protokol avtomatik | OSPF, BGP |
Uy tarmog'ida hammasi oddiy: ikkita qator yetadi. Internet magistralida esa jadvalda 900 mingdan ortiq qator bo'ladi va u doimiy o'zgarib turadi.
Bunday jadvallarni qo'lda yozib bo'lmaydi - shuning uchun marshrutizatorlar bir-biri bilan gaplashib, yo'llarni almashadi. Internet miqyosida bu ish BGP protokoli orqali bajariladi.
BGP da marshrutizator "men falon tarmoqqa yo'l bilaman" deb e'lon qiladi va qo'shnilari unga ishonadi.
Natijada xato (yoki qasddan qilingan) e'lon butun mamlakat trafigini boshqa tomonga burib yuborishi mumkin. Bunday hodisalar haqiqatan bir necha marta sodir bo'lgan.
Buni BGP hijacking deb atashadi. Himoya sekin joriy qilinmoqda: marshrut e'lonlarini imzolash tizimlari (RPKI) shular jumlasidan.
Yana bir bor: pastki qatlam ishonchsiz bo'lsa, himoya yuqorida quriladi. TLS shuning uchun ham kerak.
Marshrutizator va kalit farqi #
| Kalit (switch) | Marshrutizator (router) | |
|---|---|---|
| Qaysi qatlam | 2 - kanal | 3 - tarmoq |
| Nimaga qaraydi | MAC manzil | IP manzil |
| Qayerda ishlaydi | Bitta tarmoq ichida | Tarmoqlar orasida |
| TTL ni kamaytiradimi | Yo'q | Ha |
| Tarqatishni uzatadimi | Ha | Yo'q |
Oxirgi qator muhim: marshrutizator tarqatish paketlarini o'tkazmaydi. Aynan shuning uchun ARP faqat bitta tarmoq ichida ishlaydi.
Uydagi "router" qutisi aslida bir necha qurilma bir tanada: marshrutizator, kalit, Wi-Fi nuqtasi va ko'pincha modem.
- Marshrutlash misolini ishga tushiring.
- Jadvalga
10.5.7.0/24qatorini qo'shing -10.5.7.2qayerga ketdi? - Standart yo'lni jadvaldan olib tashlang va
93.184.216.34ni sinang. yol_topishniNoneqaytargan holatni to'g'ri ishlaydigan qiling.- O'z kompyuteringizda
ip routeyokiroute printni ishga tushiring. - Standart shlyuzingiz manzilini yozib oling.
- TTL misolini ishga tushiring va
YOLga yana ikkita tugun qo'shing. tracerouteni biror saytga ishlating va nechta qadam chiqqanini sanang.* * *qatorlar nimani anglatishini tushuntiring.- Kalit va marshrutizator farqini uch qatorda yozing.
Xulosa #
- Hech bir qurilma butun yo'lni bilmaydi - har biri faqat keyingi qadamni biladi.
- Marshrutlash jadvali: qaysi tarmoq uchun kimga berish kerak.
- Bir necha qator mos kelsa - eng uzun prefiks yutadi.
0.0.0.0/0- standart yo'l, prefiksi eng qisqa, shuning uchun oxirgi tanlov.- Standart yo'lning keyingi qadami - standart shlyuz, uydagi routeringiz.
- TTL har qadamda bittaga kamayadi va nolga yetganda paket tashlanadi.
tracerouteTTL ni 1 dan oshirib borib, yo'ldagi qurilmalarni topadi.- Marshrutlar uch xil: bevosita ulangan, statik va dinamik (BGP, OSPF).
- Internet magistralidagi jadvalda 900 mingdan ortiq qator bor.
- Marshrutizator tarqatish paketlarini o'tkazmaydi - shuning uchun ARP faqat LAN ichida ishlaydi.
Keyingi bo'limda IPv4 manzillari nima uchun tugaganini va IPv6 ularni qanday almashtirayotganini 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.