Tuesday 3 July 2012

A short tutorial on TFTP protocol ( How tftp works)

TFTP is used in embedded system to do file transfer.  Important points about this protocol are as follows:


1) TFTP : trivial file transfer protocol : RFC 1350, TFTP option extension : RFC 2347, TFTP blocksize option : RFC 2348, TFTP time out and transfer size : 2349

2) Main purpose : file transfer , simple and easy to implement

3) Works on top of UDP

4) Frame format : Ethernet header -> IP header-> UDP header -> TFTP header

5) It can read and write the files.

6) It cannot list the directories or do user authentication

7)  Modes of transfer supported : netacsii, octet, mail (obsolete)

8) The file is sent data packet, each data packet consists of blocks of fixed length of 512 bytes.

9) Any data packet less than 512 bytes signals termination of the transfer.

10) Each block is acknowledged with ACK packet from client.

11) Timeouts are used to signal data packet lost or error.

12) Errors can be caused by :
                                   a) Not being able to satisfy request (eg. file not found)
                                   b) Receiving a packet which cannot be explained by delay or duplication ( incorrectly formed packet)
                                   c) Loosing access to a necessary resource ( eg. disk full or access denied)

         These error cause in termination of connection.

13) In only this error condition the connection is not terminated  " the source port of a received packet being incorrect" in this case the error packet is sent to the originating host.

14) Normal TFTP transfer

               a) Client request "TFTP read" -> UDP header ->dst port 69, src port : random port (eg. 3455)
                                                               TFTP header -> opcode ->1 ( read ,2 byte)
                                                                                       Source file name -> image ( 13 byte)
                                                                                         Type -> 3 bytes
                                                                                         Options -> 10 bytes ( 8 bytes -> option name , 2 byte value)

              b) Server sends option ack -> UDP header -> src port (random : 4556 eg) , dst port (client port ) 3455, length (total length)
                                                          TFTP header -> opcode: 6 ( option ack, 2 byte)
                                                                                 Options-> 10 byte ( 8 bytes-> option name, 2 byte value)

             c) Client send ACK-> UDP header -> src port : 3455, dst port : 4556
                                              TFTP header-> opcode-> 4 ( ACK, 2 byte)
                                                                     Block-> 0 ( 2 byte)

            d) Server sends data packet--> UDP same as (b)
                                                         TFTP-> opcode 3 (data packet, 2 byte)
                                                                      Block -> 1 ( 2bye)
                                                                       DATA ( 512 bytes)

 The same will be repeated till the server send data packet less than 512 byte ( between 0-511 bytes) . It will be marked as last data packet and client will send ACK and terminate the connection ( no other packet from either side).

15) TFTP packet types Opcodes :
                                              1 : Read Request (RRQ)
                                              2 : Write Request (WRQ)
                                              3 : Data (DATA)
                                              4 : Acknowledgment (ACK)
                                              5 : Error (ERROR)
                                              6 : Option Acknowledgement