Az Internet működésének alapjai
(© Dr. Nagy Rezső)
Második, javított kiadás
A TCP/IP protokollcsalád áttekintése Az Internet néven ismert világméretű hálózat működése a TCP/IP protokollcsaládon alapul. A protokollok1 a kommunikáció folyamatát leíró szabályok. A TCP/IP protokollcsalád, hasonlóan más hálózati rendszerekhez, réteges szerkezetű. Két végpont azonos rétege között definiáltak a protokollok, az egymás alatti rétegek között pedig az interfészek. A rétegek feladata jól elkülöníthető. Az egyes rétegek protokolljai igénybe veszik az alattuk elhelyezkedő réteg egy-egy protokolljának szolgáltatásait, azokon keresztül működnek. Végső soron az üzenetek természetesen az adatátviteli közegen haladnak, a protokollok logikai kapcsolatot írnak le egy-egy adott rétegben. A TCP/IP protokollcsalád – történelmi okok miatt – nem az ISO/OSI által definiált hét rétegű referenciamodellt valósítja meg, de a rétegszerkezet logikája hasonló. A TCP/IP létező fizikai hálózatokra (pl. Ethernet) épül, ezek összekapcsolását teszi lehetővé, ezek fizikai és adatkapcsolati rétegére épül rá, amelyek definíciója kívül esik a TCP/IP szabványainak tekinthető RFC2-k körén. A TCP/IP hálózatokat ez a dokumentum az úgynevezett 5 rétegű hibrid modellben tárgyalja, mivel a fizikai és az adatkapcsolati réteg funkciói nélkül a hálózat nem működhetne. Megemlítjük azonban, hogy hogy szokás a TCP/IP-t 4 rétegű modellben is tárgyalni, ahol a fizikai és az adatkapcsolati réteg funkcióit az úgynevezett kapcsolati (link) rétegbe fogják össze. Ebben a rendszerben a hálózati réteget gyakran Internet réteg néven említik.
1
A protokoll szó eredeti jelentése: jegyzőkönyv
2
Request For Comments
-1-
1. ábra: A TCP/IP rétegszerkezete (5 rétegű hibrid modell) A TCP/IP hálózati rendszer rétegei: Fizikai (physical) réteg: a bitek kódolásával, az adatátviteli közegen való továbbításával foglalkozik. Adatkapcsolati (data link) réteg: olyan protokollokat tartalmaz, amelyek az adatkeretek egy hálózaton belüli átvitelével foglalkoznak (ez azt jelenti, hogy a keretek a következő bekezdésben leírt routereken nem jutnak át). A TCP/IP nem definiálja a hálózatok adatkapcsolati protokolljait, ezeket csak használja. Definiál viszont néhány, ebbe a rétegbe sorolható protokollt, amelyek a fizikai és az IPcímek összerendelését végzik (ARP, RARP)3, illetve számítógépek és hálózatok végpont-végpont jellegű összeköttetését oldják meg (SLIP, PPP). Hálózati (network) réteg: az IP-t (Internet Protocol – hálózatközi protokoll) és néhány segédprotokollját (ICMP, IGMP)4 tartalmazza. Az IP teszi lehetővé a különféle hálózatok összekötését: a több fizikai hálózatra kapcsolódó, forgalomirányító feladatokat ellátó router gépeken keresztül továbbítja egyik fizikai hálózatról a másikra az adatcsomagokat az IP-címek alapján. Az IP-cím bitjeinek egy része a hálózatokat, más része az adott hálózaton belül a hostokat egységes módon azonosítja. 3
Az ARP-t és az RARP-t egyes szerzők a hálózati réteghez sorolják.
4
Az ICMP-t és az IGMP-t egyes szerzők a szállítási réteghez sorolják.
-2-
Szállítási (transport) réteg: protokolljai (UDP, TCP) a számítógépeken futó folyamatok közötti kommunikációt (adatszegmensek átvitelét) valósítja meg a címezhető, és a folyamatokhoz rendelhető portok közvetítésével. Alkalmazási (application) réteg: protokolljainak egy része közvetlenül a felhasználóknak nyújt szolgáltatásokat (pl. TELNET, FTP), más része pedig a hálózati rendszer működését és szolgáltatásait támogatja (pl. DNS, DHCP). Az IP-címek az IP v.4 protokollban Az IP v.4-es címek 32 bites5 bináris címek, amelyeket általában úgynevezett „pontozott decimális” formában írnak fel: a négy bájtot külön-külön decimális számmal fejezik ki és a négy decimális szám közé pontot tesznek. A bitek egy része a hálózatot, a további bitek a hálózaton belül a hostot azonosítják. A hálózati cím és a host-cím bitjeinek száma alapján az IP-címeket osztályokba soroljuk. Az osztályokat a cím első bitjei különböztetik meg. A osztályú címek Az első bit értéke 0. Az első bájt maradék 7 bitje a hálózati cím, a további 3 byte a host-cím. B osztályú címek Az első két bit értéke 10. Az első két bájt maradék 14 bitje a hálózati cím, a további 2 byte a host-cím. C osztályú címek Az első három bit értéke 110. Az első három bájt maradék 21 bitje a hálózati cím, az utolsó byte a host-cím. D osztályú címek Az első négy bit értéke 1110. A D osztályú címek nem egyedi gépek, hanem ún. multicast (többesküldési) csoportok azonosítására szolgálnak. Ezek logikai csoportok, amelyek tagjai lehetnek különböző hálózatokon is. A csoportnak címzett üzenetet az erre alkalmas routerek továbbítják6 azokra a hálózatokra, amelyeken a csoport tagjai találhatók. E osztályú címek Az első négy bit értéke 1111. Későbbi felhasználásra fenntartva.
5
Folyamatban van az átállás az IP v.6 protokollra, amely 128 bites címeket használ.
6
A routerek a szórási (broadcast) címzésű csomagokat nem továbbítják; a multicast csomagokat akkor, ha a multicast csoportnak van tagja a másik hálózaton.
-3-
Hálózati cím
Host-cím
A osztály Hálózati cím
Host-cím
B osztály Hálózati cím
Host-cím
C osztály 2. ábra: IP-cím osztályok
Az adategységek beágyazása 1. Tételezzük fel, hogy az alkalmazási réteg valamelyik protokollját megvalósító program üzenetet kíván küldeni egy másik host valamelyik alkalmazói folyamatának. Az üzenet adatokat, esetleg parancsokat is tartalmaz. Az alkalmazást megvalósító folyamat az üzenetet átadja a szállítási réteg valamelyik protokolljának (UDP, vagy TCP). 2. Az UDP, vagy TCP protokollt megvalósító program fejléccel látja el az üzenetet, amely - többek között – tartalmazza a feladó és a címzett folyamathoz rendelt port-címet. Az így kapott adategységet (ún. szegmenst) átadja az eggyel alacsonyabb rétegben található Internet protokollnak. 3. Az Internet protokollt megvalósító program újabb fejlécet illeszt az említett szegmens elé, így hozza létre az IP-csomagot, amelyet datagramnak is neveznek. Az IP-fejléc tartalmazza többek között a feladó és a címzett host IP-címét, amely az egységes címzést teszi lehetővé az Interneten. Az IPdatagram ezután a fizikai hálózat (ma leggyakrabban Ethernet) adatkapcsolati protokollját megvalósító programhoz kerül.
-4-
3. ábra: A keret felépítése 4. Az Ethernet (vagy más fizikai hálózat) adatkapcsolati protokollja pl. Ethernetkeretet készít az IP-datagramból oly módon, hogy Ethernet fejléccel és lábléccel látja el. Előbbi tartalmazza többek között a feladó és a címzett fizikai, más néven MAC7-címét, utóbbi pedig az ellenőrző bájtokat. Az Ethernet keret az Ethernet hálózaton eljuthat a címzett géphez, vagy, ha az másik hálózaton van, akkor a routerhez. Az üzenetek továbbítása hálózatok között Ha a címzett gép másik hálózaton van, akkor a feladó a routernek küldi el fizikai szinten a keretet (a fizikai, pl. Ethernet fejlécben a router fizikai címe a rendeltetési cím). Az IP fejlécben természetesen a másik hálózaton levő valódi címzett IP-címe található.
7
Media Access Control (közeghozzáférés-vezérlés)
-5-
4. ábra: A csomagok továbbítása hálózatok között 1. A router kiveszi az Ethernet-keretből az IP-datagramot. 2. A router az IP-datagram fejlécében található IP-cím hálózat-azonosító bitjei alapján megállapítja, hogy közvetlenül csatlakozik-e a célhálózatra. Ha nem, akkor a forgalomirányító táblázata alapján egy másik routernek fogja továbbküldeni a csomagot. 3. A továbbküldéshez (akár a célállomásra, akár a másik routernek) az IPdatagramot a routernek ismét be kell ágyaznia egy fizikai keretbe – természetesen annak a fizikai hálózatnak megfelelő keretbe, amelyiken az üzenet továbbhalad. (Ebben a keretben az adatkapcsolati fejlécben a routernek természetesen az ezen a hálózaton érvényes MAC-címe szerepel.) Az üzenetek kicsomagolása a célállomáson 1. Az adatkapcsolati réteg programja kicsomagolja a fizikai-keretből az IPdatagramot és átadja az IP protokollt megvalósító programnak. 2. Az IP programja továbbadja az adatokat a TCP, vagy az UDP protokoll programjának. 3. A TCP, vagy az UDP programja a portcím alapján eldönti, hogy melyik alkalmazói szintű folyamatnak szól az üzenet és annak átadja az adatokat. 4. Az alkalmazói szintű program feldolgozza az adatokat.
Az IP jellemzőinek áttekintése Az IP a hálózati réteg protokollja, datagram protokoll kapcsolat nélküli
-6-
nem megbízható hostok között címez. A kapcsolat nélküli jelleg azt jelenti, hogy a hostok nem tartják nyilván egymást, bármikor, bármelyik, bármelyiknek küldhet csomagot. A csomagok egymástól függetlenek, az útvonal nem meghatározott. Nem megbízható az átvitel, mert a csomag megérkezését és hibátlanságát nem biztosítja: a csomag elveszhet, megduplázódhat, az előbb feladott csomag később érkezhet. A megbízható átvitelt magasabb rétegbeli protokoll biztosíthatja. Az UDP jellemzőinek áttekintése Az UDP (User Datagram Protocol) a szállítási réteg protokollja, datagram jellegű protokoll kapcsolat nélküli nem megbízható portok között, közvetve folyamatok között címez. Az UDP egyszerűbb, gyorsabb szállítási protokoll, mint a TCP. Az UDP-t használó alkalmazási szintű protokolloknak (pl. TFTP) maguknak kell biztosítaniuk a megbízható átvitelt. A TCP jellemzőinek áttekintése Az TCP (Transmission Control Protocol) a szállítási réteg protokollja adatfolyam jellegű protokoll virtuális kapcsolatot épít ki megbízható portok között, közvetve folyamatok között címez. A virtuális kapcsolat kiépítése az 5.a ábrán látható három üzenetből álló kézfogásos (handshake) folyamattal történik. Az A gépen futó TCP-program egy SYN üzenetet8 küld a B gép megfelelő programjának, ami a kapcsolatfevételi szándékot jelzi. A B oldal egy nyugtázást (ACK) és kapcsolatfelvételi szándékot (SYN) is jelző üzenettel válaszol, végül az A oldal nyugtázza B üzenetét (ACK). Ettől kezdve A és B kölcsönösen nyilvántartja egymás adatfolyamát, és az érkező szegmenseket nyugtázza. Az adatfolyam jelleg azt jelenti, hogy a küldött adatbájtoknak sorszáma van egy egységes adatsorozaton belül, tehát sorrendjük meghatározott, így az esetleg felcserélt sorrendben érkező szegmensek helyes sorrendje visszaállítható, az elveszett szegmensek hiánya detektálható, és e szegmensek újra elküldhetők9.
8
A SYN, ill. ACK üzenetek a TCP-fejléc megfelelő mezőinek beállításával valósulnak meg.
9
Mint már említettük, a TCP-szegmenseket IP-datagramok szállítják, tehát elveszhetnek, duplázódhatnak, megcserélődhetnek. A TCP most ismertetendő nyugtázási mechanizmusa azonban helyreállítja az adatfolyamot.
-7-
A megbízható átvitelt a pozitív nyugtázás és a nyugtázás elmaradása esetén a szegmens megismétlése biztosítja. A pozitív nyugtázás azt jelenti, hogy a szegmens hibátlan megérkezése esetén a címzett nyugtázó (ACK) üzenetet küld. A TCP nem alkalmazza az egyes protokollokban előforduló negatív nyugtázást, tehát explicit módon nem kéri újra a hibás szegmenst, hanem úgy viselkedik, mintha a szegmens nem érkezett volna meg, tehát nem válaszol. Természetesen a nyugta elmaradása miatt a feladó ismételni fogja a szegmenst.
5. ábra: A TCP kapcsolatfelépítési és nyugtázási mechanizmusa A TCP nyugtázási mechanizmusa A TCP-fejléc tartalmaz egy számot (Sequence Number), amely megadja a szegmens első adatbájtjának sorszámát az adatfolyamon belül, s ez a szám azonosítja a TCP-szegmenst (tehát nem a szegmensnek van sorszáma). A nyugtázó üzenet tartalmaz egy nyugtázási számot (Acknowledgement Number), ez a szám a vett szegmens utolsó adatbájtja utáni bájt, tehát a következőként várt szegmens első bájtjának sorszáma az adatfolyamban. Ebből értesül a feladó, hogy az adatfolyam átvitele hányas számú bájtig történt meg sikeresen. Az 5.b ábrán látható a nyugtázás alapelve. Példánkban az A-ról a B-re küldött szegmens első bájtjának sorszáma az adatfolyamon belül 1, a szegmens adatainak száma 100. A szegmens megérkezése után B nyugtázást küld A-nak, a nyugtázási szám 101, tehát az adatfolyamban a szegmens után következő első bájt sorszáma. Ezután A elküldi a 101-es bájttal kezdődő szegmenst, amely szintén 100 bájt adatot tartalmaz, ezért a szegmens megérkezése után B 201-es nyugtázási számú nyugtát küld.
-8-
Ha az összeköttetés minősége nem nagyon rossz, tehát viszonylag ritkán kell ismételni, akkor jobb időkihasználást biztosít a 5.c ábrán látható csúszóablakos nyugtázási mechanizmus. Itt nem kell minden szegmens elküldése után megvárni a nyugtázást, hanem a fogadó fél által definiált pufferméret („ablak”) beteltéig több szegmens is elküldhető. Minden küldött szegmens-fejlécben – így a csak nyugtázó szegmensében is - benne van az aktuális ablakméret, tehát hogy hány bájtnyi hely van még a pufferban. Ha egy szegmensre megérkezik a nyugtázás, és a fejrész ablakméret-mezőjéből az derül ki, hogy az alkalmazás már kivette a pufferból az adatokat, vagy egy részüket, akkor küldhető a következő szegmens. Példánkban az ablak mérete 300 bájt, a szegmensek egységesen 100 bájtot tartalmaznak. Az ábrán megfigyelhető, hogy az első három szegmenst A várakozás nélkül elküldi, viszont a 301-es sorszámú bájttal kezdődő szegmenst csak akkor, amikor az első nyugta (W=300-as ablakmérettel) megérkezett. Mi történik vajon, ha az 1-es bájttal kezdődő szegmens után a 201-es bájttal kezdődő érkezik meg? Ezt az üzenetet B nem nyugtázhatja, hiszen 301-es nyugtázási számot kellene küldenie, ami azt jelentené, hogy a 300-as bájttal bezárólag az adatfolyam helyesen megérkezett, valójában pedig a 101-estől 200asig terjedő sorszámú bájtok még hiányoznak. B tehát a nyugtával megvárja a 101-es bájttal kezdődő szegmens megérkezését, ekkor azonban egyetlen üzenettel is nyugtázhatja (301-es nyugtázási számmal) a két szegmenst; sőt, ha időközben a 301-es bájttal kezdődő szegmens is megérkezett, 401-es nyugtázási számmal a három szegmenst. Ha a 101-es bájttal kezdődő szegmens elvész, akkor B egyáltalán nem küld nyugtázást. Mivel A egy bizonyos időkorláton belül nem kap nyugtát, megismétli a 101-es bájttal kezdődő szegmenst. Erre válaszként B elküldi a közben beérkezett valamennyi szegmens nyugtázását (példánkban valószínűleg 401-es nyugtázási számmal). Igaz, mire ez a nyugtázás megérkezik, lehet, hogy A már ismételten elküldte mindhárom szegmenst. Ilyenkor B mindhárom szegmens érkezésekor 401-es nyugtázási számú üzenettel válaszol. Joggal merül fel a kérdés, hogy vajon mekkora legyen az említett időkorlát, amelynek leteltével a küldő fél ismételni kezd, hiszen A és B lehet ugyanazon a helyi hálózaton, de lehet a Föld legtávolabbi pontján is, ahová routerek tucatjain át vezet az út. A TCP-t megvalósító program úgy oldja meg ezt a problémát, hogy „megtanulja” az adott kapcsolatban szokásos válaszidőt (van egy kiindulási érték, de ezt a tapasztalatoktól függően módosítja).
-9-