VyÜlo v t²denφku: COMPUTERWORLD
╚φslo:35/93
RoΦnφk:1993
Rubrika/kategorie: Co je Φφm ... v poΦφtaΦov²ch sφtφch
Dφl:72

zp∞t do archivu Φlßnk∙ | rejst°φk | p°edchozφ dφl | nßsledujφcφ dφl

Ji°φ Peterka: Co je Φφm ... v poΦφtaΦov²ch sφtφch (72):

FTP - II.

V p°edchozφm dφlu jsme se zaΦali zab²vat konkrΘtnφmi vlastnostmi protokolu FTP, kter² mß v rodin∞ protokol∙ TCP/IP na starosti netransparentnφ p°enos soubor∙. P°itom jsme se v∞novali hlavn∞ zp∙sobu, jak²m se tento protokol vyrovnßvß s odliÜnostmi r∙zn²ch poΦφtaΦ∙ a jejich operaΦnφch systΘm∙ v pohledu na soubory, jejich vnit°nφ strukturu a vlastnφ obsah. Dnes se ji₧ dostaneme k tomu, jak p°enos soubor∙ podle protokolu FTP v praxi probφhß - k²m je iniciovßn, k²m je °φzen, jak²mi p°φkazy atd.

Implementace protokolu FTP vychßzφ z architektury klient-server, kterou jsme si p°iblφ₧ili ji₧ v 64. dφlu serißlu. P°edpoklßdß tedy existenci dvou navzßjem nerovnoprßvn²ch slo₧ek: klienta a serveru. Slo₧ka v roli klienta je inicißtorem, z jeho₧ popudu k p°enos∙m soubor∙ dochßzφ, a server je druhou stranou, kterß p°itom spolupracuje. Server tedy nabφzφ jako svou slu₧bu spoluprßci na p°enosu soubor∙, a klient je tφm, kdo o tuto slu₧bu ₧ßdß. Typicky je slo₧ka v roli klienta p°edstavovßna aplikaΦnφm programem, kter² si u₧ivatel spouÜtφ na svΘm poΦφtaΦi, a slo₧ka v roli serveru dΘmonem (FTP dΘmonem v prost°edφ Unixu, resp. obdobn²m systΘmov²m procesem v jinΘm prost°edφ) na tom poΦφtaΦi, ze kterΘho Φi na kter² u₧ivatel chce p°enΘst n∞jak² soubor. Vlastnφ sm∞r p°enosu (od serveru ke klientovi Φi naopak) p°itom nenφ pro rozliÜenφ obou slo₧ek relevantnφ.

Trvale jen nezbytnΘ minimum

Obrßzek 72.1.
Obr. 72.1. P°edstava slo₧ek v roli klienta a serveru protokolu FTP
Protokol FTP vychßzφ vst°φc takovΘmu zp∙sobu implementace, kter² se sna₧φ minimalizovat svΘ nßroky na r∙znΘ systΘmovΘ prost°edky - umo₧≥uje ₧ßdat o jejich p°id∞lenφ a₧ na zßklad∞ skuteΦnΘ pot°eby, a po jejich pou₧itφ je zase vrßtit. KonkrΘtnφ myÜlenka je takovß, ₧e po celou dobu komunikace mezi klientem a serverem (tedy po celou dobu existence relace mezi nimi) musφ existovat jen to, co zajiÜ¥uje vysφlßnφ a p°φjem nejr∙zn∞jÜφch p°φkaz∙ a odpov∞dφ na n∞ mezi klientem a serverem, zatφmco vÜechno ostatnφ, co je pot°eba pro vlastnφ p°enos dat, m∙₧e vznikat dynamicky, a₧ na zßklad∞ skuteΦnΘ pot°eby.

TΘto p°edstav∞ odpovφdß i vnit°nφ Φlen∞nφ slo₧ek v roli klienta a serveru i povaha komunikaΦnφch kanßl∙ mezi nimi - viz obr. 72.1.

