Ugrás a tartalomhoz

Operációs rendszerek mérnöki megközelítésben

Benyó Balázs, Fék Márk, Kiss István, Kóczy Annamária, Kondorosi Károly, Mészáros Tamás, Román Gyula, Szeberényi Imre, Sziray József

Panem Kiadó

4.3. Hálózati jellegű szolgáltatások

4.3. Hálózati jellegű szolgáltatások

A hálózati szolgáltatások jellemzője, hogy a felhasználó tisztában van azzal, hogy a rendszerben több csomópont működik. Számára a távoli és a helyi objektumok kezelése nem homogén.

Ebben a fejezetben a két legalapvetőbb hálózati szolgáltatást, a távoli terminált és a hálózati fájlátvitelt foglaljuk össze. A későbbi fejezetekben további szolgáltatásokat, mint például az elosztott fájlrendszer részletesebben is ismertetünk.

4.3.1. Telnet: távoli terminál

A távoli terminál alapvető célja, hogy hálózaton keresztül távoli belépési le­he­tőséget és virtuális terminált (billentyűzetet és képernyőt) nyújtson a felhasználók számára. Más szavakkal, bárhol is legyen egy A gép előtt ülő felhasználó, mindenhonnan oly módon használhassa a B gépet, mintha előtte ülne, annak terminálját használná, feltételezve, hogy A és B gépek között létezik hálózati összeköttetés. Eredetét tekintve a távoli terminál a soros vonali terminálhozzáférés (dialup terminal connection) megfelelője a hálózati környezetben.

A távoli belépés egyik megvalósítása a Telnet (teletype network) protokoll, mely a TCP/IP protokollcsalád része, illetve a protokollt használó Telnet program. A fejezet további részében e rendszeren keresztül ismertetjük a távoli terminál elérés legfontosabb tulajdonságait. (Napjainkban a Telnet protokoll helyett az SSH protokoll használata javasolt, amely a távoli terminál-elérést titkosított hálózati kommunikációval oldja meg.)

A távoli terminál elérés megvalósítása látszólag egyszerű feladat, a valóságban azonban a terminálok és számítógépek sokfélesége miatt nem is olyan egyszerű. A következőkben összefoglaljuk a leglényegesebb feladatokat és azok megvalósításának alapelemeit.

4.3.1.1. A Telnet kapcsolat

A távoli terminál kapcsolat lényege két hálózati gép közötti karakteralapú kommunikáció megvalósítása. A Telnet a kliens és a szerver között egy hálózati virtuális terminál (network virtual terminal) kapcsolatot hoz létre. A kapcsolat mindkét vége az adott gépen virtuális terminálként működik, logikai billentyűzetet és képernyőt definiálva. A logikai képernyő karakterek megjelenítésére képes, míg a logikai billentyűzet karaktereket generál. A Telnet kliens és szerver oldali programjai felelősek a virtuális és valóságos eszközök közötti megfeleltetésért, a karakterek tényleges megjelenítéséért, illetve fogadásáért. A virtuális terminál koncepció segítségével a Telnet rendszer minden olyan fizikai eszközzel képes kommunikálni, melynél a virtuális kódok és a valóságos eszköz közötti leképezés létezik.

A kapcsolatot megvalósító rendszernek gondoskodnia kell a valóságos eszköz sajátosságainak figyelembe vételéről, azaz például a vezérlőkarakterek és terminál jellemzők megfelelő átalakításáról a kapcsolatban részt vevő gépek között.

A Telnet a feladatot protokoll szinten oldja meg a terminálok jellemzőit leíró protokoll elemek beiktatásával. Amikor két gép Telnet protokollal kapcsolatba lép egymással, a kapcsolat kiépítése során a Telnet önmaga meghatározza a kapcsolatra érvényes terminál és kommunikációs jellemzőket. A Telnet protokoll része az a képesség, hogy csak azokat a kommunikációs módokat támogassa egy kapcsolatban, melyeket mindkét végállomás képes kezelni. Mindezeket maga a protokoll tisztázza a kapcsolat kiépítése során, megkímélve a kommunikáló feleket a további adat- és vezérlőjel átalakításoktól, értelmezésektől.

Ily módon lehetővé válik, hogy a virtuális terminál csak azokat a vezérlő kódokat fogadja, amelyek a hozzá rendelt fizikai eszközökön is értelmezettek.

4.3.1.2. Szerver- és kliensprogramok

