Vyšlo v týdeníku Computerworld č. 31/93 v roce 1993
Vytištěno z adresy: http://www.earchiv.cz/a93/a331c110.php3

Přenos a sdílení souborů

V posledních pěti dílech tohoto seriálu jsme se podrobněji zabývali první z aplikačních služeb v rámci síťového modelu TCP/IP - vzdáleným přihlašováním. Dnes již přijde na řadu další velmi potřebná služba: přenos a sdílení souborů. Stejně jako v předchozím případě se ale nejprve zamyslíme nad tím, o co vlastně jde, a teprve pak si ukážeme, jak je přenos souborů a jejich sdílení konkrétně řešeno v TCP/IP sítích.

Problematika přenosu a sdílení souborů v počítačových sítích má společný základ v situaci, kterou je možné lapidárně vyjádřit slovy: "chceme pracovat se souborem, který se nachází na jiném uzlovém počítači". Buďme ale přesnější: obsah souboru, který se nachází na jiném uzlu, chceme zpracovávat na našem počítači. Nepůjde nám tedy o takové řešení, kdy bychom se prostřednictvím vzdáleného přihlašování dostali se svým počítačem do role terminálu toho uzlu, na kterém se příslušný soubor nachází, a zde jej zpracovávali jako "místní" soubor. Představme si například, že chceme editovat nějaký soubor - pak by tato druhá varianta odpovídala situaci, kdy editor běží jako aplikační program na stejném počítači, na kterém se nachází i editovaný soubor. Nám půjde o případ, kdy chceme používat editor běžící na našem počítači, a jeho prostřednictvím editovat obsah souboru, který se nachází na vzdáleném počítači.

Vícenásobný přístup

Řešení právě naznačeného problému má přinejmenším dvě stránky. Tou první je přenos celého souboru či jeho částí z místa, kde se nachází, na místo kde má být zpracován, a ev. zpět. Druhou stránkou je pak otázka vícenásobného přístupu k jednomu a témuž souboru - tedy řešení situace, kdy se o přístup k určitému souboru uchází více zájemců současně.

Vícenásobný přístup samozřejmě není specialitou počítačových sítí, přesně stejný problém totiž nastává obecně u každého víceuživatelského, a dokonce i jen víceúlohového systému. Jeho řešení v prostředí počítačových sítí se nemusí nijak principiálně lišit od řešení na izolovaných počítačích, je spíše jen ztíženo existencí přenosových cest s omezenou kapacitou a zpožděními při přenosu.

Pro zajištění korektního vícenásobného přístupu k souborům existuje celá řada technik, od jednoduchého uzamykání celých souborů či jejich jednotlivých částí až po velmi propracované metody, které mají svůj původ v prostředí distribuovaných systémů.

V této části seriálu se však problematikou vícenásobného přístupu zabývat nebudeme, a zaměříme se hlavně na vlastní přenos souborů mezi uzlovými počítači sítě.

Transparentní vs. netransparentní přístup

Potřebujeme-li na jednom počítači zpracovávat obsah souboru, který se nachází na jiném uzlovém počítači, musí vždy dojít k přenosu tohoto souboru (či alespoň jeho části) tam, kde má být zpracován. Existují ale dva zásadně odlišné přístupy k tomu, kdo a jak tento přenos vyvolává: jeden přístup můžeme označit jako transparentní, a druhý jako netransparentní.

Netransparentní přístup je založen na myšlence, že přenos souborů bude ponechán plně na koncovém uživateli. Když chce pracovat s nějakým souborem, musí si jej sám a explicitně (pomocí vhodné utility, kterou si za tímto účelem vyvolá) nejprve přenést na svůj počítač, a zde jej pak zpracovat stejným způsobem, jako kterýkoli jiný "místní" soubor (a pak jej zase sám přenést zpět, pokud je to zapotřebí). V tomto případě si tedy koncový uživatel plně uvědomuje, že různé soubory se nachází na různých počítačích (dokonce musí přesně vědět kde), a tudíž pro něj existuje principiální rozdíl mezi "místními" a "vzdálenými" soubory.

Alternativou je transparentní přístup k souborům. Ten se snaží vytvářet iluzi, že vzdálené soubory se nachází na místním počítači, snaží se zakrýt veškeré rozdíly mezi oběma druhy souborů, a přebírá na sebe veškerou agendu, která je s tímto předstíráním spojena. Pro koncového uživatele (i pro jím spouštěnou aplikaci) se pak i vzdálené soubory "tváří" naprosto stejně, jako soubory místní, a stejně se s nimi i pracuje. Uživatel a jeho aplikace si pak vlastně vůbec nemusí uvědomovat existenci počítačové sítě a jakkoli distribuovaného prostředí, a tudíž ani to, že různé soubory se mohou ve skutečnosti nacházet na různých počítačích.

Zajištění plně transparentního přístupu k souborům je samozřejmě mnohem náročnější, než zajištění přístupu netransparentního. Součástí síťového modelu TCP/IP jsou protokoly pro oba tyto přístupy (protokoly FTP a NFS), a my se budeme oběma z nich podrobněji zabývat.

