Damit der Da­ten­aus­tausch zwischen zwei Com­pu­ter­sys­te­men im Netzwerk funk­tio­niert, ist eine ge­mein­sa­me Ver­stän­di­gungs­ba­sis un­ver­zicht­bar. Eines der ein­fachs­ten, zu diesem Zweck ent­wi­ckel­ten Pro­to­kol­le ist das Trivial File Transfer Protocol (TFTP), das ins­be­son­de­re in den Anfängen des Internets eine wichtige Rolle gespielt hat.

Was ist TFTP (Trivial File Transfer Protocol)?

Das Trivial File Transfer Protocol, kurz TFTP, ist ein sehr einfaches Client-Server-Protokoll, das den Transfer von Dateien in Com­pu­ter­netz­wer­ken regelt. Eine erste Spe­zi­fi­ka­ti­on wurde im Juni 1981 in RFC 783 ver­öf­fent­licht. Der aktuelle Standard ist im 1992 er­schie­ne­nen RFC 1350 nach­zu­le­sen. Das TFTP-Protokoll setzt stan­dard­mä­ßig auf dem ebenfalls mi­ni­ma­lis­ti­schen Trans­port­pro­to­koll UDP (User Datagram Protocol) auf, das eine Da­ten­über­tra­gung ohne feste Ver­bin­dung zwischen den Kom­mu­ni­ka­ti­ons­part­nern vorsieht. Die Im­ple­men­tie­rung von TFTP auf Basis anderer Pro­to­kol­le ist grund­sätz­lich aber ebenfalls möglich.

Das pa­ke­t­ori­en­tier­te Da­tei­über­tra­gungs­pro­to­koll, das Teil der TCP/IP-Pro­to­koll­fa­mi­lie ist, wurde extra so kon­zi­piert, dass es möglichst klein und leicht zu im­ple­men­tie­ren ist. Aus diesem Grund be­schreibt es lediglich Methoden, um Dateien oder Mails von einem Server zu lesen bzw. auf diesen zu schreiben. Eine Auf­lis­tung von Ver­zeich­nis­sen oder die Rech­te­ver­ga­be über chmod – wie es das besser bekannte FTP (File Transfer Protocol) erlaubt – sind mit TFTP nicht möglich. Für Anfragen nutzt TFTP den Port 69. Im Anschluss gelingt die Kom­mu­ni­ka­ti­on über in­di­vi­du­ell vergebene Port-Nummern (zwischen 1024 und 65535), die der TFTP-Server dem an­fra­gen­den Client in Form von TIDs (Transfer Identifiers) über­mit­telt.

Hinweis

Viele Be­triebs­sys­te­me haben bereits eigene TFTP-Clients und -Server im­ple­men­tiert, die Sie für den Da­tei­trans­fer über das Protokoll nutzen können. Viele Linux- und Windows-Versionen (ins­be­son­de­re die Server-Editionen) bieten bei­spiels­wei­se stan­dard­mä­ßig die Kom­man­do­zei­len­tools tftpd (Server) und tftp (Client). Darüber hinaus gibt es ver­schie­de­ne Dritt­an­biet­erlö­sun­gen wie die Open-Source-Software Tftpd32, die sowohl einen Server als auch einen Client enthält.

So funk­tio­niert das TFTP-Protokoll

Der Da­tei­trans­fer via TFTP basiert immer auf einer Client-Anfrage, bei der entweder Schreib- oder Le­se­zu­grif­fe erbeten werden. Diese Anfrage dient gleich­zei­tig als Ver­bin­dungs­ge­such, dem au­to­ma­tisch statt­ge­ge­ben wird, wenn der Server den Zugriff ak­zep­tiert. Im Anschluss senden Client oder Server die ent­spre­chen­de Datei in Blöcken, die eine fest­ge­leg­te Größe haben. In den ersten Pro­to­koll­ver­sio­nen galt dabei noch der fixe Wert von 512 Bytes – seit RFC 2348 haben Server und Client die Mög­lich­keit, die Block­grö­ße in­di­vi­du­ell aus­zu­han­deln.

Hinweis

Ur­sprüng­lich war die Größe der via TFTP ver­schick­ten Dateien auf 32 MB begrenzt. Mit dem 1998 ver­öf­fent­lich­ten RFC 2347 ist diese Grenze jedoch auf 4 GB angehoben worden.

