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

TFTP, anonymní FTP servery

V minulých dvou dílech jsme se podrobněji zabývali protokolem FTP pro netransparentní přenos v sítích na bázi TCP/IP. Již na začátku jsme si ale avizovali, že vedle tohoto "plnohodnotného" protokolu existuje ještě jeden, o mnoho jednodušší a skromnější, označovaný příznačně jako TFTP, neboli "Triviální FTP".

Jaká je ale logika, která stojí za existencí dvou protokolů pro netransparentní přenos souborů? Proč je výhodné mít dva?

Protokol FTP lze označit za plnohodnotný v tom smyslu, že je povinně vybaven mnoha různými funkcemi, které však nemusí být zdaleka vždy využívány. Množství různých funkcí a velký rozsah schopností však znamená větší, a obvykle i pomalejší program, který také zabírá více místa jak na disku, tak i při svém běhu v operační paměti. V dnešní době, kdy se objemy operačních pamětí počítají spíše na megabyty, by nějaký ten kilobyte nemusel hrát příliš velkou roli. Přesto jsou ale situace, kdy hraje roli významnou. Tak významnou, že se kvůli ní vyplatí použít jiný protokol, jehož implementace je méně náročná na různé systémové zdroje.

Co potřebují bezdiskové stanice

Pro příklad je nejlépe zajít k bezdiskovým pracovním stanicím. Nemaje vlastní pevný disk, jsou odkázány na sdílení disků jiných uzlových počítačů prostřednictvím sítě. Nejprve si ale musí odněkud načíst svůj vlastní operační systém a další "náležitosti", aby se vůbec rozeběhly - z některého z uzlových počítačů, který plní roli tzv. bootovacího serveru, a svým klientům nabízí jako svou službu možnost nahrát si to, co potřebují ke svému startu a co by jinak měly na svém vlastním disku (kdyby jej ovšem měly). Aby však mohla bezdisková stanice (jako klient) tuto službu využít, musí umět se na příslušný server vůbec obrátit a komunikovat s ním. A to okamžitě po svém zapnutí, ještě dříve než od bootovacího serveru cokoli získá. Jediné možné řešení je pak umístit vše potřebné pro navázání komunikace se serverem do pevné paměti, tak aby příslušný kód mohl být spuštěn ihned po zapnutí stanice.

To, co pracovní stanice od bootovacího serveru získává, má formu souborů, a tak v této pevné paměti musí být implementován vhodný protokol pro přenos souborů, a s ním i všechny protokoly nižších vrstev, které ke své práci potřebuje. Je ovšem zcela zbytečné, aby to byl "plnohodnotný" protokol - jeho činnost je vždy stejná, a tak lze předem odhadnout, které funkce bude skutečně využívat a které nikoli, a implementovat jen ty skutečně potřebné. Velmi častý je i takový případ, kdy velmi malý kód v pevné paměti načte ze serveru a zavede do operační paměti stanice složitější zaváděcí program, a teprve ten pak zajistí načítání operačního systému a všeho potřebného pro start operačního systému na bezdiskové stanici (tomuto "vícestupňovému" zavádění se v angličtině říká bootstrapping).

Další motivací pro existenci jednoduchého protokolu pro přenos souborů pak jsou takové aplikace, které "vymoženosti" plnohodnotného protokolu nepotřebují, dále jednoduché operační systémy, kterým činí problémy udržovat současně více otevřených transportních spojení (jak to vyžaduje protokol FTP) apod.

V čem se liší TFTP

Protokol TFTP (Trivial File Transfer Protocol) se od protokolu FTP liší především v následujících aspektech:

  • pro transport dat používá služeb protokolu UDP (zatímco FTP používá transportní služby protokolu TCP)
  • nezajišťuje žádné systémové akce na vzdáleném počítači (typu výpisu adresáře, změny aktuálního adresáře, rušení souborů apod.),
  • nezajišťuje žádnou identifikaci uživatele, který žádá o přenos
  • přenáší jen textové a binární soubory.
Soubory, které přenáší, chápe protokol TFTP buď jako textové soubory, nebo jako soubory binární. V prvním případě předpokládá (obdobně jako protokol FTP), že jednotlivé znaky jsou při přenosu kódovány přesně takovým způsobem, jaký požaduje protokol Telnet (a příjemce či odesilatel je v případě potřeby konvertuje z/do místních konvencí), zatímco v druhém případě se na obsah přenášeného souboru dívá jako na posloupnost osmibitových bytů, a nijak je neinterpretuje.