A Telnet a szervergépen általában egy állandóan futó folyamattal rendelkezik, amelyik a kliens gépektől beérkező kéréseket fogadja, azok kiszolgálását kezdeményezi. UNIX-rendszerekben ez az ún. telnetd program, melyet az inetd szuperszerver indít el a beérkező kéréseknek megfelelően. Windows NT- és más PC-alapú rendszerek esetén egy önálló Telnet szerveralkalmazás oldja meg a feladatot.

A szerverfolyamat feladata a kommunikációs paraméterek tisztázása (a virtuális terminál meghatározása) után a terminált kiszolgáló folyamat elindítása és hozzárendelése a virtuális terminálhoz. UNIX-rendszerekben ez általában a felhasználó shell programja, Windows- és más PC-rendszerek esetében az alap parancsértelmező (pl. DOS prompt).

A kliens oldal általában egy Telnet nevű programot futtat, és ezzel kezdeményezi a kapcsolat kiépítését a szerverhez. A Telnet kliens elindításához szükség van a szerver IP-címére vagy nevére (ez utóbbi csak akkor használható, ha a rendszer képes a névhez tartozó IP-cím megtalálására). A TCP/IP protokoll családban az alkalmazások gépen belüli címzésére szolgáló portok közül a Telnet saját, dedikált portszámmal (23) rendelkezik. A kliens indításakor ez az alapértelmezés szerinti port, amely újabb paraméter megadásával módosítható.

A Telnet kliens program hívása:

telnet [<gépnév vagy IP cím>] [<portszám>]

Az alábbi példák egyenértékűek, feltételezve, hogy a használt gépnév megfelel az IP-címnek.

telnet 152.66.76.1

telnet server.mit.bme.hu

telnet server.mit.bme.hu 23

A 23-as Telnet porttól eltérő szám használata esetén természetesen szerveroldalon is az eltérő számú porton kell a telnetd programot elindítani.

$ telnet server.mit.bme.hu

Trying 152.66.76.1...

Connected to server.mit.bme.hu.

Escape character is ‘^]’.

SunOS 5.7

login: labor

Password: ********

Last login: Thu Sep 2 12:41:28 from labpc1.mit.bme.hu

$

Ahogy az látható az előző példa kódjában, a telnet parancs kiadása után a Telnet program elvégzi a név–IP-cím átalakítást, majd hozzákapcsolódik a szerverhez. Ezek után beállítja a kommunikációs paramétereket a szerver és a kliens között, kiírja a speciális Telnet kontrollkaraktert (CTRL+]), végül összekapcsolja a klienst a szerverfolyamat által elindított login programmal. A login program a felhasználói név és jelszó ellenőrzése után a felhasználó saját shell programját indítja el (a $ jel jelzi a várakozó shellt).

A Telnet kliensprogramot paraméterek nélkül elindítva az ún. parancsértelmező módot kapjuk, amikor a Telnet rendszer beépített parancsait érhetjük el. Ez a parancsértelmező mód a létrejött kapcsolat során (a virtuális terminál használata közben) is elérhető a speciális kontroll karakter leütésével (általában a CTRL+]).

4.3.1.3. A Telnet parancsértelmező

A Telnet parancsértelmező része kliens oldali parancsok kiadására, beállí­tások megváltoztatására szolgál. Ha a kapcsolat már kiépült a szerverig, akkor minden parancs kiadása után a Telnet visszatér a virtuális terminálhoz. Ha a kapcsolat még nem épült ki, akkor folyamatosan parancs módban marad mindaddig, míg kapcsolat kiépítését nem kezdeményezzük. Parancs módban elindíthatunk kliens oldali alkalmazásokat, megváltoztathatjuk az aktuális kliens könyvtárat, speciális vezérlő karaktereket küldhetünk a szervernek, alapállapotba állíthatjuk a kliens–szerver kapcsolatot, illetve megváltoztathatunk egyes kommunikációs paramétereket.

Az alábbi példa szemlélteti a Telnet parancsokat:

telnet> <CTRL+]>

telnet> help

Commands may be abbreviated. Commands are:

close close current connection

logout forcibly logout remote user and close the connection

display display operating parameters

mode try to enter line or character mode (‘mode ?’ for more)

open connect to a site

quit exit telnet

send transmit special characters (‘send ?’ for more)

set set operating parameters (‘set ?’ for more)

unset unset operating parameters (‘unset ?’ for more)

status print status information

