TFTP Protokol (druhá revize)

RFC 1350


TFTP (Trivial File Transfer Protocol) je jednoduchý protokol používaný pro přenos souborů. Protokol původně navrhnul Noel Chiappa. Každý paket v tomto protokolu je potvrzován samostatně. Potvrzovací a přenosové schéma vychází z modelu TCP protokolu. Chybový mechanismus byl odvozen z PARC's EFTP chybových zpráv. V roce 1992 byla provedena revize a opraveny některé chyby.


Úvod

TFTP byl navržen pro přenos souborů pomocí datagramových služeb (UDP). To dovoluje přenos souborů mezi počítači na různých síťových implementacích UDP.

Lokální medium Internet Datagram TFTP
Zapouzdření TFTP do datagramových služeb


Je navržen pro malou a jednoduchou implementaci, proto je často používán v BOOTROMkách, kdy v kombinaci s BOOTP protokolem se použije při bootování bezdiskových stanic. Jedinou věc, kterou tento protokol umí, je číst nebo zapisovat soubory(maily) z nebo na vzdálený počítač. Neumí listovat v adresářové struktuře, nemá žádné uživatelské ověřování.

Tento protokol má tři základní módy pro přenos, a to:


Formát ramců v TFTP protokolu

Lokální medium Internet Datagram TFTP OP Code TFTP Data
Formát rámců ...


TFTP podporuje pět typů paketů.

OP CodeOperationOperace
1Read request (RRQ)Požadavek na čtení
2Write request (WRQ)Požadavek na zápis
3Data (DATA)Datový blok
4Acknowledgment (ACK)Potvrzovací paket
5Error (ERROR)Chybový paket



Vytvoření spojení

Každý přenos začíná zasláním paketu s požadavkem na čtení nebo zapis. Pokud se jedná o zápis souboru na vzdálený stroj, pak zasláním paketu typu WRQ. Pokud se jedná o čtení souboru, pak paketem typu RRQ. Po zaslání požadavku musí následovat kladná odpověd, jako potvrzovací paket (při zápisu) nebo první datový paket (při čtení). Pokud přijde kladná odpověď je spojení v pořádku navázáno.

2 BytesString1 ByteString1 Byte
OP Code (01,02)Filename0Mod0
Formát rámce s požadavkem na čtení nebo zápis

Položka MOD nerozlišuje malá a velká písmena. Stroj, který přijímá v NETASCII modu musí překládat data do jeho vlastního formátu. Mód OCTET se používá pro přesné kopie souboru (raw copy). Jméno souboru je posloupnost znaků ukončená znakem \0.

Strana klienta si při vytváření spojení zvolí číslo spojení (transmit identifikator - TID). Toto číslo je stálé během celé doby trvání spojení. TID se může volit náhodně. Pravděpodobnost, že se vyberou dvě shodná čísla je velmi malá. Každému paketu jsou přiřazena dvě TID (zdrojové a cílové). Tyto TID jsou uloženy v UDP protokolu (nebo v jiném datagramovém protokolu) jako zdrojový a cílový port. Klient si zvolí svoje zdrojové TID a zašle ho s požadavkem na standardní TID (69 dec) serveru. Server posílá odpověď na svůj zdrojový port (69) a jako cílový port má uvedeno TID klienta.
Jestliže server povolí spojení, spojení se vytvoří a začne přenos souboru po stejně dlouhých, 512B, blocích.


Přenos datového bloku

Každému datovému paketu je přiřazeno číslo bloku. Čísla bloků jsou rostoucí a začínají číslem jedna. Ve speciálním případě, kdy se potvrzuje požadavek na zápis, má potvrzovací paket číslo bloku nula. Jestliže jako odpověď přijde chybový paket, znamená to, že požadavek byl zamítnut.

2 Bytes2 Bytes0-512 Bytes
OP Code (03)Block #Data
Formát datového rámce

2 Bytes2 Bytes
OP Code (04)Block #
Formát potvrzovacího rámce

Každý datový paket obsahuje jeden blok dat a musí být potvrzen před vysláním dalšího bloku. Potvrzovací paket obsahuje číslo bloku dat, který potvrzuje. Jestliže se paket ztratí, u příjemce dojde timeoutu a pošle poslední paket, který odesílal (a to buď data nebo potvrzení). Odesílatel pak znovu vyšle ztracený paket. Kvůli případné ztrátě má tedy odesílatel poslední vyslaný paket uložen pro opětovné vyslání. Pokud vznikne chyba při přenosu, je signalizována zasláním chybového paketu. Chybový paket není potvrzován a nemůže být znova vyslán !!! (tj. TFTP server nebo uživatel může předčasně ukončit spojení zasláním chybové zprávy), po timeoutu se pak ukončí spojení.
Pokud je velikost datověho bloku od 0 do 511, jedná se o poslední přenášený blok, pokud má velikost 512, tak to znamená, že bude následovat ještě další blok.


Signalizace chyb

Chyby jsou způsobovány třemi typy událostí:
TFTP rozpoznává jenom jednu chybu, při které nedojde k ukončení spojení, a to, pokud zdrojový port přijatého paketu je chybný.
2 Bytes2 Bytesstring1 Byte
OP Code (05)Error CodeError Mess0
Chybový paket


Chybové kódy:
HodnotaVýznam
0Nedefinováno, popis v Err Mess
1Soubor nebyl nalezen
2Chyba sdílení
3Plný disk, nebo překročana qouta
4Ilegální TFTP operace
5Neznámé TID
6Soubor už existuje
7Neexistující user



Závěr

Tento protokol je velmi omezující, ale má velice jednoduchou implementaci. Např. stejná délka bloků, umožňuje dopřednou alokaci paměťového prostoru, mechanismus potvrzování jednotlivých paketů umožňuje řízení toku dat a eliminuje potřebu zatřiďování příchozích datových paketů. Jeho slabinou je neefektivní využítí linky a hlavně nemá žádné zabezpečení !!! (žádná uživatelská authentifikace).


Reference a zdroje

UDP protokol - RFC 768
TELNET protokol - RFC 764
TFTP protokol - RFC 1350



Zpracovali: Jan Nejman a Zdeněk Samuel