Interpret protokolu a p°enosov² proces

Ta Φßst slo₧ky v roli klienta, kterß existuje trvale (resp. po celou dobu prßce s aplikacφ, kterß protokol FTP implementuje), je tzv. interpret protokolu (PI, Protocol Interpreter). Jeho ·kolem je nejprve navßzat spojenφ s partnersk²m interpretem protokolu na stran∞ serveru, a potΘ iniciovat jednotlivΘ akce a °φdit jejich pr∙b∞h. ╚inφ tak prost°ednictvφm p°φkaz∙, kterΘ zasφlß svΘmu partnerskΘmu interpretu protokolu na stran∞ serveru, a dßle tφm, ₧e na svΘ stran∞ dynamicky vytvß°φ a °φdφ tzv. p°enosov² proces (DTP, Data Transfer Process), kter² pak zajiÜ¥uje vlastnφ p°enos dat na zßklad∞ pokyn∙ od svΘho interpretu protokolu a pokyn∙ druhΘ strany.

╪φdφcφ a datovΘ spojenφ

Interpret protokolu na stran∞ klienta navazuje spojenφ se sv²m partnersk²m interpretem na stran∞ serveru prost°ednictvφm protokolu TCP - to znamenß, ₧e spojenφ mezi ob∞ma interprety mß povahu spojovanΘho a spolehlivΘho spojenφ. Interpret na stran∞ serveru musφ Φekat na ₧ßdost o navßzßnφ spojenφ na jednom z tzv. dob°e znßm²ch port∙ (konkrΘtn∞ na portu Φ. 21). Jakmile je spojenφ navßzßno, existuje po celou dobu existence relace, ale je vyu₧φvßno jen pro pro pot°eby °φzenφ tΘto relace - proto se mu takΘ °φkß °φdφcφ spojenφ (control connection).

Jakmile si oba interprety mezi sebou vykorespondujφ, ₧e mß b²t proveden n∞jak² p°enos, vytvo°φ za tφmto ·Φelem svΘ p°enosovΘ procesy. Ty si pak mezi sebou navß₧φ samostatnΘ spojenφ (op∞t prost°ednictvφm protokolu TCP, tedy spolehlivΘ a spojovanΘ), a jeho prost°ednictvφm pak zajistφ vlastnφ p°enos dat. Proto se tomuto spojenφ takΘ °φkß datovΘ spojenφ (data connection). Za povÜimnutφ stojφ skuteΦnost, ₧e zatφmco navßzßnφ °φdφcφho spojenφ iniciuje klient (p°esn∞ji interpret protokolu na stran∞ klienta), povinnost iniciovat navßzßnφ datovΘho spojenφ mß naopak server (resp. jeho p°enosov² proces). Interpret protokolu na stran∞ klienta naopak instruuje sv∙j p°enosov² proces, aby Φekal na zadanΘm portu na navßzßnφ spojenφ.

Protokol FTP ovÜem p°ipouÜtφ i jinou mo₧nost, ne₧ jen p°enos soubor∙ mezi jednφm klientem a jednφm serverem. Dovoluje, aby u₧ivatel z jednoho poΦφtaΦe inicioval p°enos soubor∙ mezi dv∞ma jin²mi poΦφtaΦi (tedy mezi dv∞ma vzdßlen²mi poΦφtaΦi). V tomto p°φpad∞ existuje slo₧ka v roli klienta na poΦφtaΦi, na kterΘm pracuje u₧ivatel, a na obou vzdßlen²ch poΦφtaΦφch musφ existovat slo₧ky v roli serveru. ╪φdφcφ spojenφ musφ b²t navßzßna dv∞, a to mezi interpretem protokolu klientskΘ slo₧ky a interprety obou server∙, a jejich prost°ednictvφm instruuje klient oba servery, jak majφ zajistit po₧adovan² p°enos. DatovΘ spojenφ je pak ale vytvß°eno jen mezi ob∞ma servery, tj. vlastnφ data ji₧ neprochßzφ p°es klientsk² poΦφtaΦ.