toggle toggle operating parameters (‘toggle ?’ for more)

slc change state of special charaters (‘slc ?’ for more)

z suspend telnet

! invoke a subshell

environ change environment variables (‘environ ?’ for more)

? print help information

<return> leave command mode

telnet> display

will flush output when sending interrupt characters.

won’t send interrupt characters in urgent mode.

won’t skip reading of ~/.telnetrc file.

won’t map carriage return on output.

will recognize certain control characters.

won’t turn on socket level debugging.

won’t print hexadecimal representation of network traffic.

won’t print user readable output for „netdata”.

won’t show option processing.

won’t print hexadecimal representation of terminal traffic.

echo [^E]

escape [^]]

rlogin [off]

tracefile „(standard output)”

flushoutput [^O]

interrupt [^C]

quit [^\]

eof [^D]

erase [^H]

kill [^U]

lnext [^V]

susp [^Z]

reprint [^R]

worderase [^W]

start [^Q]

stop [^S]

ayt [^T]

DO ECHO

DO SUPPRESS GO AHEAD

WILL TERMINAL TYPE

WILL NAWS

WILL NEW-ENVIRON

A kapcsolat módosítását, inicializálását, illetve egyéb, a Telnet szervert is érintő parancsokat a kliens egy speciális Telnet COMMAND csomagban küldi el a szervernek. Ezen csomagok tipikusan pár bájtot tartalmaznak, első a parancs kódja, majd opcionálisan azt követik a paraméterek.

4.3.2. FTP: fájlátvitel

A fájlátviteli protokoll (FTP: file transfer protocol) a gépek közötti hálózati fájlátvitel segédeszköze. Lehetővé teszi a fájlok mozgatását a kliens és szerver között mindkét irányban, könyvtárak létrehozását, átnevezését, illetve törlését. Ellentétben a Telnet programmal, az FTP nem képes távoli programok futtatására, de fájlátvitelre sokkal egyszerűbben használható program.

4.3.2.1. FTP-kapcsolat

A Telnet programmal ellentétben az FTP két párhuzamos kapcsolatot épít ki a kliens és a szerver között: egyet az FTP-parancsok és egy másikat az adatok átvitelére. Ennek megfelelően a szerver oldalon a kiszolgáló folyamat két részre bontható, egy protokoll értelmezőre és egy adatátvitel végrehajtóra.

Az FTP esetében a gépek közötti kommunikáció kiépítése lényegesen egyszerűbb: nincs szükség a virtuális terminálok beállítására. Ugyanakkor itt is gondoskodni kell az eltérő reprezentációk megfeleltetéséről.

Az FTP a fájlátvitel többféle formáját is megengedi. A legelterjedtebb a következő két forma: bináris és szöveges. Bináris FTP-kapcsolat esetén az átküldött fájlok bájthelyesen, változtatás nélkül érkeznek meg. Szöveges kapcsolat esetén az FTP gondoskodik az eltérő szöveges fájlformátumok átalakításáról (például a DOS–UNIX szövegfájlok konverziójáról). A helyes átviteli mód kiválasztása az átvitel előtt a felhasználó feladata. Alapértelmezésben az FTP a szöveges módot használja, ami sok hibára ad lehetőséget.

Az FTP további lényeges jellemzője, hogy az adatátvitel (a rendszer lényegi szolgáltatása) a felhasználó számára is jól követhető, ellenőrizhető. A felhasználó képes az adatkapcsolat beállítására. Erre a Telnethez hasonlóan az FTP-parancs üzemmód alkalmas.

4.3.2.2. FTP kliens- és szerverprogramok

Szerver oldalon az FTP-folyamat szolgálja ki a klienseket. UNIX-rendszerekben ez tipikusan az ftdp démon folyamat, míg Windows NT- és más PC-rendszerek alatt egy önálló FTP szerveralkalmazás. A szerverfolyamat a klienskérések fogadása után ellenőrzi a felhasználói nevet és jelszót, majd az ellenőrzött jogosultságok alapján hozzáférést teremt a szervergép fájlrendszeréhez.

A UNIX-rendszerek többségében az FTP-szerviz megtalálható, de alapértelmezésben nem engedélyezett, az inetd szuperszerver kezeli. A Windows-alapú rendszerekből hiányzik ez a szolgáltatás, külön szoftver telepítésével és futtatásával hozható létre. A Windows-alapú TCP/IP programcsomagok többsége tartalmaz ilyen szervert, illetve önálló programként is beszerezhető.