Der Versand findet Block für Block statt, wobei jeder emp­fan­ge­ne Block durch ein Be­stä­ti­gungs­pa­ket („Ack­now­led­ge­ment“) quittiert werden muss, bevor der nächste ver­schickt werden kann. Ein Da­ten­pa­ket, das kleiner als die fest­ge­leg­te Bytegröße ist, kenn­zeich­net das Ende des Da­tei­trans­fers. Geht ein Paket während des Transfers verloren, kommt es beim Empfänger zu einem Timeout, in dessen Folge er sein zuletzt ge­schick­tes Paket erneut sendet. Auf diese Weise erfährt der Sender des ver­lo­re­nen Pakets, dass er dieses erneut trans­fe­rie­ren muss. Fehler, die während der TFTP-Da­tei­über­tra­gung entstehen, führen zu Feh­ler­pa­ke­ten, die die Über­tra­gung in den meisten Fällen beenden. Mögliche Feh­ler­quel­len sind die folgenden drei Er­eig­nis­se:

  • Die Anfrage kann nicht zu­frie­den­stel­lend be­ant­wor­tet werden, bei­spiels­wei­se weil die Datei nicht gefunden wurde, weil der Nutzer nicht existiert oder aufgrund einer Zu­griffs­ver­let­zung (ge­schütz­te Datei etc.).
  • Client oder Server empfangen ein Paket, das nicht durch eine Ver­zö­ge­rung oder durch Du­pli­zie­rung im Netzwerk erklärt werden kann, was etwa bei einem falsch ge­bil­de­ten Paket der Fall ist.
  • Der Zugriff auf eine not­wen­di­ge Ressource geht verloren, z. B. wenn nicht mehr genügend Fest­plat­ten­spei­cher übrig ist.

Wie sind TFTP-Pakete aufgebaut?

Das TFTP-Protokoll un­ter­stützt insgesamt fünf Typen von Paketen, die sich jeweils durch ein eigenes, 16 Bit langes „Opcode“-Feld (Ope­ra­ti­ons-Code) mit dem ent­spre­chen­den Wert an­kün­di­gen:

Opcode Paket-Typ Be­schrei­bung
1 RRQ (Read request) Anfrage für Le­se­zu­griff
2 WRQ (Write request) Anfrage für Schreib­zu­griff
3 DATA (Data) Da­ten­pa­ket
4 ACK (Ack­now­ledgment) Be­stä­ti­gungs­nach­richt
5 ERROR (Error) Feh­ler­nach­richt

Der opcode-Wert ist al­ler­dings nicht die einzige Kom­po­nen­te, in der sich der Aufbau der auf­ge­lis­te­ten Paket-Typen un­ter­schei­det.

Aufbau von TFTP-Lese-(RRQ) und Schreib­zu­griff-Paketen (WRQ)

Die in­itia­ti­ven Anfragen, die ein TFTP-Client sendet, um Dateien auf dem TFTP-Server lesen (RRQ-Paket) bzw. auf den Server schreiben (WRQ-Paket) zu können, un­ter­schei­den sich lediglich hin­sicht­lich des Ope­ra­ti­ons-Codes. Ansonsten zeichnen sich beide Paket-Typen durch folgendes, gleiches Format aus:

Sowohl RRQ- als auch WRQ-Nach­rich­ten starten mit dem pro­to­koll­ty­pi­schen, 16 Bit langen Opcode-Feld. Wie die erste Tabelle zeigt, nutzen RRQ-Pakete an dieser Stelle den Wert „1“, während WRQ-Pakete durch den Wert „2“ ge­kenn­zeich­net sind. Es folgt eine Bit-Sequenz im NetASCII-Format mit variabler Größe; diese enthält den Namen der Datei, die gelesen bzw. gesendet werden soll. Das Ende kenn­zeich­net ein aus Nullen be­stehen­des 8-Bit-Feld.

Hinweis

Beim NetASCII-Format handelt es sich um ein spe­zi­el­les, in 8 Bit ver­pack­tes ASCII-Format, das die selten ge­brauch­ten Kon­troll­zei­chen un­de­fi­niert lässt. Es enthält den kom­plet­ten Block der 95 druck­ba­ren Zeichen von x20 bis x7E (32–126) sowie einige Son­der­zei­chen (ins­be­son­de­re NUL, CR, LF).