P°φkazy pro °φzenφ p°enosu

Interprety protokolu na stran∞ klienta a serveru spolu komunikujφ prost°ednictvφm jazyka, kter² je souΦßstφ definice protokolu FTP. Tento jazyk je tvo°en p°φkazy (kterΘ vysφlß interpret klienta) a odpov∞∩mi na n∞ (kterΘ vysφlß interpret serveru). JednotlivΘ p°φkazy lze rozd∞lit do t°φ zßkladnφch skupin, na:

Odpov∞di

Ka₧d² p°φkaz generuje alespo≥ jednu odpov∞∩ (n∞kterΘ dokonce vφce odpov∞dφ). JednotlivΘ odpov∞di p°itom majφ formu Φφseln²ch k≤d∙ - trojmφstn²ch desφtkov²ch Φφsel - za kter²mi nßsleduje vysv∞tlujφcφ text. P°edstava je ovÜem takovß, ₧e rozhodujφcφ jsou pouze ΦφselnΘ k≤dy, kterΘ v sob∞ nesou veÜkerou podstatnou informaci, zatφmco text mß pouze vysv∞tlujφcφ charakter, a jeho obsah nenφ navφc v∙bec zßvazn² (tj. r∙znΘ implementace mohou ke stejnΘmu ΦφselnΘmu k≤du p°ipojovat r∙znΘ vysv∞tlujφcφ texty). Logika je takovß, ₧e Φφseln² k≤d je urΦen pro program, kter² odpov∞di vyhodnocuje. Ten m∙₧e podle svΘho uvß₧enφ vysv∞tlujφcφ text jednoduÜe ignorovat, nebo jej zobrazit u₧ivateli, aby i on byl pro n∞j srozumitelnou formou informovßn o odpov∞dφch serveru.

Zajφmav² je i zp∙sob k≤dovßnφ Φφseln²ch odpov∞dφ, kter² vychßzφ vst°φc r∙znΘ ·rovni detailnosti p°i vyhodnocovßnφ odpov∞dφ. ╚φseln² k≤d je trojmφstn², a jeho prvnφ Φφslice udßvß to, zda odpov∞∩ je dobrß, Üpatnß Φi ne·plnß (viz tabulka 72.2.). NejjednoduÜÜφ implementace se pak mohou rozhodovat jen podle tΘto prvnφ Φφslice, zatφmco propracovan∞jÜφ implementace mohou zφskat podrobn∞jÜφ informace vyhodnocenφm druhΘ, ev. i t°etφ Φφslice.
1xx p°edb∞₧nß kladnß odpov∞∩
(po₧adovanß akce byla ·sp∞Ün∞ zahßjena, jeÜt∞ bude nßsledovat dalÜφ zprßva o jejφm pr∙b∞hu)
2xx kladnß odpov∞∩
(po₧adovanß akce byla ·sp∞Ün∞ provedena, resp. dokonΦena)
3xxprozatφmnφ kladnß odpov∞∩
(p°φkaz byl p°ijat, ale pro zahßjenφ po₧adovanΘ akce jsou nutnΘ jeÜt∞ dalÜφ p°φkazy)
4xx doΦasnß zßpornß odpov∞∩
(po₧adovanß akce nebyla ·sp∞Ün∞ provedena, ale d∙vod ne·sp∞chu je doΦasn², a mß smysl ₧ßdat o novΘ provedenφ akce)
5xxtrvalß zßpornß odpov∞∩
(po₧adovanß akce nebyla ·sp∞Ün∞ provedena a nemß smysl se o ni pokouÜet znovu)
Tabulka 72.2: V²znam prvnφ Φφslice odpov∞di

FTP pou₧φvß Telnet

