Tartalmi kivonat
TCP/IP hálózat mûködése, TCP/IP alapú kommunikáció Készítette: Kovács Ferenc és Nagy Tamás Tartalom • • • • • • Bevezetés Kommunikáció a hálózaton Címzés Alhálózat kialakítás, subnet mask Domain Name Service TCP/IP protokol ismertetés 1. Bevezetés Az Internet kialakulásához nagymértékben hozzájárult az Amerikai Védelmi Minisztérium egyik kutatási projectje, melynek célja egy nehezen megsemmisíthetõ, katonai célú számítógépes hálózat létrehozása volt. E kutatás során kifejlesztettek egy csomagkapcsolt hálózati protokollt mely felépítésével és redundás útvonalaival biztosítani tudta a megfogalmazott követelmények maradéktalan teljesítését. A protokoll - amely TCP/IP néven vált ismertté - civil alkalmazásásra elõször a 70-es évek közepén került sor egy elsõsorban az amerikai egyetemekhez kötõdõ számítógépes hálózatban, hogy késõbb ebbõl a hálózatból fejlõdjön ki a mai Internet.
Napjainkra a hálózat az egész világot átszövi, megváltoztatja az emberek üzletrõl, szórakozásról, információáramlásról alkotott képét, jelentõssége napról napra nõ és ezért rendkívül fontos az alapját képezõ technológia megismerése és megértése. 2. Kommunikáció a hálózaton Az Internet lokális hálózatokból épül fel. Sok kisebb nagyobb hálózatból, amelyeket routerek kapcsolnak össze. Ez azt is jelenti, hogy a hálózati komunikáció azonos lokális hálózaton levõ számítógépek között másképpen zajlik mint az egymástól távoli, különbözõ lokális hálózatba tartozó számítógépek között. 1. Lokális hálózat Lokális hálózatnak tekintendõ az a hálózat amelyen belül két számítógép között router közbeiktatása nélkül, közvetlenül lehet kommunikálni. Ez sok esetben egyetlen (koax) kábelt jelent, de jelenthet hub-okkal, vagy switchekkel összekapcsolt koaxra vagy UTP kábelre kapcsolódó
számítógépeket is. Szokás ezt szegmensnek vagy alhálózatnak is nevezni. Több fajta hálózat típus is létezik (Token bus, Token ring, Ethernet, stb.) melyek közül most csak az Ethernet-re térnék ki. Itt egy szegmensen, jellemzõen egyszerre csak egy számítógép kezdeményezhet kommunikációt (adó). Ha valamelyik gép adni szeretne, akkor megvizsgálja, hogy szabad-e a kábel, ha igen, akkor használni kezdi. Persze még ekkor is elõfordulhat, hogy többen egyszerre kezdik használni a kábelt, ilyenkor természetesen nem lehetséges értelmes kommunikáció - ezt hívják ütközésnek. Ezt az interfaceek (hálózati kártyák) felismerik, ekkor azonnal beszüntetik a forgalmazást, majd véletlen ideig várnak, és újra próbálkoznak. Tehát egyszerre mindig csak egy gép forgalmazhat, viszont az üzenet szólhat mindenkinek (broadcast) illetõleg egy meghatározott címzettnek. Természetesen a csomagot elvileg minden gép látja (hiszen azonos kábelhez
csatlakoznak) de csak az használja fel, akinek szól (illetve broadcast esetén mindenki). Hogy kinek szól, azt a címzett gép hálózati kártyájának fizikai címe (MAC address, Ethernet address, stb.) határozza meg Ez a cím minden hálózati kártyára egyedi, és csak ennek ismeretében lehetséges két számítógép között kommunikációt megvalósítani. Miért van szükség akkor az IP címre, miért nem használja a protokol a fizikai címeket? Elõször is mert kényelmetlen, nehezen megjegyezhetõ. De ami sokkal fontosabb megváltoztathatatlan, ezért rugalmatlan, ami azt is eredményezi, hogy önmagában a címzett fizikai címének ismeretében nem vagy csak nagyon nehezen eldönthetõ, hogy a címzett az adott szegmensbe tartozik-e vagy sem, márpedig két számítógép egymással csak akkor tud közvetlenül kommunikálni, ha egy alhálózatba tartoznak. Hogyan dönthetõ akkor el, hogy egy adott IP címmel rendelkezõ gépnek (címzett) mi a fizikai címe? Erre
szolgál az ARP (Address Resolution Protocol). Ha egy gép egy másikhoz akar kapcsolódni - amelyrõl a subnet mask alapján tudja, hogy vele azonos alhálózaton van -, akkor elküld egy broadcast üzenetet, amelyben megkérdezi, hogy ki is az XY IP címmel rendelkezõ számítógép és mi is az õ fizikai címe. Az üzenetet mindenki veszi, de csak az válaszol rá, aki az adott IP cím tulajdonosa, és elküldi a kezdeményezõnek a saját fizikai címét (a kezdeményezõ a sajátját természetesen feltüntette az üzenetben). Ezután a kezdeményezõ - hogy ne kelljen folyton ARP üzeneteket küldözgetni elhelyezi a címzettre vonatkozó információkat egy gyorsítótárba (ARP Cache) és legközelebb, ha ugyanazzal a címzettel akar kommunikálni, akkor már abból veszi az adatokat. 2. Globális hálózat Mi történik akkor, ha olyan címzettel akar egy számítógép kommunikálni, aki nincs vele egy szegmensen? Ekkor jut szerephez a router. A router (gateway,
útválasztó) egy kitüntetett számítógép a szegmensen, amely egyszerre több lokális hálózathoz is kapcsolódik, és amelyik épp ezért több szegmensbe is tud adatot küldeni, így lehetõvé teszi a szegmensek közötti kommunikációt. Ha egy számítógép egy másik szegmensben (ezt a subnet mask segítségével állapítja meg) lévõ géppel akar kommunikálni, akkor nem közvetlenül a címzettel kezdeményez kapcsolatot, hanem az alapértelmezett útválaszóval (ez minden gép esetén be van állítva). Ehhez persze elõször ARP-vel kideríti a router fizikai címét, majd elküldi az adat csomagot, azzal az utasítással, hogy végeredményben az XY IP címre kell eljuttatni. Ezután ha a célcím valamely a router-hez kapcsolódó alhálózathoz tartozik (megintcsak subnet mask), akkor ARP-vel kideríti annak a fizikai címét, és elküldi a csomagot. Ha a címzett egyik a routerhez kapcsolódó szegmenshez sem tartozik, akkor a router is egy másik - vele
egy szegmensen levõ - routerrel veszi fel a kapcsolatot, és annak küldi tovább a csomagot. Fontos észre venni, hogy két számítógép között ebben az esetben is csak egy szegmensen belül, és a fizikai címek alapján zajlik a közvetlen kommunikáció, szegmenseken kívülre közvetetten (routerek közbeiktatásával) kerülnek a csomagok. 3. Címzés A gépek egyedi azonosítására szolgál a címzés mechanizmusa. A jelen keretek között az IPv4-es szabvány kerül ismertetésre, mivel ez a legelterjedtebb IP szabvány. Az IPv6-os szabvány bevezetés alatt áll (IPv5 nem volt). A címek 32 bitesek a cím három részre osztható: o o o Elõtag: Ez azonosítja a címosztályt. A címosztály mutatja meg, hogy az elõtag után hány bitet kell hálózati címként, és hány bitet kell host címként értelmezni. Network Adress (hálózati cím): Az egyes hálózatok megkülönböztetésére szolgál, valamint a központi adminisztrációt segíti elõ, azaz ne
lehessen két gépnek azonos IP címe. A hálózati címet központilag kell igényelni, és központilag utalják ki az igénylõnek. Host Adress: A 32 címbit maradékat teszi ki. Ezt szabadon állíthatja be a címtartományt igénylõ a saját gépein. Az IPv4 öt címosztályt definiál, de tulajdonképpen csak három címosztályt használnak. (Sajnos az elnevezéseket elég könnyû más elnevezésekkel keverni, mert bizonyos elnevezéseket a terminológiában másra is használnak.) o A osztályú IP cím: o B osztályú IP cím: o C osztályú IP cím: Alhálózat kialakítás, subnet mask A hálózat kialakítása során nem célszerû az összes számítógépet egy szegmensbe felfûzni, mivel ez lelassítaná a gépek közötti kommunikációt a nagyszámú ütközés miatt. Ezért felmerült az igény, hogy a host címeket is tovább tudjuk osztani további alhálózatba. Egy alhálózatban lévõ gépek azonosítására a subnet mask szolgál A subnet mask egy
32 bites szám mely a címek maszkolására szolgál, egy alhálózatban azok a gépek vannak, melyekben azok az IP címbitek azonosak ahol a maskban egyes van, azaz eltérés ott lehet csak ahol nulla van a maskban. A subnet mask mûködésének megértéséhez nézzük meg a címzés folyamatát a kommunikáció során. A küldõ alkalmazás megnézi a saját IP címét és arra ráilleszti a saját subnet mask-ját, majd elvégzi ugyanezt a cél gép IP címével is. Ezt követõen megnézi, hogy ha csak ott van eltérés a két gép címében ahol a mask nullát tartalmazott akkor a két gép egy alhálózaton van, ekkor közvetlenül meg tudja címezni a cél gépet, mivel közvetlen kapcsolata van vele, amennyiben nincsenek egy alhálózaton akkor a csomagot nem tudja közvetlenül eljuttatni a cél géphez, akkor a csomagot az úgy nevezett default gateway felé irányítja. A default gateway gyakorlatilag egy router egyik lábát jelenti, és a routerek végzik a forgalom
irányítását a TCP/IP hálózaton. A routerek olyan nagy teljesítményû készülékek melyek képesek az IP csomagok nagy sebességû feldolgozására és a célcím detektálására. A célcím detektálását követõen a routerek a belsõ kapcsolótáblájuk alapján (router table) eldöntik, hogy a beérkezett csomagot melyik másik lábukon továbbítsák kifelé, ill. ha nem tudja eldönteni, hogy merre menjen a csomag a router tábla alapján akkor a csomagot a router a saját default gateway-e felé továbbítja. Az alhálózat fogalmának még jobb megértéséhez nézzünk egy példát: Adott egy C osztályú IP címtartomány melyben három alhálózatot kell kialakítani, melyekben rendre 80, 60, 60 számítógépnek kell IP címet biztosítani. Mivel a címosztály C osztályú ezért a mask elsõ három byte-ja csupa 1-es. Csak az utolsó byte továbbosztásával tudunk alhálózatot megkülönböztetni. Mivel az egyik szegmensben legalább 80 IP cím kell akkor az
egyész tartományt szét kell bontani 2 db 128 címet tartalmazó tartományra, és az így keletkezõ tartományok közül az egyiket még szét kell bontani további alhálózatokra melyek egyenként 64-64 címet tartalmaznak. Az egyes címtartományokban megkülönböztetünk két speciális címet a hálózati címet, és a broadcast címet. Hálózati cím az alhálózat azonosítására szolgál, ebben az esetben az alhálózatban lévõ host címek helyén a nulla szerepel. A broadcast címben viszont csupa egyes szerepel a host cím címbitjei helyén. Ez a cím a hálózaton jelenlévõ összes gép egyszerre történõ megcímzésére szolgál. Az alhálózatok kialakítása során a könnyebb áttekinthetõség miatt bizonyos IP cím kiosztási konvenciókat szokás követni: 0. A Default Gateway az adott subnet utolsó kisoztható IP címére kerüljön 1. Amennyiben az adott alhálózaton Name Server üzemel az az adott alhálózat elsõ kiosztható IP címére
kerüljön. 2. Amennyiben a router és a name server egy gépen van akkor a router lábainak a kiosztása során a 2-es szabály az irányadó Domain Name Service Az interneten a számítógépek azonosítása alapvetõen nemcsak IP cím alapján történik, hanem név alapján, mivel a felhasználók értelmes elnevezést könnyebben meg tudnak jegyezni, mint IP címeket. Az IP cím névhez történõ hozzárendelése egy több szintû folyamat. Elõször minden gép ellenõrzi, hogy az adott cím nem a saját címe-e, majd ellenõrzi a HOSTS fájlt, hogy nem szerepel-e benne egy a címre vonatkozó bejegyzés. A HOSTS fájl karban tartása persze meglehetõsen nehézkes, hiszen, ha egy hálózatban a névfeloldásokat mindig a HOSTS fájlok alapján végeznék, akkor minden változáskor a változást az összes HOSTS fájlban be kellene jegyezni, ezért a névfeloldások legnagyobb részét egy központi kiszolgáló, az úgynevezett name server végzi. További név feloldási
módok is léteznek, elsõsorban a Microsoft rendszerek Netbios neveinek feloldására, úgyis mint Netbios cache, Netbios Name Server (WINS), Netbios broadcasts és az LMHOSTS fájl, ezekrõl azonban most nem lesz szó. A DNS név szolgáltatás egy hiearchikus névadást tesz lehetõvé, és a névfeloldás is ezen hiearchia szerint történik. Az egyes name szerverek egy egy zónáért felelõsek, és a zónák adatait lokálisan az ún zóna adatbázisban tárolják. Név feloldás menete: o o o o o Egy alkalmazás kér egy név feloldást a saját name server-étõl A name server megnézi a lokális cache-t, ha benne van a keresett cím akkor onnan kiszolgálja a kérõt. Amennyiben nincs benne a chache-ben és a cím saját zónájára vonatkozik akkor a zónaadatbázis alapján megadja a kért információt, és a cache-t is frissíti. Ha nem tudja feloldani a nevet akkor a name server a root name server-hez fordul amelyik visszaadja, hogy az adott top level domain-nek ki a
name server-e. Ezt követõen a name server rekurzívan kéri az egyes szintekért felelõs name szervereket, hogy adják meg, hogy ki a felelõs az adott name feloldásáért. Példa.: Ausztráliában valaki a wwwautbmehu címet írta be A feloldás menete: o o o o Kérés a root felé, hogy adja vissza a .hu nevekért felelõs szerver címét .hu neveket feloldó szervertõl kérik a bmehu nevekért felelõs szerver nevét .bmehu feloldásáért felelõs szerve visszadja az autbmehu címért felelõs name server címét. Az utolsó name server elvégzi a név feloldását. TCP/IP protokol ismertetése Ezt a protokollt csomagkapcsolt hálózatok adatátviteli protokolljára hozták létre. Ez egy négy réteget tartalmazó hálózati protokoll rendszer, szemben az ISO OSI hét rétegû modelljével. A TCP/IP protokoll felépítése 0. Host to Network Layer Ez a szint az OSI modell fizikai és adatkapcsolati rétegéhez áll közel, feladata a kapott bájtok átvitele. A
fölötte levõ rétegek csak azt várják el tõle, hogy bájt folyamokat tudjon fogadni, illetve átadni. 1. Internetwork Layer Ez a réteg felelõs az adatok átviteléért a hálózaton, a gépek közötti kapcsolat összeköttetés mentes és nem tudja biztosítani a réteg az adatok korrekt átvitelét sem. Ezen a szinten több protokoll is megtalálható, de ezek közül a legfontosabbak: 4. IP (Internet Protocol) ARP (Adress Resolution Protocol) ICMP (Internet Control Message Protocol) Internet Potocol Ez a protokoll gondoskodik a csomagok átvitelérõl a hálózaton, az összes kommunikáció a host-ok között IP csomagok formájában történik. Ez egy kapcsolat nélküli protokoll, a kommunikációhoz nem szükséges elõzetes kapcsolat felvétel. Adatátvitel szempontjából nem megbízható, a csomagokkal bármi megtörténhet: elveszhetnek, megsérülhetnek, sorrendjük összekeveredhet. Egy IP csomag két részbõl áll: IP header: Ez tartalmazza
a csomagot azonosító információkat Adat: Ebben a részben van az az adat, amit ténylegesen át kell vinni. Az IPv4-es header felépítése Az egyes mezõk jelentése az IPv4-es headerben: Version: Ez egy négybites információ arról, hogy a header hányas IP verziót használ. Header Length: A header hossza bájtos egységekben. TOS (Type Of Service): Ebben a mezõben lehet megadni kéréseket a routerek felé, hogy a csomagot hogyan továbbítsák. A csomaghoz prioritást lehet rendelni, kérni lehet, hogy a kisebb késleltetésû úton menjen a csomag, nagyobb sávszélesség felé menjen a csomag, nagyobb megbízhatóságú úton menjen a csomag. Ez csak egy kérés a routerek felé, nem kötelesek ezeket figyelembe venni. Identifier: A fragmentáció támogatására szolgál. Amennyiben egy IP csomagot fel kell bontaniuk a routereknek kisebb csomagokra akkor, ebben a mezõben lesz benne egy azonosító az eredeti csomagra. Erre akkor lehet szükség,
amikor az egyes alhálózatok eltérõ keretmérettel dolgoznak, ezért szükségessé válhat a csomagok hosszának a csökkentése. A fragmentáció során keletkezett csomagokat természetesen a routerek nem építik össze egy egységes csomaggá, amikor már a csomagméret megengedhetné, mivel az egyes IP csomagok két host között nem feltétlenül egy útvonalon közlekednek. Az eredeti csomag elõállításáról mindig a host-oknak kell gondoskodniuk. Flags: Ez a mezõ is a fragmentáció támogatására szolgál, amennyiben egy csomag fragmentált akkor ebben a mezõben jelzik ezt. Fragment offset: Fragmentált csomag esetén azt mutatja, hogy ez a csomag az eredetinek hányadik darabja. TTL (Time To Live): Ez a mezõ minden egyes routoláskor eggyel csökken, amennyiben ez a mezõ 0-ra csökken akkor a routerek eldobják a csomagot. Ez arra szolgál, hogy a hibás címmel bekerült csomag ne keringjen végtelenségig. Protocol: Ebben a mezõben adják
meg, hogy milyen headert tartalmaz az adat része az IP csomagnak. Azaz milyen protokoll várja fent ezt a csomagot.(pl: TCP, UDP, ICMP stb) Header checksum: Ellenõrzõ összeg a headerre. Source Adress: A küldõ IP címe. Destination Adress: A címzett IP címe. 5. Adress Resolution Protocol Ez az IP cím alapján történõ fizikai cím megtalálására szolgál. Elõször egy cache-ben keresik a fizikai címet. Amennyiben ott nem található, akkor egy IP csomagot állít elõ, amelybe beteszi a keresett IP címét, a fizikai címnek hagy egy üres mezõt, majd beteszi a saját IP címét és fizikai címét. Ezt az IP csomagot broadcast módon elküldi Aki az IP cím alapján magára ismer, az kitölti a fizikai címre szolgáló helyet, és visszaküldi a csomagot. A csomagból ki tudja venni a feladó IP címét, és fizikai címét, és azt be tudja építeni a saját cache-be. Ez célszerû, hiszen egy ilyen keresõ csomag rendszerint éppen valamilyen más
kapcsolatfelvételt jelez és elõz meg. 6. Internet Control Message Protocol A két kommunikáló fél ennek segítségével küld egymásnak beállítandó paramétereket, valamint hibajelzésre is szolgál. Természetesen ez is IP csomag formájában közlekedik a hálózaton, az adat mezõbe van beírva az üzenet. Az adatmezõben van két darab bájt, amely az üzenet azonosítására szolgál. Ezt követi az ellenõrzõ összeg, majd opcionálisan az egyéb az egyéb paraméterek. Tipikus üzenetek lehetnek: Hibás IP header checksum A címzett nem elérhetõ Az írási sebességet lassítsa a küldõ Echo req/replay TTL mezõ 0-ra csökkent 2. Transport Layer Ezen a szinten két különbözõ protokoll található, teljesen eltérõ tulajdonságúak: TCP (Transmission Control Protocol) UDP (User Datagram Protocol) 2. Transmission Control Protocol Felfelé megbízható adatátvitelt biztosít úgy, hogy alatta egy megbízhatatlan protokoll
található. Felülrõl bájt folyammal lehet táplálni (stream orientált), full duplex átvitelt biztosít, kapcsolat orientált. Kliens- szerver kapcsolatok kialakítására képes, bárki lehet egyszerre kliens és szerver is. A kapcsolat felvétele mindkét oldalon nyugtázva történik. A kezdeményezõ küld egy kérés csomagot, a címzett válaszol a kérésre, majd a kezdeményezõ küld egy nyugtát arról, hogy vette a címzett válaszát. A kapcsolatok azonosítására szolgálnak a portok, a szerver egy adott porton érkezõ kérésekre figyel, és az ott érkezõ kéréseket kiszolgálja. A TCP portok közül az elsõ 1024 foglalt a standard alkalmazások számára. A megbízhatóság érdekében a protokoll a teljes TCP csomagra számol ellenõrzõ összeget. A megbízható kapcsolat kialakítására pozitív nyugtázást használ. A küldõ oldal nyugtát vár minden egyes elküldött TCP csomagról. Amennyiben egy késõbb küldött csomagról elõbb kap nyugtát,
mint egy korábban küldött csomagról, akkor a korábban küldött csomagtól kezdve megismétli az adást. Egy TCP csomag szintén két részbõl áll egy headerbõl, és az átviendõ adatokból. 3. User Datagram Protocol Ez sokkal gyorsabb protokoll, mint a TCP protokoll, viszont nem megbízható adatátvitel szempontjából. Nem kapcsolat orientált, nincs hibajavítás, nincs nyugtázás. Tulajdonképpen az IP szint által biztosított szolgáltatásokat nyújtja felfelé. Akkor szokták használni, ha az adatátvitel sebessége a legfontosabb, minden többi feladatot a felette elhelyezkedõ réteg lát el. Tipikusan a DNS-ek (Domain Name Server), real-time alkalmazások, játékok szokták használni (egy játékban vagy real-time hang átvitel esetén ha egy csomag rossz akkor ott legfeljebb döccen egyet, de ez még mindig kisebb baj, mintha az adott pontnál megállna és onnantól elkezdené újra adni a csomagokat). A szegényesebb szolgáltatásból adódóan sokkal
egyszerûbb az UDP header. 3. Application Layer Ezen a szinten helyezkednek el az alkalmazások. Az adatok átvitelét TCP, vagy UDP porton keresztül történõ hívásokkal valósítják meg. A portok tulajdonképpen a kommunikációs csatorna egy végpontjának az azonosítására szolgálnak a szabvány 65535 TCP és 65535 UDP portot engedélyez, ezek közül az elsõ 1024 foglalt szabványosított protokollok számára (pl.: Telnet, SMTP, POP3, Rlogin, FTP SNMP, STMP, HTTP, stb�) Az összeköttetés kliens szerver alapon valósul meg. Az egyes szerver alkalmazások az adott host gép operációs rendszerénél bejegyeztetik magukat, hogy egy adott TCP, vagy UDP portra érkezõ kérések kiszolgálásáért az adott alkalmazás a felelõs. Az egyes kliens alkalmazások, amikor megszólítják a szerver gép adott portját akkor az ott futó operációs rendszer értesíti a szerver alkalmazást arról, hogy kérés érkezett az adott portra. Azaz amikor egy szolgálat
azonosítására van szükség a hálózaton akkor nem elég a szerver gép IP címét megadni, hanem szükséges az adott szolgáltatáshoz kapcsolódóan megadni a szerver adott TCP, vagy UDP portját