Eine weitere Zei­chen­ket­te, deren Länge variabel ist, enthält schließ­lich die In­for­ma­ti­on über den Trans­fer­mo­dus der Daten. Hierbei gibt es die drei Varianten „netascii“, „octet“ (für den Transfer einer Datei im 8-Bit-Format) und „mail“ (für den Transfer an eine E-Mail-Adresse). Auch das Ende dieses Felds wird durch eine an­ge­häng­te 8-Bit-Gruppe aus Nullen ge­kenn­zeich­net.

Aufbau von TFTP-Da­ten­pa­ke­ten (DATA)

DATA-Pakete enthalten die Dateien, die zwischen Client und Server aus­ge­tauscht werden sollen. Da die Über­mitt­lung dieser Daten in Blöcken statt­fin­det, enthält eine TFTP-DATA-Nachricht immer nur einen Teil der Datei – mit Ausnahme von Dateien, deren Ge­samt­grö­ße kleiner als die stan­dard­mä­ßig de­fi­nier­ten 512 Bytes bzw. die in­di­vi­du­ell fest­ge­leg­te Block­grö­ße ist. Das Format der Da­ten­pa­ke­te sieht fol­gen­der­ma­ßen aus:

Auch DATA-Pakete beginnen mit dem Opcode-Feld, dem in diesem Fall der Wert „3“ zu­ge­ord­net wird. Die dar­auf­fol­gen­de 16-Bit-Sequenz kenn­zeich­net die Nummer des Da­ten­blocks, wobei der Wert „1“ als Start­num­mer dient. Dieser Wert erhöht sich mit jedem weiteren Da­ten­block, der zu der Datei gehört, au­to­ma­tisch um 1. Die Blöcke selbst finden sich derweil im Datenfeld wieder, das zwischen 0 und 512 Bytes (4096 Bit) groß ist, sofern TFTP-Server und -Client keine andere Ma­xi­mal­grö­ße für die Blöcke aus­ge­han­delt haben. Wird die jeweilige Ma­xi­mal­grö­ße aus­ge­füllt, ist dies ein Signal dafür, dass das DATA-Paket nicht den letzten Da­ten­block der Datei enthält. Dieser letzte Block, der das Ende des Da­ten­trans­fers kenn­zeich­net, ist immer um min­des­tens ein Byte kleiner. Sollte der zu über­tra­gen­de Dateirest zufällig exakt die Größe des Blocks haben, muss der Sender noch ein Paket mit leerem Da­ten­block nach­rei­chen.

Aufbau der ACK-Pakete des TFTP-Pro­to­kolls

Alle WRQ-Pakete sowie alle Da­ten­pa­ke­te, die nicht das Ende des Da­tei­trans­fers kenn­zeich­nen, werden bei funk­tio­nie­ren­der Kom­mu­ni­ka­ti­on über das Trivial File Transfer Protocol durch ACK-Nach­rich­ten bestätigt (außer es kommt zu einem Timeout).

Hinweis

Requests, die Le­se­zu­griff auf eine Datei fordern (RRQ-Pakete), werden nicht durch ACK-, sondern durch DATA-Pakete bestätigt.

Der Aufbau dieser sehr simplen Be­stä­ti­gungs­nach­rich­ten sieht fol­gen­der­ma­ßen aus:

Die ACK-Nach­rich­ten der TFTP-Protokoll-Kom­mu­ni­ka­ti­on bestehen aus dem 16 Bit langen Opcode, der den Wert „4“ annimmt, und der ebenfalls 16 Bit langen Nummer des Da­ten­blocks, den die ACK-Nachricht bestätigt. Handelt es sich um eine Antwort auf eine WRQ-Anfrage, hat das ACK-Paket die Da­ten­block-Nummer „0“.

Aufbau der TFTP-Feh­ler­nach­rich­ten (ERROR)

ERROR-Nach­rich­ten werden von Client oder Server ver­schickt, sobald es bei der TFTP-Kom­mu­ni­ka­ti­on zu einem Fehler kommt. In der Kon­se­quenz können diese Nach­rich­ten­pa­ke­te eine mögliche Antwort auf sämtliche bereits auf­ge­lis­te­ten Paket-Typen sein. Die Feh­ler­pa­ke­te sind dabei grund­sätz­lich wie folgt aufgebaut:

