Trivial File Transfer Protocol

Uit Wikipedia, de vrije encyclopedie
Ga naar: navigatie, zoeken

Trivial File Transfer Protocol, afgekort TFTP, is een eenvoudig bestandsoverdracht protocol dat veel gebruikt wordt om computers vanaf een netwerk te starten. Als de TCP/IP stack reeds draait kan TFTP ook gebruikt worden om andere apparatuur zoals routers, switches, ADSL- en kabelmodems van firmware en configuraties te voorzien. TFTP werd voor het eerst gedefinieerd in 1980.

Door de eenvoud van dit protocol zijn clients en servers relatief eenvoudig te implementeren in kleine hoeveelheden geheugen. Het protocol vereist ook weinig bandbreedte, een noodzaak in omgevingen waar deze resources schaars zijn, zoals microcontrollers.

Ontstaan[bewerken]

TFTP is gedeeltelijk gebaseerd op het eerder ontworpen protocol EFTP (Easy File Transfer Protocol) dat op zijn beurt deel uitmaakt van de PUP protocol suite. Tijdens het begin van de ontwikkeling van de TCP/IP protocol suite was TFTP meestal het eerste protocol dat werd geïmplementeerd vanwege zijn eenvoud. De originele versies van TFTP, vòòr RFC1350, hadden een bijzonder zware protocolfout die Sorcerer's Apprentice Syndrome werd genoemd.

Recent is TFTP veel misbruikt door computerwormen zoals Blaster om zich te verspreiden en nieuwe hosts te infecteren.

Technische Informatie[bewerken]

Eigenschappen[bewerken]

  • Op een IP netwerk maakt TFTP gebruik van UDP dat een verbindingsloos protocol is. Hiervoor wordt meestal Poort 69 gebruikt als request-poort, voor de verdere afhandeling wordt een andere poort toegewezen. TFTP is echter volkomen onafhankelijk van het onderliggende protocol en kan ook zonder IP worden gebruikt, bijvoorbeeld over een RS422 verbinding.
  • TFTP wordt gebruikt om bestanden te schrijven naar, en te lezen van, een server.
  • Drie verschillende overdrachtsmodi kunnen gebruikt worden: netascii (= ASCII modus), octet (= binaire modus) en mail. De laatste hiervan wordt vrijwel niet meer gebruikt.
  • Het originele protocol had een limiet van 32MB, dit werd echter uitgebreid met RFC2347 en RFC2348 in 1998 zodat een maximum van 4GB en zelfs meer bereikt kon worden.
  • Het transport van elk afzonderlijk bestand gebeurt onafhankelijk. De overdracht is vastgelegd in een lock-stap, zodat er telkens maar één pakket onderweg is in het netwerk. Door dit gebrek aan windowing ontstaat er dan ook een lage doorvoersnelheid bij een hoge latency.
  • Directory structuren kunnen niet weergegeven worden.
  • Er is geen authenticatie noch encryptie aanwezig waardoor het onveilig is om via het internet te gebruiken. Daarom wordt TFTP alleen op private, lokale netwerken gebruikt.

Werking[bewerken]

Het transporteren van data via TFTP gebeurt als volgt:

  • de Cliënt zendt een RRQ (read request) of een WRQ (write request) pakket naar de Server. Deze bevat de gewenste bestandsnaam [1] en de overdracht mode (netascii, octet of mail).
  • de Server antwoordt met behulp van een ACK pakket (van ACKnowledge). Dit pakket informeert eveneens naar welke poort voor de transmissie gealloceerd is, zodat de request-poort (meestal poort 69/UDP) vrij blijft. Als de transmissie niet mogelijk is verstuurt de server een NACK pakket (Negative ACKnowledge).
    • Lezen (na RRQ): De Server zendt genummerde data pakketten naar de Cliënt. Elk pakket (uitgezonderd het laatste) bevat een vol datablok. De Cliënt. antwoordt met genummerde ACK pakketten voor elk data pakket, een NACK als het UDP-packet of het datablock corrupt is. Als binnen de timeout periode geen ACK pakket wordt ontvangen of een NACK pakket is verstuurd, verzendt de Server het datablok nogmaals met dezelfde nummering. Dit wordt herhaald totdat ofwel de Client reageert met een ACK ofwel een maximum aantal pogingen is ondernomen.
    • Schrijven (na WRQ): In principe hetzelfde als lezen, maar de rollen van Cliënt en Server zijn omgekeerd.
  • Het laatste data pakket bevat geen vol data blok om aan te duiden dat dit het laatste pakket is. Indien dit toch een vol data blok is wordt er nog een leeg pakket gezonden om het einde van de data aan te geven.

De belangrijkste RFC's[bewerken]

Bronnen, noten en/of referenties
  1. dit hoeft geen bestandsnaam in de traditionele zin te zijn, in principe volstaat een eenduidige identifier.