Za povÜimnutφ stojφ i konkrΘtnφ forma, v jakΘ jsou jednotlivΘ p°φkazy a odpov∞di na n∞ p°enßÜeny °φdφcφm spojenφm. P°φkazy i odpov∞di majφ zßsadn∞ textovou formu - jmΘna p°φkaz∙ tvo°φ t°φ a₧ Φty°pφsmennΘ zkratky, a takΘ Φφselnß Φßst odpov∞di je p°enßÜena textov∞ (jako trojice desφtkov²ch Φφslic). Vzhledem k tomu se protokol FTP m∙₧e odvolßvat na protokol Telnet a po₧adovat, aby tyto texty byly p°enßÜeny po °φdφcφm spojenφ p°esn∞ tak, jak to Φinφ protokol Telnet. V praxi to znamenß, ₧e implementace protokolu FTP pro p°enos p°φkaz∙ a odpov∞dφ °φdφcφm spojenφm bu∩to sama vyu₧φvß slu₧eb ji₧ existujφcφ implementace Telnetu, nebo si sama implementuje tu Φßst protokolu Telnet, kterou skuteΦn∞ pot°ebuje (proto₧e zdaleka nevyu₧φvß vÜech mo₧nostφ, na kterΘ protokol Telnet pamatuje).

U₧ivatelsk² vs. °φdφcφ jazyk

D∙sledn∞ textovß podoba °φdφcφho jazyka i vyu₧itφ protokolu Telnet pro p°enos p°φkaz∙ a odpov∞dφ nevyluΦuje, aby na stran∞ klienta vydßval p°φkazy °φdφcφho jazyka mφsto interpretu protokolu p°φmo u₧ivatel, kter² si otev°e vzdßlenou terminßlovou relaci s interpretem na stran∞ serveru (pokud p°itom dodr₧φ vÜechny konvence protokolu FTP). B∞₧n² p°φpad to ale rozhodn∞ nenφ.

Obrßzek 72.3.
Obr. 72.3. P°φklad pr∙b∞hu relace protokolu FTP
Obvyklß implementace protokolu FTP obsahuje vedle interpretu p°φkaz∙ a p°enosovΘho procesu jeÜt∞ i u₧ivatelskΘ rozhranφ, kterΘ zajiÜ¥uje komunikaci mezi u₧ivatelem a interpretem p°φkaz∙ (viz obr. 72.1.). Toto rozhranφ pak m∙₧e nabφzet v podstat∞ jak²koli "u₧ivatelsk²" jazyk, kter² pak ve spoluprßci s interpretem protokolu p°eklßdß do °φdφcφho jazyka, a ten ji₧ je pro vÜechny implementace jednotn². Z pohledu u₧ivatele (kter² vyu₧φvß slu₧eb protokolu FTP prost°ednictvφm u₧ivatelskΘho jazyka) se proto r∙znΘ implementace FTP mohou "tvß°it" jinak (mohou pou₧φvat r∙znΘ p°φkazy pro tytΘ₧ Φinnosti, mφsto °ßdkovΘho rozhranφ mohou pou₧φvat grafickΘ u₧ivatelskΘ rozhranφ apod.), ale dφky pou₧φvßnφ jednotnΘho °φdφcφho jazyka by se m∞ly vÜechny sprßvn∞ domluvit.

P°φklad pr∙b∞hu relace mezi klientem a serverem ukazuje obrßzek 72.3.


zp∞t do archivu Φlßnk∙ | rejst°φk | p°edchozφ dφl | nßsledujφcφ dφl
Tento Φlßnek m∙₧e b²t voln∞ Üφ°en, pokud se tak d∞je pro studijnφ ·Φely, na nev²d∞leΦnΘm zßklad∞ a se zachovßnφm tohoto dov∞tku. Podrobnosti hledejte zde, resp. na adrese http://archiv.czech.net/copyleft.htm