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 (71):
FTP - I.
V minulΘm dφlu jsme si naznaΦili, ₧e p°enos a sdφlenφ
soubor∙ v poΦφtaΦov²ch sφtφch m∙₧e b²t °eÜeno dv∞ma
principißln∞ odliÜn²mi zp∙soby: transparentn∞
a netransparentn∞. Dnes se ji₧ dostaneme k tomu, jak je
v sφ¥ovΘm modelu TCP/IP zajiÜ¥ovßn netransparentnφ p°enos
- tedy k protokolu FTP.
Nejprve si ale znovu zopakujme, v Φem je rozdφl mezi
transparentnφm a netransparentnφm °eÜenφm: v p°φpad∞
netransparentnφho p°φstupu si u₧ivatel pln∞ uv∞domuje rozdφl
mezi mφstnφmi soubory a soubory na vzdßlenΘm poΦφtaΦi,
a musφ se sßm a explicitn∞ starat o jejich p°enos, zatφmco
v p°φpad∞ netransparentnφho p°φstupu mφstnφ a vzdßlenΘ
soubory spl²vajφ, pro u₧ivatele mezi nimi nenφ ₧ßdn²
principißlnφ rozdφl, a veÜkerou agendu spojenou
s p°edstφrßnφm tΘto iluze na sebe p°ebφrß sφ¥ov² software
a operaΦnφ systΘm.
Minule jsme se ji₧ takΘ zmφnili o tom, ₧e sφ¥ov² model
TCP/IP pamatuje na ob∞ varianty. Pro netransparentnφ
variantu nabφzφ hned dva protokoly - protokol FTP (File
Transfer Protocol, doslova: protokol pro p°enos soubor∙),
kter² lze oznaΦit jako "plnohodnotn²", vybaven² mno₧stvφm
r∙zn²ch schopnostφ a funkcφ, a dßle mnohem jednoduÜÜφ
protokol TFTP (Trivial File Transfer Protocol), poskytujφcφ
jen zßkladnφ funkce, ale zato implementaΦn∞ jednoduÜÜφ,
a Φasto i rychlejÜφ. NaÜe povφdßnφ zaΦneme filosofiφ
protokolu FTP.
FTP je starÜφ ne₧ TCP/IP
Na protokolu FTP je dob°e patrn² jeden v²znaΦn² rys
celΘho sφ¥ovΘho modelu TCP/IP - toti₧ skuteΦnost, ₧e
nevznikl narßz, od zelenΘho stolu, ale postupn²m v²vojem
a zdokonalovßnφm. Jak jsme si uvedli ji₧ ve 42. dφlu tohoto
serißlu, protokoly TCP/IP zφskaly svou dneÜnφ podobu zhruba
v letech 1977 a₧ 1979, a do sφt∞ ARPANET se zaΦaly
prosazovat p°ibli₧n∞ od roku 1980, kdy se z ARPANETu
postupn∞ stßvß zßrodek dneÜnφho Internetu. Prvnφ verze
protokolu FTP pro netransparentnφ p°enos soubor∙ vÜak
pochßzφ ji₧ z roku 1971, a od tΘ doby proÜla dlouh²m
v²vojem, podporovan²m Üirokou diskusφ u₧ivatelskΘ
ve°ejnosti. Od zaΦßtku osmdesßt²ch let, kdy i protokol FTP
p°eÜel na pou₧φvßnφ transportnφho protokolu TCP (mφsto
p∙vodnφho transportnφho protokolu NCP sφt∞ ARPANET) se ale
ji₧ zßsadn∞ji nem∞nil.
SprßvnΘ zasazenφ protokolu FTP do historickΘho rßmce
nßm pom∙₧e snßze pochopit n∞kterΘ jeho koncepΦnφ rysy.
Jak se FTP vyrovnßvß s r∙znorodostφ
Ji₧ minule jsme si naznaΦili, ₧e p°enos a sdφlenφ
soubor∙ mezi r∙zn²mi uzlov²mi poΦφtaΦi m∙₧e narß₧et na mnohΘ
problΘmy. Ukßzali jsme si n∞kterΘ z nich, kterΘ vypl²vajφ
z odliÜnΘho pohledu r∙zn²ch operaΦnφch systΘm∙ na soubory,
a to na "novodobΘm" p°φkladu Unixu a MS DOSu. V dob∞, kdy
koncepce protokolu FTP vznikala a utvß°ela se, vÜak
existovaly jeÜt∞ mnohem zßkladn∞jÜφ rozdφly mezi
jednotliv²mi poΦφtaΦi - n∞kterΘ z nich pou₧φvaly osmibitovΘ
byty a 32-bitovß slova, zatφmco jinΘ 36-bytovß slova.
N∞kterΘ pracovaly s textem tak, ₧e jeho jednotlivΘ znaky
uklßdaly do 8-bitov²ch byt∙ v k≤du EBCDIC (zejmΘna
st°ediskovΘ poΦφtaΦe IBM) nebo v k≤du ASCII, zatφmco jinΘ
uklßdaly znaky po Φtve°icφch do 36-bitov²ch slov (ka₧d² znak
do 9 bit∙), a jeÜt∞ jinΘ jich do 36-bitov²ch slov "nacpaly"
a₧ p∞t (ka₧d² znak do sedmi bit∙). N∞kterΘ poΦφtaΦe p°itom
umis¥ovaly jednotlivΘ °ßdky textu do zßznam∙ (records) pevnΘ
dΘlky, zatφmco jinΘ chßpaly text jako lineßrnφ posloupnost
jednotliv²ch znak∙, Φlen∞nou vlo₧en²mi znaky pro p°echod na
novou °ßdku.
Protokol FTP se vyrovnßvß se vÜemi t∞mito odliÜnostmi v
podstat∞ jedin²m mo₧n²m zp∙sobem: zavßdφ jednotn² tvar, ve
kterΘm jsou data skuteΦn∞ p°enßÜena, a ponechßvß na obou
koncov²ch ·Φastnφcφch, aby zajistili veÜkerΘ pot°ebnΘ
p°evody z/do mφstnφch konvencφ.
Zßrove≥ ale protokol FTP vychßzφ vst°φc i p°φpad∙m, kdy
by jedin² a nem∞nn² p°enosov² tvar byl neefektivnφ,
a umo₧≥uje jej v urΦitΘm rozmezφ a po dohod∞ obou stran
m∞nit. V podstat∞ lze °φci, ₧e tento p°enosov² tvar mß t°i
stupn∞ volnosti: re₧im p°enosu, strukturu soubor∙
a reprezentaci dat.
Reprezentace dat
P°i vlastnφm p°enosu jsou veÜkerß data p°enßÜena
zßsadn∞ jako 8-bitovΘ byty. Protokol FTP vÜak poΦφtß s tφm,
₧e poΦφtaΦe, na kter²ch jsou tato data uchovßvßna, mohou
pou₧φvat jinΘ konvence - nap°φklad 36-bitovß slova, jin²
zp∙sob uklßdßnφ jednotliv²ch znak∙ do cel²ch slov (viz
v²Üe), jin² znakov² k≤d ne₧ ASCII, apod. Z tohoto d∙vodu
musφ b²t na stran∞ p°φjemce a/nebo odesilatele zajiÜ¥ovßny
pot°ebnΘ konverze. Jejich provßd∞nφ ovÜem vy₧aduje, aby ob∞
strany v∞d∞ly, co si vlastn∞ mezi sebou p°enßÜφ: zda jde
o text, slo₧en² z jednotliv²ch znak∙, nebo zda jde o binßrnφ
data, kterß majφ b²t chßpßna jako lineßrnφ posloupnost bit∙,
nebo zde jde nap°φklad o p°enos jednotliv²ch byt∙
nestandardnφ velikosti (nap°. devφtibitov²ch byt∙).
Protokol FTP implicitn∞ p°edpoklßdß, ₧e p°enßÜenß data
p°edstavujφ ASCII text. Ten se pak skuteΦn∞ p°enßÜφ v
tom formßtu, kter² pro ASCII text po₧aduje protokol Telnet
(viz 68. dφl). JednotlivΘ znaky jsou tedy p°enßÜeny jako
8-bitovΘ, a °ßdky jsou odd∞lovßny dvojicφ znak∙ CRLF.
Odesilatel proto musφ p°evßd∞t jednotlivΘ znaky z takovΘho
k≤du a zp∙sobu zobrazenφ, jak² pou₧φvß jeho poΦφtaΦ, na
prßv∞ popsan² p°enosov² tvar (tj. p°evßd∞t je do k≤du ASCII,
uklßdat po jednom do osmi bit∙, a p°echody na novΘ °ßdky
reprezentovat dvojicφ znak∙ CR a LF). Analogicky se musφ
chovat i p°φjemce.
Protokol FTP vÜak umo₧≥uje, aby se ob∞ strany dohodly
na jinΘm v²znamu p°enßÜen²ch dat. Mo₧nosti jsou nßsledujφcφ:
- text v k≤du EBCDIC (p°enßÜenß data jsou tvo°ena
jednotliv²mi znaky, tyto jsou op∞t znßzorn∞ny v 8 bitech,
ale pro jejich k≤dovßnφ je mφsto znakovΘho k≤du ASCII pou₧it
znakov² k≤d EBCDIC). Tato varianta vychßzφ vst°φc p°enos∙m
text∙ mezi st°ediskov²mi poΦφtaΦi IBM, kterΘ pou₧φvajφ prßv∞
znakov² k≤d EBCDIC, a eliminuje tak dvojφ konverzi ka₧dΘho
znaku.
- binßrnφ data (tzv. image type). V tomto p°φpad∞ ob∞
strany chßpou p°enßÜenß data jako spojitou posloupnost bit∙,
kterΘ jsou Φlen∞ny na 8-bitovΘ byty jen pro pot°eby
vlastnφho p°enosu.
- byty nestandardnφ velikosti (tzv. local byte). V tomto
p°φpad∞ m∙₧e odesilatel stanovit, jak velkΘ byty sßm
pou₧φvß, a dßt p°φjemci mo₧nost se tomu p°izp∙sobit.
Nap°φklad poΦφtaΦ, kter² pracuje s 36-bitov²mi slovy, m∙₧e
na tuto skuteΦnost upozornit p°φjemce, a ten pak m∙₧e
nap°φklad uklßdat jednotlivß 36-bitovß slova do dvou
32-bitov²ch slov apod. Zde je ovÜem t°eba si uv∞domit, ₧e
jde jen o "logickou" velikost bytu, kterß slou₧φ ob∞ma
stranßm jako vodφtko pro provßd∞nφ pot°ebn²ch konverzφ.
Nastavenφ nestandardnφ velikosti bytu nemß ₧ßdn² vliv na
skuteΦnost, ₧e vlastnφ data jsou doopravdy p°enßÜena v
8-bitov²ch bytech.
Struktura soubor∙
DalÜφ odliÜnostφ, se kterou se protokol FTP musel
vyrovnat, je rozdφln² pohled na to, jak je soubor vnit°n∞
Φlen∞n. Zda je nap°φklad pova₧ovßn za lineßrnφ posloupnost
byt∙, nebo je Φlen∞n na sekvenΦnφ zßznamy (records), nebo
zda je tvo°en navzßjem nezßvisl²mi strßnkami, kterΘ jsou
opat°eny indexy, a mohou vytvß°et nespojit² soubor.
V tΘto souvislosti je op∞t t°eba mφt na pam∞ti, ₧e
r∙znΘ systΘmy mohou pro jeden a tent²₧ druh souboru pou₧φvat
jinou vnit°nφ strukturu - nap°φklad texty se na v∞tÜin∞
poΦφtaΦ∙ uchovßvajφ v textov²ch souborech, tvo°en²ch
lineßrnφ posloupnostφ jednotliv²ch znak∙ (byt∙), ale
nap°φklad na st°ediskov²ch poΦφtaΦφch IBM jsou textovΘ
soubory organizovßny jako posloupnosti zßznam∙ pevnΘ dΘlky.
I zde pak musφ nastoupit vhodnΘ konverze na jednΘ stran∞ Φi
na obou souΦasn∞, ale op∞t platφ zßsada, ₧e ka₧d² musφ
v∞d∞t, co se vlastn∞ p°enßÜφ.
Pokud nenφ °eΦeno jinak, protokol FTP implicitn∞
p°edpoklßdß, ₧e p°enßÜen² soubor nemß ₧ßdnou vnit°nφ
strukturu, a je tvo°en lineßrnφ posloupnostφ jednotliv²ch
datov²ch byt∙ (tato mo₧nost je oznaΦovßna jako file
structure). DalÜφ mo₧nosti, na kter²ch se mohou z·Φastn∞nΘ
strany dohodnout, je soubor Φlen∞n² na sekvenΦnφ zßznamy
(record structure) a soubor, Φlen∞n² na strßnky (page
structure).
Re₧im p°enosu
T°etφm stupn∞m volnosti je re₧im p°enosu dat. D∙vodem
pro zavedenφ vφce r∙zn²ch re₧im∙ byla z°ejm∞ snaha vyrovnat
se s nedokonalostφ a omezenou kapacitou p°enosov²ch cest.
Protokol FTP toti₧ umo₧≥uje provßd∞t i urΦitou kompresi
p°enßÜen²ch dat, a takΘ zotavit se z v²padku spojenφ v
pr∙b∞hu p°enosu a po obnovenφ spojenφ v n∞m pokraΦovat.
Implicitnφ re₧im p°enosu (oznaΦovan² jako stream mode)
je takov², kdy p°enßÜenß data jsou chßpßna jen jako spojit²
proud (stream) byt∙, a jako takovß jsou takΘ p°enßÜena.
Je ovÜem mo₧n∞ zvolit i jin² re₧im (blokov² re₧im,
block mode), p°i kterΘm jsou p°enßÜenß data Φlen∞na do
blok∙, a ka₧d² z nich je opat°en hlaviΦkou (kterß obsahuje
mj. ·daj o dΘlce bloku, p°φznak poslednφho bloku apod.). V
tomto re₧imu je pak mo₧nΘ vklßdat mezi bloky, obsahujφcφ
vlastnφ data, i malΘ specißlnφ bloky (identifikovanΘ
p°φznakem ve svΘ hlaviΦce), kterΘ ve skuteΦnosti slou₧φ jako
zßlo₧ky (kontrolnφ body). Po v²padku spojenφ a jeho
nßslednΘm obnovenφ je pak mo₧nΘ vyu₧φt existence t∞chto
znaΦek k indikaci mφsta, odkud mß b²t p°eruÜen² p°enos
opakovßn.
T°etφm mo₧n²m re₧imem p°enosu je tzv. zhuÜt∞n² re₧im
(compressed mode), p°i kterΘm jsou p°enßÜenß data
komprimovßna. Nejde vÜak o ₧ßdnou propracovanou a efektivnφ
kompresnφ techniku, jakΘ znßme ze souΦasnΘ doby, ale jen
o pouhou eliminaci znak∙, kterΘ se opakujφ n∞kolikrßt za
sebou (typick²m p°φkladem jsou posloupnosti mezer
v textov²ch souborech). Takovßto posloupnost stejn²ch znak∙
je pro pot°eby p°enosu nahrazena pouze jednφm exemplß°em
p°φsluÜnΘho znaku a ·dajem o tom, kolikrßt se v originßle
opakuje.
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