home *** CD-ROM | disk | FTP | other *** search
/ Handbook of Infosec Terms 2.0 / Handbook_of_Infosec_Terms_Version_2.0_ISSO.iso / text / rfcs / rfc0913.txt < prev    next >
Text File  |  1996-05-07  |  22KB  |  641 lines

  1.  
  2.  
  3. Network Working Group                                     Mark K. Lottor Request for Comments: 913                                            MIT                                                           September 1984 
  4.  
  5.                      Simple File Transfer Protocol 
  6.  
  7.  STATUS OF THIS MEMO 
  8.  
  9.    This RFC suggests a proposed protocol for the ARPA-Internet    community, and requests discussion and suggestions for improvements.    Distribution of this memo is unlimited. 
  10.  
  11. INTRODUCTION 
  12.  
  13.    SFTP is a simple file transfer protocol.  It fills the need of people    wanting a protocol that is more useful than TFTP but easier to    implement (and less powerful) than FTP.  SFTP supports user access    control, file transfers, directory listing, directory changing, file    renaming and deleting. 
  14.  
  15.    SFTP can be implemented with any reliable 8-bit byte stream oriented    protocol, this document describes its TCP specification.  SFTP uses    only one TCP connection; whereas TFTP implements a connection over    UDP, and FTP uses two TCP connections (one using the TELNET    protocol). 
  16.  
  17. THE PROTOCOL 
  18.  
  19.    SFTP is used by opening a TCP connection to the remote hosts' SFTP    port (115 decimal).  You then send SFTP commands and wait for    replies.  SFTP commands sent to the remote server are always 4 ASCII    letters (of any case) followed by a space, the argument(s), and a    <NULL>.  The argument can sometimes be null in which case the command    is just 4 characters followed by <NULL>.  Replies from the server are    always a response character followed immediately by an ASCII message    string terminated by a <NULL>.  A reply can also be just a response    character and a <NULL>. 
  20.  
  21.       <command> : = <cmd> [<SPACE> <args>] <NULL> 
  22.  
  23.       <cmd> : =  USER ! ACCT ! PASS ! TYPE ! LIST ! CDIR                  KILL ! NAME ! DONE ! RETR ! STOR 
  24.  
  25.       <response> : = <response-code> [<message>] <NULL> 
  26.  
  27.       <response-code> : =  + | - |   | ! 
  28.  
  29.       <message> can contain <CRLF> 
  30.  
  31.    Commands that can be sent to the server are listed below.  The server 
  32.  
  33.  Lottor                                                          [Page 1] 
  34.  
  35.  
  36.  RFC 913                                                   September 1984 Simple File Transfer Protocol 
  37.  
  38.     replies to each command with one of the possible response codes    listed under each message.  Along with the response, the server    should optionally return a message explaining the error in more    detail.  Example message texts are listed but do not have to be    followed.  All characters used in messages are ASCII 7-bit with the    high-order bit zero, in an 8 bit field. 
  39.  
  40.    The response codes and their meanings: 
  41.  
  42.       +  Success. 
  43.  
  44.       -  Error. 
  45.  
  46.          An error occurred while processing your command. 
  47.  
  48.          Number. 
  49.  
  50.          The number-sign is followed immediately by ASCII digits          representing a decimal number. 
  51.  
  52.       !  Logged in. 
  53.  
  54.          You have sent enough information to be able to log yourself in.          This is also used to mean you have sent enough information to          connect to a directory. 
  55.  
  56.    To use SFTP you first open a connection to the remote SFTP server.    The server replies by sending either a positive or negative greeting,    such as: 
  57.  
  58.       +MIT-XX SFTP Service 
  59.  
  60.          (the first word should be the host name) 
  61.  
  62.       -MIT-XX Out to Lunch 
  63.  
  64.  
  65.  
  66.  
  67.  
  68.  
  69.  
  70.  
  71.  
  72.  
  73.  
  74.  
  75.  
  76.  Lottor                                                          [Page 2] 
  77.  
  78.  
  79.  RFC 913                                                   September 1984 Simple File Transfer Protocol 
  80.  
  81.     If the server send back a '-' response it will also close the    connection, otherwise you must now send a USER command. 
  82.  
  83.       USER user-id 
  84.  
  85.          Your userid on the remote system. 
  86.  
  87.          The reply to this command will be one of: 
  88.  
  89.             !<user-id> logged in 
  90.  
  91.                Meaning you don't need an account or password or you                specified a user-id not needing them. 
  92.  
  93.             +User-id valid, send account and password 
  94.  
  95.             -Invalid user-id, try again 
  96.  
  97.          If the remote system does not have user-id's then you should          send an identification such as your personal name or host name          as the argument, and the remote system would reply with '+'. 
  98.  
  99.       ACCT account 
  100.  
  101.          The account you want to use (usually used for billing) on the          remote system. 
  102.  
  103.          Valid replies are: 
  104.  
  105.             ! Account valid, logged-in 
  106.  
  107.                Account was ok or not needed. Skip the password. 
  108.  
  109.             +Account valid, send password 
  110.  
  111.                Account ok or not needed. Send your password next. 
  112.  
  113.             -Invalid account, try again 
  114.  
  115.  
  116.  
  117.  
  118.  
  119.  
  120.  
  121.  
  122.  
  123.  
  124.  
  125. Lottor                                                          [Page 3] 
  126.  
  127.  
  128.  RFC 913                                                   September 1984 Simple File Transfer Protocol 
  129.  
  130.        PASS password 
  131.  
  132.          Your password on the remote system. 
  133.  
  134.          Valid replies are: 
  135.  
  136.             ! Logged in 
  137.  
  138.                Password is ok and you can begin file transfers. 
  139.  
  140.             +Send account 
  141.  
  142.                Password ok but you haven't specified the account. 
  143.  
  144.             -Wrong password, try again 
  145.  
  146.  
  147.  
  148.  
  149.  
  150.  
  151.  
  152.  
  153.  
  154.  
  155.  
  156.  
  157.  
  158.  
  159.  
  160.  
  161.  
  162.  
  163.  
  164.  
  165.  
  166.  
  167.  
  168.  
  169.  
  170.  
  171.  
  172.  
  173.  
  174.  
  175.  
  176.  
  177.  
  178.  Lottor                                                          [Page 4] 
  179.  
  180.  
  181.  RFC 913                                                   September 1984 Simple File Transfer Protocol 
  182.  
  183.     You cannot specify any of the following commands until you receive a    '!' response from the remote system. 
  184.  
  185.       TYPE { A | B | C } 
  186.  
  187.          The mapping of the stored file to the transmission byte stream          is controlled by the type.  The default is binary if the type          is not specified. 
  188.  
  189.          A - ASCII 
  190.  
  191.             The ASCII bytes are taken from the file in the source             system, transmitted over the connection, and stored in the             file in the destination system. 
  192.  
  193.             The data is the 7-bit ASCII codes, transmitted in the             low-order 7 bits of 8-bit bytes.  The high-order bit of the             transmission byte must be zero, and need not be stored in             the file. 
  194.  
  195.             The data is "NETASCII" and is to follow the same rules as             data sent on Telnet connections.  The key requirement here             is that the local end of line is to be converted to the pair             of ASCII characters CR and LF when transmitted on the             connection. 
  196.  
  197.             For example, TOPS-20 machines have 36-bit words.  On TOPS-20             machines, The standard way of labeling the bits is 0 through             35 from high-order to low-order.  On TOPS-20 the normal way             of storing ASCII data is to use 5 7-bit bytes per word.  In             ASCII mode, the bytes transmitted would be [0-6], [7-13],             [14-20], [21-27], [28-34], (bit 35 would not be             transmitted), each of these 7-bit quantities would be             transmitted as the low-order 7 bits of an 8-bit byte (with             the high-order bit zero). 
  198.  
  199.             For example, one disk page of a TOPS-20 file is 512 36-bit             words.  But using only 35 bits per word for 7-bit bytes, a             page is 17920 bits or 2560 bytes. 
  200.  
  201.  
  202.  
  203.  
  204.  
  205.  
  206.  
  207.  
  208.  
  209.  Lottor                                                          [Page 5] 
  210.  
  211.  
  212.  RFC 913                                                   September 1984 Simple File Transfer Protocol 
  213.  
  214.           B - BINARY 
  215.  
  216.             The 8-bit bytes are taken from the file in the source             system, transmitted over the connection, and stored in the             file in the destination system. 
  217.  
  218.             The data is in 8-bit units.  In systems with word sizes             which are not a multiple of 8, some bits of the word will             not be transmitted. 
  219.  
  220.             For example, TOPS-20 machines have 36-bit words.  In binary             mode, the bytes transmitted would be [0-7], [8-15], [16-23],             [24-31], (bits 32-35 would not be transmitted). 
  221.  
  222.             For example, one disk page of a TOPS-20 file is 512 36-bit             words.  But using only 32 bits per word for 8-bit bytes, a             page is 16384 bits or 2048 bytes. 
  223.  
  224.          C - CONTINUOUS 
  225.  
  226.             The bits are taken from the file in the source system             continuously, ignoring word boundaries, and sent over the             connection packed into 8-bit bytes.  The destination system             stores the bits received into the file continuously,             ignoring word boundaries. 
  227.  
  228.             For systems on machines with a word size that is a multiple             of 8 bits, the implementation of binary and continuous modes             should be identical. 
  229.  
  230.             For example, TOPS-20 machines have 36-bit words.  In             continuous mode, the bytes transmitted would be [first word,             bits 0-7], [first word, bits 8-15], [first word, bits             16-23], [first word, bits 24-31], [first word, bits 32-35 +             second word, bits 0-3], [second word, bits 4-11], [second             word, bits 12-19], [second word, bits 20-27], [second word,             bits 28-35], then the pattern repeats. 
  231.  
  232.             For example, one disk page of a TOPS-20 file is 512 36-bit             words.  This is 18432 bits or 2304 8-bit bytes. 
  233.  
  234.          Replies are: 
  235.  
  236.             +Using { Ascii | Binary | Continuous } mode 
  237.  
  238.             -Type not valid 
  239.  
  240.  
  241.  
  242. Lottor                                                          [Page 6] 
  243.  
  244.  
  245.  RFC 913                                                   September 1984 Simple File Transfer Protocol 
  246.  
  247.        LIST { F | V } directory-path 
  248.  
  249.          A null directory-path will return the current connected          directory listing. 
  250.  
  251.          F specifies a standard formatted directory listing. 
  252.  
  253.             An error reply should be a '-' followed by the error message             from the remote systems directory command.  A directory             listing is a '+' followed immediately by the current             directory path specification and a <CRLF>.  Following the             directory path is a single line for each file in the             directory.  Each line is just the file name followed by             <CRLF>.  The listing is terminated with a <NULL> after the             last <CRLF>. 
  254.  
  255.          V specifies a verbose directory listing. 
  256.  
  257.             An error returns '-' as above.  A verbose directory listing             is a '+' followed immediately by the current directory path             specification and a <CRLF>.  It is then followed by one line             per file in the directory (a line ending in <CRLF>).  The             line returned for each file can be of any format.  Possible             information to return would be the file name, size,             protection, last write date, and name of last writer. 
  258.  
  259.  
  260.  
  261.  
  262.  
  263.  
  264.  
  265.  
  266.  
  267.  
  268.  
  269.  
  270.  
  271.  
  272.  
  273.  
  274.  
  275.  
  276.  
  277.  
  278.  
  279.  
  280.  
  281.  Lottor                                                          [Page 7] 
  282.  
  283.  
  284.  RFC 913                                                   September 1984 Simple File Transfer Protocol 
  285.  
  286.        CDIR new-directory 
  287.  
  288.          This will change the current working directory on the remote          host to the argument passed. 
  289.  
  290.          Replies are: 
  291.  
  292.             !Changed working dir to <new-directory> 
  293.  
  294.             -Can't connect to directory because: (reason) 
  295.  
  296.             +directory ok, send account/password 
  297.  
  298.          If the server replies with '+' you should then send an ACCT or          PASS command.  The server will wait for ACCT or PASS commands          until it returns a '-' or '!' response. 
  299.  
  300.             Replies to ACCT could be: 
  301.  
  302.                !Changed working dir to <new-directory> 
  303.  
  304.                +account ok, send password 
  305.  
  306.                -invalid account 
  307.  
  308.             Replies to PASS could be: 
  309.  
  310.                !Changed working dir to <new-directory> 
  311.  
  312.                +password ok, send account                 -invalid password 
  313.  
  314.       KILL file-spec 
  315.  
  316.          This will delete the file from the remote system. 
  317.  
  318.          Replies are: 
  319.  
  320.             +<file-spec> deleted 
  321.  
  322.             -Not deleted because (reason) 
  323.  
  324.  
  325.  
  326.  
  327.  
  328.  
  329.  
  330. Lottor                                                          [Page 8] 
  331.  
  332.  
  333.  RFC 913                                                   September 1984 Simple File Transfer Protocol 
  334.  
  335.        NAME old-file-spec 
  336.  
  337.          Renames the old-file-spec to be new-file-spec on the remote          system. 
  338.  
  339.          Replies: 
  340.  
  341.             +File exists 
  342.  
  343.             -Can't find <old-file-spec> 
  344.  
  345.                NAME command is aborted, don't send TOBE. 
  346.  
  347.          If you receive a '+' you then send: 
  348.  
  349.             TOBE new-file-spec 
  350.  
  351.          The server replies with: 
  352.  
  353.             +<old-file-spec> renamed to <new-file-spec> 
  354.  
  355.             -File wasn't renamed because (reason) 
  356.  
  357.       DONE 
  358.  
  359.          Tells the remote system you are done. 
  360.  
  361.          The remote system replies: 
  362.  
  363.             +(the message may be charge/accounting info) 
  364.  
  365.          and then both systems close the connection. 
  366.  
  367.  
  368.  
  369.  
  370.  
  371.  
  372.  
  373.  
  374.  
  375.  
  376.  
  377.  
  378.  
  379.  
  380.  
  381.  
  382.  
  383. Lottor                                                          [Page 9] 
  384.  
  385.  
  386.  RFC 913                                                   September 1984 Simple File Transfer Protocol 
  387.  
  388.        RETR file-spec 
  389.  
  390.          Requests that the remote system send the specified file. 
  391.  
  392.          Receiving a '-' from the server should abort the RETR command          and the server will wait for another command. 
  393.  
  394.          The reply from the remote system is: 
  395.  
  396.              <number-of-bytes-that-will-be-sent> (as ascii digits) 
  397.  
  398.             -File doesn't exist 
  399.  
  400.          You then reply to the remote system with: 
  401.  
  402.             SEND (ok, waiting for file) 
  403.  
  404.                The file is then sent as a stream of exactly the number                of 8-bit bytes specified.  When all bytes are received                control passes back to you (the remote system is waiting                for the next command).  If you don't receive a byte                within a reasonable amount of time you should abort the                file transfer by closing the connection. 
  405.  
  406.             STOP (You don't have enough space to store file) 
  407.  
  408.                Replies could be: 
  409.  
  410.                   +ok, RETR aborted 
  411.  
  412.          You are then ready to send another command to the remote host. 
  413.  
  414.  
  415.  
  416.  
  417.  
  418.  
  419.  
  420.  
  421.  
  422.  
  423.  
  424.  
  425.  
  426.  
  427.  
  428.  
  429.  
  430.  Lottor                                                         [Page 10] 
  431.  
  432.  
  433.  RFC 913                                                   September 1984 Simple File Transfer Protocol 
  434.  
  435.        STOR { NEW | OLD | APP } file-spec 
  436.  
  437.          Tells the remote system to receive the following file and save          it under that name. 
  438.  
  439.          Receiving a '-' should abort the STOR command sequence and the          server should wait for the next command. 
  440.  
  441.          NEW specifies it should create a new generation of the file and          not delete the existing one. 
  442.  
  443.             Replies could be: 
  444.  
  445.                +File exists, will create new generation of file 
  446.  
  447.                +File does not exist, will create new file 
  448.  
  449.                -File exists, but system doesn't support generations 
  450.  
  451.          OLD specifies it should write over the existing file, if any,          or else create a new file with the specified name. 
  452.  
  453.             Replies could be: 
  454.  
  455.                +Will write over old file 
  456.  
  457.                +Will create new file 
  458.  
  459.                (OLD should always return a '+') 
  460.  
  461.          APP specifies that what you send should be appended to the file          on the remote site.  If the file doesn't exist it will be          created. 
  462.  
  463.             Replies could be: 
  464.  
  465.                +Will append to file 
  466.  
  467.                +Will create file 
  468.  
  469.                (APP should always return a '+') 
  470.  
  471.  
  472.  
  473.  
  474.  
  475.  
  476.  
  477.  Lottor                                                         [Page 11] 
  478.  
  479.  
  480.  RFC 913                                                   September 1984 Simple File Transfer Protocol 
  481.  
  482.           You then send: 
  483.  
  484.             SIZE <number-of-bytes-in-file> (as ASCII digits) 
  485.  
  486.                where number-of-bytes-in-file 
  487.  
  488.                   is the exact number of 8-bit bytes you will be                   sending. 
  489.  
  490.          The remote system replies: 
  491.  
  492.             +ok, waiting for file 
  493.  
  494.                You then send the file as exactly the number of bytes                specified above. 
  495.  
  496.                When you are done the remote system should reply: 
  497.  
  498.                   +Saved <file-spec> 
  499.  
  500.                   -Couldn't save because (reason) 
  501.  
  502.             -Not enough room, don't send it 
  503.  
  504.                This aborts the STOR sequence, the server is waiting for                your next command. 
  505.  
  506.          You are then ready to send another command to the remote host. 
  507.  
  508.  
  509.  
  510.  
  511.  
  512.  
  513.  
  514.  
  515.  
  516.  
  517.  
  518.  
  519.  
  520.  
  521.  
  522.  
  523.  
  524.  
  525.  
  526.  
  527.  
  528. Lottor                                                         [Page 12] 
  529.  
  530.  
  531.  RFC 913                                                   September 1984 Simple File Transfer Protocol 
  532.  
  533.  AN EXAMPLE 
  534.  
  535.    An example file transfer.  'S' is the sender, the user process.  'R'    is the reply from the remote server.  Remember all server replies are    terminated with <NULL>.  If the reply is more than one line each line    ends with a <CRLF>. 
  536.  
  537.       R: (listening for connection)       S: (opens connection to R)       R: +MIT-XX SFTP Service       S: USER MKL       R: +MKL ok, send password       S: PASS foo       R: ! MKL logged in       S: LIST F PS: <MKL>       R: +PS: <MKL>          Small.File          Large.File       S: LIST V       R: +PS: <MKL>          Small.File  1        69(7)  P775240  2-Aug-84 20:08  MKL          Large.File  100  255999(8)  P770000  9-Dec-84 06:04  MKL       S: RETR SMALL.FILE       R:  69       S: SEND       R: This is a small file, the file is sent without          a terminating null.       S: DONE       R: +MIT-XX closing connection 
  538.  
  539.  
  540.  
  541.  
  542.  
  543.  
  544.  
  545.  
  546.  
  547.  
  548.  
  549.  
  550.  
  551.  
  552.  
  553.  
  554.  
  555.  
  556.  
  557.  Lottor                                                         [Page 13] 
  558.  
  559.  
  560.  RFC 913                                                   September 1984 Simple File Transfer Protocol 
  561.  
  562.  EDITORS NOTE 
  563.  
  564.    Mark Lotter receives full credit for all the good ideas in this memo.    As RFC editor, i have made an number of format changes, a few wording    changes, and one or two technical changes (mostly in the TYPEs).  I    accept full responsibility for any flaws i may have introduced. 
  565.  
  566.    A draft form of this memo was circulated for comments.  I will    attempt to list the issues raised and summarize the pros and cons,    and resolution for each. 
  567.  
  568.       ASCII Commands vs Binary Operation Codes 
  569.  
  570.          The ASCII command style is easier to debug, the extra          programming cost in minimal, the extra transmission cost is          trivial. 
  571.  
  572.          Binary operation codes are more efficient, and a few days of          debugging should not out weigh years of use. 
  573.  
  574.          Resolution:  I have kept the ASCII Commands. 
  575.  
  576.       Additional Modes 
  577.  
  578.          Pro:  For some machines you can't send all the bits in a word          using this protocol.  There should be some additional mode to          allow it. 
  579.  
  580.          Con:  Forget it, this is supposed to be SIMPLE file transfer.          If you need those complex modes use real FTP. 
  581.  
  582.          Resolution:  I have added the Continuous mode. 
  583.  
  584.  
  585.  
  586.  
  587.  
  588.  
  589.  
  590.  
  591.  
  592.  
  593.  
  594.  
  595.  
  596.  
  597.  
  598.  
  599.  
  600. Lottor                                                         [Page 14] 
  601.  
  602.  
  603.  RFC 913                                                   September 1984 Simple File Transfer Protocol 
  604.  
  605.        CRLF Conversion 
  606.  
  607.          Pro:  In ASCII type, convert the local end of line indicator to          CRLF on the way out of the host and onto the network. 
  608.  
  609.          Con:  If you require that you have to look at the bytes as you          send them, otherwise you can just send them.  Most of the time          both sides will have the same end of line convention anyway.          If someone needs a conversion it can be done with a TECO macro          separately. 
  610.  
  611.          Resolution:  I have required CRLF conversion in ASCII type.  If          you have the same kind of machines and the same end of line          convention you can avoid the extra cost of conversion by using          the binary or continuous type. 
  612.  
  613.       TCP Urgent 
  614.  
  615.          Pro:  Use TCP Urgent to abort a transfer, instead of aborting          the connection.  Then one could retry the file, or try a          different file without having to login again. 
  616.  
  617.          Con:  That would couple SFTP to TCP too much.  SFTP is supposed          to be able to be work over any reliable 8-bit data stream. 
  618.  
  619.          Resolution:  I have not made use of TCP Urgent. 
  620.  
  621.       Random Access 
  622.  
  623.          Pro:  Wouldn't it be nice if (WIBNIF) SFTP had a way of          accessing parts of a file? 
  624.  
  625.          Con:  Forget it, this is supposed to be SIMPLE file transfer.          If you need random access use real FTP (oops, real FTP doesn't          have random access either -- invent another protocol?). 
  626.  
  627.          Resolution:  I have not made any provision for Random Access. 
  628.  
  629.    -- jon postel. 
  630.  
  631.  
  632.  
  633.  
  634.  
  635.  
  636.  
  637.  
  638.  
  639.  Lottor                                                         [Page 15] 
  640.  
  641.