diff options
author | Thomas Voss <mail@thomasvoss.com> | 2024-11-27 20:54:24 +0100 |
---|---|---|
committer | Thomas Voss <mail@thomasvoss.com> | 2024-11-27 20:54:24 +0100 |
commit | 4bfd864f10b68b71482b35c818559068ef8d5797 (patch) | |
tree | e3989f47a7994642eb325063d46e8f08ffa681dc /doc/rfc/rfc783.txt | |
parent | ea76e11061bda059ae9f9ad130a9895cc85607db (diff) |
doc: Add RFC documents
Diffstat (limited to 'doc/rfc/rfc783.txt')
-rw-r--r-- | doc/rfc/rfc783.txt | 969 |
1 files changed, 969 insertions, 0 deletions
diff --git a/doc/rfc/rfc783.txt b/doc/rfc/rfc783.txt new file mode 100644 index 0000000..04dce94 --- /dev/null +++ b/doc/rfc/rfc783.txt @@ -0,0 +1,969 @@ + + + +Network Working Group K. R. Sollins +Request for Comments: 783 MIT + June, 1981 +Updates: IEN 133 + + + THE TFTP PROTOCOL (REVISION 2) + + + + Summary + + TFTP is a very simple protocol used to transfer files. It is from + +this that its name comes, Trivial File Transfer Protocol or TFTP. Each + +nonterminal packet is acknowledged separately. This document describes + +the protocol and its types of packets. The document also explains the + +reasons behind some of the design decisions. + + + + ACKNOWLEDGEMENTS + + + The protocol was originally designed by Noel Chiappa, and was + +redesigned by him, Bob Baldwin and Dave Clark, with comments from Steve + +Szymanski. The current revision of the document includes modifications + +stemming from discussions with and suggestions from Larry Allen, Noel + +Chiappa, Dave Clark, Geoff Cooper, Mike Greenwald, Liza Martin, David + +Reed, Craig Milo Rogers (of UCS-ISI), Kathy Yellick, and the author. + +The acknowledgement and retransmission scheme was inspired by TCP, and + +the error mechanism was suggested by PARC's EFTP abort message. + + + + + + + + + + + + + + + + + + +This research was supported by the Advanced Research Projects Agency of + +the Department of Defense and was monitored by the Office of Naval + +Research under contract number N00014-75-C-0661. + + + + + + + + + + + + + + + + 2 + + +1. Purpose + + TFTP is a simple protocol to transfer files, and therefore was named + +the Trivial File Transfer Protocol or TFTP. It has been implemented on + +top of the Internet User Datagram protocol (UDP or Datagram) [2] so it + +may be used to move files between machines on different networks + +implementing UDP. (This should not exlude the possibility of + +implementing TFTP on top of other datagram protocols.) It is designed + +to be small and easy to implement. Therefore, it lacks most of the + +features of a regular FTP. The only thing it can do is read and write + +files (or mail) from/to a remote server. It cannot list directories, + +and currently has no provisions for user authentication. In common with + +other Internet protocols, it passes 8 bit bytes of data. + + + 1 2 + Three modes of transfer are currently supported: netascii ; octet , + +raw 8 bit bytes; mail, netascii characters sent to a user rather than a + +file. Additional modes can be defined by pairs of cooperating hosts. + + + + + + + + + + + +_______________ + 1 + This is ascii as defined in "USA Standard Code for Information +Interchange" [1] with the modifications specified in "Telnet Protocol +Specification" [3]. Note that it is 8 bit ascii. The term "netascii" +will be used throughout this document to mean this particular version of +ascii. + 2 + This replaces the "binary" mode of previous versions of this + + + + 3 + + +2. Overview of the Protocol + + Any transsfer begins with a request to read or write a file, which also + +serves to request a connection. If the server grants the request, the + +connection is opened and the file is sent in fixed length blocks of 512 + +bytes. Each data packet contains one block of data, and must be + +acknowledged by an acknowledgment packet before the next packet can be + +sent. A data packet of less than 512 bytes signals termination of a + +transfer. If a packet gets lost in the network, the intended recipient + +will timeout and may retransmit his last packet (which may be data or an + +acknowledgment), thus causing the sender of the lost packet to + +retransmit that lost packet. The sender has to keep just one packet on + +hand for retransmission, since the lock step acknowledgment guarantees + +that all older packets have been received. Notice that both machines + +involved in a transfer are considered senders and receivers. One sends + +data and receives acknowledgments, the other sends acknowledgments and + +receives data. + + + + Most errors cause termination of the connection. An error is + +signalled by sending an error packet. This packet is not acknowledged, + +and not retransmitted (i.e., a TFTP server or user may terminate after + +sending an error message), so the other end of the connection may not + +get it. Therefore timeouts are used to detect such a termination when + +the error packet has been lost. Errors are caused by three types of + +events: not being able to satisfy the request (e.g., file not found, + +access violation, or no such user), receiving a packet which cannot be + +explained by a delay or duplication in the network (e.g. an incorrectly + + + 4 + + +formed packet), and losing access to a necessary resource (e.g., disk + +full or access denied during a transfer). + + + + TFTP recognizes only one error condition that does not cause + +termination, the source port of a received packet being incorrect. In + +this case, an error packet is sent to the originating host. + + + + This protocol is very restrictive, in order to simplify + +implementation. For example, the fixed length blocks make allocation + +straight forward, and the lock step acknowledgement provides flow + +control and eliminates the need to reorder incoming data packets. + + + +3. Relation to other Protocols + + As mentioned TFTP is designed to be implemented on top of the Datagram + +protocol. Since Datagram is implemented on the Internet protocol, + +packets will have an Internet header, a Datagram header, and a TFTP + +header. Additionally, the packets may have a header (LNI, ARPA header, + +etc.) to allow them through the local transport medium. As shown in + +Figure 3-1, the order of the contents of a packet will be: local medium + +header, if used, Internet header, Datagram header, TFTP header, followed + +by the remainder of the TFTP packet. (This may or may not be data + +depending on the type of packet as specified in the TFTP header.) TFTP + +does not specify any of the values in the Internet header. On the other + +hand, the source and destination port fields of the Datagram header (its + +format is given in the appendix) are used by TFTP and the length field + +reflects the size of the TFTP packet. The transfer identifiers (TID's) + + + 5 + + +used by TFTP are passed to the Datagram layer to be used as ports; + +therefore they must be between 0 and 65,535. The initialization of + +TID's is discussed in the section on initial connection protocol. + + + + The TFTP header consists of a 2 byte opcode field which indicates the + +packet's type (e.g., DATA, ERROR, etc.) These opcodes and the formats + +of the various types of packets are discussed further in the section on + +TFTP packets. + + Figure 3-1: Order of Headers + + + + + --------------------------------------------------- + | Local Medium | Internet | Datagram | TFTP | + --------------------------------------------------- + + + +4. Initial Connection Protocol + + A transfer is established by sending a request (WRQ to write onto a + +foreign file system, or RRQ to read from it), and receiving a positive + +reply, an acknowledgment packet for write, or the first data packet for + +read. In general an acknowledgment packet will contain the block number + +of the data packet being acknowledged. Each data packet has associated + +with it a block number; block numbers are consecutive and begin with + +one. Since the positive response to a write request is an + +acknowledgment packet, in this special case the block number will be + +zero. (Normally, since an acknowledgment packet is acknowledging a data + +packet, the acknowledgment packet will contain the block number of the + +data packet being acknowledged.) If the reply is an error packet, then + + + 6 + + +the request has been denied. + + + + In order to create a connection, each end of the connection chooses a + +TID for itself, to be used for the duration of that connection. The + +TID's chosen for a connection should be randomly chosen, so that the + +probability that the same number is chosen twice in immediate succession + +is very low. Every packet has associated with it the two TID's of the + +ends of the connection, the source TID and the destination TID. These + +TID's are handed to the supporting UDP (or other datagram protocol) as + +the source and destination ports. A requesting host chooses its source + +TID as described above, and sends its initial request to the known TID + +69 decimal (105 octal) on the serving host. The response to the + +request, under normal operation, uses a TID chosen by the server as its + +source TID and the TID chosen for the previous message by the requestor + +as its destination TID. The two chosen TID's are then used for the + +remainder of the transfer. + + + As an example, the following shows the steps used to establish a + +connection to write a file. Note that WRQ, ACK, and DATA are the names + +of the write request, acknowledgment, and data types of packets + +respectively. The appendix contains a similar example for reading a + +file. + + + 1. Host A sends a "WRQ" to host B with source= A's TID, + destination= 69. + + + 2. Host B sends a "ACK" (with block number= 0) to host A with + source= B's TID, destination= A's TID. + + + 7 + + +At this point the connection has been established and the first data + +packet can be sent by Host A with a sequence number of 1. In the next + +step, and in all succeeding steps, the hosts should make sure that the + +source TID matches the value that was agreed on in steps 1 and 2. If a + +source TID does not match, the packet should be discarded as erroneously + +sent from somewhere else. An error packet should be sent to the source + +of the incorrect packet, while not disturbing the transfer. + +This can be done only if the TFTP in fact receives a packet with an + +incorrect TID. If the supporting protocols do not allow it, this + +particular error condition will not arise. + + + + + The following example demonstrates a correct operation of the protocol + +in which the above situation can occur. Host A sends a request to host + +B. Somewhere in the network, the request packet is duplicated, and as a + +result two acknowledgments are returned to host A, with different TID's + +chosen on host B in response to the two requests. When the first + +response arrives, host A continues the connection. When the second + +response to the request arrives, it should be rejected, but there is no + +reason to terminate the first connection. Therefore, if different TID's + +are chosen for the two connections on host B and host A checks the + +source TID's of the messages it receives, the first connection can be + +maintained while the second is rejected by returning an error packet. + + + + + + + 8 + + +5. TFTP Packets + + TFTP supports five types of packets, all of which have been mentioned + +above: + + + opcode operation + 1 Read request (RRQ) + 2 Write request (WRQ) + 3 Data (DATA) + 4 Acknowledgment (ACK) + 5 Error (ERROR) + + +The TFTP header of a packet contains the opcode associated with that + +packet. + + Figure 5-1: RRQ/WRQ packet + + + + + 2 bytes string 1 byte string 1 byte + ------------------------------------------------ + | Opcode | Filename | 0 | Mode | 0 | + ------------------------------------------------ + + + + RRQ and WRQ packets (opcodes 1 and 2 respectively) have the format + +shown in Figure 5-1. The file name is a sequence of bytes in netascii + +terminated by a zero byte. The mode field contains the string + +"netascii", "octet", or "mail" (or any comibnation of upper and lower + +case, such as "NETASCII", NetAscii", etc.) in netascii indicating the + +three modes defined in the protocol. A host which receives netascii + +mode data must translate the data to its own format. Octet mode is used + +to transfer a file that is in the 8-bit format of the machine from which + +the file is being transferred. It is assumed that each type of machine + +has a single 8-bit format that is more common, and that that format is + + + 9 + + +chosen. For example, on a DEC-20, a 36 bit machine, this is four 8-bit + +bytes to a word with four bits of breakage. If a host receives a octet + +file and then returns it, the returned file must be identical to the + +original. Mail mode uses the name of a mail recipient in place of a + +file and must begin with a WRQ. Otherwise it is identical to netascii + +mode. The mail recipient string should be of the form "username" or + +"username@hostname". If the second form is used, it allows the option + +of mail forwarding by a relay computer. + + + + The discussion above assumes that both the sender and recipient are + +operating in the same mode, but there is no reason that this has to be + +the case. For example, one might build a storage server. There is no + +reason that such a machine needs to translate netascii into its own form + +of text. Rather, the sender might send files in netascii, but the + +storage server might simply store them without translation in 8-bit + +format. Another such situation is a problem that currently exists on + +DEC-20 systems. Neither netascii nor octet accesses all the bits in a + +word. One might create a special mode for such a machine which read all + +the bits in a word, but in which the receiver stored the information in + +8-bit format. When such a file is retrieved from the storage site, it + +must be restored to its original form to be useful, so the reverse mode + +must also be implemented. The user site will have to remember some + +information to achieve this. In both of these examples, the request + +packets would specify octet mode to the foreign host, but the local host + +would be in some other mode. No such machine or application specific + +modes have been specified in TFTP, but one would be compatible with this + + + 10 + + +specification. + + + + It is also possible to define other modes for cooperating pairs of + +hosts, although this must be done with care. There is no requirement + +that any other hosts implement these. There is no central authority + +that will define these modes or assign them names. + + Figure 5-2: DATA packet + + + + + 2 bytes 2 bytes n bytes + ---------------------------------- + | Opcode | Block # | Data | + ---------------------------------- + + + + Data is actually transferred in DATA packets depicted in Figure 5-2. + +DATA packets (opcode = 3) have a block number and data field. The block + +numbers on data packets begin with one and increase by one for each new + +block of data. This restriction allows the program to use a single + +number to discriminate between new packets and duplicates. The data + +field is from zero to 512 bytes long. If it is 512 bytes long, the + +block is not the last block of data; if it is from zero to 511 bytes + +long, it signals the end of the transfer. (See the section on Normal + +Termination for details.) + + + + All packets other than those used for termination are acknowledged + +individually unless a timeout occurs. Sending a DATA packet is an + +acknowledgment for the ACK packet of the previous DATA packet. The WRQ + +and DATA packets are acknowledged by ACK or ERROR packets, while RRQ and + + + 11 + + + Figure 5-3: ACK packet + + + + + 2 bytes 2 bytes + --------------------- + | Opcode | Block # | + --------------------- + + +ACK packets are acknowledged by DATA or ERROR packets. Figure 5-3 + +depicts an ACK packet; the opcode is 4. The block number in an ACK + +echoes the block number of the DATA packet being acknowledged. A WRQ is + +acknowledged with an ACK packet having a block number of zero. + + Figure 5-4: ERROR packet + + + + + 2 bytes 2 bytes string 1 byte + ----------------------------------------- + | Opcode | ErrorCode | ErrMsg | 0 | + ----------------------------------------- + + + + An ERROR packet (opcode 5) takes the form depicted in Figure 5-4. An + +ERROR packet can be the acknowledgment of any other type of packet. The + +error code is an integer indicating the nature of the error. A table of + +values and meanings is given in the appendix. (Note that several error + +codes have been added to this version of this document.) The error + +message is intended for human consumption, and should be in netascii. + +Like all other strings, it is terminated with a zero byte. + + + + + + + + + 12 + + +6. Normal Termination + + The end of a transfer is marked by a DATA packet that contains between + +0 and 511 bytes of data (i.e. Datagram length < 516). This packet is + +acknowledged by an ACK packet like all other DATA packets. The host + +acknowledging the final DATA packet may terminate its side of the + +connection on sending the final ACK. On the other hand, dallying is + +encouraged. This means that the host sending the final ACK will wait + +for a while before terminating in order to retransmit the final ACK if + +it has been lost. The acknowledger will know that the ACK has been lost + +if it receives the final DATA packet again. The host sending the last + +DATA must retransmit it until the packet is acknowledged or the sending + +host times out. If the response is an ACK, the transmission was + +completed successfully. If the sender of the data times out and is not + +prepared to retransmit any more, the transfer may still have been + +completed successfully, after which the acknowledger or network may have + +experienced a problem. It is also possible in this case that the + +transfer was unsuccessful. In any case, the connection has been closed. + + + +7. Premature Termination + + If a request can not be granted, or some error occurs during the + +transfer, then an ERROR packet (opcode 5) is sent. This is only a + +courtesy since it will not be retransmitted or acknowledged, so it may + +never be received. Timeouts must also be used to detect errors. + + + + + + 13 + + +I. Appendix + + +Order of Headers + + + 2 bytes + ---------------------------------------------------------- +| Local Medium | Internet | Datagram | TFTP Opcode | + ---------------------------------------------------------- + + +TFTP Formats + + +Type Op # Format without header + 2 bytes string 1 byte string 1 byte + ----------------------------------------------- +RRQ/ | 01/02 | Filename | 0 | Mode | 0 | +WRQ ----------------------------------------------- + 2 bytes 2 bytes n bytes + --------------------------------- +DATA | 03 | Block # | Data | + --------------------------------- + 2 bytes 2 bytes + ------------------- +ACK | 04 | Block # | + -------------------- + 2 bytes 2 bytes string 1 byte + ---------------------------------------- +ERROR | 05 | ErrorCode | ErrMsg | 0 | + ---------------------------------------- + + + + + + + + + + + + + + + + + + + 14 + + +Initial Connection Protocol for reading a file + + + 1. Host A sends a "RRQ" to host B with source= A's TID, + destination= 69. + + 2. Host B sends a "DATA" (with block number= 1) to host A with + source= B's TID, destination= A's TID. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 15 + + +Error Codes + + +Value Meaning +0 Not defined, see error message (if any). +1 File not found. +2 Access violation. +3 Disk full or allocation exceeded. +4 Illegal TFTP operation. +5 Unknown transfer ID. +6 File already exists. +7 No such user. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 16 + + 3 +Internet User Datagram Header [2] + + + Format + + 0 1 2 3 + 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 ++-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ +| Source Port | Destination Port | ++-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ +| Length | Checksum | ++-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + + +Values of Fields + + +Source Port Picked by originator of packet. + + +Dest. Port Picked by destination machine (69 for RRQ or WRQ). + + +Length Number of bytes in packet after Datagram header. + + 4 +Checksum Reference 2 describes rules for computing checksum. + Field contains zero if unused. + + +Note: TFTP passes transfer identifiers (TID's) to the Internet User + +Datagram protocol to be used as the source and destination ports. + + + + + + + + + + + + +_______________ + 3 + This has been included only for convenience. TFTP need not be +implemented on top of the Internet User Datagram Protocol. + 4 + The implementor of this should be sure that the correct algorithm is +used here. + + + 17 + + +References + + [1] USA Standard Code for Information Interchange, USASI X3.4- + + 1968. + + + + [2] Postel, Jon., "User Datagram Protocol," RFC768, August 28, + + 1980. + + + + [3] "Telnet Protocol Specification," RFC764, June, 1980. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 18 |