2-bo‘lim

Qatlamlar - OSI va TCP/IP modeli

Nima uchun tarmoq qatlamlarga bo'lingan, OSI ning yetti qatlami, TCP/IP ning to'rt qatlami va ma'lumot qanday o'raladi.

🕑 7 daqiqa o‘qish 📄 850 so‘z 👁 2 marta ko‘rilgan
Ushbu bo‘lim mundarijasi
  1. Nima uchun qatlam?
  2. Yetti qatlam nima qiladi?
  3. O'rash (inkapsulyatsiya)
  4. Qatlamlarni soketda ko'rish
  5. Har qatlamning o'z "paketi" bor
  6. Xulosa

Bir kompyuterdan ikkinchisiga xabar yuborish uchun juda ko'p narsa kerak: elektr signali, qo'shni qurilmani topish, uzoq tarmoqqa yo'l topish, yo'qolgan paketni qayta yuborish, matnni to'g'ri tushunish.

Bularning hammasini bitta dasturga yozib bo'lmaydi. Shuning uchun ular qatlamlarga bo'lingan.

Nima uchun qatlam? #

Qatlamning asosiy foydasi - almashtirish erkinligi. Wi-Fi dan simli tarmoqqa o'tsangiz, brauzeringiz buni sezmaydi ham.

Qatlam o'zgardiYuqoridagilar o'zgaradimi
Wi-Fi → EthernetYo'q
IPv4 → IPv6Deyarli yo'q
TCP → UDPHa - ilova o'zi hal qiladi
HTTP/1.1 → HTTP/2Yo'q - pastdagilar bilmaydi

Har qatlam faqat o'zidan pastdagiga tayanadi va faqat o'zidan yuqoridagiga xizmat qiladi. Pastdagi qatlam qanday ishlashi yuqoridagini umuman qiziqtirmaydi.

Ikki model, bitta g'oya OSI (nazariy, 7 qatlam) TCP/IP (amaliy, 4 qatlam) 7. Ilova 6. Taqdimot 5. Sessiya 4. Transport 3. Tarmoq 2. Kanal 1. Fizik Ilova HTTP, DNS, SMTP, SSH Transport TCP, UDP Internet IP, ICMP Kanal Ethernet, Wi-Fi OSI - o'qish uchun qulay xarita. Haqiqiy internet TCP/IP ustiga qurilgan. Amalda 5, 6 va 7-qatlamlar bir-biridan deyarli ajratilmaydi.
Suhbatda "3-qatlam" desangiz, hamma IP ni tushunadi

Yetti qatlam nima qiladi? #

#NomiSavolga javob beradiMisol
7IlovaMa'lumot nimani anglatadi?HTTP, DNS
6TaqdimotQaysi kodlash, shifrlanganmi?UTF-8, TLS
5SessiyaSuhbat qachon boshlanib tugaydi?RPC seanslari
4TransportQaysi dasturga va ishonchlimi?TCP, UDP
3TarmoqQaysi kompyuterga, qaysi yo'ldan?IP
2KanalQaysi qo'shniga?Ethernet, Wi-Fi
1FizikBit qanday signalga aylanadi?Mis sim, optika
OSI hech qachon to'liq amalga oshmagan

OSI modeli 1984-yilda xalqaro standart sifatida qabul qilingan va o'z protokollari to'plamiga ega edi.

Lekin amalda TCP/IP yutdi: u soddaroq, bepul va allaqachon ishlab turgan edi.

OSI esa atama sifatida qolib ketdi. Injenerlar bugun ham "2-qatlam kaliti" yoki "7-qatlam balanslovchisi" deb gapiradi - garchi ular TCP/IP tarmog'i haqida gapirayotgan bo'lsa ham.

O'rash (inkapsulyatsiya) #

Har qatlam yuqoridan olgan ma'lumotga o'z sarlavhasini qo'shadi va pastga uzatadi. Bu jarayon o'rash deb ataladi.

Python
malumot = b"GET / HTTP/1.1"