Nach dem auch in ERROR-Nach­rich­ten vor­an­ste­hen­den Opcode (Wert „5“) folgt ein 16 Bit langes Feld, das den Feh­ler­code enthält. So steht der Wert „1“ bei­spiels­wei­se dafür, dass die ent­spre­chen­de Datei nicht gefunden werden konnte, während der Wert „6“ dem emp­fan­gen­den System verrät, dass die Datei bereits existiert. Die sich an­schlie­ßen­de Feh­ler­nach­richt hilft dem Nutzer, das Problem zu verstehen. Auch aus diesem Grund ist diese Zei­chen­ket­te mit variabler Größe ty­pi­scher­wei­se im NetASCII-Format. Den Abschluss bildet ein 8-Bit-Feld aus Nullen.

Die Vor- und Nachteile von TFTP

TFTP überzeugt in erster Linie durch seine Schlicht­heit. Das Protokoll soll das Schreiben und Lesen von Dateien er­mög­li­chen und erfüllt diese Rolle, ohne dass eine Ver­bin­dung zwischen Client und Server etabliert werden muss. In der Kon­se­quenz ist das TFTP-Protokoll nicht nur einfach zu im­ple­men­tie­ren, sondern auch Weg­be­rei­ter einer schnellen Da­tei­über­tra­gung. In­di­vi­du­el­le Transfer Iden­ti­fier (TIDs) und ein­zig­ar­ti­ge Da­ten­block-Nummern schaffen dabei die Basis dafür, dass die jeweilige Datei voll­stän­dig beim Empfänger ankommt.

Das Fehlen einer Ver­schlüs­se­lung sowie eines Au­then­ti­fi­zie­rungs- bzw. Zu­griffs­kon­troll­me­cha­nis­mus macht den Versand sensibler Dateien via TFTP al­ler­dings zu einer höchst riskanten An­ge­le­gen­heit, weshalb hierfür sicherere Al­ter­na­ti­ven wie das kom­ple­xe­re FTP ein­ge­setzt werden sollten. Ferner ist das Löschen und Um­be­nen­nen von Dateien auf vielen TFTP-Servern nicht erlaubt.

Wo kommt das Trivial File Transfer Protocol zum Einsatz?

Das TFTP-Protokoll ist eng an das so­ge­nann­te Netzwerk-Booting (auch „Boot­strap­ping“) geknüpft. Bei dieser Technik, die ins­be­son­de­re in den 1980er Jahren zum Einsatz kam, bezieht und startet ein Netzwerk-Computer das Be­triebs­sys­tem von einem zentralen Server. Ins­be­son­de­re für Terminals und fest­plat­ten­lo­se Work­sta­tions, die keine In­stal­la­ti­on eines eigenen Be­triebs­sys­tems er­mög­lich­ten, war die Ent­wick­lung und Im­ple­men­tie­rung von TFTP daher von ent­schei­den­der Bedeutung. Un­ter­stüt­zung fand das Da­tei­über­tra­gungs­pro­to­koll durch das 1985 ver­öf­fent­lich­te BOOTP, durch das die Netzwerk-Clients die Adresse des TFTP-Servers au­to­ma­tisch beziehen konnten.

Heute kommt das Trivial File Transfer Protocol we­sent­lich seltener zum Einsatz. In Netz­wer­ken, deren Teil­neh­mer heut­zu­ta­ge stan­dard­mä­ßig über eigene Be­triebs­sys­te­me verfügen, ist die Netzwerk-Boot-Methode nur noch ver­ein­zelt und in ab­ge­wan­del­ter Form wie­der­zu­fin­den. So können bei­spiels­wei­se Sys­tem­in­stal­la­tio­nen, Wartungen, Firmware-Updates oder Virus-Scans über so­ge­nann­te Hilfs­be­triebs­sys­te­me zu einer Re­du­zie­rung des Ad­mi­nis­tra­ti­ons­auf­wands beitragen. Auch in den nicht flüch­ti­gen Fest­wert­spei­chern (ROM-Speichern) sind Im­ple­men­tie­run­gen von TFTP nicht un­ge­wöhn­lich, da diese dank der Ver­bin­dungs­lo­sig­keit des Pro­to­kolls nur wenig Aufwand bedeuten. Ferner dienen TFTP-Server zur Ab­si­che­rung von Kon­fi­gu­ra­tio­nen und System-Images von Cisco-Routern und -Switches sowie zur Ablage von Ge­büh­ren­da­ten­sät­zen bei Siemens-Te­le­fon­an­la­gen.

Zum Hauptmenü