A címzési rendszer kialakításánál azt a valóságos tényt vették figyelembe, hogy a címzés legyen hierarchikus: azaz vannak hálózatok, és ezen belül gépek (hosztok). Így célszerű a címet két részre bontani: egy hálózatot azonosító, és ezen belül egy, a gépet azonosító címre. Mivel a cím hossza 32 bit, ezért ezt kellett két részre bontani, olyan módon, hogy a nagy hálózatokban lévő sok gépet is meg lehessen címezni. Négy különböző formátum használható, ahogy ezt az 21. ábrán bemutatjuk.
A cím négy bájtját szokásos a közéjük pontokat írva, a bájtok (byte)
decimális megfelelőjével leírni. Az első három címforma 128 hálózatot hálózatonként
16 millió hoszttal (A osztályú cím), 16 384
hálózatot 64 K-nyi hoszttal (B osztályú cím),
illetve 2 millió hálózatot, (amelyek feltételezhetően LAN-ok),
egyenként 254 hoszttal azonosít. Az utolsó
előtti címforma (D osztályú cím) többszörös címek (multicast address) megadását
engedélyezi, amellyel egy datagram egy hosztcsoporthoz
irányítható. Az utolsó címforma (E) fenntartott.
A címzéseknél a hálózat és hoszt címének
szétválasztására cím-maszkokat (netmask) használnak. Alkalmazásakor bitenkénti
ÉS műveletet végezve az IP cím és a cím-maszk
között, a hálózati cím leválasztására. C osztályú címek esetén ezért a maszk:
255.255.255.0, míg B osztálynál: 255.255.0.0, stb.
A címzésnél bizonyos címtartományok nem használhatók.
Sajnos a fejlemények azt mutatják, hogy ez a felosztás a tervezés gyenge pontja volt, és már ma is címhiánnyal küszködik az Internet. Természetesen ez nem azt jelenti, hogy már 232 számítógép van a hálózatban, hanem a kialakított címrendszerben nagyon sok címet nem használnak fel. (Hol van a világon 128, egyenként 65000 gépet tartalmazó hálózat?) Ezért rövidesen új címzést fognak bevezetni (a tervezet neve: IPv6), ahol a címmező 128 bit hosszú lesz. Az Internetben a rétegeknek megvan az egyedi azonosítója a címzéshez:
Réteg | Címzési módszer |
---|---|
Alkalmazási | hoszt neve, portja |
Internet | |
Hálózat elérési | Fizikai cím |
A hoszt neve, — amely valamilyen szimbolikus
név — azonosítja a felhasználó számára a gépet — “így hívja”. Pl.: "clmc-denes".
Az Internet használata során két, egymástól akár sok ezer kilométerre lévő számítógép
között alakul ki kapcsolat. Nyilvánvalóan ezért minden egyes gépet azonosíthatóvá,
címezhetővé kell tenni. Erre két, egymással egyenértékű módszer áll rendelkezésre.
Az elsődleges módszer az amit IP címzésként
már megismertünk, míg a másodlagos — a felhasználók által szinte kizárólagosan
használt módszer az azonosító domén (domain)
nevek rendszere.
Amikor a hálózathoz újabb gép csatlakozik, egy — az adott hálózatnak adott címtartományból
— négy tagból (bájtból) álló azonosító számot, Internet
címet (IP-address) kap. A címtartományok kiosztását az Internet központi
adminisztrációja, az INTERNIC (Internet Network
Information Center) végzi. A körzeti központok az adott gépet ezen a számon
tartják nyilván. A tényleges címeket általában decimális alakban, pl. 193.230.175.1
használják.
A címben szereplő egyes címrészeket ma már nem véletlenszerűen határozzák meg,
hanem hierarchikusan felosztott földrajzi terület, domének alapján. Így a cím
egyes oktetjei (8 bites csoprtjai) a domént, az ezen belüli aldomént és hosztot,
azaz a címzett számítógép helyét jelölik ki. A domén általában egy ország globális
hálózati egysége vagy hálózati kategóriája, az aldomén ezen belül egy különálló
hálózatrész, a hoszt pedig az adott hálózatrészen
belüli felhasználókat kiszolgáló gép azonosító száma.
A felhasználó számára könyebben használható a név alapján történő címzés, ahol
a sok számjegyből álló IP cím helyett egy
karakterlánc, az FQDN (Fully Qualified Domain
Name) használható. Az FQDN, azaz a teljes domén-név, amelyet a DNS
(Domain Name System), vagyis a domén-név rendszer szerint képeznek, ugyanúgy
hierarchikus felépítésű, mint az IP cím, formailag
pedig több, egymástól ponttal elválasztott tagból áll.
Például az denes.clmc.topnet.ro címben az egyes tagok sorrendben a kiszolgáló
gépet, a hosztgépet , az aldomént azaz hálózati
altartományt (clmc.topnet), végül pedig a domént, vagyis az adott ország globális
hálózati tartományát (ro) határozzák meg. A hálózati altartomány, az aldomén
több tagot is tartalmazhat, de akár hiányozhat is a cím domén-név részéből.
A domén-név egyes részeit néha eltérő
kifejezéssel adják meg: a hálózati tartomány domén vagy network,
az altartomány aldomén vagy subnet, a kiszolgáló
gép a hoszt vagy hoszt-address.
A domén-nevek használata az Internet számára némi járulékos munkát ad, hiszen
egy adatcsomag továbbítás előtt a hosztcímből
meg kell határozni a vele egyenértékű IP címet,
és a küldemény hosztcímét ezzel kell helyettesítenie.
Az összetartozó IP címeket és hosztcímeket
a hosztgép először a helyi címtáblázatban
(host table) keresi. Ha a keresés
eredménytelen, a hosztgép az Internet valamelyik
speciális szolgáltató-gépéhez, a névszolgáltatóhoz
(Name Server-hez) fordul, amely
az Internet gépeinek adatait tartalmazó, szabályos időközönként frissített sokszor
hatalmas címtáblázatot kezeli. A címtáblázatokban a host.aldomén.domén
alakú hostcímhez a vele egyenértékű IP cím,
esetleg hivatkozási (alias) alak is tartozhat. Az IP
cím kérésekor azt is közölni kell a névszolgáltatóval, hogy az mire kell.
Ha levelezéshez kérjük, akkor a névszolgáltató a névhez tartozó MX (Mail Exchange)
adatrekordot adja vissza, különben a tényleges IP
címet.
Az esetek nagy többségében szerencsére nem kell a fenti lépések mindegyikét
végrehajtani. A legfelső kiszolgáló (gyökér) ugyanis egyben a legfelső szinten
lévő tartományok (pl. hu) névkiszolgálójaként is szerepel. Tehát a gyökér
kiszolgáló felé irányuló egyetlen kérdéssel a MIT névkiszolgálójához lehet eljutni.
Az alkalmazott szoftverek pedig a már feltett kérdésekre kapott válaszokra emlékeznek,
az így megkapott domén név és a hozzá tartozó IP
cím eltárolódik. Persze minden ilyen információnak van egy megfelelő élettartama,
ami tipikusan pár napnak felel meg. Az élettartam lejárta után az információkat
fel kell frissíteni, amivel az esetleges változások is nyomon követhetők.
Az IP cím — hosztcím
átalakítást a TCP/IP automatikusan végzi, de a host operációs rendszer
parancs kiadásával mi is lekérdezhetjük egy ismert felhasználó számát.
Az egyes hosztgépekhez nemcsak IP
cím vagy az azzal egyenértékű domén cím tartozik, hanem a hosztgépek
a rajtuk futó alkalmazások eléréséhez tartozó portcímet (Application Selection
Address) is használnak. Ezért a címeket ki kell egészíteni az alkalmazás elérésére
szolgáló portcímmel is:
hostcím:portcím
Míg az egyes hosztokat a hosztcímük egyértelműen meghatározzák, addig a hosztokat több felhasználó használja, tehát a hozzájuk kapcsolódó felhasználókat is meg kell különböztetnünk egymástól. Erre azok felhasználói neve (login- vagy felhasználónév), vagyis az adott hoszton egyedi azonosító-név szolgál. Egy személy Internet elérhető levelezési (E-mail) címe tehát két főrészből áll, és a következő alakú:
felhasználónév@host.aldomén.domén
Jelenleg a legtöbb hálózat fizikai és adatkapcsolati szinten Ethernet kártyákat
használ. Mivel az Ethernet keretnek saját fejléce van, saját egyedi, 48 bites
címzéssel rendelkezik, ezért az IP csomagokat ilyen hálózaton közvetlenül nem
lehet átvinni, be kell csomagolni. Minden Ethernet keretnek egy 14 oktetes fejléce
van, amely a forrás- és a célgép Ethernet címét, valamint egy típuskódot tartalmaz.
A hálózaton lévő gépek csak az olyan kereteket figyelik, amelyek célmezőjében
a saját Ethernet címüket, vagy a mindenkinek szóló körözvénycímet találnak.
Minden számítógépnek van egy táblázata, amelyben felsorolja, hogy milyen Ethernet
cím milyen Internet címnek felel meg.
Ennek a táblázatnak a karbantartását a rendszer egy protokoll, az ARP
(Address Resolution Protocol - címleképezési protokoll) segítségével végzi.
Egy alhálózatban, amelyik Ethernet összeköttetést használ, tegyük fel, hogy
a 193.230.175.196 IP című hosztról
a 193.230.175.75 hoszttal szeretnénk kapcsolatba
lépni. A kezdeményező 193.230.175.196 című hoszt
megnézi, hogy szerepel-e a saját ARP táblázatában a 193.230.175.75 címhez tartozó
Ethernet cím bejegyzés. Ha igen, akkor a datagramhoz egy Ethernet fejlécet csatol,
és elküldi. Ha azonban ilyen bejegyzés az ARP táblázatban nincsen, akkor a csomagot
nem lehet elküldeni, hiszen nincs meg az Ethernet cím. Ekkor lép működésbe az
ARP protokoll. A 193.230.175.196 hoszt egy “a
193.230.175.75 Ethernet cím kellene” tartalmú ARP kérést ad ki az Ethernet hálózatra.
Az adott hálózaton minden hoszt figyeli az
ARP kéréseket. Ha egy hoszt egy rá vonatkozó
ARP kérést kap, akkor válaszol rá. Ebben az esetben tehát a 193.230.175.75 hallja
a kérést, és egy ARP üzenetet küld válaszul a kérdezőnek, amelyben megadja a
193.230.175.75 IP című gépben lévő kártya Ethernet
címét, pl.: 12:3:44:12:52:11. A kérést adó rendszer a kapott információt bejegyzi
az ARP táblázatába.
Abban az esetben, ha a kért IP cím nincs a
közös Ethernet hálózatba kapcsolt hosztok
között, akkor a külvilág felé kapcsolatot biztosító átjáróban (routerben) lévő
Ethernet kártyacímet felhasználva, oda kell küldeni az adott keretet.
A fentiekből nyilvánvaló, hogy az ARP kéréseket tartalmazó kereteket üzenetszórás
formájában kell a hálózatra kiadni. A kérés megfogalmazásához a csupa egyes
bitből álló FF:FF:FF:FF:FF:FF Ethernet címet használják. Megállapodás szerint
az Ethernet alapú hálózatok minden gépe figyeli az ilyen címre küldött kereteket.
Ez azt jelenti, hogy az ARP kérést is látja mindegyikük. Minden egyes gép ellenőrzi,
hogy a kérés rá vonatkozik-e. Ha igen, akkor választ küld. Ha nem, akkor egyszerűen
nem veszi figyelembe. Az üzenetszórást jelző IP
című csomagokat (pl. 255.255.255.255 vagy 193.230.175.255) is csupa egyes
bitből álló Ethernet címre kell küldeni.
A címek mellett a fejlécben szerepel még egy, a használt protokollt azonosító
típuskód is. Ennek segítségével ugyanazon a hálózaton többfajta protokollkészlet
használata is lehetséges: TCP/IP, DECnet, Xerox, NS stb... Ezen protokollok
mindegyike különböző értéket helyez a típus mezőbe. A csomag végén az ellenőrzőösszeg
található, amely az egész csomagra vonatkozik. Az Ethernet keret tehát így néz
ki:
Az ilyen módon “burkolt” (encapsuleted) keretek megérkezése után az egyes fejléceket leszedi a megfelelő protokoll. Az Ethernet interfész az Ethernet fejlécet és az Ethernet ellenőrzőösszeget szedi le. Ezek után ellenőrzi a protokollra utaló típuskódot. Ha az IP-re mutat, akkor a datagramot átadja az IP-nek, amely a protokoll mező tartalmát megvizsgálja. Itt általában azt találja, hogy TCP, ezért a datagramot a TCP-nek adja át. A TCP a Sorszám mező tartalma és egyéb információk alapján állítja össze az eredeti állományt. Létezik az ARP protokoll fordítottja, a RARP (Reverse Address Resolution Protocol) amely olyan táblázattal dolgozik, amelyben az van felsorolva, hogy milyen IP cím milyen Ethernet címnek felel meg.
Az információ datagramban terjed. A datagram (csomag) az üzenetben elküldött adatok összessége. Minden datagram a hálózatban egyedi módon terjed. Ezen csomagok továbbítására két protokoll, a TCP és az IP szolgál. A TCP (Transmission Control Protocol) végzi az üzenetek datagramokra darabolását, míg a másik oldalon az összerakást. Kezeli az esetleges elvesző csomagok újrakérését és a sorrendváltozást. Az IP (Internet Prootocol) az egyedi datagramok továbbításáért felelős. Pédául ha egy adathalmazt akarunk a hálózaton átvinni:
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
a TCP ezt datagramokká darabolja:
xxx xxx xxx xxx xxx xxx xxx xxx xxx xxx xxx
a TCP minden datagram elejére egy fejlécet rak (T=FEJ(TCP)) ami tartalmazza a forrás és a célprocessz port címét a sorozatszámot, és az ellenőrző összeget.
Txxx Txxx Txxx Txxx Txxx Txxx Txxx
ezt adja tovább az IP-nek a cél Internet címével együtt. Az IP ebből és a helyi Internet címből újabb fejlécet képez (I=FEJ(IP)) :
ITxxx ITxxx ITxxx ITxxx ITxxx ITxxx ITxxx
A hálózat elérési szint, (amely lényegében a fizikai és adatkapcsolati szintnek felel meg) sokféle lehet (pl. soros vonal, X25, vagy Ethernet), de minden változata keretekkel dolgozik. Az Ethernet saját fejlécét (a két ETHERNET címmel) és a "C" ellenőrző összeget szúrja be a csomagba:
EITxxxC EITxxxC EITxxxC EITxxxC EITxxxC EITxxxC
A fogadó oldal ezeket sorban egymásután leszedi, ha IP típusú, akkor az IP-nek adja tovább, ha TCP típusú, akkor a TCP-nek, ami a sorozatszám alapján visszaállítja az eredeti adatfolyamot.
Mivel az Internetben sok gépen valamilyen UNIX-ot vagy Linux disztrót használnak operációs rendszerként, ezért érdemes röviden összefoglalni, hogy ezek az operációs rendszerek hogyan támogatják a hálózati lehetőségeket. A TCP/IP protokollt egy primitívhalmazon keresztül lehet elérni, amelyeket rendszerhívásokként valósítottak meg (implementáltak). Ezen keresztül érheti el a felhasználó a szállítási szolgálatokat. A főbb rendszerhívásokat a következő táblázatban soroltuk fel:
NÉV | FUNKCIÓ |
---|---|
socket | Létrehoz egy adott típusú TSAP-ot |
Bind | ASCII nevet rendel egy korábban létrehozott sockethez |
Listen | Létrehoz sort, amely a bejövő összeköttetés-kéréseket tárolja |
Accept | Eltávolít a sorból, vagy vár egy összeköttetés-kérést |
Connect | Összeköttetést kezdeményez egy távoli sockettel |
Shutdown | Lezárja az összeköttetést a socketen |
Send | Üzenetet küld el egy socketen keresztül |
Recv | Üzenetet vesz egy adott végponton |
Select | Megvizsgál egy sockethalmazt, hogy készek-e olvasásra vagy írásra |
A szolgálatinterfész központi jelentőségű fogalma a socket
(foglalat), amely hasonló az OSI TSAP-jához. A socketek
végpontok, amelyekhez alulról (az operációs rendszer felől) az összeköttetések,
míg felülről (a felhasználó felől) a folyamatok kapcsolódnak. A socket
rendszerhívás létrehoz egy socketet (egy
operációs rendszeren belüli adatstruktúrát): a hívások paraméterei kijelölik
a címformátumot (pl. egy Internet nevet), a socket
típust (pl. összeköttetés-alapú vagy összeköttetés-mentes), valamint a protokollt
(pl. TCP/IP). Miután egy socket már létrejött,
a bejövő összeköttetés-kérések tárolásához puffer allokálható. Ezt a listen
hívással lehet végrehajtani. Egy listen hívásban megadott socket
passzív végponttá válik, amely a kívülről hozzá érkező összeköttetés-kérésekre
várakozik.
Azért, hogy egy távoli felhasználó összeköttetés kérést küldhessen egy socketnek,
a socketeknek névvel (TSAP címmel) kell rendelkezniük.
A socketekhez neveket a bind hívással rendelhetünk.
Ezután a neveket valamilyen módon ismertté kell tenni, és a távoli felhasználók
máris megcímezhetik azokat. Az accept hívással lehet egy felhasználói folyamatot
egy sockethez hozzárendelni, és passzív módon
összeköttetés kérésekre várakoztatni. Ha egy kérés érkezik, akkor a hívás kiveszi
azt a sorából; egyébként a folyamat blokkolódni fog addig, amíg egy kérés be
nem érkezik (kivéve, ha a socketet nem-blokkolósnak
specifikálták).
Amikor egy kérés beérkezik, egy új socket
jön létre és válik az összeköttetés végpontjává. Így egyetlen port több összeköttetés
létesítésére is használható. Távoli sockethez
való összeköttetés létesítéshez, a folyamatoknak connect hívást kell kiadniuk,
amelyben paraméterként a helyi és a távoli socketet
kell kijelölniük. Ez a hívás összeköttetést létesít a két socket
között. Ha a socketek összeköttetés-mentes
típusúak, akkor az operációs rendszer e hívás hatására feljegyzi a kettő közti
kapcsolatot, és így a lokális socketen a
későbbiekben kiadott send hívások távoli socket
felé tartó üzeneteket eredményeznek.
Egy összeköttetés lebontását, vagy egy socket-socket
pár közötti összerendelés megszüntetését a shutdown hívás használatával lehet
elérni. Egy duplex összeköttetés két irányát külön-külön is le lehet zárni.
A send és recv hívások üzenetek küldésére és vételére használhatók. Ezen alaphívásoknak
több változata is létezik. Végül a select rendszerhívás olyan folyamatok számára
hasznos, amelyeknek több létesített összeköttetésük van. Sokszor előfordul,
hogy egy ilyen folyamatnak minden egyes olyan socketre
recv hívást kell kiadnia, amelyen üzenet érkezett számára. Sajnos azonban nem
tudja, hogy melyek ezek a socketek. Ha véletlenszerűen
választja ki azokat, akkor előfordulhat, hogy blokkolódik egy olyan végponton,
ahol nincs is üzenet, míg más socketeken
üzenetek várják. A select hívás lehetővé teszi a folyamatnak, hogy addig blokkolódjon,
amíg a paraméterként magadott socket-halmazon
sikeres olvasási vagy írási kisérlet végrehajtható nem lesz.