# Har qatlam o'z sarlavhasini ma'lumotning OLDIGA qo'shadi
tcp = b"[TCP 5000>80]" + malumot
ip = b"[IP 10.0.0.5>93.184.216.34]" + tcp
kadr = b"[ETH aa:bb>cc:dd]" + ip + b"[CRC]"

for nom, bayt in [("ilova", malumot), ("TCP", tcp),
                  ("IP", ip), ("Ethernet", kadr)]:
    print(f"{nom:9} {len(bayt):3} bayt")

qoshimcha = len(kadr) - len(malumot)
print()
print("foydali ma'lumot:", len(malumot), "bayt")
print("sarlavhalar:     ", qoshimcha, "bayt")
print("sarlavha ulushi: ", f"{qoshimcha * 100 // len(kadr)}%")

print()
print("simdan ketadigan kadr:")
matn = kadr.decode()
for i in range(0, len(matn), 56):
    print("  " + matn[i:i + 56])
Natija
ilova      14 bayt
TCP        27 bayt
IP         54 bayt
Ethernet   76 bayt

foydali ma'lumot: 14 bayt
sarlavhalar:      62 bayt
sarlavha ulushi:  81%

simdan ketadigan kadr:
  [ETH aa:bb>cc:dd][IP 10.0.0.5>93.184.216.34][TCP 5000>80
  ]GET / HTTP/1.1[CRC]

Oxirgi ikki qator - bu bitta uzluksiz bayt oqimi. Uni o'qish uchun ikkiga bo'ldik, aslida simdan bir butun holda o'tadi.

Sarlavhalar bepul emas

Bu misolda sarlavhalar 81% ni egalladi, chunki xabar juda kichik edi.

Haqiqiy hayotda ham shunday: Ethernet + IP + TCP sarlavhalari odatda 54 bayt atrofida bo'ladi. Agar siz 1 bayt yuborsangiz, simdan 55 bayt o'tadi.

Aynan shuning uchun kichik paketlarni ko'p yuborish katta paketni bir marta yuborishdan ancha qimmat.

Qabul qiluvchi tomonda hamma narsa teskari boradi: har qatlam o'z sarlavhasini olib tashlaydi va qolganini yuqoriga uzatadi. Buni ochish (dekapsulyatsiya) deyiladi.

Qatlamlarni soketda ko'rish #

Python soketi bir vaqtning o'zida bir necha qatlam haqida ma'lumot beradi:

Python
import socket

PORT = 9100

server = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
server.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
server.bind(("127.0.0.1", PORT))
server.listen(1)

mijoz = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
mijoz.connect(("127.0.0.1", PORT))
ulanish, _ = server.accept()

mahalliy = mijoz.getsockname()    # mijozning o'z manzili
uzoq = mijoz.getpeername()        # u ulangan manzil

print("4. Ilova    : matnni biz hal qilamiz - HTTP, SMTP, o'zimizniki")
print("3. Transport: TCP, manzil porti =", uzoq[1])
print("   mijoz porti tizim bergan vaqtinchalik port:",
      mahalliy[1] >= 1024)
print("2. Tarmoq   : IP", mahalliy[0], "->", uzoq[0])
print("1. Kanal    : loopback - haqiqiy tarmoq kartasi ishlatilmaydi")

print()
print("soket oilasi AF_INET (IPv4) mi:", server.family == socket.AF_INET)
print("soket turi SOCK_STREAM (TCP) mi:", server.type == socket.SOCK_STREAM)

mijoz.close()
ulanish.close()
server.close()
Natija
4. Ilova    : matnni biz hal qilamiz - HTTP, SMTP, o'zimizniki
3. Transport: TCP, manzil porti = 9100
   mijoz porti tizim bergan vaqtinchalik port: True
2. Tarmoq   : IP 127.0.0.1 -> 127.0.0.1
1. Kanal    : loopback - haqiqiy tarmoq kartasi ishlatilmaydi

