TFTP | |
---|---|
Nume | Protocol trivial de transfer de fișiere |
Nivel (conform modelului OSI ) | Aplicat |
Familie | UDP / IP |
Creat în | ~ 1980 |
Port/ID | 69/UDP |
Scopul protocolului | Transfer de fișier |
Specificație | RFC 1350 / STD 33 |
Principalele implementări (clienți) | RIS Windows, tftp.exe |
Implementări de bază ( servere ) | WinAgents TFTP Server, RIS Windows, tftpd |
Extensibilitate | Opțiuni ( RFC 2347 ) |
Extensii majore | Dimensiunea blocului ( RFC 2348 ), Timeout de transmisie ( RFC 2349 ) |
Trivial File Transfer Protocol ( TFTP ) este folosit în primul rând pentru pornirea inițială a stațiilor de lucru fără disc . TFTP, spre deosebire de FTP , nu conține capabilități de autentificare (deși filtrarea după adresa IP este posibilă) și se bazează pe protocolul de transport UDP .
Scopul principal al TFTP este de a face clientul ușor de implementat. Ca atare, este folosit pentru a porni stații de lucru fără disc, pentru a descărca actualizări și configurații pe dispozitive de rețea „inteligente”, pentru a înregistra statistici de la mini-PBX- uri ( CDR ) și routere hardware / firewall -uri .
Folosit pentru programarea IAP a sistemelor încorporate dezvoltate pe baza de microcontrolere.
Deoarece protocolul nu acceptă autentificarea, singura metodă de identificare a unui client este adresa sa de rețea (care poate fi falsificată). De obicei, pe sistemele Unix, numai directorul /tftpboot este disponibil pentru tftpd. Cu toate acestea, pe serverele TFTP mai vechi a fost posibil să se obțină fișierul cu parole cu comanda RRQ ../etc/passwd.
Daemonul tftpd (una dintre implementările serverului tftp) refuză să proceseze fișierele care conțin combinația „/../” în numele lor sau care încep cu „../”. Scrierea este permisă numai fișierelor care există deja (de orice dimensiune, cum ar fi zero) și sunt disponibile pentru scriere publică (permisiuni: -rw-rw-rw-) [1] .
Protecție suplimentară împotriva accesului la fișiere arbitrare este oferită prin schimbarea directorului rădăcină în directorul tftpd (de obicei /usr/TFTPRoot).
În primul rând, în pachetul TFTP, există un câmp de 2 octeți care determină tipul pachetului:
Pentru a începe transferul de date, clientul trebuie să trimită un pachet WRQ sau RRQ către server. Ambele pachete au același format:
0x01/0x02 (tip de pachet) | Nume de fișier | 0x00 (sfârșitul rândului) | Modul de transfer | 0x00 (sfârșitul rândului) | Opțiuni... (dacă există) |
---|---|---|---|---|---|
2 octeți | șir în ASCII | 1 octet | șir în ASCII | 1 octet | Vezi „Opțiuni” |
Există 2 moduri de transfer în TFTP (modul Mail definit în IEN 133 a fost depreciat):
După ce a primit pachetul RRQ de către server, acesta începe imediat transmisia de date. În cazul unei cereri WRQ, serverul trebuie să trimită un pachet ACK cu numărul de pachet 0.
După primirea cererii RRQ, serverul trimite imediat un pachet cu date și cu un ID de pachet egal cu unul ca o confirmare. În WRQ, ACK cu ID egal cu zero este folosit ca o confirmare. Un total de 32 MB pot fi transferați prin TFTP (65536 * 512 / 1024²), cu toate acestea, datorită utilizării unui int semnat în loc de unul nesemnat, dimensiunea confirmării este limitată la 16 megaocteți. Cu toate acestea, dacă clientul și serverul acceptă extensiile de protocol RFC 2347 și RFC 2348 , atunci dimensiunea maximă a fișierului care trebuie transferat crește la 4 Gb.
RFC 2347 a furnizat un format pentru opțiunile care pot fi atașate la sfârșitul unui pachet RRQ și unui pachet WRQ:
Cod opțiune | 0x00 (sfârșitul rândului) | Valoarea opțiunii | 0x00 (sfârșitul rândului) |
---|---|---|---|
șir în ASCII | 1 octet | șir în ASCII | 1 octet |
Pot exista mai multe opțiuni. Apoi se vor urma unul pe altul. Ordinea opțiunilor nu este importantă.
Ca răspuns la un RRQ (sau WRQ) cu opțiuni, serverul TREBUIE să trimită un OACK cu o listă a opțiunilor acceptate de server. Cele mai comune opțiuni sunt:
Nume | Definit în | Cod opțiune | |
---|---|---|---|
Dimensiunea blocului | RFC 2348 | blksiize | Valoarea opțiunii este un număr care ia o valoare de la 8 la 65464, indicând dimensiunea blocului. |
Interval de retransmisie (Timeout) | RFC 2349 | pauză | Valoarea opțiunii este un număr care ia o valoare de la 1 la 255, indicând timpul de așteptare înainte de a retransmite blocul în secunde. |
mărime fișier | RFC 2349 | tsize | Valoarea opțiunii este un număr care indică dimensiunea fișierului transferat în octeți. |
În TFTP, informațiile de eroare au următorul format:
0x05 (tip de pachet) | Cod de eroare | Descrierea erorii | 0x00 (sfârșitul rândului) |
---|---|---|---|
2 octeți | 2 octeți | șir în ASCII | 1 octet |
Codul de eroare poate lua una dintre valorile enumerate în STD 33 (cu excepția codului 8 - este descris în RFC 2347 ). Aici sunt ei:
Cod de eroare | Descriere |
---|---|
0 | Niciun cod definit, vezi textul de eroare |
unu | Fișierul nu a fost găsit |
2 | Accesul este interzis |
3 | Nu se poate aloca spațiu pe disc |
patru | Operare TFTP incorectă |
5 | ID de transfer greșit |
6 | Fisierul există deja |
7 | Utilizatorul nu exista |
opt | Opțiune greșită |
RFC 3617 definește formatul URI pentru TFTP. Arata cam asa:
tftp://[gazdă de destinație]/[fișierul dorit];mode=[modul de transfer]De exemplu:
tftp://example.com/todo.txt;mode=netasciiTCP /IP pe straturi ale modelului OSI | Protocoale de bază|
---|---|
Fizic | |
canalizat | |
reţea | |
Transport | |
sesiune | |
Reprezentare | |
Aplicat | |
Altele aplicate | |
Lista de porturi TCP și UDP |