Ještě dříve si však alespoň naznačme, s jakými principiálními problémy je realizace obou základních přístupů spojena. Nejvíce jich samozřejmě bude u transparentního přístupu, jehož implementace je nejobtížnější - musí být totiž skryta pod operačním systémem, který nezbytný přenos aktivuje v okamžiku, kdy je uživatelem či aplikací požádán o zajištění přístupu k určitému souboru, a zjistí že tento ve skutečnosti není místní.

Problém je v rozdílnosti operačních systémů

Hlavní zdroj problémů před námi vyvstane v okamžiku, kdy si uvědomíme, že přístup k souborům v počítačové síti může být zajišťován i z prostředí různých operačních systémů. Například je možné (a při dnešní popularitě osobních počítačů a lokálních sítí i docela běžné) aby uživatel počítače PC s operačním systémem MS DOS měl přístup k souborům, které se ve skutečnosti nachází na jiném uzlovém počítači, na kterém je provozován například operační systém Unix. Ukažme si dvě hlavní oblasti, ve kterých se pohled obou operačních systémů na soubory výrazně liší:

  • jména a přípony; MS DOS připouští maximálně osmiznaková jména souborů (a tříznakové přípony), zatímco Unix dovoluje používat je jménech i příponách znaků více (konkrétní počet závisí na variantě Unixu), a navíc to mohou být i některé speciální znaky, které naopak v DOSovských jménech a příponách přípustné nejsou. Další rozdíl je v tom, že MS DOS nerozlišuje velká a malá písmena, zatímco Unix ano. Obecně proto platí, že každé jméno a přípona, přípustné v MS DOSu, je přípustné i v Unixu, ale naopak nikoli. Při přístupu k Unixovským souborům z MS DOSu je proto nutné vhodně nahradit případná nepřípustná jména. Při netransparentním přístupu je možné vyřešit celý problém vcelku snadno - zde si totiž uživatel musí zavolat příslušnou utilitu, a jejím prostřednictvím explicitně zadávat, které soubory chce přenést. Pak není problém vyžádat si na něm i jméno (přípustné pro DOS), pod jakým má být Unixovský soubor přenesen do prostředí MS DOSu. Při plně transparentním přístupu však takovéto řešení není možné, a tak musí být vhodně implementována automatická transformace Unixovských jmen souborů na DOSsovská (což může být velkým oříškem - jak zajistit jednoznačnost, neboli to, aby se dvě různá Unixovská jména nepromítla do stejného DOSovského jména).
  • vlastnictví souborů a přístupová práva; MS DOS je jednouživatelský operační systém. Předpokládá, že s ním bude vždy pracovat jen jeden uživatel, kterému také budou patřit všechny soubory. Proto nemá zapotřebí uvažovat, že by různé soubory mohly mít různé majitele, a ti mohli přístup ke svým soborům jiným uživatelům nějak omezovat - z tohoto pohledu je příznačné, že MS DOS pojem uživatele vlastně ani nezná. Naproti tomu Unix je víceuživatelským systémem, který tudíž jednotlivé uživatele rozlišovat musí, a u každého souboru předpokládá, že někomu patří (tj. že každý soubor má svého majitele). Majitel souboru pak může definovat přístupová práva jiných uživatelů k tomuto souboru (a sobě samotnému také). Aby tak nemusel činit pro každého individuálního uživatele samostatně, jsou v Unixu zavedeny skupiny uživatelů, a každý uživatel vždy do nějaké skupiny patří. Ke každému souboru se pak explicitně definují přístupová práva pro vlastníka souboru, pro skupinu, do které vlastník patří, a pro ostatní uživatele. Takto je možné samostatně nastavit právo ke čtení souboru, právo k zápisu do něj (resp. přepisu), a právo ke spuštění (provedení spustitelného programu).
Má-li však být Unixovský soubor přenesen do prostředí MS DOSu nebo naopak, podle čeho se bude kontrolovat oprávněnost přístupu k tomuto souboru? Ten, kdo z MS DOSu vznáší svůj požadavek na přístup k souboru, je vlastně anonymní (když MS DOS pojem uživatele nezná). V případě netransparentního přístupu ze strany MS DOSu je řešení opět vcelku jednoduché - příslušná utilita (aplikační program) na straně DOSU se může svého uživatele vyptat, jménem koho má vznést svůj požadavek na straně Unixu (tj. vyžádá si Unixovské uživatelské jméno). Podle tohoto jména se pak posuzuje oprávněnost přístup k příslušnému souboru. Jak to ale udělat v případě plně transparentního přístupu? Zde připadá v úvahu v podstatě jen jediná možnost: Unixovské uživatelské jméno (a heslo) si vyžádat předem, a všechny následné požadavky (které již jsou generovány bez přímého vědomí uživatele), vznášet tímto jménem.

Jak se to konkrétně dělá, k tomu se včas dostaneme.