soket oilasi AF_INET (IPv4) mi: True
soket turi SOCK_STREAM (TCP) mi: True

AF_INET - 3-qatlam tanlovi (IPv4), SOCK_STREAM - 4-qatlam tanlovi (TCP). Ikkita satr, ikkita qatlam.

Mijoz porti nima uchun chop etilmadi?

Mijozga port raqamini operatsion tizim o'zi beradi va u har ishga tushirishda boshqacha bo'ladi.

Shuning uchun uning aniq qiymati emas, shartning bajarilishi chop etildi: port 1024 dan katta.

Bu darslikdagi barcha misollar shu qoidaga amal qiladi - chiqish har safar bir xil bo'lishi kerak. Aks holda kitobdagi natijani o'zingiznikiga solishtira olmaysiz.

Har qatlamning o'z "paketi" bor #

Bir xil ma'lumot har qatlamda boshqacha ataladi:

QatlamAtamasiIchida nima bor
IlovaXabar (message)Toza ma'lumot
TransportSegment (TCP) / datagramma (UDP)Port raqamlari
TarmoqPaket (packet)IP manzillar
KanalKadr (frame)MAC manzillar
FizikBitSignal

Suhbatda "paket" so'zi ko'pincha hammasiga nisbatan ishlatiladi. Lekin hujjat yozayotganda aniq atamani tanlash kerak.

Qatlamlar chegarasini buzish - keyin qimmat tushadi

Amalda qatlamlar chegarasi ba'zan buziladi va bu har safar muammo tug'diradi:

BuzilishOqibati
NAT paket ichidagi portni o'zgartiradiFTP va SIP buziladi
Firewall ilova ma'lumotini o'qiydiShifrlansa ishlamay qoladi
Ilova IP manzilni o'zi eslab qoladiMobil tarmoqda uziladi

Qoida oddiy: qatlam faqat o'zi bilishi kerak bo'lgan narsani bilsin.

Amaliy topshiriq
  1. O'rash misolini ishga tushiring.
  2. malumot ni uzunroq matnga almashtiring - sarlavha ulushi qanday o'zgardi?
  3. Sarlavha ulushi 10% dan kam bo'lishi uchun xabar necha bayt bo'lishi kerak?
  4. Yangi "sessiya" qatlamini qo'shib, sarlavhani yana bitta o'rang.
  5. Kadrni ochish (dekapsulyatsiya) funksiyasini yozing.
  6. Soket misolini ishga tushiring va ikki marta taqqoslang.
  7. PORT ni 9200 ga o'zgartiring - nima o'zgardi?
  8. SOCK_STREAM ni SOCK_DGRAM ga almashtiring va xatoni yozing.
  9. OSI ning har qatlami uchun bittadan misol yozing.
  10. Wi-Fi dan simga o'tganda qaysi qatlamlar o'zgarishini ayting.

Xulosa #

  • Tarmoq qatlamlarga bo'lingan: har qatlam bitta masalani yechadi.
  • Qatlamning foydasi - birini almashtirganda qolganlari o'zgarmaydi.
  • OSI - yetti qatlamli nazariy model, atamalar manbai.
  • TCP/IP - to'rt qatlamli amaliy model, haqiqiy internet shunga qurilgan.
  • O'rash: har qatlam ma'lumot oldiga o'z sarlavhasini qo'shadi.
  • Qabul qilishda teskari jarayon - har qatlam o'z sarlavhasini olib tashlaydi.
  • Sarlavhalar bepul emas: kichik xabarda ular hajmning ko'p qismini egallaydi.
  • Har qatlamda o'z atamasi bor: xabar, segment, paket, kadr, bit.
  • AF_INET tarmoq qatlamini, SOCK_STREAM transport qatlamini tanlaydi.
  • Qatlamlar chegarasini buzgan yechimlar (NAT kabi) keyinchalik muammo tug'diradi.

Keyingi bo'limda eng pastki amaliy qatlamdan boshlaymiz: Ethernet, MAC manzil va ARP.

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.