Kezdjük először is a név magyarázatával. A TCP/IP, helyesebben írva IP/TCP, általában egy teljes protokollcsaládot jelent, ami magában foglalja az összes IP-re (Internet Protocol) épülő protokollt. A TCP (Transmission Control Protocol) ennek a családnak egy tagja (tegyük hozzá, hogy ezt használjuk leggyakrabban), de emelett rengeteg "testvére" van, mint például az UDP (User Datagram Protocol) vagy az ICMP (Internet Control Message Protocol).
Az internet rendkívül heterogén hálózatokat fogott össze, ezért elsődleges cél volt az IP számára, hogy a fizikai médiumtól függetlenül, bárhol képes legyen működni. Ehhez egy olyan absztrakciós rétegre van szükseg, ami minden eszközön megvalósítható, és semmilyen eszközhöz nem köthető. Az IP-ben használható eszközöknek a következő követelményeknek kell megfelelniük:
Az IP (=internet protokoll) állapotmentes protokoll, nem garantálja a packetek megérkezését a célhoz, sőt azt sem, hogy a packetek ugyanolyan sorrendben érkeznek meg, mint ahogyan elküldték őket. Ez tulajdonképpen annyit jelent, hogy a fizikai médium megpróbál megtenni a csomag célbajuttatása érdekében, de nem garantál semmit.
Egy IP csomag két részből áll: 1) fejléc információk, amelyek tartalmazzák a forrás és célcímet, valamint 2) adatrész, ami alkalmazás-specifikus. Az IP-re épülő protokoll az IP adatrészét használhatja felsőbb szintű fejléc, valamint adat számára. Így egymásba skatulyázhatók a csomagok, a felsőbb szintű protokollok használhatják azt, amit az alsó szintű add, de kiegészíthetik további tulajdonságokkal. Így jön a képbe a TCP.
Mint láthatjuk az IP használata elég nehézkes az alkalmazások szempontjából, hiszen gondoskodniuk kell a csomagok sorbaállításáról, és az elvesző packetek újraküldéséről. Hogy ne kelljen minden alkalmazásban ezeket a funkciókat implementálni, ezért létrehozták a TCP protokollt, ami gondoskodik a csomagok sorrendbe allításáról, valamint az esetlegesen elvesző packetek ujraküldéséről. A TCP így már egy garantált csatornát biztosít a programunknak, hiszen gondoskodik arról, hogy ami a kapcsolat egyik végén "bement", az a másik végén ki is jön. Láthatjuk, hogy a TCP protokoll sokkal kényelmesebb az alkalmazások szempontjából, ezért majdnem minden magas szintű protokoll ezt használja (telnet, ftp stb). Ugyanakkor nem mindig van szükség a TCP-vel járó szolgáltatásokra, ezért kialakult más IP-re épült, de úgyanúgy nem kapcsolatjellegű protokoll. Erre jellemzően a kérdés-válasz jellegű kommunikációnál lehet szükség, amikor a visszaigazolást tulajdonképpen a válasz maga jelenti. Ilyen protokoll az UDP. Ezt a protokollt használja például a DNS (domain name service), vagy az NFS (network file system).
Ezen kívül még léteznek más, IP-re épülő protokollok, ilyen az ICMP (=internet control message protocol), vagy az IGMP (=internet group multicast protocol).
Az IP cím egy 32 bites szám, ami 4 byte-nak felel meg. Írási formája a következő:
192.168.2.1Ahol két pont között egy byte-nak megfelelő tízes számrendszerbeli szám van. Ez a cím az egész interneten (ill. az intraneten, hogy ha a nagy háló nem elérhető) egyedi. Minden hálózati eszköznek saját címe van, tehát ha egy számítógépben több hálózati eszköz van (több ethernet kártya pl) , akkor az a gép több címen is elérhető.
A címen kívül a célgépen meg kell neveznünk egy szolgáltatást amit el kívánunk érni. Erre az ún. portcím szolgál, ami egy 16 bites szám. A portcímek egy része előre meghatározott szolgáltatásoknak van lefoglalva, például a 23-as port a telnet, 21-es az ftp, 25-ös pedig a levelezés számára foglalt.
A címnek azon bitjei, amiken a netmask bitjei 1-et tartalmaznak, a network címet határozzák meg, a fennmaradó bitek pedig a network-ön belüli hostcímet adják meg.
Legyen a cím:
|1. byte |2. byte |3. byte |4. byte | +---------------------------------------------------------------+ |1|1|0|0|0|0|0|0|1|0|1|0|1|0|0|0|0|0|0|0|0|0|1|0|0|0|0|0|0|0|0|1| = 192.168.2.1 +---------------------------------------------------------------+ És a netmask: +---------------------------------------------------------------+ |1|1|1|1|1|1|1|1|1|1|1|1|1|1|1|1|1|1|1|1|1|1|1|1|0|0|0|0|0|0|0|0| = 255.255.255.0 +---------------------------------------------------------------+Tehát, ha a címünk 192.168.2.1, és a netmask 255.255.255.0, akkor a 192.168.2.0 a hálózati cím, a 192.168.2.1-nek az utolsó byteja (tehát az 1) pedig a host cím. Ebben az IP szegmensben 256 különböző cím szerepelhet, mégpedig 192.168.2.0 - 192.168.2.255-ig. Ebből két címet fenntart magának a protokoll, mégpedig a 192.168.2.0, ez a network cím, és a 192.168.2.255 ez pedig a broadcast cím, erről bővebben egy picit később.
Ha tehát a 192.168.2.3-as címet akarjuk megcímezni, akkor a netmaskunkból látszik, hogy ez egy lokális cím, tehát közvetlenül címezhető.
Ha viszont a 192.168.1.1-es címet szeretnénk elérni, a netmaskból látszik, hogy ez nem helyi cím, lokálisan nem kézbesíthető, ehhez a gateway-t (útválasztó) használjuk fel. Mi neki adjuk át a datagrammokat, a többiről pedig ő saját belső táblázataira támaszkodva gondoskodik.
A netmask egy elég jó eszköz hálózatok feldarabolására, hiszen a használatával egy eredetileg 256 IP címes hálózatot fel lehet darabolni 16 db. 16 címesre, vagy 4 db. 64 címesre, de akár 1 128 címesre + 2 db. 64 címesre. Ezt a technikát hívják subnetelésnek.
Mint már mondtam, ha egy datagramm lokálisan nem kézbesíthető (tehát logikailag vagy fizikailag más közegben helyezkedik el), akkor az útválasztónak (gateway-nek) továbbítjuk ezt a packetet. Az útválasztónak kell eldöntenie, hogy egy adott packetnek merre kell tovább mennie. Ebben a feladatban rendelkezésre áll a cél IP cím, ill. egy belső táblázat az ún. routing tábla. (mint később láthatjuk sajat gépünkön is van ilyen tábla, de legtöbbször nem használjuk, csak a lokális háló számára van bejegyzés)
Szóval a címek leírásánál már mondtam, hogy minden egyes hálózati eszköz kap egy IP címet, tehát ha a routerünknek két interface-e van, akkor neki két IP hálózatra van kijárása, számára két szegmensen is vannak közvetlenül elérhető hostok.
Legyen most két IP szegmensünk, az egyik 192.168.1.xxx/255.255.255.0 (eth0 eszközön keresztül), a másik pedig a 192.168.2.xxx/255.255.255.0 (az eth1 eszközön keresztül). Így a routing tábla valahogy így nezne ki:
Célcím Netmask Gateway Eszköz 192.168.1.0 255.255.255.0 - eth0 192.168.2.0 255.255.255.0 - eth1Így a routerünk meg tudja címezni mindkét IP szegmenst valamelyik eszközén keresztül. A megfelelő eszköz keresése valahogy úgy zajlik, hogy az első olyan routing bejegyzés eszköz mezője hivatkozik a keresett eszközre, aminek a tartományába a célcím beleesik.
Van egy harmadik oszlop, ami a fenti két bejegyzésnél üres. Ezt az oszlopot használhatjuk fel annak megjelölésére, hogy a célcím nem lokálisan elérhető, de az adott szegmensen található gateway már tudja az utat a cél felé. Ilyen módon a gateway-ek összeláncolhatók.
Vegyünk tehát fel egy olyan routing bejegyzést, amin keresztül az egesz internetet láthatjuk. Legyen ez mondjuk egy soros vonal (ppp0), a soros vonalon keresztül látunk egy gateway-t, ami az internet felé továbbítja a packeteket.
Célcím Netmask Gateway Eszköz 0.0.0.0 0.0.0.0 195.184.3.2 ppp0Láthatjuk, hogy a netmask 0.0.0.0 tehát a teljes címtartományt lefedjük, azt is láthatjuk, hogy ezeket a kéréseket a ppp0-s eszközön kell továbbitani, ott pedig egy gateway-nek kell adnunk, akinek a címe 195.184.3.2.
Ilyen módon épül fel az egész internet, minden kis helyi hálózat továbbitja a nem helyi packeteit egy olyannak, aki már tudja merre kell azt továbbítani.
ifconfig <eszköz> <up|down> <ipcím> netmask <netmask cím> broadcast <broadcast cím>Ezek a legfontosabb paraméterek, bővebben lásd: man ifconfig. Az eszközök neve változó, főleg a típustól függ, általában:
eth[0123456789] | ethernet kártyák |
ppp[0123456789] | ppp eszközök (soros vonali, pointopoint) |
sl[0123456789] | slip eszközök (soros vonal) |
lo | loopback eszköz |
Ha az ifconfig-ot paraméterek nélkül hívjuk meg, akkor kiírja az aktuálisan felkonfigurált eszközök listáját:
balabit:~$ ifconfig lo Link encap:Local Loopback inet addr:127.0.0.1 Bcast:127.255.255.255 Mask:255.0.0.0 UP BROADCAST LOOPBACK RUNNING MTU:3584 Metric:1 RX packets:97 errors:0 dropped:0 overruns:0 frame:0 TX packets:97 errors:0 dropped:0 overruns:0 carrier:0 coll:0 eth0 Link encap:Ethernet HWaddr 00:40:F6:58:A0:B3 inet addr:193.6.40.37 Bcast:193.6.40.255 Mask:255.255.255.0 UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1 RX packets:10936 errors:0 dropped:0 overruns:0 frame:974 TX packets:3449 errors:0 dropped:0 overruns:0 carrier:0 coll:574 Interrupt:10 Base address:0x300Ez megadja a be´llítható paraméterek aktuális értékét, valamint néminemű statisztikai adatokkal szolgál.
Indítsuk el paraméterek nélkül a route parancsot:
balabit:~$ route Kernel IP routing table Destination Gateway Genmask Flags Metric Ref Use Iface 193.6.40.0 * 255.255.255.0 U 0 0 6 eth0 127.0.0.0 * 255.0.0.0 U 0 0 2 lo default rxkk.saturnus.v 0.0.0.0 UG 0 0 88 eth0Mit is jelent, amit látunk:
Az eth0 eszközön keresztül látjuk a lokális hálózatot, ami a 193.6.40.0/255.255.255.0 tartománynak felel meg. (ez az első sor)
A 127.0.0.0/255.0.0.0 -n saját magunkat látjuk, ez a loopback.
Az összes többi packet pedig, ami nem fér be a fenti két kategóriába a default-on megy keresztül, ami egy gateway-nek továbbít minden packetet.
Új bejegyzéseket is vehetünk fel a route paranccsal. A szintaxis körülbelül a következő:
route <add|del> <-host|-net> <célcím> netmask <netmask cím> dev <eszköz>
Megoldás: A gép IP címe a példa kedvéért legyen 192.168.2.1, a gateway legyen 192.168.2.254. Ekkor a következő parancsokkal lehet beállítani a hálózatot:
$ ifconfig eth0 192.168.2.1 netmask 255.255.255.0 broadcast 192.168.2.255 network 192.168.2.0Ez beállítja az eth0 eszköz IP címét, a rajta keresztül elérhető hálózat maszkját, a körüzenet címét, és a hálózati címet.
$ route add -net 192.168.2.0Ez beállítja a helyi hálózat route bejegyzését, így ezentúl a 192.168.2.xxx című hostokat el tudjuk érni.
$ route add default gw 192.168.2.254Ez pedig a lényeg: minden olyan csomag, amiről eddig nem rendelkeztünk, menjen a 192.168.2.254-en levő útválasztóra.
ATZ <-- inicializálja a modemet OK <-- modem válaszol, inicializálás kész ATDT501060 <-- számítógép küldi a tárcsázási parancsot CONNECT <-- modem küldi, jelzi, hogy az adatkapcsolat létrejött. Ezentúl a kommunikáció a távoli géppel történik, a modem már csak továbbítja az adatokat
Welcome to Altair! <-- ezt a túloldali gép login programja üzeni login: bazsi <-- itt a mi oldalunk beírja a felhasznalói nevet, amint a login: megjelenik
password: xxxxx <-- a password: feliratra reagálva a számítógép beüti a kódot You have new mail. altair:~$ pppd <-- sikerült belépnem a gépre, most el kell indítani a pppd-tEzen a ponton a túloldal várakozik, hogy a mi oldalunkon is elinduljon a pppd. Ezután már indulhat is az adatkommunikáció. Mint láthatjuk a fenti bejelentkezés egyszerűen leírható kérdés-válaszok segítségével:
Vár | Válasz |
- | ATZ |
OK | ATDT501060 |
login: | bazsi |
password: | xxxxx |
altair:~$ | pppd |
Ezt a kérdés-válasz kommunikációt hívják chat-nek, és a leírását pedig
chat-scriptnek. A chat-script segítségével a teljes belépési folyamat
automatizálható. A modemes dialup beállításához tehát létre kell hoznunk egy
chat scriptet, amit megadva a pppd-nek felépíthető a kapcsolat. Ehhez a
következő paraméterekkel kell indítanunk a pppd-t:
balabit:~$ pppd /dev/modem modem lock connect /etc/ppp/chatscript defaultrouteNézzük a paraméterek jelentését:
A fennt megadandó chat script standard inputjára és outputjára a modem kerül,
tehát minden amit kiírunk azt megkapja a modem, és a modem által küldött
adatokat olvashatjuk be. A chat scriptet a chat nevű programmal tudjuk
"lejátszani". Tehát az "/etc/ppp/chatscript" nevű állományba a következőket kell
írnunk:
#!/bin/sh chat `` `ATZ` `OK` `ATDT501060` `login:` `bazsi` `password:` `xxxx` `altair:~$` `pppd`Így elértük célunkat, a kapcsolatfelvételt automatizáltuk.
Egy hálózati eszközhöz tartozó beállítások az ifcfg-eszknév nevű állományokban találhatók a fent megnevezett könyvtárban, tehát az eth0 eszköz adatai az /etc/sysconfig/network-scripts/ifcfg-eth0 állományban található. Minden ilyen állomány egy shell script, aminek a feladata néhány változónak a beállítása, ezért általában így néz ki:
DEVICE=eth0 IPADDR=195.184.3.121 NETMASK=255.255.255.0 NETWORK=195.184.3.0 BROADCAST=195.184.3.255 ONBOOT=yes BOOTPROTO=noneÁltalában a konkrét eszköz típusától függően további paramétereket is beállíthatunk, de a fentieket mindenhol értelmezik. Egy soros porthoz két állomány is tartozik az egyik az ifcfg-ppp0, a másik pedig az ehhez tartozó chat script (chat-ppp0). Egy soros porthoz tartozó ifcfg-ppp0 például így néz ki:
PERSIST=no DEFROUTE=yes ONBOOT=no INITSTRING=ATZ MODEMPORT=/dev/modem LINESPEED=115200 ESCAPECHARS=no DEFABORT=yes HARDFLOWCTL=yes DEVICE=ppp0 PPPOPTIONS= DEBUG=no PAPNAME=bazsi REMIP=195.184.3.117 IPADDR=195.184.3.121 BOOTPROTO=none MTU=1500 MRU=1500 DISCONNECTTIMEOUT= RETRYTIMEOUT= USERCTL=yesAz egyes paraméterek jelentése értelemszerű, ezeknek a fileoknak a beállítását érdemesebb control-panellel végeznünk, az kitölti az összes mezőt a számunkra.
Ezeket az adatokat az /etc/resolv.conf nevű fileban lehet megadni, ahol a
következő kulcsszavak értelmezettek:
nameserver <ipcím> | A DNS IP címét adja meg.Többet is felsorolhatunk space-el elválasztva. |
search domain1 domain2 | Keresési zónákat adhatunk meg, amennyiben egy host a domain1 v. domain2 zónában van, akkor elég a zónán belüli nevét használnunk. (pl: proba.domain1 helyett elég proba-t írni) |
3.5. Nameserver nélküli beállításAmennyiben a hálózatunkon nincsen nameserver, például nincs kapcsolatunk az internettel, akkor is szükségünk lehet név -> IP cím feloldásra. Ekkor alternatív megoldásként használhatjuk az /etc/hosts állományt. Ennek a formátuma:IP cím név/nevek 127.0.0.1 localhost 192.168.2.1 proba.domain.nev probaEkkor a "proba.domain.nev" és a "proba" mindkettő a 192.168.2.1-es címhez lesz hozzárendelve. |
Copyright (c) 1998, Balázs Scheidler.
A szerzői jogok engem, Scheidler Balázst, illetnek, és ezt az irományt 1998-ban követtem el, úgyhogy még legalább 70(*) évig az enyémek is maradnak. Minden jog engem illet, de kegyesen adok néhány jogot nektek is: tehát a dokumentumot elektronikus módon szabadon terjesztheted, amíg a fenti copyright sor a helyén marad. Egyéb terjesztésről egyénileg beszélhetünk.
Amennyiben tanulsz valamit ebből a dokumentumból, és hasznodra válik, lógsz egy sörrel, amit egyszer majd BEHAJTOK. :-)
Ja még annyit akartam írni, hogy megtalálsz a bazsi@balabit.hu e-mail címen,
kritikát, bővítéseket, flame-t oda küldhetsz.
*
eredetileg itt 50 év állt, de Balogh Zsolt