Pro vlastní přenos využívá protokol TFTP nespolehlivých a nespojovaných služeb transportního protokolu UDP. S jeho nespolehlivostí se vyrovnává tak, že si sám zajišťuje potřebné potvrzování. Toto potvrzování je zajímavé tím, že jde o tzv. jednotlivé potvrzování (tedy takové, kdy odesilatel po odeslání jednoho bloku čeká na jeho explicitní potvrzení, a teprve pak vysílá další blok), a dále tím, že používá symetrické čekání na vypršení časového limitu (tzv. timeout). Odesilatel, který odeslal nějaká data, čeká na jejich potvrzení, a pokud jej nedostane do určitého časového limitu, vyšle data znovu. Obdobně příjemce, který data obdrží, je potvrdí odesláním příslušného potvrzení, ale pokud do časového limitu nedostane další data, znovu vyšle již jednou odeslané potvrzení. Jednotlivé bloky dat, které jsou tímto způsobem přenášeny, mají pevnou velikost (512 bytů), a jsou sekvenčně číslovány od 1. Podobně jsou sekvenčně číslována i potvrzení. Konec celého přenosu příjemce rozpoznává podle posledního bloku, který musí obsahovat méně než standardních 512 bytů (tedy např. i 0 bytů).

V prvním (resp. nultém) bloku, kterým se přenos zahajuje, musí být uvedeno přesné jméno souboru, který má být přenesen, včetně úplné přístupové cesty k tomuto souboru. Protokol TFTP, na rozdíl od protokolu FTP, totiž nepočítá s tím, že by na straně serveru byl nastaven na nějaký konkrétní adresář. V důsledku toho ani nezná pojem aktuálního adresáře (na serveru), neumožňuje přecházet mezi jednotlivými adresáři, a nezprostředkovává ani jejich výpis. Počítá s tím, že klient přesně ví, kde a s jakým souborem chce pracovat.

Jménem koho?

Velmi zajímavé důsledky vyplývají z dalšího zjednodušení protokolu TFTP. Na rozdíl od "plnohodnotného" protokolu FTP totiž nezná pojem uživatele. Nepočítá s tím, že by uživatel v roli klienta prokazoval serveru svou totožnost (resp. toto neumožňuje), a tak všechny jeho požadavky na čtení či zápis jednotlivých souborů jsou vlastně anonymní. Jak má ale server posuzovat jejich oprávněnost či neoprávněnost?

Definice protokolu TFTP toto ponechává na implementaci, ale obvyklé řešení je takové, že číst lze jen ty soubory, které jsou ke čtení přístupné všem uživatelům. V případě zápisu pak rozhodují přístupová práva do konkrétního adresáře (zda umožňuje zápis všem uživatelům či nikoli), resp. přístupová práva ke konkrétnímu souboru (jde-li o přepis nebo o přidávání za konec již existujícího souboru).

Anonymní FTP servery

Na problém s přístupovými právy narazíme i v okamžiku, kdy se rozhodneme vytvořit na nějakém počítači veřejně přístupný archiv, ze kterého by si kdokoli mohl nahrávat zde umístěné soubory. Jaký protokol pro přenos souborů je k tomuto účelu nejvhodnější?

Protokol TFTP by byl vhodný právě pro svou "anonymitu", díky které by zájemci o přístup k archivu nemuseli uvádět žádná uživatelská jména ani hesla. Má to ovšem jeden malý háček - jelikož protokol TFTP neumožňuje procházet adresáři serveru a vypisovat si jejich obsah, nemohl by si zájemce sám vyhledávat to, co jej zajímá či co potřebuje, ale musel by být s obsahem archivu seznámen jiným způsobem, a pak jít "na jistotu".

Proto se ke zpřístupnění nejrůznějších archivů souborů v sítích na bázi TCP/IP používá "plnohodnotný" protokol FTP. I zde je ale malý háček - má-li být archiv opravdu veřejně přístupný, jak sdělit všem potenciálním zájemcům potřebné uživatelské jméno (a případně i heslo), které mají použít? Možným řešením je zvolit jedno konkrétní jméno, a to pak používat všude. Tedy vlastně zavést jednotnou konvenci, a tu důsledně dodržovat. No a jaká že tato konvence je? V síti Internet, která je dnes zdaleka nejvýznamnější sítí na bázi protokolů TCP/IP a pokrývá prakticky celý svět, je touto jednotnou konvencí uživatelské jméno anonymous (doslova: anonym). Podle něj jsou pak také příslušné veřejně přístupné archivy označovány jako anonymní FTP servery (anonymous FTP servers). V celém Internetu jich je opravdu mnoho, jen jejich stručné seznamy mívají desítky stránek.

Pokud se na některý z nich obrátíte (v roli klienta protokolu FTP), můžete se přihlásit jako uživatel "anonymous". Heslo pak na vás již vůbec není požadováno, nebo jste vyzváni k tomu, aby jste místo hesla uvedli svou skutečnou identitu (míněno: svou adresu pro elektronickou poštu) - viz též obrázek 72.3 v minulém dílu seriálu. Některé anonymní FTP servery používají takto získanou informaci jen pro vlastní evidenci (aby měly přehled, kdo a jak je využívá). Jiné anonymní servery však mohou být méně důvěřivé, a ověřují si, zda vámi uvedená identita je skutečná, či nikoli. A pokud dojdou k závěru, že je smyšlená (nebo nejsou schopny její pravost ověřit), jednoduše se s vámi přestanou bavit.