Traducere de:
HAISAN ADRIAN - hasan@infoiasi.ro
si
CATALIN MIHAI APOSTU - bendis@infoiasi.ro
Network Working Group J. Postel
Request for Comments: 959 J. Reynolds
ISI
Obsoletes RFC: 765 (IEN 149) October 1985
FILE TRANSFER PROTOCOL (FTP)
Statutul acestui document
Acest document este specificatia oficiala a protocolului File Transfer
Protocol (FTP). Acest document se poate distribui nelimitat.
Urmatoarele noi comenzi optionale sunt incluse in aceasta editie a specificatiei :
CDUP (Change to Parent Directory), SMNT (Structure Mount), STOU
(Store Unique), RMD (Remove Directory), MKD (Make Directory), PWD
(Print Directory), and SYST (System).
Aceasta specificatie este compatibila cu editia precedenta.
1. Introducere
Scopurile protocolului FTP sunt :
1) sa promoveze ideea de partajare de informatii organizate in fisiere(programe
sau/si date)
2) sa incurajeze conexiunea implicita sau indirecta intre calculatoare aflate la
distanta ( prin intermediul programelor )
3) sa protejeze utilizatorul de variatiile dintre diferitele sisteme de operare de
pe calculatoare diferite
4) sa transfere date intre calculatoare diferite eficient si stabil
Acest protocol , desi poate fi folosit direct de utilizator la un terminal , este proiectat
in principal pentru a fi folosit de aplicatii.
Aceasta specificatie incearca sa satisfaca diversele nevoi de comunicare ale utilizatorilor
conectati la servere foarte mari , la servere mici , la calculatoare personale sau a celor
conectati la TAC cu un protocol simplu si usor implementat.
Acest document presupune cunoasterea protocolului TCP (Transmission Control Protocol )
[2] si a protocolului Telnet [3]. Aceste documente pot fi gasite in dictonarul de protocoale
ARPA-Internet [1].
2. SUMAR
In aceasta sectiune sunt descrise istoria, terminologia si modelul FTP. Tot aici sunt definiti
termenii care au o semnificatie speciala pentru FTP. O parte din terminologie este specifica
modelului FTP; unii cititori vor dori probabil sa treaca direct la sectiunea care prezinta modelul
FTP.
2.1. Istorie
Protocolul FTP a avut o evolutie lunga de-a lungul anilor. Sectiunea Appendix III este o
compilatie cronologica a diferitelor documente RFC legate de FTP de-a lungul timpului .
Acestea includ si primul mecanism de transfer fisiere din 1971 dezvoltat pentru
implementarea pe masinile de la M.I.T. (RFC 114), plus comentarii si discutii referitoare la
RFC 141.
RFC 172 furnizeaza un protocol orientat pe nivelul userului pentru transferul fisierelor
intre doua calculatoare ( inclusiv terminale IMPS ). O revizuire a acestui document este
RFC 265, iar in RFC 281 au fost propuse alte modificari . In ianuarie 1982 in RFC 294
a fost propusa folosirea conventiei "Set Data Type".
RFC 354 a inclocuit RFC 264 si 265. Protocolul FTP a fost redefinit ca un protocol pentru
transferul fisierelor intre calculatoare diferite din ARPANET, avand ca principala functie
transferarea eficienta si stabila a fiserelor intre calculatoare si care sa permita folosirea
usoara a metodelor de stocare la distanta.
RFC 385 a commentat erorile, a intarit unele idei si adaugiri la protocol, in timp ce
RFC 414 a adus un raport provind functionarea protocolului pe servere si pe calculatoare
personale. RFC 430, publicat in 1973 ( printre alte documente RFC ) a prezentat alte
sugestii. In cele din urma un document oficial a fost publicat sub numele de RFC 454.
Incepand cu iulie 1973 au fost facute schimbari considerabile de la ultimele versiuni
ale protocolului, dar structura generala a ramas neschimbata. RFC 542 a fost publicat ca
noua specificatie "oficiala" pentru a reflecta aceste schimbari. Exista si alte documente
bazate pe specificatiile vechi care nu au fost reinnoite.
In 1974 RFC 607 si 614 au adus modificari si sugestii noi. RFC 624 a facut acelasi
lucru si el. In 1975, a fost publiat RFC 686, care a fost intitulat "Leaving Well Enough Alone",
a discutat diferentele intre toate versiunile anterioare ale specificatiei. RFC 691 a prezentat
o revizuire minora a RFC 686 cu privire la tiparirea fisierelor.
Motivata de tranzitia de la NCP la TCP ca protocol de baza , FTP a renascut ca pasarea
pheonix din toate eforturile din RFC 765 pentru folosirea protocolului TCP .
Editia curenta a specificatiei FTP isi propune sa corecteze unele erori minore din
documentatie, sa imbunatateasca documentarea unor caracteristici ale protocolului si a
adaugat alte comenzi optionale.
In particular, urmatoarele comenzi optionale sunt incluse in editia curenta a specificatiei :
CDUP - Change to Parent Directory ( Schimba directorul in directorul parinte )
SMNT - Structure Mount
STOU - Store Unique
RMD - Remove Directory ( Sterge directorul )
MKD - Make Directory ( Creare director )
PWD - Print Directory ( Listeaza directorul )
SYST - System
Aceasta specificatie este compatibila cu edtitia predenta. O aplicatie implementata
in conformitate cu specificatia precedenta este automat in conformitate cu specificatia
curenta.
2.2. Terminologie
ASCII
Setul de caractere ASCII este cel definit in documentul ARPA-Internet Protocol Handbook.
In protocolul FTP, caracterele ASCII sunt definite ca fiind a doua parte dintr-un set de caractere
pe 8 biti ( cu bitul semnificativ zero ).
access controls ( controlul accesului )
Controlul accesului defineste privilegiile utilizatorului la utilizarea sistemului de operare
si a fisierelor in acel sistem de operare. Acest control este necesar pentru a preveni utilizarea
neautorizata si accidentala a fisierelor. Acest control este printre prerogativele unui proces de
tip server de FTP.
byte size ( marimea unui octet )
Exista doua marimi ale octetilor care ne intereseaza in tranferul FTP: marimea octetului
logic si marimea octetului de transfer utilizat pentru transmiterea informatiilor. Marimea octetului
de transfer este intotdeauna de 8 biti. Aceasta marime nu este in mod obligatoriu marimea
octetului stocat in sistemul de operare, si nici marimea logica a octetului rezultata de
interpretarea informatiei pe un calculator.
control connection ( conexiune de control )
Calea de comunicare intre USER-PI si SERVER-PI pentru schimbul de comenzi si raspunsuri.
Aceasta conexiune urmeaza Telnet Protocol ( protocolul TELNET ).
data connection ( conexinea de date )
O conexiune full duplex prin care informatia este transferata, intr-un mod specificat.
Infomatia transferata poate fi o parte dintr-un fisier, un fisier intreg sau mai multe fisiere.
Calea poate fi intre un server-DTP si un user-DTP, sau intre doua server-DTP.
data port ( portul de conexiune )
Procesul de transfer pasiv "asculta" la portul rezervat protocolului FTP pentru a realiza o
conexiune cu procesul de transfer activ pentru a deschide o sesiune de transfer.
DTP ( data transfer process )
Procesul de transfer al informatiei ( pe scurt DTP ) stabileste si controleaza conexiunea
de informatii. DTP poate fi activ sau pasiv.
End-of-Line ( sfarsit de linie )
Secventa de sfarsit de linie defineste separarea liniilor. Aceasta e formata din CR
( Carriage Return ) , urmata de LF ( Line Feed ).
EOF ( sfarsit de fisier )
Conditia de sfarsit de fisier ce defineste sfarsitul fisierului care se transfera.
EOR ( sfarsit de inregistrare )
Secventa de sfarsit de linie defineste separarea inregistrarilor care se transfera.
error recovery ( recuperarea dupa o eroare )
O procedura ce permite utilizatorului sa revina dupa aparitia unei erori cum ar fi
o eroare in ssistemul de operare al unuia dintre calculatoarele implicate in transfer
sau o eroare a procesului de transfer. In transferul FTP, recuperarea dupa o eroare
poate sa implice restartarea transferului de la un anumit punct.
FTP commands ( comenzi FTP )
Un set de comenzi prin care se realizeaza controlul informatiei de la procesul FTP
client la cel server.
file ( fisier )
O succesiune de informatii de lungime variabila identificata unic printr-o cale.
mode ( modul , tipul )
Modul in care informatia este transferata. Modul defineste formatul informatiei in
timpul transferului inclusiv EOR si EOF . Aceste tipuri de transfer sunt descrise in
sectiunea de moduri de transmisie ( Transmission Modes ).
NVT
Network Virtual Terminal asa cum este el definit in protocolul telnet ( Telnet Protocol ).
NVFS
Sistemul de fisiere NVFS (Network Virtual File System). Un concept care defineste
un sistem de fisiere pentru retea cu comenzi standard si cu conventii referitoare la
scrierea cailor spre fisiere.
page ( pagina )
Un fisier poate fi structurat sub forma unui set independent de parti numite pagini.
Protocolu FTP suporta transmiterea fisierelor discontinue sub forma unor pagini indexate.
pathname ( cale de acces )
Calea de acces este definita ca sirul de caractere folosit de sistemul de fisiere pentru a
identifica un fisier in mod unic. In mod normanl aceste cai contin numele dispozitivului
si/sau directorului si numele fisierului. FTP nu specifica inca un standard pentru caile de
acces. Fiecare client trebuie sa urmeze conventiile de nume ale sistemelor de operare
implicate in transfer.
PI ( interpretorul protocolului )
Clientul si server-ul au roluri diferite in implementarile user-PI si server-PI.
record ( inregistrare )
Un fisier poate fi structurat sub forma unui numar de parti continue numite inregistrari.
Inregistrarile sunt suportate de protocolul FTP dar un fisier nu trebuie sa fie neaparat
structurat in inregistrari.
reply ( rapsuns )
Un raspuns este o recunoastere ( pozitiva sau negativa ) trimisa de server prin
intermediul conexiunii de control in rapsuns la comenzile FTP. Forma generala a unui raspuns
este un paragraf de cod urmat de un text. Codul este pentru aplicatii iar textul este pentru
utilizatorul uman.
server-DTP
Procesul de transfer al informatiei, in starea normala "activa", stabileste conexiunea de
date cu portul care "asculta". Acesta seteaza parametrii pentru transfer si stocare, si
transfera informatia ca raspuns la comenzile PI. DTP-ul poate fi setat in starea pasiva pentru
a asculta portul, decat sa initieze o conexine pe port.
server-FTP process ( procesul server FTP )
Un proces sau set de procese care realizeaza transferul fisierelor in colaborare cu un
proces FTP client sau server. Functiile constau in interpretorul protocolului (PI) si a
procesului de transfer al informatiei (DTP).
server-PI
Interpretorul protocolului pe partea de server "acsculta" portul L pentru o conexiune
cu clientul PI. Acesta primeste comenzi FTP de la PI client, trimmte raspunsuri si
raspunde de serverul DTP.
type ( tip )
Tipul de reprezentare a informatiei folosit la transfer si stocare. Tipul implica anumite
transformari intre timpul stocarii si timpul transferului. Tipurile pentru reprezentare definite
pentru protocolul FTP sunt descrise in sectiunea "Stabilirea legaturii de date".
user ( client)
O persoana sau un proces care doreste sa foloseasca serviciul de transfer de fisiere.
Utilizatorul uman poate interactioneze direct cu un proces server FTP, dar este
recomandata folosirea unui process FTP client deoarece protocolul este proiectat pentru
folosire automata.
user-DTP
Procesul de transfer al informatiei "asculta" la portul de FTP pentru o conexiune cu
procesul server FTP. Daca doua servere transfera informatii intre ele la un moment dat,
clientul DTP este inactiv.
user-FTP process ( procesul de client FTP )
Un set de functii inclusiv un interpretor de protocol, un proces de transfer al
informatiei si o interfata cu utilizatorul care impreuna realizeaza transferul informatiei cu
unul sau mai multe procese de tip server FTP. Interfata cu utilizatorul permite folosirea
textului scris ca mijloc de comunicare cu utilizatorului.
user-PI
Interpretorul protocolului pe partea de client initiaza conexiuniea de control cu
procesul server FTPpe portul U, trimite comenzi FTP si comanda procesul de transfer
daca acesta face parte din transferul informatiei.
2.3. Modelul protocolului FTP
Cu definitiile de mai sus in minte, urmatorul model ( Figura 1) este diagrama unei
conexiuni FTP.
-------------
|/---------\|
||Interface || --------
|| cu utilizatorul |<--->| Utilizator |
|\----^----/| --------
---------- | | |
|/------\| Comenzi FTP |/----V----\|
||Server|<---------------->| Client ||
|| PI || Raspunsuri FTP || PI ||
|\--^---/| |\----^----/|
| | | | | |
-------- |/--V---\| Conexiune |/----V----\| --------
| Sistem |<--->|Server|<---------------->| User |<--->| Sistem |
|| de fisiere || DTP || de date || DTP || |de fisiere|
-------- |\------/| |\---------/| --------
---------- -------------
server-FTP client-FTP
NOTES: 1. Conexiunea poate fi folosita in ambele sensuri.
2. Nu este necesar ca legatura sa existe tot timpul.
Figure 1 Modelul utilizarii protocolului FTP
In diagrama din Figura 1, interpretorul protocolului pe partea de client initiaza
conexiunea de control . Conexiunea de control urmeaza protocolul Telnet. La comenzile
utilizatorului sunt generate comenzi standard de interpretorul protocolului de pe
partea de client si transmise procesului corespunzator de pe partea de server prin
intermediul conexiunii de control.( Utilizatorul poate stabili o conexiune de control
directa cu serverul FTP, de la un terminal TAC si poate denera comenzi FTP standard
independent,trecand peste procesul FTP client.) Raspunsuri standard la aceste comenzi
sunt transmise de catre interpretorul protocolului pe partea de server catre
corespondentul lui pe partea de client prin conexiunea de control.
Comenzi FTP specifica parametrii pentru conexiunea de date ( portul, modul de
transfer, tipul de reprezentare si structura ) si tipul operatiilor specifice sistemului
de operare ( send,retrieve, append,delete,etc). Procesul client DTP sau cel care
indeplineste functia sa trebuie sa asculte la portul specific, si serverul initiaza
conexiunea de date si conexiunea de transfer in concordanta cu parametrii specificati.
Trebuie specificat faptul ca portul de date nu trebuie sa fie pe aceeasi masina cu
cea care initiaza comenzile FTP prin conexiunea de control, dar clientul sau procesul
FTP client trebuie sa se asigure ca asculta portul corespunzator.
Trebuie specificat de asemenea faptul ca legatura de date poate fi folosita
pentru trimiterea simultana si primirea simultana de informatii. Alta situatie este cea
in care utilizatorul doreste sa transfer informatii intre doua host-uri, care sunt
diferite amandoua de calcultatorul utilizatorului. Acesta realizeaza o conexiune intre
cele doua host-uri . Astfel, controlul infomratiei este transferat interpretorului
protocolului pe parte de client dar informatia este transferata intre procesele de
transfer server.
In continuare este prezentat modelul acestei interactiuni server-server.
Control ------------ Control
---------->| User-FTP |<-----------
| | User-PI | |
| | "C" | |
V ------------ V
-------------- --------------
| Server-FTP | Conexiunea de date | Server-FTP |
| "A" |<---------------------->| "B" |
-------------- Port (A) Port (B) --------------
Figure 2
Protocolul necesita ca in momentul in care transferul informatiei este se desfasoara
conexiunile de control sa fie deschise. Este de datoria utilizatorului sa ceara inchiderea
acestor conexiuni cand a terminat de folosit serviciul FTP, si este datoria serverului
sa faca acest lucru. Serverul poate sa inchida transfreul de informatii daca conexiunile
de control sunt inchise fara comanda.
Relatia dintre FTP si Telnet:
Protocolul FTP foloseste protocolul Telnet pentru realizarea coneziunii de control.
Acest lucru poate fi realizat in doua moduri: unul este cel in care interpretorul protocolului
pe partea de client sau cel de pe partea de server implementeaza regulile protocolului Telnet
direct in functiile pe care le folosesc; sau, a doua metoda interpretorul clientului sau cel
al serverului folosesc functiile implementate de Telnet.
Usurinta in implementare, cod reutilizabil si programare modulara sunt argumentele
pentru folosirea celei de-a doua metode. Eficienta si independenta sunt pentru prima metoda.
In practica, protocolul FTP se bazeaza foarte putin pe protocolul Telnet, asa ca prima metoda
nu implica o cantitate mare de cod.
3. FUNCTII PENTRU TRANSFERUL DE INFORMATII
Fisierele pot fi transmise doar prin conexiunea de date. Conexiunea de control este
folosita pentru transferul comenzilor, care descriu operatiile ce urmeaza sa fie executate,
si raspunsurile la aceste comenzi ( vezi sectiunea Raspunsuri la comenzi FTP ) . Exista
comenzi care se ocupa cu transferul informatiei intre host-uri. Printre acestea amintim aici
de comanda MODE care specifica felul in care bitii sunt transmisi, si comenzile STRUcture
si TYPE care sunt folosite pentru a defini modul in care este reprezentata informatia.
Transmiterea si reprezentarea sunt in mod normal independente dar transmisia de tip "Stream"
este dependenta de atributul structurii de fisiere si daca este folosita transmisia
"Compressed" tipul octetului de umplere depinde de tipul reprezentarii.
3.1. REPREZENTAREA INFORMATIEI SI STOCAREA EI
Informatia este transferata de pe un mediu de stocare de la un host catre un alt mediu
de stocare pe alt host. Uneori este necesara realizarea unor anumite transformari ale
informatiei deoarece reprezentarea informatiei pe cele doua sisteme de operare este diferita.
De exemplu, NVT-ASCII are o reprezentare diferita in sisteme diferite. Sistemele de tip DEC
TOPS-20 stocheaza fisierele in format NVT-ASCII sub forma de caractere ASCII de 7 biti,
aliniate la stanga in cuvinte de 36 de biti. Sistemele de tip IBM Mainframe stocheaza
fisierele folosind codificare EBCDIC pe 8 biti. Cele de tip Multics stocheaza fisierele
folosind NVT-ASCII sub forma a 4 caractere de cate 9 biti in cuvinte de 36 biti. Este
preferabila convertirea caracterelor in reprezentarea standard NVT-ASCII cand se transmite
text intre sisteme diferite. Host-urile care trimit si primesc vor trebui sa realizeze
transformarile necesare intre reprezentarea standard a caracterelor si cea interna.
O problema diferita apare in reprezentare cand se transmite informatie in format binar
( nu coduri de caracter ) intre host-uri diferite cu lungimi de cuvint diferite. Nu este
intotdeauna clar felul in care cel care trimite informatia face acest lucru si nici felul
in care in care cel care o primeste o stocheaza. De exemplu, cand se trimit octeti de 32
de biti de la sisteme care au reprezentarea interna pe cuvinte de 32 de biti, pe sisteme care
reprezinata datele pe cuvinte de 36 biti, ar fi preferabil ( din motive de eficienta si
utilitate ), ca informatia sa se pastreze sub forma de cuvinte de 32 biti aliniati la
dreapta in cuvinte de 36 biti in sistemele care primesc datele. In orice caz, utilizatorul
ar trebui sa aiba optiuni de specificare a formei de reprezentare a informatiei si functii
de transformare a formatului acesteia. Trebuie notat ca protocolul FTP permite reprezentari
limitate a informatiei.
Transformarile dorite in afara celor specificate trebuie facute de utilizator sau de
aplicatie direct.
3.1.1. TIPURI DE INFORMATIE
Reprezentarile informatiei sunt utilizate in protocolul FTP de catre utilizator prin
specificarea tipului. Acest tip poate defini implicit ( cazul ASCII sau EBCDIC) sau explicit
( cazul octetului Local ) o marime de interpretare care este interpretata ca "marime logica".
Trebuie observat ca aceasta nu are nimic in comun cu marimea octetului folosita pentru
transmiterea informatiei prin conexiunea de date, matine numita "marime de transfer", si cele
doua nu trebuie confundate. De exemplu NVT-ASCII are marimea logica de 8 biti. Daca tipul este
Local, atunci comanda TYPE are obligatoriu un al doilea parametru care specifica marimea
logica. Marimea de transfer este intotdeauna 8 bits.
3.1.1.1. TIPUL ASCII
Acest tip este cel implicit si trebuie sa fie acceptat de toate implementarile
protocolului. Este folosit in principal pentru transferul fisierelor de tip test, cu exceptia
cazului cand amblele host-uri gasesc tipul EBCDIC mai convenabil.
Host-ul care trimite informatia o converteste din reprezentarea interna in cea
standard NVT-ASCII pe 8 biti ( vezi specificatia protocolului Telnet). Host-ul care primeste
datele va converti din forma standard in reprezentarea sa interna.
In concordanta cu standardul NVT, secventa <CRLF> trebuie folosita unde este
necesara delimitarea unei linii de text. ( Vezi paragraful despre structura unui fisier de la
sfarsitul capitolului Reprezentarea informatiei si stocarea ei ).
Folosirea standardului NVT-ASCII inseamna ca informatia este encodata folosind
octeti de 8 biti.
Parametrii de formatare pentru ASCII si EBCDIC sunt discutati mai jos.
3.1.1.2. TIPUL EBCDIC
Acest tip de reprezentare a informatiei este util pentru un transfer eficient intre
host-uri ce folosesc EBCDIC pentru reprezenatarea interna a datelor.
Pentru transmiteren, informatia este reprezentata sub forma de caractere de 8 biti
codate EBCDIC. Codurile caracterelor sunt singura diferenta intre specificatiile functionale
dintre EBCDIC si ASCII.
Sfarsitul de linie ( diferit de sfarsitul de inregistrare , vezi paragraful despre
structura ) va fi probabil rar folosit cu tipul EBCDIC pentru al caracteriza structura, dar
unde este necesar caracterul <NL> va fi folosit.
3.1.1.3. TIPUL IMAGE
Informatia este trimisa ca o succesiune de biti care, pentru transfer, sunt grupati
in pachete de cate 8 biti( octeti ). Host-ul care primeste informatia trebuie sa o stocheze la
fel, ca o succesiune continua de biti. Structura sistemului pe care se pastreaza datele poate
necesita convertirea fisierelor in structuri conveniente ( octeti, cuvinte sau blocuri ).
Aceasta convertire se face cu completare de zerouri ( biti cu valoarea 0 ) la sfarsitul
fisierelor ( sau la sfarsitul fiecarei inregistrari ) si trebuie sa existe o metoda de
identificare a acestor biti astfel incat acestia sa poata fi inlocuiti cand fisierul este
transferat in intregime. Informatia adaugata trebuie sa sa fie cunoscuta bine pentru a permite
utilizatorului sa proceseze fisierele in locul in care acestea sunt stocate.
Tipul IMAGE este folosit pentru stocarea eficienta si pentru transferul informatiei
in format binar. Este recomandat ca acest tip sa fie acceptat de catre toate implementarile
protocolului FTP.
3.1.1.4. TIPUL LOCAL
Infomatia este transferata in octeti logici, a caror marime este specificata prin
al doilea parametru. Valoarea marimii octetului trebuie sa fie un numar zecimal; nu exista o
valoare implicita pentru marime. Marimea logica a octetului nu trebuie sa fie in mod necesar
aceeasi cu cea a octetului de transfer. Daca cele doua marimi sunt diferite, atunci octetii
logici trebuie sa fie grupati continuu, nelaundu-se in consideratie limitele octetilor si
cu completarea necesara la sfarsit.
Cand informatia ajunge la host-ul destinatie, aceasta va fi transformata intr-un
format dependent de marimea logica a octetilor si de host-ul gazda. Acest proces de
transformare trebuie sa fie inversabil ( un fiser identic poate fi tranferat daca sunt
folositi aceeasi parametri ) si trebuie sa fie facut cunoscut acest lucru de catre
implementatori.
De exemplu, sa presupunem un client FTP trimite numere in virgula mobila scrise
pe 36 de biti catre un host care stocheaza datele in cuvinte de 32 biti ar putea trimite
informatia sub forma de octeti locali cu marimea logica de 36. Host-ul care primeste trebuie
sa stocheze octetii logici astfel incat acestia sa poata fi usor manipulati; in acest exemplu
punand octetii logici de 36 biti in cuvinte de 64 biti ar trebui sa fie eficient si ar
rezolva problema.
In alt exemplu, o pereche de host-uri care pastreaza informatia in cuvinte de 36
biti pot schimba date intre ele folosind argumentul TYPE L 36. Informatia va fi trimisa in
octeti de 8 biti astfel 9 octeti ar rezolva problema.
3.1.1.5. CONTROLUL FORMATULUI
Tipurile ASCII si EBCDIC primesc de asemenea un al doilea parametru ( optional );
acesta indica ce fel de control vertical al formatului ( daca exista ) este asociat cu
fisierul respectiv. Urmatoarele tipuri de reprezentare a datelor sunt definite in FTP:
Un fisier de tip caracter este transferat catre un host din unul din aceste
trei motive: pentru tiparire, pentru stocare ( si mai tarziu copiere inapoi ) sau pentru
procesare. Daca un fisier este transferat pentru tiparire hostul care primeste fisierul
trebuie sa cunoasca cum este reprezentat controlul vertical al formatului. In cel de-al
doilea caz este posibil ca fisierul sa fie stocat si apoi transferat inapoi de la acel host
in aceeasi stare. In cel de-al treilea caz fisierul poate fi mutat de la un host la altul
pentru a fi procesat. Simplul format ASCII sau EBCDIC nu este de ajuns pentru a realiza
toate aceste lucruri. De aceea aceste tipuri au un al doilea parametru care specifica unul
din urmatoarele trei formate:
3.1.1.5.1. NON PRINT
Acesta este formatul implicita care este folosit daca al doilea parametru
este omis. Fomratul non-print trebuie sa fie acceptat de toate implementarile protocolului FTP.
Fisierul nu trebuie sa contina informatii despre formatarea verticala. Daca
este trimis unui proces de tiparire, acest proces poate sa foloseasca valori standard pentru
spatiere si margini.
In mod normal, acest format va fi folosit pentru fisiere destinate procesarii
sau stocarii.
3.1.1.5.2. Controale pentru formatare ale protocolului Telnet
Fisierul contine ASCII/EBCDIC controale pentru formatare verticala (i.e.,
<CR>, <LF>, <NL>, <VT>, <FF>) pe care procesul de tiparire le
va interpreta corespunzator. Secventa <CRLF>, in aceasta ordine, semnifica sfarsitul
de linie (EOF).
3.1.1.5.2. CARRIAGE CONTROL (ASA)
Fisierul contine caractere pentru formatare verticala ASA(FORTRAN). (Vezi
RFC 740 Appendix C; and Communicationsof the ACM, Vol. 7, No. 10, p. 606, Octombrie 1964.)
Intr-un fisier formatat in linii sau in inregistrari dupa standardul ASA, primul caracter nu
este tiparit. El este folosit pentru a determina miscarea verticala a hartiei care trebuie
sa se execute inainte ca restul inregistrarii sa fie tiparite.
Standardul ASA specifica urmatoarele caractere de control:
Character Spatierea verticala
blank muta foaia mai sus cu o linie
0 muta foaia mai sus cu doua linii
1 muta foaia deasupra urmatoarei foi
+ nu muta foaia , i.e., tipareste deasupra
In mod necesar trebuie sa existe o cale prin care un proces de tiparire sa
poata distinge sfarsitul unei entitati structurale. Intr-un fisier care este structurat
in inregistrari nu este nici o problema; inregistrarile vor fi marcate explicit in timpul
transferului sau stocarii. Daca fisierul nu are structura cu inregistrari, secventa de
sfarsit de linie <CRLF> este folosita pentru a separa liniile pentru tiparire, dar
aceste secvente sunt suprascrise de controalele ASA.
3.1.2. STRUCTURI DE DATE
Pentru a putea diferentia diferitele tipuri de reprezentare a datelor, protocolul
FTP permite specificarea structurii unui fisier. Exista trei tipuri de structuri de fisier
definite in FTP:
strcutura-fisier(file-structure)
nu este specificata nici o structura interna si fisierul
este considerat o secventa continua de octeti
structura cu inregistrari(record-structure)
fisierul este structurat secvential din inregistrari
structura cu pagini(page-structure)
where the file is made up of independent indexed pages.
Implicit tipul structurii unui fisier este primul tip ( structura-fisier) daca nu
a fost folosita comanda STRucture, dar tipurile de structura fisier si cu inregistrari
trebuie sa fie acceptate pentru fisierele text ( de exemplu fisierele cu tipul ASCII
sau EBCDIC) de toate implementarile protocolului FTP. Strcutura fisierului afecteaza atat
modul de transfer al unui fisier( vezi paragraful destinat metodelor de transfer), cat si
interpretarea si stocarea acelui fisier.
Structura "naturala" a unui fisier depinde de tipul de stocare a datelor de
catre un host. Un fisier cu cod sursa va fi memorat pe un host IBM mainframe sub forma
de inregistrari de lungime fixa dar pe un host DEC TOP-20 va fi memorat ca un sir de
caractere partitionat in linii, separate de exemplu de secventa <CRLF>. Daca
transferul fisierelor intre astfel de hostu-uri diferite este util, atunci inseamna ca
trebuie sa fie o metoda prin care un host intelege tipul in care este structurat fisierul.
Cum unele site-uri sunt orientate fisier iar altele orientate pe inregistrari,
ar putea aparea probleme in cazul in care un fisier cu o anumita structura este transferat
catre alt host. Daca un fisier cu o structura cu inregistrari este trimis catre un host care
are o strcutura de tip fisier, atunci host-ul care trimite fisierul ar trebui sa transforme
intern fisierul intr-o forma bazata pe inregistrari.
Evident, aceasta transformare este folositoare insa acest proces trebuie sa fie
reversibil, adica un fisier identic poate fi primit folosind o structura de tip inregistrare.
In cazul in care fisierul este trimis cu structura de tip fisier catre un host
care foloseste structura cu inregistrari, se pune problema impartirii acelui fisier in
inregistrari care sa poata fi procesate local. Daca aceasta impartire este necesara, atunci
implementarea FTP folosita trebuie foloseasca ca delimitator de linie secventa <CRLF>
pentru fisiere text codate ASCII sau <NL> pentru cele codate EBCDIC. Daca o
implementare FTP foloseste aceasta tehnica, atunci aceasta trebuie sa poata realiza si
transformarea inversa in cazul in care fisierul este primit cu structura de tip fisier.
3.1.2.1. STRUCTURA FISIER
Structura fisier este cea implicita in cazul in care nu este folosita comanda
STRucture.
In cazul in care este folosita acest tip de structura, fisierul este considerat
ca fiind o secventa continua de octeti.
3.1.2.2. STRUCTURA CU INREGISTRARI
Structura cu inregistrari folosita pentru fisierele de tip text ( ex. fisierele
al caror TYPE este ASCII sau EBCDIC) trebuie acceptata de toate implementarile FTP. Un fisier
este format in acest caz din inregistrari secventiale.
3.1.2.3. STRUCTURA CU PAGINI
Pentru a transfera fisiere care sunt discontinue, protocolul FTP defineste o
structura formata din pagini. Fisierele de acest tip sunt cunoscute ca fisiere cu acces
aletor("random access files") sau chiar sub numele de fisiere cu gauri("holey files"). In
aceste fisiere exista informatie suplimentara asociata cu intregul fisier(ex. desciptorul
de fiser), sau cu sectiuni din fisier (ex. controale pentru acces la diferite pagini),
sau informatii asociate cu amandoua. Aceste sectiuni de fisier se numesc pagini.
Pentru ca aceasta structura sa poata fi folosita cu pagini de marimi diferite
si informatii diferite, fiecare pagina este transferata impreuna cu un antet de pagina.
Acesta contine urmatoarele campuri:
Lungimea antetului (Header Length)
Reprezinta numarul de octeti logici din antetul paginii inclusiv acest
octet. Lungimea minima a antetului este 4.
Indexul paginii (Page Index)
Numarul de ordine al paginii din aceasta sectiune din fisier. Acesta nu
este numarul de transmitere al paginii, dar este indexul folosit pentru
identificarea paginii in fisier.
Lungimea informatiei (Data Length)
Numarul de octeti logici care formeaza informatia paginii. Minimul pentru
acest camp este 0.
Tipul paginii (Page Type)
Numar care reprezinta tipul paginii. Sunt definite urmatoarele tipuri:
0 = Ultima pagina (Last Page)
Acest numar indica sfarsitul unei transmisii paginate. Lungimea
antetului acestei pagini trebuie sa aiba lungimea de 4 octeti si
lungimea informatiei trebuie sa fie 0.
1 = Pagina simpla (Simple Page)
Acesta este tipul normal pentru fisiere simple paginate, care
nu folosesc informatii de control asociate. Lungimea antetului
trebuie sa fie 4.
2 = Descriptor de pagina (Descriptor Page)
Acest tip este folosit pentru a transmite informatia descriptiva
pentru fisier ca o singura secventa.
3 = Pagina cu acces controlat (Access Controlled Page)
Acest tip include un camp aditional in antet pentru fisiere
paginate care au informatie suplimentara despre accesul
controlat la nivel de pagina. Lungimea antetului trebuie sa fie 5.
Campuri optionale
Alte campuri optionale pot fi folosite pentru a furniza informatii
pentru controlul paginii, de exemplu control de acces la pagina
respectiva.
Toate aceste campuri au marimea unui octet logic. Lungimea unui asemenea octet
este specificata de comanda TYPE. Vezi Apppendix 1 si sectiunea dedicata acestei
comenzi pentru informatii suplimentare.
Trebuie tinut cont la setarea acestor parametri de urmatoarele lucruri: un fisier
trebuie sa fie stocat si trimis cu aceeasi parametri daca versiunea trebuie sa fie identica
cu cea transmisa original. Invers, implementarile FTP trebuie sa returneze un fisier
identic cu originalul daca paramtetrii folositi la stocare si primire sunt aceeasi.
3.2. REALIZAREA CONEXIUNILOR DE DATE
Mecanica transferului de informatii consta in realizarea conexiunii de date la
porturile corespunzatoare si alegerea parametrilor de transfer. Atat procesul DTP client
cat si cel server au un port implicit. Portul procesului client este acelasi port cu cel
al conexiunii de control (ex. U). Portul implicit al procesului server este portul
adiacent portului corespunzator conexiunii de control (ex. L-1).
Marimea unui octet de transfer este de 8 biti. Aceasta marime este valabila
pentru transferul de informatii; nu are nici o legatura cu reprezentarea informatiilor
in sistemul de fisiere al gazdei.
Procesul de transfer pasiv( poate fi sau un proces DTP client sau un proces
DTP server secundar) trebuie sa asculte portul de transfer pentru a putea transmite
o comanda de cerere. Comanda FTP de cerere determina directia transferului de date.
Procesul server, dupa ce primeste cererea de transfer, va initia conexiunea de date
la portul respectiv. Odata conexiunea stabilita, transferul de informatii poate incepe
intre procesele DTP, si interpretorul protocolului pe partea de server trimite o
confirmare interpretorului pe partea de client.
Implementarile FTP trebuie sa suporte folosirea porturilor implicite, si doar
interpretorul protocolului pe partea de client poate sa solicite schimbarea portului
intr-unul diferit de cel implicit.
Este posibil procesul client sa specifice un port alternativ prin comanda PORT.
Acelasi proces poate tipari un fisier la o imprimanta a unui TAC sau poate sa il
primeasca de la un al treilea host. In cel de-al doilea caz, interpretorul protocolului
pe partea de client realizeaza conexiunile de control cu amandoua interpretoarele de pe
partea de sever. Un server primeste o comanda pentru a asculta portul pentru o viitoare
conexiune. Interpretorul protocolului pe partea de client trimite unui interpretor de
pe partea de sever comanda PORT pentru a indica portul de transfer. In final, celor doua
procese server li se vor trimite comenzi corespunzatoare. Secventa exacta de comenzi
si raspunsuri la comenzi trimise intre controller-ul de pe partea de client si servere,
este definit in sectiunea de Raspunsuri FTP.
In general procesul server este responsabil cu mentinerea conexiunii de date -
initierea ei si inchiderea ei. Exceptie la acest lucru este atunci cand procesul client
DTP trimite informatia intr-un mod de transfer care necesita inchiderea conexiunii
pentru a indica EOF. Serverul trebuie sa inchida conexiunea in urmatoarele conditii:
1. Procesul server a terminat de trimis informatiile intr-un mod de transfer care
necesita o inchidere a conexiunii pentru a indica EOF.
2. Procesul server primeste o comanda ABORT de la procesul client.
3. Portul de transfer este schimbat cu o comanda de procesul client.
4. Conexiunea de control este inchisa in mod normanl sau altfel.
5. A aparut o eroare nerecuperabila.
Altfel inchiderea este o optiune a serverului, prin care acesta trebuie sa indice
acest lucru clientului cu un raspuns de tip 250 sau 226.
3.3. MANAGEMENTUL CONEXIUNII DE DATE
Proturile implicite ale conexiunii de date: toate implementarile trebuie sa suporte
folosirea porturilor implicite, si numai interpretorul protocolului pe partea de client
poate sa ceara folosirea unor alte porturi decat cele implicite.
Setarea altor porturi decat cele implicite: interpretorul protocolului pe partea
de client poate specifica alt port cu ajutorul comenzii PORT. Acelasi interpretor poate
cere procesului server sa identifice un alt port cu ajutorul comenzii PASV. O conexuine
fiind definita de o pereche de adrese, una din aceste actiuni este de ajuns pentru a
realiza o alta conexiune de date, desi este permis folosirea ambelor comenzi pentru
folosirea unor noi porturi.
Reutilizarea conexiunii de date: cand este folosit modul de transfer sub forma unui
flux, sfarsitul de fisier trebuie indicat prin inchiderea conexiunii. Acest lucru produce
o eroare daca sunt mai multe fisiere de transferat in acea sesiune, din cauza faptului
ca protocolul TCP trebuie sa mentina conexiunea un anumit timp pentru comunicatii stabile.
Astfel conexiunea nu poate fi redeschisa.
Exista doua solutii la aceasta problema. Prima este de a negocia un port ne-implicit.
A doua este folosirea unui alt mod de transfer.
Un mic comentariu la modurile de transfer: modul de transfer sub forma unui flux
este in mod inerent instabila, din moment ce nu se poate stabili daca conexiunea s-a inchis
prematur sau in mod normal. Celelalte tipuri de transfer( tip block, comprimat ) nu inchid
conexiunea pentru a indica sfarsitul de fisier. Aceste tipuri au codare FTP destula
folosita pentru a parcurgerea conexiunii de date si pentru determinarea sfarstiului de
fisier. Astfel, folosind aceste moduri, se poate lasa conexiunea deschisa pentru transferul
mai multor fisiere.
3.4. TIPURI DE TRANSFER
Urmatorul lucru care se discuta in continuare este alegerea tipului transferului. Exista
trei tipuri: unul care formateaza informatia si permite proceduri de restart; unul care
coprima de asemenea informatia pentru un transfer eficient; si unul care nu comprima deloc
informatia sau o face prea putin. Ultimul tip interactioneaza cu atributul care defineste
structura pentru a determina tipul procesarii. In modul comprimat, tipul reprezantarii
determina tipul octetului de transfer.
Toate modurile de transfer trebuie terminate cu o secventa EOF, lucru care poate fi
specificat explicit sau implicit prin inchiderea conexiunii de date. Pentru fisiere cu o
structura cu inregistrari, toate marcajele EOR(sfarsit de inregistrare) sunt explicite,
inclusiv cel final. Pentru fisierele cu structura de tip pagina este folosit un tip care
indica ultima pagina.
NOTE: In aceasta sectiune ne vom referi la octetul de transfer cu octet( fara a
specifica explicit acest lucru decat atunci cand este nevoie). In scopul de a standardiza
transferul, host-ul care trimite datele le va tranforma secventa interna care noteaza sfarsitul
de linie sau de inregistrare in reperzentarea standard descrisa de modul de transfer si
structura fisierului, si host-ul care primeste va realiza operatiile inverse, transformand
acestea in notatia sa interna. O inregistrare de pe o masina IBM Mainframe nu va fi
recunoscuta de o alta masina, deci secventa care descrie sfarsitul de inregistrare va fi
transferata ca un cod de control format din doi octeti in modul de transfer flux sau ca un
bit indicator in modul Block sau Comprimat. Specificatorul EOF intr-un fisier ASCII sau
EBCDIC fara structura de inregistrari trebuie indicat de secventa <CRLF> sau de
<NL>. Deoarece aceste transformari implica calcule suplimentare pentru unele masini,
sistemele de fisiere care folosesc aceeasi reprezentare interna care transfera fisiere
text doresc sa utilizeze reprezentarea binara sau modul de transfer de tip flux.
Urmatoarele tipuri de transfer a informatiei sunt definite in protocolul FTP:
3.4.1. MODUL FLUX DE CARACTERE
Informatia este transmisa ca un flux de octeti. Nu exista nici o restrictie in
tipul de reprezentare folosit; sunt permise structuri sub fomra de inregistrari.
Intr-un fisier structurat EOR si EOF vor fi indicate fiecare de un cod format
din 2 octeti. Primul octet din acest cod va fi intotdeauna caracterul escape. Al doilea
octet va avea ultimul bit setat 1 si restul 0 pentru EOR, iar pentru EOF penultimul
bit va fi setat pe 1 si restul 0; astfel octetul va avea valoarea 1 pentru EOR si 2
pentru EOF. EOR si EOF pot fi indicate impreuna in ultimul octet transmis prin setarea
utlimilor 2 biti (octetul va avea valoarea 3) . Daca un singur octet trebuie transferat,
el trebuie repetat in cel de-al doilea octet al codului de control.
Daca este folosita structura fisier, EOF este indicat prin inchiderea conexiunii
de catre host-ul care trimite si toti octetii sunt octeti de date.
3.4.2. MODUL BLOC (BLOCK)
Fisierul este trasnferat sub forma unor blocuri de date precedate de unul sau
mai multi octeti care formeaza antetul acestora. Antetul contine un numar si un cod
descriptor. Numarul reprezinta lungimea totala a blocului in octeti. El marcheaza si
inceputul unui nou bloc ( nu exista biti de umplere). Codul descriptor desemneaza: ultimul
block in fisier (si atunci este EOF acest cod), ultimul block din inregistrare (EOR),
marcator de restart (vezi sectiunea despre recuperarea dupa o eroare si restart) sau
date suspecte (datele care trebuie transferate sunt suspecte si nu sunt stabile). Acest
cod NU este folosit pentru controlul erorilor in FTP. Este motivat de faptul ca
host-urile pot schimba anumite tipuri de data (de exemplu date seismice sau despre vreme)
fara ca acestea sa fie corupte sau supuse unor erori interne (cum ar fi "erori la citirea
de pe banda magnetica"). Codul este folosit pentru a indica portiunile de date suspect.
Structurile sub forma de inregistrare sunt permise in acest mod, si orice alt tip de
reprezentare poate fi folosit.
Antetul consta in 3 octeti. Din cei 24 de biti ai acestuia, ultimii 16 reprezinta
numarul octetilor din blocul de date, iar urmatorii 8 reprezinta codul, dupa cum este
reprezentat mai jos.
Antetul unui bloc
+----------------+----------------+----------------+
| COD | CONTORUL OCTETILOR |
| 8 bits | 16 bits |
+----------------+----------------+----------------+
Codurile descriptive sunt indicate prin biti indicatori in octetul destinat
codului. Exista 4 coduri, fiecare fiind un numar zecimal corespunzator bitului respectiv
din cadrul octetului.
Cod Descriere
128 Sfarsitul blocului de date este EOR
64 Sfarsitul blocului de date este EOF
32 Erori suspectate in blocul de date
16 Blocul este un marcator al restartului
Cu acest sistem de codare, pot exista mai multe coduri pentru un singur bloc.
Pot exista mai multi biti indicatori, in functie de necesitati.
Marcatorul de restart este integrat in fluxul de date sub forma unui numar
intreg de octeti de 8 biti reprezentand caracterele printabile din limbajul folosit
pentru controlul conexiunii (implicit NVT-ASCII). <SP> (caracterul spatiu,
in limbajul corespunzator) nu trebuie folosit ca un marcator de resart.
De exemplu, pentru a transmite un marcator de 6 caractere, urmatoarea
secventa va fi trimisa:
+--------+--------+--------+
| Cod| Contorul octetilor |
|code= 16| = 6 |
+--------+--------+--------+
+--------+--------+--------+
| Marker | Marker | Marker |
| 8 bits | 8 bits | 8 bits |
+--------+--------+--------+
+--------+--------+--------+
| Marker | Marker | Marker |
| 8 bits | 8 bits | 8 bits |
+--------+--------+--------+
3.4.3. MODUL COMPRIMAT (COMPRESSED)
Exista 3 tipuri de informatie care poate transferata: date normale, trimise sub
forma de siruri de octeti; date comprimate, care constau in date reproduse sau de
umplere; sau informatie de control, trimisa sub forma unei secvente escape de 2 octeti.
Daca trebuie trimisi n octeti (0> n<127), atunci acesti n octeti sunt precedati
de un octet cu bitul cel mai din stanga setat pe 0 si cu restul de 7 biti continand
numarul n.
Sir de octeti:
1 7 8 8
+-+-+-+-+-+-+-+-+ +-+-+-+-+-+-+-+-+ +-+-+-+-+-+-+-+-+
|0| n | | d(1) | ... | d(n) |
+-+-+-+-+-+-+-+-+ +-+-+-+-+-+-+-+-+ +-+-+-+-+-+-+-+-+
^ ^
|---n octeti---|
de date
Sirul de n octeti de date d(1),..., d(n) n trebuie sa fie un numar pozitiv.
Pentru a comprima un sir de n repetari ale octetului de date d, sunt trimisi
urmatorii 2 octeti:
Octet repetat:
2 6 8
+-+-+-+-+-+-+-+-+ +-+-+-+-+-+-+-+-+
|1 0| n | | d |
+-+-+-+-+-+-+-+-+ +-+-+-+-+-+-+-+-+
Un sir de n octeti de umplere pot fi comprimati intr-unul singur, unde octetul
de umplere variaza in functie de tipul reprezentarii informatiei. Daca tipul este ASCII
sau EBCDIC atunci octetul de umplere este <SP> (spatiu, cod ASCII 32, cod EBCDIC 64).
Daca tipul este IMAGE sau local atunci acest octet este octetul 0.
Sir de umplere::
2 6
+-+-+-+-+-+-+-+-+
|1 1| n |
+-+-+-+-+-+-+-+-+
Secventa escape este un dublu octet, din care primul este octetul escape
(numai biti 0) iar al doilea contine codurile descriptive definite in sectiunea modului
Bloc. Aceste coduri au aceesi insemnatate ca si in modul Bloc si se aplica la sirul de
octeti ce urmeaza.
Modul comprimat este folositor atunci cand se doreste obtinerea unei latimi
de banda mai mari in transmisia datelor in retele mari, cu o solicitare cat mai mica
a procesorului. Poate fi folosit efectiv la reducerea marimii unor fisiere prinatabile
cum ar fi cele generate de host-uri RJE.
3.5. RECUPERAREA DUPA ERORI SI RESTARTUL
Nu exista nici o masura impotriva pierderii bitilor sau a alterarii ordinii
acestora in timpul transferului informatiei; erorile la acest nivel sunt corectate
de protocolul TCP. Oricum, exista o procedura de restart pentru a proteja aplicatiile
client de eori de sistem majore (inclusiv probleme legate de host, de procesul FTP
sau de retea).
Procedura de restart este definita doar pentru modurile de transfer bloc si
comprimat. Acesta necesita ca aplicatia care trimite data sa insereze un cod special
de marcare in fluxul de date cu informatie speciala pentru marcare. Aceasta informatie
are insemnatate doar pentru aplicatia care trimite, si trebuie sa fie format din
caractere printabile in limbajul ales pentru conexiunea de control (ASCII sau EBCDIC).
Acest marcaj ar putea reprezenta numarul de biti, de inregistrari sau orice alta
informatie prin care un sistem poate identifica un punct de verificare. Aplicatia
care primeste data, daca implementeaza procedura de restart, va marca pozitia
corespunzatoare a acestui marcaj in sistemul care primeste, si va returna aceasta
informatie la aplicatia client.
In eventualitatea unei erori de sistem, aplicatia client poate restarta
transferul de informatie prin identificarea unui punct de marcaj cu procedura de
restart FTP. Urmatorul exemplu ilustreaza folosirea acestei proceduri.
Aplicatia care trimite informatia insereaza un bloc de marcaj specific in
fluxul de date la un anumit punct. Host-ul care primeste marcheaza acelasi punct
in sistemul sau de fisiere si transfera aplicatiei client ultimele marcaje de trimitere
si primire a datelor, direct sau prin conexiunea de control intr-un raspuns 110 (depinde
de cine este cel care trimite datele). In eventualitatea unei erori de sistem,
utilizatorul sau procesul care controleaza transferul restarteaza procesul server la
ultimul marcaj al serverului prin trimiterea unei comenzi restart cu numarul codului
de marcaj ca argument. Comanda restart este transmisa prin conexiunea de control si
este urmata imediat de comanda (cum ar fi RETR, STOR sau LIST) care era executata
cand a aparut eroarea de sistem.
4. FUNCTIILE PENTRU TRANSFERUL DE FISIERE
Canalul de comunicatie de la interpretorul de protocol al aplicatiei client catre
interpretorul de protocol al aplicatiei server este stabilit ca o conexiune TCP de la
aplicatia client catre portul standard al aplicatiei server. Interpretorul de protocol
al aplicatiei client este responsabil pentru transmiterea comenzilor FTP si interpretarea
raspunsurilor primite; interpretorul de protocol al aplicatiei server interpreteaza comenzii,
trimite raspunsuri si directioneaza DTP-urile sale pentru a realiza conexiunea si a transfera
datele. Daca a doua parte a transferului de date (procesul de transfer pasiv) este procesul
de transfer de date al aplicatiei client, atunci el este manipulat prin intermediul protocolului
intern al gazedei procesului de transfer de date al aplicatiei client; daca este un proces
secundar de transfer al datelor al aplicatiei server, atunci este manipulat prin intermediul
interpretorului propriu de protocol la cererea interpretorului de protocol al aplicatiei
client. Raspunsurile FTP sunt discutate in sectiunea urmatoare. In descrierea catorva comenzi
din aceasta sectiune, este de ajutor sa fim expliciti cu privire la posibilitatile de raspuns.
4.1. COMENZI FTP
4.1.1. COMENZI PENTRU CONTROLUL ACCESULUI
Urmatoarele comenzi specifica identificatorii pentru controlul accesului (codul comenzilor
este specificat intre paranteze).
USER NAME (USER)
Argumentul comenzii este un sir de caractere al aplicatiei Telnet ce identifica
utilizatorul. Identificarea utilizatorului este ceea ce cere aplicatia server pentru
a permite accesarea fisierelor sale. Aceasta comanda va fi in mod normal prima
transmisa de catre aplicatia client dupa ce conexiunile de control sunt realizate
(unele aplicatii server ar putea cere acestlucru). Informatii aditionale de identificare
sub forma unei parole sau/si a unui cont pot de asemenea sa fie cerute de unele aplicatii
server. Aplicatiile server pot permite ca o noua comanda de tipul USER sa fie introdusa
in orce moment pentru a shimba controlul accesului sau/si a inregistra noi informatii.
Acest lucru are efectul de eliberare a oricarui utilizator, parola si inregistrare de
informatii deja initiate si inceperea unei noi secvente de conectare. Toti parametrii
de transfer raman neshimbati si orice transfer de fisiere in desfasurare este terminat
sub vechii parametrii de control ai accesului.
PASSWORD (PASS)
Argumentul este un sir de caractere de tip Telnet care specifica parola
utilizatorului. Aceasta comanda trebuie neaparat precedata de comanda pentru
introducerea utilizatorului, si pentru unele site-uri, completeaza procesul
de identificare a utilizatorului pentru a permite accesul. Deoarece parola
este o informatie confidentiala este de dorit, in general, sa fie mascata
sau sa fie reprezentata cu un caracter special. Se pare ca aplicatia server
nu are nici o modalitate pe deplin sigura pentru a indeplini aceasta sarcina.
De aceea cade in responsabilitatea utilizatorului procesului FTP sa ascunda
informatia confidentiala a parolei.
CONT (ACCT)
Argumentul este un sir de caractere de tip Telnet care identifica contul
utilizatorului. Comanda nu este in mod necesar inrudita cu comanda USER,
astfel incat unele site-uri pot cere un cont pentru conectare si alte conturi
pentru un acces anume, cum ar fi stocarea fisierelor. In cazul din urma comanda
poate aparea in orice moment.
Exista coduri de raspuns la comanda pentru a diferentia aceste cazuri de
cele automatizate: cand sunt cerute informatii despre cont pentru conectare,
codul de raspuns la introducerea unei parole corecte este 332. Pe de alta parte,
daca nu sunt cerute informatii despre cont pentru conectare, codul de raspuns la
introducerea unei parole corecte este 230; si daca este nevoie de informatiile
despre cont mai tarziu intr-o comanda aparuta intr-un dialog, serverul ar trebui
sa returneze un cod de raspuns 332 sau 532 in functie de actiunea pe care o face:
stocheaza sau descarca comanda.
SCHIMBAREA DIRECTORULUI DE LUCRU (CWD)
Aceasta comanda permite utilizatorului sa lucreze cu un director sau set de date
diferit pentru stocarea fisierelor sau regasirea lor fara sa-si schimbe conexiunea
sau informatiile despre cont. Argumentul este o cale ce specifica un director sau
un alt indicator catre un grup de fisiere.
SCHIMBAREA DIRECTORULUI CATRE DIRECTORUL PARINTE (CDUP)
Aceasta comanda este un caz particular al comenzii CWD, si a fost inclusa pentru a
simplifica implementarea programelor in cazul transferarii arborilor de directoare
intre sisteme de operare avand sintaxe diferite pentru denumirea directorului parinte.
Codul de raspuns trbuie sa fie identic cu cel al comenzii CWD. Vezi Anexa 2 pentru
mai multe informatii.
STRUCTURA MOUNT (SMNT)
Aceasta comanda permite utilizatorului sa monteze un sistem de fisiere cu structura
diferita fara sa-si modifice conexiunea sau informatiile despre cont. Parametrii de
transfer raman neschimbati. Argumentul este o cale ce specifica un director sau
un alt indicator catre un grup de fisiere.
REINITIALIZEAZA (REIN)
Aceasata comanda termina un USER, golind toate intrarile si iesirile sale si informatiile
despre cont, exceptand transferurile in curs de desfasurare a caror terminare este asteptata.
Toti parametrii sunt resetati la cei impliciti si contolul conexiunii este lasat deschis.
Aceasta este identica cu starea in care un utilizator se gaseste imediat dupa ce conexiunea
a fost deschisa. O comanda de tipul USER este asteptata in continuare.
DECONECTAREA (QUIT)
Aceasta comanda termina un utilizator si daca daca nici un transfer de fisiere nu
este in desfasurare, serverul inchide conexiunea. Daca un transfer de fisiere este
in desfasurare, conexiunea va ramane deschisa pana i se va returna un raspuns de
terminare dupa care serverul o va inchide. Daca procesul utilizatorului transfera
fisiere pentru cativa utilizatori dar nu vrea sa se termine si deschide apoi conexiuni
pentru fiecare, atunci comand REIN ar trebui utilizata in locul comenzii QUIT.
O comanda neasteptata de inchidere a conexiunii va determina serverul sa efectueze o
actiune de intrerupere (ABOR) si de inchidere a conexiunii (QUIT).
4.1.2. COMENZILE PENTRU TRANSFERUL PARAMETRILOR
Toate datele ce se transfera ca parametrii au valori implicite, iar comenzile pentru
specificarea datelor ce se transfera ca parametrii sunt necesare doar daca valorile
implicite ale parametrilor sunt schimbate. Valoarea implicita este ultima valoare
specificata, sau daca nici o valoare nu a fost specificata, valoarea standrad implicita
este stabilita in acest caz. Aceasta implica ca serverul sa-si "aminteasca" vlorile
implicite aplicabile. Comenzile pot fi date in orice ordine exceptand faptul ca ele
trebuie sa preceada cererea serviciului FTP. Urmatoareale comenzi specifica datele
de transfer ale parametrilor:
PORTUL (PORT)
Argumentul este un PORT-GAZDA specificat ca port folosit in realizarea conexiunii de
date. Exista setari implicite pentru ambele porturi, ale clientului si ale serverului,
si in mod obisnuit nu este nevoie de aceasta comanda. Daca comanda este folosita
argumentul este rezultatul concatenarii dintre o adresa gazda pe 32-biti si o adresa
unui port TCP pe 16-biti. Aceasta adresa este separata in campuri de cate 8-biti si
evaluarea fiecarui camp este transmisa ca un numar zecimal(reprezentat ca sir de caractere).
Campurile sunt separate prin virgule. O comanda pentru port ar arata cam asa:
PORT h1,h2,h3,h4,p1,p2
unde h1 reprezinta cei mai semnificativi 8-biti ai adresei.
PASSIVE (PASV)
Aceasta comanda cere serverului DTP sa "asculte" la un port(care nu este portul sau
implicit) si sa astepte realizarea unei conexiuni decat sa initieze una in momentul
receptionarii unei comenzi de transfer. Raspunsul la aceasta comanda include adresele
gazdei si portul la care serverul asculta.
TIPUL REPREZENTARII (TYPE)
Argumentul specifica tipul reprezentarii asa cum este descris in Sectiunea despre
Reprezentarea si Stocarea Datelor. Cateva tipuri au un al doilea parametru. Primul
parametru este reprezentat de un singur caracter de tip Telnet, iar al dolilea parametru
este parametrul Format reprezentat in ASCII si EBCDIC; al doliea parametru pentru octetul
local este un intreg zecimal care indica dimensiunea in octeti. Parametrii sunt sparati
printr-un SP(spatiu, care are codul ASCII 32).
Urmatoarele coduri sunt asociate tipurilor:
\ /
A - ASCII | | N - neprintabil
| | T - specificator de format Telnet
E - EBCDIC| | C - return de car (ASA)
/ \
I - Imagine
L ;dimensiunea in octeti;
Tipul implicit de reprezentare este ASCII neprintabil. Daca parametrul Format este schimbat,
iar mai tarziu daca doar primul argument este schimbat, Format revine la valoarea implicita
neprintabila.
STRUCTURA DE FISIERE (STRU)
Argumentul este codul unui singur caracter Telnet specificand structura de fisiere descrisa
in sectiunea Reprezentarea si Stocarea Datelor.
Urmatoarele coduri sunt asociate structurii de fisiere:
F - Fisier (nu structura de inregistrare)
R - Structura de inregistrare
P - Structura de pagina
Structura implicita este cea de Fisier.
MODUL DE TRANSFER (MODE)
Argumentul este codul unui singur caracter Telnet specificand modul de transfer al datelor
descris in sectiunea Moduri de Transmitere a Datelor.
Urmatoarele coduri sunt asociate modurilor de transmitere a datelor:
S - Flux
B - Bloc
C - Comprimat
Modul implicit de transfer este Flux.
4.1.3. COMENZILE SERVICIULUI FTP
Comenzile serviciului FTP descriu modul de transfer al fisierelor sau functiile sistemului
de fisiere cerute de utilizator. Argumentul unei comenzi a serviciului FTP este in mod
obisnuit o cale spre un fisier. Sintaxa unei cai trebuie sa corespunda conventiilor
serverului (cu standardele implicite aplicabile), si conventiilor de limbaj ale conexiunii.
Comportamentul implicit recomandat este acela de a folosi ultimul dispozitiv specificat,
director sau nume de fisier, sau cel standard definit implicit pentru utilizatorii locali.
Comenzile pot fi date in orice ordine, exceptie facand faptul ca o comanda "rename from"
trebuie urmata de o comanda "rename to" si comanda pentru repornire trebuie urmata de
comanda de intrerupere a serviciilor (de ex., STOR sau RETR). Datele, cand sunt transferate
ca raspuns la o comanda FTP, trebuie intotdeuna transmise prin conexiunea de date, cu
exceptia unor catorva raspunsuri informative. Urmatoarele comenzi specifica apelarea
unor servicii FTP:
SALVARE (RETR)
Aceasta comanda are ca efect transferul de catre serverul DTP a unei copii a fisierului,
specificat in calea data, de pe server-ul sau user-ul DTP la celalalt capat al conexiunii
de date. Starea si continutul fisierului de pe server nu trebuie sa fie afectate.
STOCARE (STOR)
Aceasta comanda determina serverul DTP sa accepte transferul de date prin intermediul
conexiunii de date si sa stocheze datele ca un fisier pe server. Daca fisierul specificat
in cale exista pe server, atunci continutul sau va fi inlocuit de catre datele care se
transfera. Un fisier nou va fi creat pe server daca fisierul specificat in cale nu exista
deja.
STOCARE UNICA (STOU)
Comanda are acelasi comportament ca si STOR cu exceptia faptului ca fisierul care rezulta
in urma transferului este creat in directorul curent cu un nume unic in acel director.
Raspunsul Transfer Initiat avand codul 250 trebuie sa includa si numele generat.
ADAUGARE (cu creare) (APPE)
Aceasta comanda determina serverul DTP sa accepte transferul de date prin intermediul
conexiunii si sa stocheze datele intr-un fisier pe server. Daca fisierul specificat in
cale exista deja pe server, atunci datele vor fi adaugate la fisier; altfel fisierul
specificat in cale va fi creat pe server.
ALOCARE (ALLO)
Comanda poate fi folosita de unele servere pentru a aloca suficienta memeorie pentru
a putea transfera fisierul. Argumentul va fi un intreg zecimal reprezentand numarul
de bytes (utilizand dimensiunea logica a unui byte) de memeorie rezervati pentru fisier.
Pentru fisiere transmise cu inregistrari sau structura de pagina o dimensiune maxima
a inregistrarii sau o dimensiune maxima a paginii este de asemenea necesara; aceasta
este indicat de un intreg zecimal in cel de-al doilea argument al comenzii.
Acest al doilea argument este optional, dar cand este prezent trbuie separat de primul
prin cele trei caractere Telnet: SP, R, SP. Aceasta comanda trebuie urmata de o comanda
STORe sau APPEnd. Comanda ALLO trebuie tratata ca un NOOP (nici o operatie) de acele
servere care nu cer ca dimensiunea maxima a fisierului sa fie declarata dinainte, si
acele servere interesate doar ca inregistrarea maxima sau dimensiunea maxima a paginii
sa accepte o valoare fictiva in primul argument si s-o ignore.
REPORNIRE (REST)
Argumentul reprezinta punctul din care servarul sa reporneasca transferul de fisiere.
Comanda nu determina transferul de fisiere prpriu-zis, ci se pozitioneaza in fisier
la pozitia de unde transferul a fost intrerupt. Ea va fi imediat urmata de comanda FTP
care va determina reluarea transferului.
REDENUMESTE DIN (RNFR)
Comanda specifica vechea cale a fisierului care se redenumeste. Ea trebuie neparat sa
fie urmata de o comnada "redenumeste la" specificand noua cale si noul nume.
REDENUMESTE LA (RNTO)
Comanda specifica noua cale si noul nume a fisierului specificat in comanda "redenumeste
din". Impreuna, cele doua comenzi redenumesc un fisier.
INTRERUPE (ABOR)
Comanda determina serverul sa intrerupa comanda FTP anterioara si orice transfer de
date asociat. Comanda de intrerupere poate necesita "actiuni speciale", discutate
in capitolul despre Comenzi FTP, pentru a forta recunoasterea ei de catre server.
Nu se va intampla nimic daca comanda antrioara a fost incheiata (incluzand transferul
de date). Conexiunea cu clientul nu va fi inchisa de catre server, dar conexiunea de
date va fi inchisa.
Exista doua stari in care se poate afla serverul la primirea acestei comenzi:
(1) comanda anterioara a fost incheiata, sau
(2) comanda anterioara se afla inca in desfasurare.
In primul caz, serverul inchide conexiunea de date (daca aceasta este deschisa)
si raspunde cu codul 226, indicand faptul ca comanda de intrerupre a fost executata
cu succes.
In cel de-al doilea caz, serverul intrerupe serviciul FTP in desfasurare si inchide
conexiunea de date, returnand codul 426 si indicand faptul ca serviciul solicitat
s-a terminat anormal. Severul transmite apoi codul 226, indicand faptul ca comanda
de intrerupere a fost executata cu succes.
STERGE (DELE)
Comanda sterge fisierul specificat in cale de pe server. Daca se doreste un nivel
mai avansat de securitate (cum ar fi o interogare, "Chiar doriti sa-l stergeti?"),
acestea trebuie precizate de procesul FTP client.
STERGE DIRECTOR (RMD)
Comanda are ca rezultat stergerea directorului specificat in cale ca director
(daca calea este absoluta) sau ca subdirector al directorului curent de lucru
(daca calea este relativa). Vezi Anexa II.
CREEAZA DIRECTOR (MKD)
Comanda are ca rezultat crearea directorului specificat in cale ca director
(daca calea este absoluta) sau ca subdirector al directorului curent de lucru
(daca calea este relativa). Vezi Anexa II.
OBTINE NUMELE DIRECTORULUI DE LUCRU (PWD)
Comanda returneaza numele directorului de lucru. Vezi Anexa II.
LISTEAZA (LIST)
Comanda determina transmiterea unei liste de la server la clientul DTP pasiv.
Daca calea specifica un director sau un alt grup de fisiere, serverul transfera
lista de fisiere a directorului specificat. Daca este specificat un fisier atunci
serverul transmite inforamtiile despre fisier. Un argument null implica directorul
curent al utilizatorului sau directorul implicit. Transferul de date se face prin
conexiunea de date in tipul ASCII sau EBCDIC. (Utilizatorul trebuie sa se asigure
daca tipul este corespunzator celui ASCII sau celui EBCDIC). Din moment ce informatiile
despre un fisier pot varia foarte mult de la un sisitem la altul, aceasta informatie
este dificil de folosit in mod automat intr-un program, dar poate fi destul de utila
unui programator uman.
LISTA DE NUME (NLST)
Comanda determina transmiterea unei liste a unui director catre un utilizator.
Calea trebuie sa specifice un director sau un alt descriptor pentru un grup de
fisire specific sistemului; un argument null determina folosirea directorului
curent. Serverul va returna numele fisierelor neinsotite de alte informatii.
Datele vor fi transferate sub format ASCII sau EBCDIC prin conexiunea de date
ca siruri de caractere valide separate prin CRLF sau NL. (Utilizatorul trebuie
sa se asigure din nou ca formatul transferului este corect.) Coamnda are drept
scop returnarea unor date pe care un program le va putea folosi pentru procesarea
viitoare a fisierelor. De exemplu, in implementarea unei functii de tipul
"transfer multiplu".
PARAMETRII DE POZITIE (SITE)
Comanda este folosita de server pentru a furniza servicii specifice sistemului
care sunt sunt esentiale pentru transferul de fisiere, dar nu intr-atat de
universale ca sa fie incluse ca si comenzi in protocol. Caracterul acestor servicii
si specificatiile sintaxei lor pot fi regasite ca raspuns la comanda HELP SITE.
SISTEM (SYST)
Comanda este folosita pentru a afla tipul sistemului de operare folosit de server.
Raspunsul are ca prim cuvant unul din numele sistemelor listate in versiunea
curenta a documentului de Atribuire a Numerelor[4].
STARE (STAT)
Comanda va determina transmiterea unui raspuns de stare prin conexiunea de control.
Comanda poate fi transmisa in timpul transferului de fisiere, caz in care serverul
va trimite drept raspuns starea operatiei in desfasurare, sau poate fi transmisa
intre transferurile de fisiere. In cazul din urma, comanda trebuie sa primeasca
un argument. Daca argumentul este o cale, comanda este analoaga cu comanda
"listeaza" exceptie facand faptul ca datele trebuie transferate prin intermediul
conexiunii de control. Daca este transmisa ca argument o parte a unei cai,
serverul va raspunde cu o lista de nume de fisiere sau atribute asociate cu
specificatia. Daca nu este transmis nici un argument, Serverul va returna
informatii despre starea generala a proceselor serverului FTP. Acestea vor
include valorile curente ale tuturor parametrilor de transfer si starea
conexiunilor.
ASISTENTA (HELP)
Comanda va determina serverul sa transmita utilizatorului informatii ajutatoare
cu privire la implementarile sale prin conexiunea de control. Comanda poate avea
un argument (ex., orice nume de comanda) si sa returneze informatii specifice
acestui argument. Raspunsul este unul din codurile 211 sau 214. Este recomandat
ca HELP sa fie permisa inainte de introducerea comenzii USER. Serverul poate
folosii aceste valori returnate pentru a specifica parametrii ce depind de el,
de ex., raspunsul la comanda HELP.
FARA OPERATII (NOOP)
Comanda nu afecteaza nici un parametru sau vreo comanda anterioara. Specifica ca
singura actiune transmiterea de catre server a unui raspuns de OK.
Protocolul pentru Transferul Fisierelor urmeaza specificatiile protocolului Telnet
pentru toate comunictiile prin conexiunea de control. Din moment ce limbajul folosit
pentru comunictiile Telnet poate fi o optiune discutatbila, toate referintele din
urmatoarele doua sectiuni vor fi la "limbajul Telnet" si similarului "cod Telnet".
In mod frecvent, vom intelege prin acestea NVT-ASCII si <CRLF>. Nici o alta
specificatie a protocolului Telnet nu va mai fi citata.
Comenzile FTP sunt "siruri de caractere Telnet" terminate cu "codul de sfarsit de
line Telnet". Codurile comenzilor sunt ele insele carctere alfabetice terminate de
caracterul SP (Spatiu) daca urmeaza parametrii si Telnet-EOL(End Of Line) altfel.
Codul comenzilor si semantica lor sunt descrise in aceasta sectiune; sintaxa detaliata
a comenzilor este specificata in sectiunea Comenzi, succesiunea raspunsurilor este
discutata in sectiunea Succesiunea Comenzilor si Raspunsurilor, si exemplele ilustrand
utilizarea comenzilor sunt descrise in sectiunea Utilizari Tipice FTP.
Comenzile FTP pot fi impartite in cele specificand indentificatorii pentru controlul
accesului, parametrii de transfer a datelor, sau cereri ale unor servicii FTP. Anumite
comenzi (cum ar fi ABOR, STAT, QUIT) pot fi transmise prin conexiunea de control in
timp ce se desfasoara un transfer de date. Este posibil ca unele servere sa nu fie
capabile sa monitorizeze conexiunea de control si conexiunea de date simultan,
caz in care unele actiuni speciale sunt necesare pentru a atrage atentia serverului.
Urmatoarea ordine este recomandata ca incercare:
1. Utilizatorul introduce semnalul Telenet "Proces Intrerupt" (IP)
in sirul Telnet.
2. Utilizatorul transmite semnalul Telnet "Synch"
3. Utilizatorul introduce comanda (de ex., ABOR) in sirul Telnet.
4. Serverul PI, dupa ce primeste "IP", scaneaza sirul Telnet pentru
a gasi exact ocomanda FTP.
(pentru alte servere acestea s-ar putea sa nu fie necesare, dar actiunile prezentate
mai sus nu vor avea un efect neobisnuit)
4.2. RASPUNSURILE FTP
Raspunsurile la comenzile FTP sunt concepute ca sa asigure sincronizarea cererilor
si actiunilor in procesul de transfer al fisierelor, si sa garanteze ca procesul
client stie starea serverului. Orice comanda trebuie sa genereze cel putin un raspuns,
chiar daca pot fi si mai multe; in cazul din urma, respunsurile multiple trebuie
distinse usor. In plus, unele comenzi se desfasoara in grupuri secventiale, cum ar fi
USER, PASS si ACCT, sau RNFR si RNTO. Raspunsurile arata existenta unei stari intermediare
daca toaste comenzile anterioare s-au incheiat cu succes. O eroare in orice punct al
secventei necesita repetarea intregii secvente de la inceput.
Detaliile despre raspunsurile la secventa de comenzi sunt explicitate
in setul de diagrame de mai jos.
Un raspuns FTP consta intr-un numar de trei cifre (transmis ca trei caractere alfanumerice)
urmat de un text. Numarul este dedicat utilizarii automate pentru a detremina starea
urmatoare; Textul este dedicat utilizatorului uman. Se doreste ca cele trei cifre sa
contina suficienta informatie codata astfel incat procesul utilizator nu are nevoie sa
analizeze textul si-l poate chiar descarca sau sa-l transmita unui alt utilizator, cat
mai potrivit. In particular, textul poate fi dependent de server, deci cel mai probabil
textul pentru fiecare cod de raspuns va varia.
Un raspuns contine un cod de 3 cifre, urmat de Spatiu SP, urmat de o linie de text
(lungimea maxima a unei linii fiind specificata), si terminat cu codul telnet pentru
sfarsit de linie. Oricum vor exista cazuri in care textul va fi mai lung decat o singura
linie. In aceste cazuri textul complet trebuie parantetizat astfel incat procesul client
cand sa se opresca din citirea raspunsului (de ex., sa se opreasaca din prelucrarea intarii
de la conexiunea de control) si sa faca altceva. Aceasta cere un format special al primei
linii pentru a indica ca urmeaza mai mult decat o linie, si unul pentru ultima linie pentru
a semnala ca este ultima. Cel putin una dintre acestea trebuie sa contina codul de raspuns
cel mai potrivit pentru a semnala starea tranzactiei. Pentru a satisface toate diferntele,
s-a hotarat ca ambele linii, cea de inceput si cea de sfarsit trbuie sa fie la fel.
Astfel, formatul pentru raspunsurile cu mai multe linii, prima linie va incepe cu codul de
raspuns, urmat de text. Ultima linie va incepe cu acelasi cod urmat imediat de spatiu SP,
un text optional si caracterul de sfarsit de linie Telnet.
De exemplu:
123-Prima linie
A doua linie
234 O linie care incepe cu numar
123 Ultima linie
Procesul client trebuie sa caute doar a doua aparitie a codului de raspuns, urmata de SP
(spatiu) la inceputul liniei, si sa ignore toate liniile intermediare. Daca o linie
intermediara incepe cu un numar de trei cifre, Serverul trebuie sa verifice inceputul
pentru a evita confuziile.
Aceasta schema permite rutinelor standard ale sistemului sa fie folosite pentru a returna
informatii (cum este raspunsul pentru STAT) cu prima si ultima linie respectand
conventia de mai sus atasate. In rare cazuri aceste rutine sunt capabile sa genereze trei
cifre si un spatiu la inceputul unei linii, inceputul fiecarei linii de text fiind partea
unui text neutru, cumar fi spatiul.
Aceasta schema presupune ca rspunsurile cu mai multe linii nu vor fi gresit interpretate.
Cele trei cifre ale unui raspuns au fiecare o semnificatie speciala. Scopul este de a
permite raspunsuri de la cele mai simple la cele mai sofisticate catre procesul client.
Prima cifra semnifica daca rspunsul este valid, invlid sau incomplet. Referindu-ne la
diagrama de stare, un proces client nesofisticat va fi capabil sa-si determine actiunea
viitoare examinand pur si simplu prima cifra. Un proces client care doreste sa stie
aproximativ ce tip de eroare s-a produs (de ex., eroare la sistemul de fisiere, eroare
de sintaxa a comenzii) poate examina a doua cifra, rezervandu-se a treia cifra pentru o
informare si mai precisa.
Exista cinci valori pentru prima cifra din codul de raspuns:
1 Raspuns Pozitiv Preliminar
Cererea a fost initiata; se asteapta un alt raspuns
inainte de a executa o noua comanda. (Procesul client
care trimite o alta comanda inainte de incheierea
raspunsului va probuce o violare a protocolului; dar
serverul FTP va pune in coada de comenzi orice comanda
primita in timpul executiei altei comenzi.) Acest tip
de raspuns poate fi folosit pentru a indica faptul ca
aceasta comanda a fost acceptata si procesul client
poate acorda atentie in continuare conexiunii de date,
pentru ca este dificila implementarea in acest caz a
unei monitorizari simultane. Serverul FTP va transmite
cel putin un raspuns din categoria 1 pentru o comanda.
2 Raspuns Pozitiv de Completare
Cerereaa fost indeplinita cu succes. O noua cerere poate
fi initiata.
3 Raspuns Pozitiv Intermediar
Comanda a fost acceptata, dar cererea este in asteptare,
asteptand informatii ulterioare. Utilizatorul trebuie sa
trimita o alta comanda care sa specifice aceasta informatie.
Acest raspuns se foloseste in grupurile de comenzi.
4 Raspuns Negativ Rapid de Terminare
Comanda nu a fost acceptata si actiunea solicitata nu a
avut loc, dar cauza erorii este tempoarara si actiunea
poate fi ceruta din nou. Utilizatorul trebuie sa se intoarca
la inceputul secventei de comenzi, daca exista. Este dificil
sa atribui lui transient un inteles, in particular cand doua
parti distincte (servarul si clientul) trebuie sa se puna de
acord cu interpretarea. Fiecare raspuns din cea de-a 4 categorie
trebuie sa aiba valori de timp putin diferite, dar scopul este ca
procesul client sa fie incurajat sa incerce din nou. O regula in
determinarea daca un raspuns este din a 4-a sau a 5-a categorie
(Negativ Permanent) este aceea ca un raspuns este in a 4-a
categorie daca comanda poate fi repetata fara nici o schimbare
in formulare sau in propietatile utilizatorului sau serverului
(ex., comanda este scrisa la fel si cu aceleasi argumente;
utilizatorul nu-si modifica fisierul de acces sau numele; serverul
nu-si schimba implementarea)
5 Raspuns Negativ Permanent de Terminare
Comanda nu a fost acceptata si actiunea nu s-a petrecut.
Procesul client este descurajat in a mai repeta comanda
exact in aceeasi forma (in aceeasi secventa). Chiar si
cateva cauze de erori permanente pot fi corectate, deci
utilizatorul uman trebuie sa-si directioneze procesul sau
client sa reinitieze secventa de comenzi print-o actiune
directa ulterioara (ex., dupa ce scrierea a fost schimbata,
sau clientul si-a modificat starea directorului)
Urmatoarele grupuri de functii sunt codate in cea de-a doua cifra:
x0 Sintaxa - Acest raspuns se refera la erorile de sintaxa, corecte
sintactic care nu se potrivesc nici unei categorii functionale,
neimplementate sau comenzile inutile.
x2 Informatia - Sunt replici care cer informatii, cum ar fi satrea sau
indicatii.
x3 Conexiuni - Raspunsuri care se refera la control sau conexiunea de date.
x4 Autentificare si inregistrare - raspunsuri pentru procesul de logare
si procedurile de inregistrare.
x4 Nespecificat pana in prezent.
x5 Sistemul de fisiere - Raspunsurile indica starea sistemului de fisiere
al serverului in legatura cu cererile de transfer sau alte sisteme
de fisiere.
A treia cifra da o gradatie mai fina in categoria de functii, specificata in cea de-a
doua cifra. Lista de raspunsuri de mai jos ilustreaza aceasta. De remarcat ca textul
asociat cu fiecare raspuns este recomandat, si mai putin cu caracter obligatoriu, si
se poate schimba potrivit comenzii cu care este asociat. Codurile de raspuns, pe de
alta parte, terbuie sa urmeze in mod strict specificatiile din ultima parte; adica,
implementarea serverului nu trebuie sa inventeze coduri noi pentru situatii care sunt
doar putin diferite de cele descrise aici, ci ar trebui sa adapteze codurile deja
definite.
O comanda ca TYPE sau ALLO a carei executie cu succes nu ofera procesului
client nici o informatie va cauza un raspuns cu codul 200. Daca comanda
nu este implementata de un proces particular al unui server FTP pentru ca
nu are relevanta pentru acel calculator, de exemplu ALLO pe un TOPS-20, un
raspuns pozitiv de terminare este cerut astfel incat procesul client sa
stie cand poate continua. Un rspuns 202 este folosit in acest caz cu, de
exemplu, textul: "Nu este necesara alocarea de memorie". Daca, pe de alta
parte, comanda cere o actiune care nu tine de cel apelat si nu este
implementata, raspunsul este 502. O imbunatatire pentru ceea ce este 504
pentru o comanda care este implementata, dar care cere un parametru
neimplementat.
4.2.1 Codurile de raspuns pentru grupurile de functii
200 Comanda OK.
500 Eroare de sintaxa, comanda nerecunoscuta.
Poate include si erori ca 'linia comenzii este prea lunga'.
501 Eroare de sintaxa in parametrii sau argumente.
202 Comanda neimplementata, inutila pentru program.
502 Comanda neimplementata.
503 Secventa gresita de comenzi.
504 Comanda neimplementata pentru acest parametru.
110 Raspuns care indica repornirea.
In acest caz, textul este exact si nu depinde de implementarile
particulare; trebuie citit:
MARK yyyy = mmmm
Unde yyyy fluxul este de date al procesului client, iar mmmm este
echivalentul acestuaia pe server.
211 Starea sistemului, sau o indicatie de la sistem.
212 Starea directorului.
213 Starea fisierului.
214 Mesaj cu explicatii.
Despre cum se utilizeaza serverul sau despre intelesul
unei comenzi nestandard. Comanda este utila doar utilizatorului
uman.
215 NUMELE tipului sistemului.
unde NUME este numele oficial al unui sistem din lista cu
Numerele Asociate.
120 Serviciu gata in nnn minute.
220 Serviciu disponibil pentru un nou utilizator.
221 Serviciul inchide conexiunea de control.
Deconectare.
421 Seviciul nu este disponibil, inchide conexiunea de control.
Acesta poate fi un raspuns la orice comanda daca serviciul
stie ca trebuie sa se inchida.
125 Conexiunea de date este deja stabilita; transfer inceput.
225 Conexiunea de date este deschisa; nici un transfer in desfasurare.
425 Nu pot deschide conexiunea de date.
226 Inchiderea conexiunii de date.
Actiunea ceruta pentru un fisier a fost executata cu succes (de ex.,
fisier in transfer sau fisier anulat)
426 Conexiune inchisa; transfer anulat.
227 Intrare in modul pasiv (h1,h2,h3,h4,p1,p2).
230 Utilizator conectat, continua.
530 Neconectat.
331 Numele utilizatorului este valid, introduceti parola.
332 Este nevoie de inregistrare pentru conectare.
532 Este nevoie de inregistrare pentru a memora fisiere.
150 Starea fisierului este buna; pe punctul de a deschide conexiunea de date.
250 Actiunea ceruta pentru fisier este OK, indeplinita.
257 "CALE" creata.
350 Actiunea ceruta pentru fisier asteapta informatii aditionale.
450 Actiunea ceruta pentru fisier neacceptata.
Fisier nedisponibil (de ex., fisier ocupat).
550 Actiunea ceruta pentru fisier neacceptata.
Fisier nedisponibil (de ex., fisierul nu este gasit, nu am acces).
451 Cerere anualta. Eroare locala in desfasurare.
551 Cerere anulata. Tip de pagina necunoscut.
452 Actiunea ceruta pentru fisier neacceptata.
Memorie insuficienta in sistem.
552 Actiunea ceruta pentru fisier anulata.
S-a depasit memoria alocata (pentru directorul curent sau
setul de date).
553 Actiunea ceruta pentru fisier neacceptata.
Nume de fisier nepermis.
4.2.2 Ordinea numerica a codurilor de raspuns
110 Raspuns care indica repornirea.
In acest caz, textul este exact si nu depinde de implementarile
particulare; trebuie citit:
MARK yyyy = mmmm
Unde yyyy este fluxul de date al procesului client, iar mmmm este
echivalentul acestuaia pe server.
120 Serviciu gata in nnn minute.
125 Conexiunea de date este deja stabilita; transfer inceput.
150 Starea fisierului este buna; pe punctul de a deschide conexiunea de date.
200 Comanda OK.
202 Comanda neimplementata, inutila pentru program.
211 Starea sistemului, sau o indicatie de la sistem.
212 Starea directorului.
213 Starea fisierului.
214 Mesaj cu explicatii.
Despre cum se utilizeaza serverul sau despre intelesul
unei comenzi nestandard. Comanda este utila doar utilizatorului
uman.
215 NUMELE tipului sistemului.
unde NUME este numele oficial al unui sistem din lista cu
Numerele Asociate.
220 Serviciu disponibil pentru un nou utilizator.
221 Serviciul inchide conexiunea de control.
Deconectare.
225 Conexiunea de date este deschisa; nici un transfer in desfasurare.
226 Inchiderea conexiunii de date.
Actiunea ceruta pentru un fisier a fost executata cu succes (de ex.,
fisier in transfer sau fisier anulat)
227 Intrare in modul pasiv (h1,h2,h3,h4,p1,p2).
230 Utilizator conectat, continua.
250 Actiunea ceruta pentru fisier este OK, indeplinita.
257 "CALE" creata.
331 Numele utilizatorului este valid, introduceti parola.
332 Este nevoie de inregistrare pentru conectare.
350 Actiunea ceruta pentru fisier asteapta informatii aditionale.
421 Seviciul nu este disponibil, inchide conexiunea de control.
Acesta poate fi un raspuns la orice comanda daca serviciul
stie ca trebuie sa se inchida.
425 Nu pot deschide conexiunea de date.
426 Conexiune inchisa; transfer anulat.
450 Actiunea ceruta pentru fisier neacceptata.
Fisier nedisponibil (de ex., fisier ocupat).
451 Cerere anualta. Eroare locala in desfasurare.
452 Actiunea ceruta pentru fisier neacceptata.
Memorie insuficienta in sistem.
500 Eroare de sintaxa, comanda nerecunoscuta.
Poate include si erori ca 'linia comenzii este prea lunga'.
501 Eroare de sintaxa in parametrii sau argumente.
502 Comanda neimplementata.
503 Secventa gresita de comenzi.
504 Comanda neimplementata pentru acest parametru.
530 Neconectat.
532 Este nevoie de inregistrare pentru a memora fisiere.
550 Actiunea ceruta pentru fisier neacceptata.
Fisier nedisponibil (de ex., fisierul nu este gasit, nu am acces).
551 Cerere anulata. Tip de pagina necunoscut.
552 Actiunea ceruta pentru fisier anulata.
S-a depasit memoria alocata (pentru directorul curent sau
setul de date).
553 Actiunea ceruta pentru fisier neacceptata.
Nume de fisier nepermis.
5. SPECIFICATII DECLARATIVE
5.1. IMPLEMENTARE MINIMA
In scopul de a realiza Servere FTP functionale fara mesaje de eroare
inutile, urmatoarea implementare minimala este ceruta pentru toate
serverele:
TIP - ASCII neprintabil
MOD - Flux
STRUCTURA - Fisier, Inregistrare
COMENZI - USER, QUIT, PORT,
TYPE, MODE, STRU,
pentru valorile implicite
RETR, STOR,
NOOP.
Valorile implicite pentru parametrii de transfer:
TIP - ASCII neprintabil
MOD - Flux
STRUCTURA - Fisier
Toate gazdele trebuie sa accepte cele mai de sus ca standarde implicite.
5.2. CONEXIUNI
Interpretorul de protocol al serverului va "asculta" la portul L. Clientul sau interpretorul
de protocol al clientului va initia conexiunea de control full-duplex. Procesele serverului
- si clientului - trebuie sa urmeze conventiile protocolului Telnet asa cum sunt specificate
in cartea ARPA-Inernet Protocol. Serverele nu sunt obligate sa se ingrijeasca de editarea
liniilor de comanda si pot cere ca aceasta sa se faca in gazda client. Conexiunea de control
va fi inchisa de catre server la cererea clientului dupa relizarea tuturor transferurilor.
Clientul DTP trebuie sa "asculte" la portul de date specificat: acesta poate fi portul client
implicit (U) sau un port specificat prin comanda PORT. Serverul va initia conexiunea de date
de la portul sau implicit (L-1) utilizand portul specificat de utilizator. Directia transferului
si portul folosit va fi determinat de serviciul de comenzi FTP.
Nu toate implementarile FTP suporta transferul de date utilizand portul implicit, si doar
clientul PI poate initia folosirea porturilor implicite.
Cand datele se transfera intre doua servere, A si B (figura 2), clientul PI, C, stabileste
conexiunile de control cu ambele servere PI. Unuia dintre servere, sa spunem A, ii este
transmisa o comanda PASV cere-i spune sa "asculte" la portul sau de date in loc sa initieze
o conxiune atunci cand primeste o comanda pentru initierea serviciului de transfer. Cand
clientul PI primeste comanda PASV, care include identitatea gazdei si portul care este ascultat,
clientul PI trimite apoi portul lui A lui B intr-o comanda PORT; o replica este returnata.
Clientul PI trimite apoi comenzile corespunzatoare serviciului la A si la B. Serverul B
initiaza conexiunea si incepe transferul. Secventa replicilor de raspuns este descrisa mai
jos unde mesajele sunt pe verticala sincrone, iar pe orizontala asincrone:
Client-PI - Server A User-PI - Server B
------------------ ------------------
C->A : Connect C->B : Connect
C->A : PASV
A->C : 227 Intrare in modul pasiv. A1,A2,A3,A4,a1,a2
C->B : PORT A1,A2,A3,A4,a1,a2
B->C : 200 OK
C->A : STOR C->B : RETR
B->A : Conectare la HOST-A, PORT-a
Figure 3
Conexiunea de date va fi inchisa de catre server in conditiile descrise in sectiunea despre
Stabilirea Conexiunilor de Date. Daca conexiunea de date este pe punctul de a fi inchisa in
urma unui trnsfer de date cand inchiderea conexiunii nu este ceruta pentru a marca sfarsitul
de fisier, serverul trbuie sa faca acest lucru imediat. Asteptand pana dupa ce o noua comanda
de transfer nu este permisa deoarece procesul client a testat deja conexiunea de date pentru
a vedea daca trbuie sa faca o "ascultare"; (clientul trebuie sa "asculte" la un port de date
inchis inainte sa trimita cererea de transfer). Pentru a preveni concurenta aici, serverul
trimite un raspuns 226 dupa inchiderea conexiuniui de date (sau daca conexiunea este lasata
deschisa, se transmite raspunsul "transfer de fisier incheiat" (250), si clientul PI trbuie
sa astepte una dintre acele replici inainte de a emite o noua comanda).
Oricand utilizatorul sau serverul vede conexiunea inchisa de cealalta parte, trebuie sa
citeasca prompt orice data ramasa in coada conexiunii si sa procedeze la inchiderea partii
sale a conexiunii.
5.3. COMENZI
Comenzile sunt siruri de caractere Telnet transmise prin conexiunea de control asa cum
s-a descris in sectiunea Comenzi FTP. Functiile si semantica comenzilor FTP sunt descrise
in sectiunile Comenzile pentru Controlul Accesului, Comenzile pentru Transferul Parametrilor,
Comenzile Serviciului FTP , Comenzi Amestecate. Sintaxa comenzii este specificata aici.
Astfel, oricare dintre urmatoarele poate fi comanda cautata:
Comenzile incep cu un cod de comanda urmate de un argument. Codurile comenzii sunt formate
din patru sau cinci caractere alfabetice. Majusculele si minusculele sunt tratate la fel.
RETR Retr retr ReTr rETr
Aceasta se aplica de asemenea oricaror simboluri reprezentand vlori de parametrii, cum ar fi
A sau a pentru tipul ASCII. Codurile comenzilor si argumentele sunt separate prin unul sau mai
multe spatii.
Argumentele consista dintr-un sir cu numar variabil de caractere terminat cu secventa de caractere
<CRLF> (Carriage Return, Line Feed) pentru reprezentarea ASCII; pentru alte limbaje se
foloseste un alt caracter care sa marcheze sfarsitul de linie. Serverul nu va intreprinde nici
o actiune pana cand nu va intalni caracterul de sfarsit de linie.
Sintaxa este specificata mai jos in caractere ASCII. Toate caracterele argumentelor sunt
caractere ASCII incluzand si reprezentarea zecimala a intregilor. Parantezele patrate
incadreaza un argument optional. Daca optiunea nu este considerata, valoarea implicita cea
mai apropiata este considerata.
5.3.1. COMENZI FTP
Uramtoarele sunt comenzi FTP:
USER <SP> <numele utilizatorului> <CRLF>
PASS <SP> <parola> <CRLF>
ACCT <SP> <informatii despre cont> <CRLF>
CWD <SP> <cale> <CRLF>
CDUP <CRLF>
SMNT <SP> <cale; <CRLF>
QUIT <CRLF>
REIN <CRLF>
PORT <SP> <portul gazdei> <CRLF>
PASV <CRLF>
TYPE <SP> <tipul codului;> <CRLF>
STRU <SP> <structura codului> <CRLF>
MODE <SP> <modul codeului> <CRLF>
RETR <SP> <cale> <CRLF>
STOR <SP> <cale> <CRLF>
STOU <CRLF>
APPE <SP> <cale> <CRLF>
ALLO <SP> <intreg-zecimal>
[<SP> R <SP> <intreg-zecimal>] <CRLF>
REST <SP> <semn> <CRLF>
RNFR <SP> <cale> <CRLF>
RNTO <SP> <cale> <CRLF>
ABOR <CRLF>
DELE <SP> <cale> <CRLF>
RMD <SP> <cale> <CRLF>
MKD <SP> <cale> <CRLF>
PWD <CRLF>
LIST [<SP> <cale>] <CRLF>
NLST [<SP> <cale>] <CRLF>
SITE <SP> <sir de caractere> <CRLF>
SYST <CRLF>
STAT [<SP> <cale>] <CRLF>
HELP [<SP> <sir de caractere>] <CRLF>
NOOP <CRLF>
5.3.2. ARGUMENTELE COMENZILOR FTP
Sintaxa argumentelor de mai sus (utilizand notatia BNF, unde este posibila) este:
<utilizator> ::= <sir de caractere>
<parola> ::= <sir de caractere>
<informatii despre cont> ::= <sir de caractere>
<sir de caractere> ::= <caracter>
| <caracter><sir de caractere>
<caracter> ::= oricare dintre cele 128 caractere ASCII exceptand <CR> si <LF>
<semn> ::= <sir de caractere printabil>
<sir de caractere printabil> ::= <caracter printabil>
| <caracter printabil><sir de caractere printabil>
<caracter printabil> ::= caractere printabile, orice cod ASCII intre 33 si 126
<dimensiunea byte-ului> ::= <numar>
<portul gazdei> ::= <numarul gazdei>,<numarul portului>
<numarul gazdei> ::= <numar>,<numar>,<numar;,<numar>
<numarul portului> ::= <numar>,<numar>
<number> ::= orice numar zecimal intreg intre 1 si 255
<forma codului> ::= N | T | C
<tipul codului> ::= A [<sp> <forma codului>]
| E [<sp> <forma codului>]
| I
| L <sp> <byte-size>
<structura codului> ::= F | R | P
<modul codului> ::= S | B | C
<calea> ::= <sir de caractere>
<intreg zecimal> ::= orice zecimal intreg
5.4. SECVENTE DE COMENZI SI REPLICI
Comunicatia dintre server si client se doreste a fi un dialog alternant. Astfel incat, clientul
emite o comanda FTP si serverul raspunde cu o replica. Clientul trebuie sa astepte pentru acest
raspuns initial, de succes sau esec, inainte de a transmite alte comenzi.
Unele comenzi cer un al doilea raspuns pentru care clientul va trebui de asemenea sa astepte.
Aceste replici pot replica, de exemplu, in legatura cu desfasurarea sau incheierea unui transfer
de fisiere sau inchiderea unei conexiuni de date. Sunt raspunsuri secundare la comenzile pentru
transferul de fisiere.
Un grup important de raspunsuri informationale este conexiunea de salut. In imprejurari normale,
un servar va trimite raspunsul 220, "astept intrare", cand conexiunea este stabilita. Clientul
trbuie sa astepte pentru acest mesaj de salut inainte de a trimite orice comanda. Daca serverul
nu poate primi nici o intrare intr-un moment, o replica 120 "interziere asteptata" este trimisa
imediat si un raspuns 220 cand este pregatit. Clientul va stii sa nu se blocheze daca este o
intarziere.
Replici spontane
Uneori "sistemul" transmite in mod spontan un mesaj la client. De exemplu, "Sistemul se va
inchide in 15 minute". Nu sunt reactii in FTP pentru asemenea mesaje spontane trimise clientului
de catre server. Este recomandat ca astfel de informatii sa fie puse in coada de asteptare a
serverului PI si trimise clientului PI in raspunsul urmator (posibil intr-un raspuns pe mai
multe linii).
Tabelul de mai jos listeaza alternativ replicile pentru succes si esec pentru fiecare comanda.
Un server poate substitui textul replicilor, dar intelesul si actiunea implicate de numerele
de cod si de secventa de replici specifica comenzii nu pot fi schimbate.
Scvente de Replici la comenzi
In aceasta sectiune, sunt prezentate secventele de raspuns la comenzi. Fiecare comanda este
prezentata cu raspunsurile sale posibile; grupurile de comenzi sunt prezentate impreuna.
Raspunsurile preliminarii sunt listate mai intai, apoi terminarile cu sau fara succes, si
in final raspunsurile intermediare cu comenzile in sectiunea urmatoare. Aceste prezentari
formeaza baza pentru diagramele de stare, care vor fi prezentate separat.
Stabilirea conexiunii
120
220
220
421
Conectare
USER
230
530
500, 501, 421
331, 332
PASS
230
202
530
500, 501, 503, 421
332
ACCT
230
202
530
500, 501, 503, 421
CWD
250
500, 501, 502, 421, 530, 550
CDUP
200
500, 501, 502, 421, 530, 550
SMNT
202, 250
500, 501, 502, 421, 530, 550
Deconectare
REIN
120
220
220
421
500, 502
QUIT
221
500
Transferul parametrilor
PORT
200
500, 501, 421, 530
PASV
227
500, 501, 502, 421, 530
MODE
200
500, 501, 504, 421, 530
TYPE
200
500, 501, 504, 421, 530
STRU
200
500, 501, 504, 421, 530
Comenzile care actioneaza asupra fisierelor
ALLO
200
202
500, 501, 504, 421, 530
REST
500, 501, 502, 421, 530
350
STOR
125, 150
(110)
226, 250
425, 426, 451, 551, 552
532, 450, 452, 553
500, 501, 421, 530
STOU
125, 150
(110)
226, 250
425, 426, 451, 551, 552
532, 450, 452, 553
500, 501, 421, 530
RETR
125, 150
(110)
226, 250
425, 426, 451
450, 550
500, 501, 421, 530
LIST
125, 150
226, 250
425, 426, 451
450
500, 501, 502, 421, 530
NLST
125, 150
226, 250
425, 426, 451
450
500, 501, 502, 421, 530
APPE
125, 150
(110)
226, 250
425, 426, 451, 551, 552
532, 450, 550, 452, 553
500, 501, 502, 421, 530
RNFR
450, 550
500, 501, 502, 421, 530
350
RNTO
250
532, 553
500, 501, 502, 503, 421, 530
DELE
250
450, 550
500, 501, 502, 421, 530
RMD
250
500, 501, 502, 421, 530, 550
MKD
257
500, 501, 502, 421, 530, 550
PWD
257
500, 501, 502, 421, 550
ABOR
225, 226
500, 501, 502, 421
Comenzile informationale
SYST
215
500, 501, 502, 421
STAT
211, 212, 213
450
500, 501, 502, 421, 530
HELP
211, 214
500, 501, 502, 421
Comenzi amestecate
SITE
200
202
500, 501, 530
NOOP
200
500 421
6. DIAGRAMELE DE STARE
In aceasta sectiune prezentam diagramele de stare pentru o foarte simpla implementare FTP.
Doar prima cifra a codului de raspuns este folosita. Este o singura diagrama de stare pentru
fiecare grup de comenzi FTP sau secventa de comenzi.
Grupurile de comenzi au fost determinate mai degraba prin construirea unui model pentru
fiecare comanda decat prin adunarea la un loc a comenzilor cu modele structurale identice.
Pentru fiecare comanda sau secventa de comenzi sunt posibile trei efecte: succes (S),
esec (F), si eroare (E). In diagramele de stare de mai jos folosim simbolul B pentru
"begin", si simbolul W pentru "wait for reply".
Prezentam mai intai diagrama care reprezinta cel mai larg grup de comenzi FTP:
1,3 +---+
----------->| E |
| +---+
|
+---+ cmd +---+ 2 +---+
| B |---------->| W |---------->| S |
+---+ +---+ +---+
|
| 4,5 +---+
----------->| F |
+---+
Diagrama modeleaza comenzile:
ABOR, ALLO, DELE, CWD, CDUP, SMNT, HELP, MODE, NOOP, PASV,
QUIT, SITE, PORT, SYST, STAT, RMD, MKD, PWD, STRU, and TYPE.
Un alt grup extins de comenzi este reprezentat printr-o diagram asemanatoare:
3 +---+
----------->| E |
| +---+
|
+---+ cmd +---+ 2 +---+
| B |---------->| W |---------->| S |
+---+ --->+---+ +---+
| | |
| | | 4,5 +---+
| 1 | ----------->| F |
----- +---+
Diagrama modeleaza comenzile:
APPE, LIST, NLST, REIN, RETR, STOR, and STOU.
Acest al doilea model ar putea de asemenea fi utilizat pentru reprezentarea primului
grup de comenzi, singura diferenta fiind doar ca in primul grup seria de replici 100
sunt neasteptate si de aceea sunt tratate drept erori, in timp ce al doilea grup
asteapta replicile 100. Amintiti-va ca o singura serie de raspunsuri 100 este permisa
pentru o comanda.
Dintre celelate diagrame ale secventelor de comenzi, cea mai simpla probabil este
secventa de redenumire:
+---+ RNFR +---+ 1,2 +---+
| B |---------->| W |---------->| E |
+---+ +---+ -->+---+
| | |
3 | | 4,5 |
-------------- ------ |
| | | +---+
| ------------->| S |
| | 1,3 | | +---+
| 2| --------
| | | |
V | | |
+---+ RNTO +---+ 4,5 ----->+---+
| |---------->| W |---------->| F |
+---+ +---+ +---+
Diagrama este un model simplu al comenzii Restart:
+---+ REST +---+ 1,2 +---+
| B |---------->| W |---------->| E |
+---+ +---+ -->+---+
| | |
3 | | 4,5 |
-------------- ------ |
| | | +---+
| ------------->| S |
| | 3 | | +---+
| 2| --------
| | | |
V | | |
+---+ cmd +---+ 4,5 ----->+---+
| |---------->| W |---------->| F |
+---+ -->+---+ +---+
| |
| 1 |
------
Unde "cmd" este APPE, STOR, or RETR.
Remarcam faptul ca cele trei modele de mai sus sunt similare. Repornirea difera
de Redenumire doar prin modul de tratare a seriei de replici 100 in cel de-al
doilea stadiu, in timp ce cel de-al doilea grup asteapta seria de replici 100.
Amintiti-va ca o singura serie de raspunsuri 100 este permisa pentru o comanda.
Cea mai complicata diagrama este pentru secventa de Login:
1
+---+ USER +---+------------->+---+
| B |---------->| W | 2 ---->| E |
+---+ +---+------ | -->+---+
| | | | |
3 | | 4,5 | | |
-------------- ----- | | |
| | | | |
| | | | |
| --------- |
| 1| | | |
V | | | |
+---+ PASS +---+ 2 | ------>+---+
| |---------->| W |------------->| S |
+---+ +---+ ---------->+---+
| | | | |
3 | |4,5| | |
-------------- -------- |
| | | | |
| | | | |
| -----------
| 1,3| | | |
V | 2| | |
+---+ ACCT +---+-- | ----->+---+
| |---------->| W | 4,5 -------->| F |
+---+ +---+------------->+---+
In final, prezentam o diagrama generalizata care poate fi folisita pentru a modela o
comanda si schimburile de replici:
------------------------------------
| |
Begin | |
| V |
| +---+ cmd +---+ 2 +---+ |
-->| |------->| |---------->| | |
| | | W | | S |-----|
-->| | -->| |----- | | |
| +---+ | +---+ 4,5 | +---+ |
| | | | | | |
| | | 1| |3 | +---+ |
| | | | | | | | |
| | ---- | ---->| F |-----
| | | | |
| | | +---+
-------------------
|
|
V
End
7. Scenariul tipic FTP
Clientul de pe masina U asteptand sa transfere fisiere de la/la masina S:
In general, utilizatorul va comunica cu serverul printr-un proces client FTP intermediar.
Urmatorul ar putea fi un scenariu tipic. Replicile user-ului FTP sunt incluse intre paranteze,
'---->' reprezinta comanda de la gazda U la gazda S, iar '<----' reprezinta replica de la
gazda S la gazda U.
COMENZI LOCALE ALE USER-ULUI ACTIUNEA IMPLICATA
ftp (host) multics<CR> Conectarea la gazda S, portul L,
stabilind conexiunea de control.
<---- 220 Service ready <CRLF>.
username Doe <CR> USER Doe<CRLF>---->
<---- 331 Numele utilizatorului ok,
introduceti parola<CRLF>.
password mumble <CR> PASS mumble<CRLF>---->
<---- 230 User logat<CRLF>.
retrieve (local type) ASCII<CR>
(local pathname) test 1 <CR> User FTP deschide fisier local in ASCII.
(for. pathname) test.pl1<CR> RETR test.pl1<CRLF> ---->
<---- 150 Starea fisierului OK;
se deschide o conexiune de date<CRLF>.
Serverul reliazeaza oconexiune de date la portul U.
<---- 226 Inchidera conexiunii de date,
transfer de fisiere cu succes<CRLF>.
type Image<CR> TYPE I<CRLF> ---->
<---- 200 Comanda OK<CRLF>
store (local type) image<CR>
(local pathname) file dump<CR> User-ul FTP deschide un fisierlocal in Image..
(for.pathname) >udd>cn>fd<CR> STOR >udd>cn>fd<CRLF> ---->
<---- 550 Acces interzis<CRLF>
termina QUIT <CRLF> ---->
Serverul inchide toate conexiunile.
8. Stabilirea conexiuniiT
Conexiunea de control FTP este stabilita prin protocolul TCP intre procesul user-ului de la
portul U si procesul serverului de la portul L. Acestui protocol ii este atribuit portul 21
(25 in octal), iar L=21.
ANEXA I - STRUCTURA PAGINII
Nevoia FTP-ului de a suporta structura paginii deriva in principal din nevoia de a suporta
transmisia eficienta a fisierelor intre sistemele TOPS-20, in special fisierele folosite
de NLS.
Sistemul de fisiere pentru TOPS-20 se bazeaza pe conceptul de pagini. Sistemul de operare
este mai eficient cand manipuleaza fisierele ca si pagini. Sistemul de operare are o interfata
pentru sisitemul de fisiere astfel incat multe aplicatii vad fisierele ca fluxuri secventiale
de caractere. Oricum, putine aplicatii folosesc structuira de pagina de baza direct, si unele
dintre acestea creeaza fisiere cu lacune.
Un TOPS-20 fisier consta din patru aspecte: o cale, un tabel de pagina, un set de pagini
(posibil gol), si un set de atribute.
Calea este specificata in comanda RETR sau STOR. Include numele directorului, numele fisierului,
extensia fisierului, si numarul generat.
Tabela de pagina contine pana la 2*18 intrari. Fiecare intrare poate fi goala, sau poate
indica catre o pagina. Daca nu este goala, contine biti specifici de acces la pagini; nu
toate paginile cerute pentru un fisier au aceeasi protectie pentru acces.
O pagina este un set continuu de 512 cuvinte de 36 biti fiecare.
Atributele unui fiser, in Blocul de Descriere a Fisierului (FDB), contin informatii despre
momentul creerii, scrierii, citirii, dimensiune, sfarsitul de fisier, numarul citirilor si
scriierilor, sistemul de backup, etc.
De observat ca nu este necesar ca intrarile in tabela paginii sa fie continue. Pot fi
zone goale printre cele ocupate. De asemenea, sfrsitul de fisier este un simplu numar.
Nu exista nici o cerinta care sa indice ultima data in fisier. Accesele I/O secventiale
obisnuite in TOPS-20 vor cauza ca indicatorul sfarsitului de fisier sa fie lasat dupa
ultima data a scrierii, dar alte operatii nu vor determina acelasi lucru, daca este cerut
un program de sistem particular.
De fapt, in ambele cazuri speciale, fisierele "gaurite" si indicatorii de sfarsit de fisier,
nu de la sfarsitul fisierului, se imbina cu datele NLS despre fisier.
Fisierele paginate de tip TOPS-20 pot fi transmise cu parametrii FTP de transfer: TYPE L 36,
STRU P, si MODE S (de fapt, poate fi folosit orice mod).
Fiecare pagina cu informatii are un antet. Fiecare camp din antet, care este un octet logic,
este un cuvant TOPS-20, din moment ce Tipul este L 36.
Campurile antetului sunt:
Cuvantul 0: Lungimea antetului
Lungimea antetului este 5.
Cuvantul 1: Indexul paginii
Datele sunt o pagina de fisier de pe disk, acesta fiind numarul
acelei pagini in harta de pagini a fisierului. Paginile goale
(gaurile) din fisier nu sunt trimise. De remarcat ca o gaura nu
este acelasi lucru cu o pagina de zerouri.
Cuvantul 2: Lungimea datelor
Numarul cuvintelor de date din pagina, potrivit informatiilor din
antet. Astfel, lungimea totala a unitatii de trasmitere este Lungimea
antetului plus Lungimea datelor.
Cuvantul 3: Tipul paginii
Un cod pentru tipul de zona de date este acesta. O pagina de date este
de tipul 3, iar FDB-ul paginii este de tipul 2.
Cuvantul 4: Controlul Accesului la Pagina
Bitii de acces asociati cu pagina in harta de pagini a fisierelor.
(Acest cuvant este pus in AC2 al unui SPACS de catre programul care
citeste de pe net disk.)
Dupa antet sunt cuvintele cu Lungimea Datelor. Lungimea Datelor este in mod obisnuit 512
pentru paginilede date sau 31 pentru un FDB. Zerourile suplimentare dintr-un pagina unui
fisier pot fi descarcate, facand Lungimea Datelor mai mica decat 512 in acest caz.
ANEXA II - COMENZILE PENTRU DIRECTOARE
Deoarece UNIX are o structura de directoare arborescenta in care directoarele sunt usor
de manipulat la fel ca fisierele obisnuite, este utila extinderea serverelor FTP pe aceste
masini prin includerea de comenzi care sa trateze crearea de directoare. Existand si alte
gazde pe ARPA-Internet care au structura de directoare arborescenta (inclusiv TOPS-20 si
Multics), aceste comenzi sunt cat se poat de generale:
Patru comenzi pentru directoare au fost adaugate la FTP:
MKD cale
Creeaza un director cu numele din "cale".
RMD cale
Sterge directorul cu numele din cale.
PWD
Afiseaza numele directorului curent de lucru.
CDUP
Schimba directorul curent de lucru in directorul parinte.
Argumentul "calea" ar trebui creat (sters) ca un subdirector al directrorului curent de lucru,
daca nu "calea" contine suficiente informatii astfel incat sa specifice altceva serverului,
de ex., "calea" este o cale absoluta (in UNIx si Multics), sau calea este ceva ca
"<abso.lute.path>" in TOPS-20.
CODURILE REPLICILOR
Comanda CDUP este un caz special al comenzii CWD, si a fost inclusa pentru a simplifica
implementarea programelor pentru transferul arborilor de directoare intr sisteme de operare
avand sintaxe diferite pentru numire directorului parinte. Codurile replicilor pentru CDUP
sunt identice cu cele pentru CWD.
Codurile de raspuns pentru RMD sunt identice cu cele pentru comanda sa analoaga pentru
fisiere, DELE.
Codurile de raspuns pentru MKD sunt un pic mai complicate. Un director nou creat va fi
probabil obiectul unei viitoare comenzi CWD. Din nefericire, argumentul lui
MKD nu va fi intotdeuna unul potrivit pentru CWD. Acesta este cazul, de exemplu, cand un
subdirector TOPS-20 este creat prin specificarea doar a numelui subdirectorului. Aceasta este,
intr-un server TOPS-20, o secventa de comenzi care va esua.
MKD MYDIR
CWD MYDIR
Noul director poate fi referit doar prin numele sau "absolut"; de ex., daca comanda MKD
de mai sus va fi lansata fiind deschis un director <DFRANKLIN>, noul subdirector
va putea fi referit doar prin nume <DFRANKLIN.MYDIR>.
Chiar si pe UNIX si Multics, argumentul dat comenzii MKD poate sa nu fie potrivit. Daca
este o cale "relativa" (de ex., o cale care este interpretata relativ la directorul curent),
utilizatorul trbuie sa se afle in acelasi director curent pentru a avea acces la subdirector.
In functie de aplicatie, acesta poate fi un inconvenient. Nu este robust in nici un caz.
Pentru a rezolva aceasta inconvenienta, ca o completare a comenzii MKD, serverul trebuie
sa returneze o linie de forma:
257<space>"<directory-name>"<space><commentary>
Serverul va spune utilizatorului ce sir de caractere sa foloseasca cand vrea sa se refere
la directorul creat . Numele directorului poate contine orice caracter; incadrat intre ghilimele.
De exemplu, un utilizator se conecteaza la directorul /usr/dm, si creeaza un subdirector, numit:
CWD /usr/dm
200 directorul curent schimbat in /usr/dm
MKD cale
257 "/usr/dm/pathname" directorul creat
Un exemplu cu incadrarea intre ghilimele:
MKD foo"bar
257 "/usr/dm/foo""bar" directorul creat
CWD /usr/dm/foo"bar
200 directorul curent schimbat in /usr/dm/foo"bar
Existenta deja a unui director cu acelasi nume este o eroare, si serverul terbuie sa returneze
o eroare de "acces interzis" in acest caz.
CWD /usr/dm
200 directorul curent schimbat in /usr/dm
MKD clae
521-"/usr/dm/pathname" directorul exista deja;
521 nu se intreprinte nici o actiune.
Replicile de esec pentru MKD sunt analoage cu cele de la crearea fisierului, STOR. De asemenea,
o replicaz de "acces interzis" este data daca numele unui fisier cu acelasi nume ca si
subdirectorul va intra in conflict cu crearea subdirectorului (acasta este o problema in UNIX,
dar nu ar trebui sa fie in TOPS-20).
Deoarece comanda PWD returneaza acelasi tip de informatie la succes ca si comanda MKD, comanda PWD
la succes foloseste de asemenea codul de raspuns 257.
PRECIZARI
Deoarece aceste comenzi vor fi mai folositoare pentru transferul sub-arborilor de pe o
masina pe alta, se observa ca argumentul pentru MKD poate fi mai degraba ca un subdirector
al directorului curent de lucru, in afara cazului cand contine suficiente informatii
pentru gazda destinatie astfel incat aceasta sa inteleaga altfel. Un exemplu ipotetic
pentru aceasta utilizare este lumea TOPS-20:
CWD <some.where>
200 directorul de lucru este schimbat
MKD overrainbow
257 "<some.where.overrainbow>" director creat
CWD overrainbow
431 Nu exista un astfel de director
CWD <some.where.overrainbow>
200 directorul de lucru este schimbat
CWD <some.where>
200 directorul de lucru este schimbat in <some.where>
MKD <fara echivoc>
257 "<fara echivoc>" director creat
CWD <fara echivoc>
Remarcati faptul ca in primul exemplu rezulta un subdirector al directorului curent.
In opozitie, argumentul celui de-al doilea exemplu contine suficiente informatii pentru
TOPS-20 pentru a-i spune acestuia ca directorul <fara echivoc> este un director
de nivel inalt. De remarcat de asemenea faptul ca in primul exemplu utilizatorul "violeaza"
protocolul asteptand sa acceseze directorul nou ceat cu un alt nume decat cel returnat de
TOPS-20. Problemele care pot rezulta in acest caz pot fi la directorul <overrainbow>
aceasta este o ambiguitate mostenita in unele implementari TOPS-20. Consideratii similare
sunt valabile si pentru comanda RMD. Ideea este aceasta: cu exceptia cazurilor in care ar
proceda astfel utilizatorul ar viola conventiile gazdei in ceea ce priveste caiile absolute
si caile relative, gazda ar trebui sa trateze operanzii comenzii MKD si RMD ca subdirectoare.
Raspunsul 257 la comanda MKD trebuie sa contina intotdeauna calea absoluta a directorului creat.
ANEXA III - RFCs on FTP
Bhushan, Abhay, "A File Transfer Protocol", RFC 114 (NIC 5823),
MIT-Project MAC, 16 April 1971.
Harslem, Eric, and John Heafner, "Comments on RFC 114 (A File
Transfer Protocol)", RFC 141 (NIC 6726), RAND, 29 April 1971.
Bhushan, Abhay, et al, "The File Transfer Protocol", RFC 172
(NIC 6794), MIT-Project MAC, 23 June 1971.
Braden, Bob, "Comments on DTP and FTP Proposals", RFC 238 (NIC 7663),
UCLA/CCN, 29 September 1971.
Bhushan, Abhay, et al, "The File Transfer Protocol", RFC 265
(NIC 7813), MIT-Project MAC, 17 November 1971.
McKenzie, Alex, "A Suggested Addition to File Transfer Protocol",
RFC 281 (NIC 8163), BBN, 8 December 1971.
Bhushan, Abhay, "The Use of "Set Data Type" Transaction in File
Transfer Protocol", RFC 294 (NIC 8304), MIT-Project MAC,
25 January 1972.
Bhushan, Abhay, "The File Transfer Protocol", RFC 354 (NIC 10596),
MIT-Project MAC, 8 July 1972.
Bhushan, Abhay, "Comments on the File Transfer Protocol (RFC 354)",
RFC 385 (NIC 11357), MIT-Project MAC, 18 August 1972.
Hicks, Greg, "User FTP Documentation", RFC 412 (NIC 12404), Utah,
27 November 1972.
Bhushan, Abhay, "File Transfer Protocol (FTP) Status and Further
Comments", RFC 414 (NIC 12406), MIT-Project MAC, 20 November 1972.
Braden, Bob, "Comments on File Transfer Protocol", RFC 430
(NIC 13299), UCLA/CCN, 7 February 1973.
Thomas, Bob, and Bob Clements, "FTP Server-Server Interaction",
RFC 438 (NIC 13770), BBN, 15 January 1973.
Braden, Bob, "Print Files in FTP", RFC 448 (NIC 13299), UCLA/CCN,
27 February 1973.
McKenzie, Alex, "File Transfer Protocol", RFC 454 (NIC 14333), BBN,
16 February 1973.
Bressler, Bob, and Bob Thomas, "Mail Retrieval via FTP", RFC 458
(NIC 14378), BBN-NET and BBN-TENEX, 20 February 1973.
Neigus, Nancy, "File Transfer Protocol", RFC 542 (NIC 17759), BBN,
12 July 1973.
Krilanovich, Mark, and George Gregg, "Comments on the File Transfer
Protocol", RFC 607 (NIC 21255), UCSB, 7 January 1974.
Pogran, Ken, and Nancy Neigus, "Response to RFC 607 - Comments on the
File Transfer Protocol", RFC 614 (NIC 21530), BBN, 28 January 1974.
Krilanovich, Mark, George Gregg, Wayne Hathaway, and Jim White,
"Comments on the File Transfer Protocol", RFC 624 (NIC 22054), UCSB,
Ames Research Center, SRI-ARC, 28 February 1974.
Bhushan, Abhay, "FTP Comments and Response to RFC 430", RFC 463
(NIC 14573), MIT-DMCG, 21 February 1973.
Braden, Bob, "FTP Data Compression", RFC 468 (NIC 14742), UCLA/CCN,
8 March 1973.
Bhushan, Abhay, "FTP and Network Mail System", RFC 475 (NIC 14919),
MIT-DMCG, 6 March 1973.
Bressler, Bob, and Bob Thomas "FTP Server-Server Interaction - II",
RFC 478 (NIC 14947), BBN-NET and BBN-TENEX, 26 March 1973.
White, Jim, "Use of FTP by the NIC Journal", RFC 479 (NIC 14948),
SRI-ARC, 8 March 1973.
White, Jim, "Host-Dependent FTP Parameters", RFC 480 (NIC 14949),
SRI-ARC, 8 March 1973.
Padlipsky, Mike, "An FTP Command-Naming Problem", RFC 506
(NIC 16157), MIT-Multics, 26 June 1973.
Day, John, "Memo to FTP Group (Proposal for File Access Protocol)",
RFC 520 (NIC 16819), Illinois, 25 June 1973.
Merryman, Robert, "The UCSD-CC Server-FTP Facility", RFC 532
(NIC 17451), UCSD-CC, 22 June 1973.
Braden, Bob, "TENEX FTP Problem", RFC 571 (NIC 18974), UCLA/CCN,
15 November 1973.
McKenzie, Alex, and Jon Postel, "Telnet and FTP Implementation -
Schedule Change", RFC 593 (NIC 20615), BBN and MITRE,
29 November 1973.
Sussman, Julie, "FTP Error Code Usage for More Reliable Mail
Service", RFC 630 (NIC 30237), BBN, 10 April 1974.
Postel, Jon, "Revised FTP Reply Codes", RFC 640 (NIC 30843),
UCLA/NMC, 5 June 1974.
Harvey, Brian, "Leaving Well Enough Alone", RFC 686 (NIC 32481),
SU-AI, 10 May 1975.
Harvey, Brian, "One More Try on the FTP", RFC 691 (NIC 32700), SU-AI,
28 May 1975.
Lieb, J., "CWD Command of FTP", RFC 697 (NIC 32963), 14 July 1975.
Harrenstien, Ken, "FTP Extension: XSEN", RFC 737 (NIC 42217), SRI-KL,
31 October 1977.
Harrenstien, Ken, "FTP Extension: XRSQ/XRCP", RFC 743 (NIC 42758),
SRI-KL, 30 December 1977.
Lebling, P. David, "Survey of FTP Mail and MLFL", RFC 751, MIT,
10 December 1978.
Postel, Jon, "File Transfer Protocol Specification", RFC 765, ISI,
June 1980.
Mankins, David, Dan Franklin, and Buzz Owen, "Directory Oriented FTP
Commands", RFC 776, BBN, December 1980.
Padlipsky, Michael, "FTP Unique-Named Store Command", RFC 949, MITRE,
July 1985.
REFERINTE
[1] Feinler, Elizabeth, "Internet Protocol Transition Workbook",
Network Information Center, SRI International, March 1982.
[2] Postel, Jon, "Transmission Control Protocol - DARPA Internet
Program Protocol Specification", RFC 793, DARPA, September 1981.
[3] Postel, Jon, and Joyce Reynolds, "Telnet Protocol
Specification", RFC 854, ISI, May 1983.
[4] Reynolds, Joyce, and Jon Postel, "Assigned Numbers", RFC 943,
ISI, April 1985.