Az FTP-klienst a felhasználó a Telnet klienshez hasonlóan, a szerver címének megadásával indíthatja el. Itt is létezik a Telnet esetében látott parancs üzemmód, mely azonban itt alapértelmezésnek számít, azaz a kapcsolat kiépítése során is ez az interfész látszik a felhasználó felé. A parancsértelmezőnek adott utasításokkal vezérelhetjük az FTP-kapcsolatot, a fájlátvitelt, és ezek segítségével utasíthatjuk az FTP-szerver folyamatot a szervergép fájlrendszerének módosítására.

A Telnet programhoz hasonlóan az FTP is dedikált portszámot használ, a 21-est. Itt is megadható más portszám a kliensprogram paraméterei között.

Az FTP kliensprogram használata:

ftp [<szerver cím vagy név>] [<portszám>]

Alkalmazási példa:

$ ftp ftp.mit.bme.hu

Connected to ftp.mit.bme.hu.

Name (ftp.mit.bme.hu:labor): labor

331 Password required for labor.

Password: ********

230 User labor logged in.

ftp>

$

A kapcsolat kiépítése után itt is a felhasználói név és jelszó megadása és ellenőrzése következik, ami után a parancsértelmező promptot kapjuk. Általában a helyi és távoli könyvtár, valamint a fájlátviteli mód meghatározása után kezdődik el a tényleges fájlátvitel.

A következő rövid példa egy szöveges fájl átvitelét mutatja a kliensgépről a szervergépre, majd egy bináris fájl átvitelét a szerverről a kliensre.

ftp> ascii

200 Type set to A.

ftp> put leiras.txt

200 PORT command successful.

150 Opening ASCII mode data connection for leiras.txt (4896 bytes).

226 Transfer complete.

local: leiras.txt remote: leiras.txt

4896 bytes received in 1.8 seconds

ftp> bin

200 Type set to I.

ftp> get backup.zip

200 PORT command successful.

150 Opening BINARY mode data connection for backup.zip (4944123 bytes).

226 Transfer complete.

local: backup.zip remote: backup.zip

4944123 bytes received in 9.8 seconds

ftp>

Az FTP általában egy speciális felhasználó azonosítási módot is alkalmaz, mellyel lehetővé válik a valós név és jelszó nélküli, ún. anonim FTP-belépés. Ekkor névként az „anonymous” (vagy esetenként az „ftp”) nevet kell megadni, jelszóként pedig az FTP-kapcsolatot kezdeményező személy e-mail címét. Ilyenkor az FTP-szerver egy speciális könyvtárterülethez engedélyez korlátozott hozzáférést, általában a fájlrendszer egyéb részeinek teljes kizárásával. UNIX operációs rendszer alatt ezt a chroot() rendszerhívás segítségével oldja meg a kapcsolathoz rendelt szerver folyamat. A chroot() rendszerhívás a fájlrendszert egy adott pontjától kezdve „levágja”, azaz a fa struktúra pont feletti részeinek elérését teljesen megszünteti.

4.3.2.3. Az FTP-parancsértelmező

Az FTP-rendszerben a felhasználó alapértelmezésben a parancsértelmezőt használja helyi és távoli feladatok megoldására, illetve a fájlátvitelre. Az alábbi példa összefoglalja egy tipikus FTP-rendszer parancsszavait.

ftp> help

Commands may be abbreviated. Commands are:

! cr macdef proxy send

$ delete mdelete sendport status

account debug mdir put struct

append dir mget pwd sunique

ascii disconnect mkdir quit tenex

bell form mls quote trace

binary get mode recv type

bye glob mput remotehelp user

case hash nmap rename verbose

cd help ntrans reset ?

cdup lcd open rmdir

close ls prompt runique

ftp>

A parancsok alapvetően három nagy kategóriába sorolhatóak: helyi (kliens) parancsok, távoli (szerver) parancsok, és adatátviteli parancsok. Az átviteli mód meghatározására szolgáló ascii és binary parancsok kiadása után a cd paranccsal beállíthatjuk a távoli, illetve az lcd paranccsal a helyi munkakönyvtárat. Ezek után a put vagy get parancsok segítségével bonyolítható le a kívánt fájlátvitel, majd a quit paranccsal szakíthatjuk meg a kapcsolatot és léphetünk ki az FTP kliensprogram parancsértelmezőjéből.