Telnet - I.
V předchozích dvou dílech jsme si vysvětlili podstatu terminálových relací a vzdáleného přihlašování v počítačových sítích, a posléze narazili na nejvážnější problém kolem jejich praktické implementace - na velkou různorodost používaných terminálů. Dnes se již můžeme začít podrobněji zabývat protokolem TELNET, který má v síťovém modelu TCP/IP realizaci vzdálených terminálových relací na starosti.
Každý aplikační protokol, který chce realizovat vzdálené terminálové relace v prostředí počítačových sítí, musí předpokládat určitou míru distribuovanosti své vlastní implementace - jak jsme si ostatně již naznačovali v 65. dílu, kde jsme se nad realizací vzdálených terminálových relací zamýšleli poprvé. Snad neuškodí si tuto představu ještě jednou oživit, tentokráte již na konkrétním příkladu protokolu TELNETu.
TELNET klient a server
Protokol TELNET předpokládá vzájemnou spolupráci dvou svých složek, jejichž role a postavení vychází z architektury klient-server: jedna složka, provozovaná na "lokálním" počítači (tj. na tom, ke kterému je fyzicky připojen uživatelův terminál) je označována jako TELNET klient, zatímco druhá složka, na "vzdáleném" počítači (ke kterému se prostřednictvím vzdálené terminálové relace uživatel přihlašuje) je v postavení TELNET serveru. Úloha obou složek přitom odpovídá představě, kterou jsme si zavedli v 65. dílu: složka v roli klienta přijímá všechny vstupy od terminálu, a odesílá je po síti své partnerské složce v roli serveru na "vzdáleném" počítači. Tato složka pak příslušné vstupy "podstrkuje" svému okolí tak, jako kdyby šlo o vstupy terminálu, připojeného k místnímu vzdálenému počítači. Filosofie protokolu TELNET přitom předpokládá, že obě složky mají formu aplikačních programů, a nejsou tedy "pevně zabudovány" v operačním systému - jak by asi bylo, alespoň u složky v roli serveru, zřejmě nejpřirozenější. Výhodou je totiž mnohem větší flexibilita a snadnost provádění případných změn, nevýhodou pak menší efektivnost. Uvědomme si totiž, že při takovémto řešení každý jednotlivý znak prochází celkem pětkrát "skrz" celý operační systém: poprvé než se dostane od terminálu ke klientské složce, podruhé když jej tato složka odesílá na vzdálený počítač, potřetí když projde operačním systémem na tomto vzdáleném počítači až ke složce v roli serveru, počtvrté prochází operačním systémem, když jej serverová složka "podstrkuje" zpět svému operačnímu systému, a konečně popáté, když jej tento operační systém předává jiné aplikační úloze, která je konečným příjemcem vstupu. Analogicky pro všechny výstupy, které cestují opačným směrem.
Dále je pro toto řešení nutné, aby operační systém (alespoň na straně serveru) vycházel vstříc výše citované možnosti "podstrkování" vstupů, a poskytoval za tímto účelem vhodný mechanismus. Zde velmi záleží na konkrétním prostředí, ve kterém je protokol TELNET implementován. Operační systém Unix s takovouto možností počítá, a nabízí k využití zvláštní vstupně/výstupní body, na které se nejrůznější programy mohou napojit, a napodobovat chování skutečného terminálu. V AT&T Unixu se těmto vstupním bodům do operačního systému říká pseudoterminály, zatímco v BSD Unixu jsou označovány jako pseudo tty.
Za zmínku také stojí konkrétní způsob implementace obou složek v prostředí Unixu. Složka v roli klienta je běžným aplikačním programem, který si uživatel sám a explicitně spouští až v okamžiku, kdy to skutečně potřebuje. Naproti tomu složka v roli serveru má postavení systémového procesu - tzv. TELNET démona (viz 64. díl), označovaného též: TELNETD.
Nejen Unixem živ je TELNET
Protokol TELNET je relativně velmi jednoduchým protokolem, který se záměrně snaží nevázat na vlastnosti, schopnosti a služby určitého konkrétního prostředí. Ukažme si smysl tohoto počínání na příkladu: když se uživatel přihlásí k práci v operačním systému určitého počítače (tj. provede tzv. login), a poté si prostřednictvím TELNET-u otevře vzdálenou terminálovou relaci s jiným počítačem, musí se na něm znovu sám přihlásit (opět provést tzv. login). Bylo by sice možné, aby za něj toto přihlášení provedl TELNET automaticky. Znamenalo by to ovšem, že by musel vědět jak - musel by znát konkrétní konvence pro přihlašování a zadávání hesel, způsob uchovávání informací o uživatelích a jejich heslech a mnoho dalších konkrétních informací, které se v různých systémech mohou výrazně lišit.
Díky tomu, že se TELNET o automatické přihlašování nesnaží, může být implementován v prostředí různých operačních systémů, a to dokonce i takových, které pojem terminálových relací a uživatelských jmen a účtů vůbec neznají. Například je možné (a v současné době i velmi časté), aby klientská složka protokolu TELNET byla provozována jako běžný aplikační program na osobním počítači v prostředí operačního systému MS DOS, zatímco složka v roli serveru běžela na Unixovském počítači. Uživatel osobního počítače si pak může zřizovat vzdálené terminálové relace z prostředí DOSu do prostředí Unixu.
S implementací klientské složky protokolu TELNET se dnes můžeme setkat v prostředí snad každého operačního systému, zdaleka ne jen MS DOSu, a ze všech těchto operačních systémů je pak možné si zřizovat vzdálené terminálové relace s Unixovskými počítači. Zajímavé je, zda to platí i obráceně - tedy zda i složka v roli serveru může být implementována v jiném prostředí než v Unixu, a zda je tedy možné si prostřednictvím protokolu TELNET zřizovat vzdálené terminálové relace i s jinými, než Unixovskými počítači. Odpověď je samozřejmě kladná, jen příslušných implementací TELNET serverů je zatím poněkud méně.
TELNET server na PC
Existují dokonce i implementace serverových složek protokolu TELNET pro operační systém MS DOS počítačů PC (dokonce z kategorie public domain). To je poněkud pikantní, protože MS DOS je jednoúlohový a jednouživatelský operační systém, který pojem terminálové relace vůbec nezná. Zřízení vzdálené terminálové relace s počítačem PC (pod MS DOSem) je pak vlastně formou dálkového ovládání (remote control) počítače PC jako celku. Pro potřeby dálkového ovládání počítačů PC dnes existuje celá řada komerčních i public domain programů, které ale vesměs vyžadují vlastní, specifické klientské složky. Výhodou tohoto řešení (tj. TELNET serveru na počítači PC) je možnost využít standardní klientskou složku protokolu TELNET, která může být navíc provozována i jinde, než jen v prostředí MS DOSu. Díky tomu je možné, aby například Unixovský počítač na dálku ovládal počítač PC. Navíc je vhodné si uvědomit, že po zřízení vzdálené terminálové relace prostřednictvím protokolu TELNET je její existence pro uživatele transparentní, takže například uživatel Unixovského počítače pak může mít dojem, že pracuje na počítači PC. Nebude to ale iluze dokonalá - již jen z důvodu omezené přenosové rychlosti. Další problémy pak způsobuje např. odlišnost v počtu řádků: zatímco terminály Unixovských počítačů mají nejčastěji 24 řádků, počítače PC zobrazují v základním textovém režimu 25 řádek.
Rlogin je jiný
TELNET není zdaleka jediným protokolem pro realizaci vzdálených terminálových relací - v prostředí TCP/IP sítí je ale zřejmě nejrozšířenější. Existuje řada dalších, mnohem propracovanějších a komplexnějších protokolů pro vzdálené terminálové relace, které nabízí větší rozsah služeb, ale za svou dokonalost platí omezenějšími možnostmi nasazení, než jednodušší TELNE. Za zmínku stojí alespoň jeden alternativní protokol - rlogin. Pochází z prostředí BSD Unixu, a liší se od TELNETu především v tom, že "vnímá" prostředí, ve kterém pracuje jeho klientská i serverová složka, a snaží se využívat specifické vlastnosti a schopnosti těchto prostředí - např. pro zajištění automatického přihlašování. Přístup protokolu rlogin je takový, že správce systému na určitém počítači má možnost specifikovat, které jiné počítače považuje za "důvěryhodné" - v tom smyslu, že když uživatel již jednou prošel na takovémto počítači procesem ověřování své identity (zadáním uživatelského jména a hesla), daný počítač již nepožaduje nové opakování tohoto procesu. Jinými slovy: "věří" v identitu uživatelů, kteří mu vysílají své žádosti o zřízení vzdálených terminálových relací z těch počítačů, které jsou správcem určeny jako "důvěryhodné" (anglicky: trusted hosts), a nesnaží se ji ověřovat znovu. Dále má správce systému možnost stanovit, že konkrétní uživatelé "důvěryhodných" počítačů mají na daném počítači taková a taková uživatelská jména. Když pak přijde žádost o zřízení terminálové relace od konkrétního uživatele "důvěryhodného" počítače, může být tento uživatel automaticky přihlášen do systému daného počítače pod příslušným jménem, a bez nutnosti zadávat heslo.
Jakmile je toto možné, lze implementovat i takovou službu, která uživateli jednoho počítače umožní zadat příkaz, který se má provést na jiném počítači. Přitom se automaticky zřídí vzdálená terminálová relace, v rámci které se vzdálenému počítači zadá příslušný příkaz, a po jeho provedení se terminálová relace zase zruší. Uživateli přitom stačí zadat jen dva základní údaje: příkaz, který má být proveden, a dále jméno počítače, na kterém se tak má stát.