1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060106110621063106410651066106710681069107010711072107310741075107610771078107910801081108210831084108510861087108810891090109110921093109410951096109710981099110011011102110311041105110611071108110911101111111211131114111511161117111811191120112111221123112411251126112711281129113011311132113311341135113611371138113911401141114211431144114511461147114811491150115111521153115411551156115711581159116011611162116311641165116611671168116911701171117211731174117511761177117811791180118111821183118411851186118711881189119011911192119311941195119611971198119912001201120212031204120512061207120812091210121112121213121412151216121712181219122012211222122312241225122612271228122912301231123212331234123512361237123812391240124112421243124412451246124712481249125012511252125312541255125612571258125912601261126212631264126512661267126812691270127112721273127412751276127712781279128012811282128312841285128612871288128912901291129212931294129512961297129812991300130113021303130413051306130713081309131013111312131313141315131613171318131913201321132213231324132513261327132813291330133113321333133413351336133713381339134013411342134313441345134613471348134913501351135213531354135513561357135813591360136113621363136413651366136713681369137013711372137313741375137613771378137913801381138213831384138513861387138813891390139113921393139413951396139713981399140014011402140314041405140614071408140914101411141214131414141514161417141814191420142114221423142414251426142714281429143014311432143314341435143614371438143914401441144214431444144514461447144814491450145114521453145414551456145714581459146014611462146314641465146614671468146914701471147214731474147514761477147814791480148114821483148414851486148714881489149014911492149314941495149614971498149915001501150215031504150515061507150815091510151115121513151415151516151715181519152015211522152315241525152615271528152915301531153215331534153515361537153815391540154115421543154415451546154715481549155015511552155315541555155615571558155915601561156215631564156515661567156815691570157115721573157415751576157715781579158015811582158315841585158615871588158915901591159215931594159515961597159815991600160116021603160416051606160716081609161016111612161316141615161616171618161916201621162216231624162516261627162816291630163116321633163416351636163716381639164016411642164316441645164616471648164916501651165216531654165516561657165816591660166116621663166416651666166716681669167016711672167316741675167616771678167916801681168216831684168516861687168816891690169116921693169416951696169716981699170017011702170317041705170617071708170917101711171217131714171517161717171817191720172117221723172417251726172717281729173017311732173317341735173617371738173917401741174217431744174517461747174817491750175117521753175417551756175717581759176017611762176317641765176617671768176917701771177217731774177517761777177817791780178117821783178417851786178717881789179017911792179317941795179617971798179918001801180218031804180518061807180818091810181118121813181418151816181718181819182018211822182318241825182618271828182918301831183218331834183518361837183818391840184118421843184418451846184718481849185018511852185318541855185618571858185918601861186218631864186518661867186818691870187118721873187418751876187718781879188018811882188318841885188618871888188918901891189218931894189518961897189818991900190119021903190419051906190719081909191019111912191319141915191619171918191919201921192219231924192519261927192819291930193119321933193419351936193719381939194019411942194319441945194619471948194919501951195219531954195519561957195819591960196119621963196419651966196719681969197019711972197319741975197619771978197919801981198219831984198519861987198819891990199119921993199419951996199719981999200020012002200320042005200620072008200920102011201220132014201520162017201820192020202120222023202420252026202720282029203020312032203320342035203620372038203920402041204220432044204520462047204820492050205120522053205420552056205720582059206020612062206320642065206620672068206920702071207220732074207520762077207820792080208120822083208420852086208720882089209020912092209320942095209620972098209921002101210221032104210521062107210821092110211121122113211421152116211721182119212021212122212321242125212621272128212921302131213221332134213521362137213821392140214121422143214421452146214721482149215021512152215321542155215621572158215921602161216221632164216521662167216821692170217121722173217421752176217721782179218021812182218321842185218621872188218921902191219221932194219521962197219821992200220122022203220422052206220722082209221022112212221322142215221622172218221922202221222222232224222522262227222822292230223122322233223422352236223722382239224022412242224322442245224622472248224922502251225222532254225522562257225822592260226122622263226422652266226722682269227022712272227322742275227622772278227922802281228222832284228522862287228822892290229122922293229422952296229722982299230023012302230323042305230623072308230923102311231223132314231523162317231823192320232123222323232423252326232723282329233023312332233323342335233623372338233923402341234223432344234523462347234823492350235123522353235423552356235723582359236023612362236323642365236623672368236923702371237223732374237523762377237823792380238123822383238423852386238723882389239023912392239323942395239623972398239924002401240224032404240524062407240824092410241124122413241424152416241724182419242024212422242324242425242624272428242924302431243224332434243524362437243824392440244124422443244424452446244724482449245024512452245324542455245624572458245924602461246224632464246524662467246824692470247124722473247424752476247724782479248024812482248324842485248624872488248924902491249224932494249524962497249824992500250125022503250425052506250725082509251025112512251325142515251625172518251925202521252225232524252525262527252825292530253125322533253425352536253725382539254025412542254325442545254625472548254925502551255225532554255525562557255825592560256125622563256425652566256725682569257025712572257325742575257625772578257925802581258225832584258525862587258825892590259125922593259425952596259725982599260026012602260326042605260626072608260926102611261226132614261526162617261826192620262126222623262426252626262726282629263026312632263326342635263626372638263926402641264226432644264526462647264826492650265126522653265426552656265726582659266026612662266326642665266626672668266926702671267226732674267526762677267826792680268126822683268426852686268726882689269026912692269326942695269626972698269927002701270227032704270527062707270827092710271127122713271427152716271727182719272027212722272327242725272627272728272927302731273227332734273527362737273827392740274127422743274427452746274727482749275027512752275327542755275627572758275927602761276227632764276527662767276827692770277127722773277427752776277727782779278027812782278327842785278627872788278927902791279227932794279527962797279827992800280128022803280428052806280728082809281028112812281328142815281628172818281928202821282228232824282528262827282828292830283128322833283428352836283728382839284028412842284328442845284628472848284928502851285228532854285528562857285828592860286128622863286428652866286728682869287028712872287328742875287628772878287928802881288228832884288528862887288828892890289128922893289428952896289728982899290029012902290329042905290629072908290929102911291229132914291529162917291829192920292129222923292429252926292729282929293029312932293329342935293629372938293929402941294229432944294529462947294829492950295129522953295429552956295729582959296029612962296329642965296629672968296929702971297229732974297529762977297829792980298129822983298429852986298729882989299029912992299329942995299629972998299930003001300230033004300530063007300830093010301130123013301430153016301730183019302030213022302330243025302630273028302930303031303230333034303530363037303830393040304130423043304430453046304730483049305030513052305330543055305630573058305930603061306230633064306530663067306830693070307130723073307430753076307730783079308030813082308330843085308630873088308930903091309230933094309530963097309830993100310131023103310431053106310731083109311031113112311331143115311631173118311931203121312231233124312531263127312831293130313131323133313431353136313731383139314031413142314331443145314631473148314931503151315231533154315531563157315831593160316131623163316431653166316731683169317031713172317331743175317631773178317931803181318231833184318531863187318831893190319131923193319431953196319731983199320032013202320332043205320632073208320932103211321232133214321532163217321832193220322132223223322432253226322732283229323032313232323332343235323632373238323932403241324232433244324532463247324832493250325132523253325432553256325732583259326032613262326332643265326632673268326932703271327232733274327532763277327832793280328132823283328432853286328732883289329032913292329332943295329632973298329933003301330233033304330533063307330833093310331133123313331433153316331733183319332033213322332333243325332633273328332933303331333233333334333533363337333833393340334133423343334433453346334733483349335033513352335333543355335633573358335933603361336233633364336533663367336833693370337133723373337433753376337733783379338033813382338333843385338633873388338933903391339233933394339533963397339833993400340134023403340434053406340734083409341034113412341334143415341634173418341934203421342234233424342534263427342834293430343134323433343434353436343734383439344034413442344334443445344634473448344934503451345234533454345534563457345834593460346134623463346434653466346734683469347034713472347334743475347634773478347934803481348234833484348534863487348834893490349134923493349434953496349734983499350035013502350335043505350635073508350935103511351235133514351535163517351835193520352135223523352435253526352735283529353035313532353335343535353635373538353935403541354235433544354535463547354835493550355135523553355435553556355735583559356035613562356335643565356635673568356935703571357235733574357535763577357835793580358135823583358435853586358735883589359035913592359335943595359635973598359936003601360236033604360536063607360836093610361136123613361436153616361736183619362036213622362336243625362636273628362936303631363236333634363536363637363836393640364136423643364436453646364736483649365036513652365336543655365636573658365936603661366236633664366536663667366836693670367136723673367436753676367736783679368036813682368336843685368636873688368936903691369236933694369536963697369836993700370137023703370437053706370737083709371037113712371337143715371637173718371937203721372237233724372537263727372837293730373137323733373437353736373737383739374037413742374337443745374637473748374937503751375237533754375537563757375837593760376137623763376437653766376737683769377037713772377337743775377637773778377937803781378237833784378537863787378837893790379137923793379437953796379737983799380038013802380338043805380638073808380938103811381238133814381538163817381838193820382138223823382438253826382738283829383038313832383338343835383638373838383938403841384238433844384538463847384838493850385138523853385438553856385738583859386038613862386338643865386638673868386938703871387238733874387538763877387838793880388138823883388438853886388738883889389038913892389338943895389638973898389939003901390239033904390539063907390839093910391139123913391439153916391739183919392039213922392339243925392639273928392939303931393239333934 |
-
- Network Working Group J. Postel
- Request for Comments: 959 J. Reynolds
- ISI
- Obsoletes RFC: 765 (IEN 149) October 1985
- FILE TRANSFER PROTOCOL (FTP)
- Status of this Memo
- This memo is the official specification of the File Transfer
- Protocol (FTP). Distribution of this memo is unlimited.
- The following new optional commands are included in this edition of
- the specification:
- CDUP (Change to Parent Directory), SMNT (Structure Mount), STOU
- (Store Unique), RMD (Remove Directory), MKD (Make Directory), PWD
- (Print Directory), and SYST (System).
- Note that this specification is compatible with the previous edition.
- 1. INTRODUCTION
- The objectives of FTP are 1) to promote sharing of files (computer
- programs and/or data), 2) to encourage indirect or implicit (via
- programs) use of remote computers, 3) to shield a user from
- variations in file storage systems among hosts, and 4) to transfer
- data reliably and efficiently. FTP, though usable directly by a user
- at a terminal, is designed mainly for use by programs.
- The attempt in this specification is to satisfy the diverse needs of
- users of maxi-hosts, mini-hosts, personal workstations, and TACs,
- with a simple, and easily implemented protocol design.
- This paper assumes knowledge of the Transmission Control Protocol
- (TCP) [2] and the Telnet Protocol [3]. These documents are contained
- in the ARPA-Internet protocol handbook [1].
- 2. OVERVIEW
- In this section, the history, the terminology, and the FTP model are
- discussed. The terms defined in this section are only those that
- have special significance in FTP. Some of the terminology is very
- specific to the FTP model; some readers may wish to turn to the
- section on the FTP model while reviewing the terminology.
- Postel & Reynolds [Page 1]
-
- RFC 959 October 1985
- File Transfer Protocol
- 2.1. HISTORY
- FTP has had a long evolution over the years. Appendix III is a
- chronological compilation of Request for Comments documents
- relating to FTP. These include the first proposed file transfer
- mechanisms in 1971 that were developed for implementation on hosts
- at M.I.T. (RFC 114), plus comments and discussion in RFC 141.
- RFC 172 provided a user-level oriented protocol for file transfer
- between host computers (including terminal IMPs). A revision of
- this as RFC 265, restated FTP for additional review, while RFC 281
- suggested further changes. The use of a "Set Data Type"
- transaction was proposed in RFC 294 in January 1982.
- RFC 354 obsoleted RFCs 264 and 265. The File Transfer Protocol
- was now defined as a protocol for file transfer between HOSTs on
- the ARPANET, with the primary function of FTP defined as
- transfering files efficiently and reliably among hosts and
- allowing the convenient use of remote file storage capabilities.
- RFC 385 further commented on errors, emphasis points, and
- additions to the protocol, while RFC 414 provided a status report
- on the working server and user FTPs. RFC 430, issued in 1973,
- (among other RFCs too numerous to mention) presented further
- comments on FTP. Finally, an "official" FTP document was
- published as RFC 454.
- By July 1973, considerable changes from the last versions of FTP
- were made, but the general structure remained the same. RFC 542
- was published as a new "official" specification to reflect these
- changes. However, many implementations based on the older
- specification were not updated.
- In 1974, RFCs 607 and 614 continued comments on FTP. RFC 624
- proposed further design changes and minor modifications. In 1975,
- RFC 686 entitled, "Leaving Well Enough Alone", discussed the
- differences between all of the early and later versions of FTP.
- RFC 691 presented a minor revision of RFC 686, regarding the
- subject of print files.
- Motivated by the transition from the NCP to the TCP as the
- underlying protocol, a phoenix was born out of all of the above
- efforts in RFC 765 as the specification of FTP for use on TCP.
- This current edition of the FTP specification is intended to
- correct some minor documentation errors, to improve the
- explanation of some protocol features, and to add some new
- optional commands.
- Postel & Reynolds [Page 2]
-
- RFC 959 October 1985
- File Transfer Protocol
- In particular, the following new optional commands are included in
- this edition of the specification:
- CDUP - Change to Parent Directory
- SMNT - Structure Mount
- STOU - Store Unique
- RMD - Remove Directory
- MKD - Make Directory
- PWD - Print Directory
- SYST - System
- This specification is compatible with the previous edition. A
- program implemented in conformance to the previous specification
- should automatically be in conformance to this specification.
- 2.2. TERMINOLOGY
- ASCII
- The ASCII character set is as defined in the ARPA-Internet
- Protocol Handbook. In FTP, ASCII characters are defined to be
- the lower half of an eight-bit code set (i.e., the most
- significant bit is zero).
- access controls
- Access controls define users' access privileges to the use of a
- system, and to the files in that system. Access controls are
- necessary to prevent unauthorized or accidental use of files.
- It is the prerogative of a server-FTP process to invoke access
- controls.
- byte size
- There are two byte sizes of interest in FTP: the logical byte
- size of the file, and the transfer byte size used for the
- transmission of the data. The transfer byte size is always 8
- bits. The transfer byte size is not necessarily the byte size
- in which data is to be stored in a system, nor the logical byte
- size for interpretation of the structure of the data.
- Postel & Reynolds [Page 3]
-
- RFC 959 October 1985
- File Transfer Protocol
- control connection
- The communication path between the USER-PI and SERVER-PI for
- the exchange of commands and replies. This connection follows
- the Telnet Protocol.
- data connection
- A full duplex connection over which data is transferred, in a
- specified mode and type. The data transferred may be a part of
- a file, an entire file or a number of files. The path may be
- between a server-DTP and a user-DTP, or between two
- server-DTPs.
- data port
- The passive data transfer process "listens" on the data port
- for a connection from the active transfer process in order to
- open the data connection.
- DTP
- The data transfer process establishes and manages the data
- connection. The DTP can be passive or active.
- End-of-Line
- The end-of-line sequence defines the separation of printing
- lines. The sequence is Carriage Return, followed by Line Feed.
- EOF
- The end-of-file condition that defines the end of a file being
- transferred.
- EOR
- The end-of-record condition that defines the end of a record
- being transferred.
- error recovery
- A procedure that allows a user to recover from certain errors
- such as failure of either host system or transfer process. In
- FTP, error recovery may involve restarting a file transfer at a
- given checkpoint.
- Postel & Reynolds [Page 4]
-
- RFC 959 October 1985
- File Transfer Protocol
- FTP commands
- A set of commands that comprise the control information flowing
- from the user-FTP to the server-FTP process.
- file
- An ordered set of computer data (including programs), of
- arbitrary length, uniquely identified by a pathname.
- mode
- The mode in which data is to be transferred via the data
- connection. The mode defines the data format during transfer
- including EOR and EOF. The transfer modes defined in FTP are
- described in the Section on Transmission Modes.
- NVT
- The Network Virtual Terminal as defined in the Telnet Protocol.
- NVFS
- The Network Virtual File System. A concept which defines a
- standard network file system with standard commands and
- pathname conventions.
- page
- A file may be structured as a set of independent parts called
- pages. FTP supports the transmission of discontinuous files as
- independent indexed pages.
- pathname
- Pathname is defined to be the character string which must be
- input to a file system by a user in order to identify a file.
- Pathname normally contains device and/or directory names, and
- file name specification. FTP does not yet specify a standard
- pathname convention. Each user must follow the file naming
- conventions of the file systems involved in the transfer.
- PI
- The protocol interpreter. The user and server sides of the
- protocol have distinct roles implemented in a user-PI and a
- server-PI.
- Postel & Reynolds [Page 5]
-
- RFC 959 October 1985
- File Transfer Protocol
- record
- A sequential file may be structured as a number of contiguous
- parts called records. Record structures are supported by FTP
- but a file need not have record structure.
- reply
- A reply is an acknowledgment (positive or negative) sent from
- server to user via the control connection in response to FTP
- commands. The general form of a reply is a completion code
- (including error codes) followed by a text string. The codes
- are for use by programs and the text is usually intended for
- human users.
- server-DTP
- The data transfer process, in its normal "active" state,
- establishes the data connection with the "listening" data port.
- It sets up parameters for transfer and storage, and transfers
- data on command from its PI. The DTP can be placed in a
- "passive" state to listen for, rather than initiate a
- connection on the data port.
- server-FTP process
- A process or set of processes which perform the function of
- file transfer in cooperation with a user-FTP process and,
- possibly, another server. The functions consist of a protocol
- interpreter (PI) and a data transfer process (DTP).
- server-PI
- The server protocol interpreter "listens" on Port L for a
- connection from a user-PI and establishes a control
- communication connection. It receives standard FTP commands
- from the user-PI, sends replies, and governs the server-DTP.
- type
- The data representation type used for data transfer and
- storage. Type implies certain transformations between the time
- of data storage and data transfer. The representation types
- defined in FTP are described in the Section on Establishing
- Data Connections.
- Postel & Reynolds [Page 6]
-
- RFC 959 October 1985
- File Transfer Protocol
- user
- A person or a process on behalf of a person wishing to obtain
- file transfer service. The human user may interact directly
- with a server-FTP process, but use of a user-FTP process is
- preferred since the protocol design is weighted towards
- automata.
- user-DTP
- The data transfer process "listens" on the data port for a
- connection from a server-FTP process. If two servers are
- transferring data between them, the user-DTP is inactive.
- user-FTP process
- A set of functions including a protocol interpreter, a data
- transfer process and a user interface which together perform
- the function of file transfer in cooperation with one or more
- server-FTP processes. The user interface allows a local
- language to be used in the command-reply dialogue with the
- user.
- user-PI
- The user protocol interpreter initiates the control connection
- from its port U to the server-FTP process, initiates FTP
- commands, and governs the user-DTP if that process is part of
- the file transfer.
- Postel & Reynolds [Page 7]
-
- RFC 959 October 1985
- File Transfer Protocol
- 2.3. THE FTP MODEL
- With the above definitions in mind, the following model (shown in
- Figure 1) may be diagrammed for an FTP service.
- -------------
- |/---------\|
- || User || --------
- ||Interface|<--->| User |
- |\----^----/| --------
- ---------- | | |
- |/------\| FTP Commands |/----V----\|
- ||Server|<---------------->| User ||
- || PI || FTP Replies || PI ||
- |\--^---/| |\----^----/|
- | | | | | |
- -------- |/--V---\| Data |/----V----\| --------
- | File |<--->|Server|<---------------->| User |<--->| File |
- |System| || DTP || Connection || DTP || |System|
- -------- |\------/| |\---------/| --------
- ---------- -------------
- Server-FTP USER-FTP
- NOTES: 1. The data connection may be used in either direction.
- 2. The data connection need not exist all of the time.
- Figure 1 Model for FTP Use
- In the model described in Figure 1, the user-protocol interpreter
- initiates the control connection. The control connection follows
- the Telnet protocol. At the initiation of the user, standard FTP
- commands are generated by the user-PI and transmitted to the
- server process via the control connection. (The user may
- establish a direct control connection to the server-FTP, from a
- TAC terminal for example, and generate standard FTP commands
- independently, bypassing the user-FTP process.) Standard replies
- are sent from the server-PI to the user-PI over the control
- connection in response to the commands.
- The FTP commands specify the parameters for the data connection
- (data port, transfer mode, representation type, and structure) and
- the nature of file system operation (store, retrieve, append,
- delete, etc.). The user-DTP or its designate should "listen" on
- the specified data port, and the server initiate the data
- connection and data transfer in accordance with the specified
- parameters. It should be noted that the data port need not be in
- Postel & Reynolds [Page 8]
-
- RFC 959 October 1985
- File Transfer Protocol
- the same host that initiates the FTP commands via the control
- connection, but the user or the user-FTP process must ensure a
- "listen" on the specified data port. It ought to also be noted
- that the data connection may be used for simultaneous sending and
- receiving.
- In another situation a user might wish to transfer files between
- two hosts, neither of which is a local host. The user sets up
- control connections to the two servers and then arranges for a
- data connection between them. In this manner, control information
- is passed to the user-PI but data is transferred between the
- server data transfer processes. Following is a model of this
- server-server interaction.
-
- Control ------------ Control
- ---------->| User-FTP |<-----------
- | | User-PI | |
- | | "C" | |
- V ------------ V
- -------------- --------------
- | Server-FTP | Data Connection | Server-FTP |
- | "A" |<---------------------->| "B" |
- -------------- Port (A) Port (B) --------------
-
- Figure 2
- The protocol requires that the control connections be open while
- data transfer is in progress. It is the responsibility of the
- user to request the closing of the control connections when
- finished using the FTP service, while it is the server who takes
- the action. The server may abort data transfer if the control
- connections are closed without command.
- The Relationship between FTP and Telnet:
- The FTP uses the Telnet protocol on the control connection.
- This can be achieved in two ways: first, the user-PI or the
- server-PI may implement the rules of the Telnet Protocol
- directly in their own procedures; or, second, the user-PI or
- the server-PI may make use of the existing Telnet module in the
- system.
- Ease of implementaion, sharing code, and modular programming
- argue for the second approach. Efficiency and independence
- Postel & Reynolds [Page 9]
-
- RFC 959 October 1985
- File Transfer Protocol
- argue for the first approach. In practice, FTP relies on very
- little of the Telnet Protocol, so the first approach does not
- necessarily involve a large amount of code.
- 3. DATA TRANSFER FUNCTIONS
- Files are transferred only via the data connection. The control
- connection is used for the transfer of commands, which describe the
- functions to be performed, and the replies to these commands (see the
- Section on FTP Replies). Several commands are concerned with the
- transfer of data between hosts. These data transfer commands include
- the MODE command which specify how the bits of the data are to be
- transmitted, and the STRUcture and TYPE commands, which are used to
- define the way in which the data are to be represented. The
- transmission and representation are basically independent but the
- "Stream" transmission mode is dependent on the file structure
- attribute and if "Compressed" transmission mode is used, the nature
- of the filler byte depends on the representation type.
- 3.1. DATA REPRESENTATION AND STORAGE
- Data is transferred from a storage device in the sending host to a
- storage device in the receiving host. Often it is necessary to
- perform certain transformations on the data because data storage
- representations in the two systems are different. For example,
- NVT-ASCII has different data storage representations in different
- systems. DEC TOPS-20s's generally store NVT-ASCII as five 7-bit
- ASCII characters, left-justified in a 36-bit word. IBM Mainframe's
- store NVT-ASCII as 8-bit EBCDIC codes. Multics stores NVT-ASCII
- as four 9-bit characters in a 36-bit word. It is desirable to
- convert characters into the standard NVT-ASCII representation when
- transmitting text between dissimilar systems. The sending and
- receiving sites would have to perform the necessary
- transformations between the standard representation and their
- internal representations.
- A different problem in representation arises when transmitting
- binary data (not character codes) between host systems with
- different word lengths. It is not always clear how the sender
- should send data, and the receiver store it. For example, when
- transmitting 32-bit bytes from a 32-bit word-length system to a
- 36-bit word-length system, it may be desirable (for reasons of
- efficiency and usefulness) to store the 32-bit bytes
- right-justified in a 36-bit word in the latter system. In any
- case, the user should have the option of specifying data
- representation and transformation functions. It should be noted
- Postel & Reynolds [Page 10]
-
- RFC 959 October 1985
- File Transfer Protocol
- that FTP provides for very limited data type representations.
- Transformations desired beyond this limited capability should be
- performed by the user directly.
- 3.1.1. DATA TYPES
- Data representations are handled in FTP by a user specifying a
- representation type. This type may implicitly (as in ASCII or
- EBCDIC) or explicitly (as in Local byte) define a byte size for
- interpretation which is referred to as the "logical byte size."
- Note that this has nothing to do with the byte size used for
- transmission over the data connection, called the "transfer
- byte size", and the two should not be confused. For example,
- NVT-ASCII has a logical byte size of 8 bits. If the type is
- Local byte, then the TYPE command has an obligatory second
- parameter specifying the logical byte size. The transfer byte
- size is always 8 bits.
- 3.1.1.1. ASCII TYPE
- This is the default type and must be accepted by all FTP
- implementations. It is intended primarily for the transfer
- of text files, except when both hosts would find the EBCDIC
- type more convenient.
- The sender converts the data from an internal character
- representation to the standard 8-bit NVT-ASCII
- representation (see the Telnet specification). The receiver
- will convert the data from the standard form to his own
- internal form.
- In accordance with the NVT standard, the <CRLF> sequence
- should be used where necessary to denote the end of a line
- of text. (See the discussion of file structure at the end
- of the Section on Data Representation and Storage.)
- Using the standard NVT-ASCII representation means that data
- must be interpreted as 8-bit bytes.
- The Format parameter for ASCII and EBCDIC types is discussed
- below.
- Postel & Reynolds [Page 11]
-
- RFC 959 October 1985
- File Transfer Protocol
- 3.1.1.2. EBCDIC TYPE
- This type is intended for efficient transfer between hosts
- which use EBCDIC for their internal character
- representation.
- For transmission, the data are represented as 8-bit EBCDIC
- characters. The character code is the only difference
- between the functional specifications of EBCDIC and ASCII
- types.
- End-of-line (as opposed to end-of-record--see the discussion
- of structure) will probably be rarely used with EBCDIC type
- for purposes of denoting structure, but where it is
- necessary the <NL> character should be used.
- 3.1.1.3. IMAGE TYPE
- The data are sent as contiguous bits which, for transfer,
- are packed into the 8-bit transfer bytes. The receiving
- site must store the data as contiguous bits. The structure
- of the storage system might necessitate the padding of the
- file (or of each record, for a record-structured file) to
- some convenient boundary (byte, word or block). This
- padding, which must be all zeros, may occur only at the end
- of the file (or at the end of each record) and there must be
- a way of identifying the padding bits so that they may be
- stripped off if the file is retrieved. The padding
- transformation should be well publicized to enable a user to
- process a file at the storage site.
- Image type is intended for the efficient storage and
- retrieval of files and for the transfer of binary data. It
- is recommended that this type be accepted by all FTP
- implementations.
- 3.1.1.4. LOCAL TYPE
- The data is transferred in logical bytes of the size
- specified by the obligatory second parameter, Byte size.
- The value of Byte size must be a decimal integer; there is
- no default value. The logical byte size is not necessarily
- the same as the transfer byte size. If there is a
- difference in byte sizes, then the logical bytes should be
- packed contiguously, disregarding transfer byte boundaries
- and with any necessary padding at the end.
- Postel & Reynolds [Page 12]
-
- RFC 959 October 1985
- File Transfer Protocol
- When the data reaches the receiving host, it will be
- transformed in a manner dependent on the logical byte size
- and the particular host. This transformation must be
- invertible (i.e., an identical file can be retrieved if the
- same parameters are used) and should be well publicized by
- the FTP implementors.
- For example, a user sending 36-bit floating-point numbers to
- a host with a 32-bit word could send that data as Local byte
- with a logical byte size of 36. The receiving host would
- then be expected to store the logical bytes so that they
- could be easily manipulated; in this example putting the
- 36-bit logical bytes into 64-bit double words should
- suffice.
- In another example, a pair of hosts with a 36-bit word size
- may send data to one another in words by using TYPE L 36.
- The data would be sent in the 8-bit transmission bytes
- packed so that 9 transmission bytes carried two host words.
- 3.1.1.5. FORMAT CONTROL
- The types ASCII and EBCDIC also take a second (optional)
- parameter; this is to indicate what kind of vertical format
- control, if any, is associated with a file. The following
- data representation types are defined in FTP:
- A character file may be transferred to a host for one of
- three purposes: for printing, for storage and later
- retrieval, or for processing. If a file is sent for
- printing, the receiving host must know how the vertical
- format control is represented. In the second case, it must
- be possible to store a file at a host and then retrieve it
- later in exactly the same form. Finally, it should be
- possible to move a file from one host to another and process
- the file at the second host without undue trouble. A single
- ASCII or EBCDIC format does not satisfy all these
- conditions. Therefore, these types have a second parameter
- specifying one of the following three formats:
- 3.1.1.5.1. NON PRINT
- This is the default format to be used if the second
- (format) parameter is omitted. Non-print format must be
- accepted by all FTP implementations.
- Postel & Reynolds [Page 13]
-
- RFC 959 October 1985
- File Transfer Protocol
- The file need contain no vertical format information. If
- it is passed to a printer process, this process may
- assume standard values for spacing and margins.
- Normally, this format will be used with files destined
- for processing or just storage.
- 3.1.1.5.2. TELNET FORMAT CONTROLS
- The file contains ASCII/EBCDIC vertical format controls
- (i.e., <CR>, <LF>, <NL>, <VT>, <FF>) which the printer
- process will interpret appropriately. <CRLF>, in exactly
- this sequence, also denotes end-of-line.
- 3.1.1.5.2. CARRIAGE CONTROL (ASA)
- The file contains ASA (FORTRAN) vertical format control
- characters. (See RFC 740 Appendix C; and Communications
- of the ACM, Vol. 7, No. 10, p. 606, October 1964.) In a
- line or a record formatted according to the ASA Standard,
- the first character is not to be printed. Instead, it
- should be used to determine the vertical movement of the
- paper which should take place before the rest of the
- record is printed.
- The ASA Standard specifies the following control
- characters:
- Character Vertical Spacing
- blank Move paper up one line
- 0 Move paper up two lines
- 1 Move paper to top of next page
- + No movement, i.e., overprint
- Clearly there must be some way for a printer process to
- distinguish the end of the structural entity. If a file
- has record structure (see below) this is no problem;
- records will be explicitly marked during transfer and
- storage. If the file has no record structure, the <CRLF>
- end-of-line sequence is used to separate printing lines,
- but these format effectors are overridden by the ASA
- controls.
- Postel & Reynolds [Page 14]
-
- RFC 959 October 1985
- File Transfer Protocol
- 3.1.2. DATA STRUCTURES
- In addition to different representation types, FTP allows the
- structure of a file to be specified. Three file structures are
- defined in FTP:
- file-structure, where there is no internal structure and
- the file is considered to be a
- continuous sequence of data bytes,
- record-structure, where the file is made up of sequential
- records,
- and page-structure, where the file is made up of independent
- indexed pages.
- File-structure is the default to be assumed if the STRUcture
- command has not been used but both file and record structures
- must be accepted for "text" files (i.e., files with TYPE ASCII
- or EBCDIC) by all FTP implementations. The structure of a file
- will affect both the transfer mode of a file (see the Section
- on Transmission Modes) and the interpretation and storage of
- the file.
- The "natural" structure of a file will depend on which host
- stores the file. A source-code file will usually be stored on
- an IBM Mainframe in fixed length records but on a DEC TOPS-20
- as a stream of characters partitioned into lines, for example
- by <CRLF>. If the transfer of files between such disparate
- sites is to be useful, there must be some way for one site to
- recognize the other's assumptions about the file.
- With some sites being naturally file-oriented and others
- naturally record-oriented there may be problems if a file with
- one structure is sent to a host oriented to the other. If a
- text file is sent with record-structure to a host which is file
- oriented, then that host should apply an internal
- transformation to the file based on the record structure.
- Obviously, this transformation should be useful, but it must
- also be invertible so that an identical file may be retrieved
- using record structure.
- In the case of a file being sent with file-structure to a
- record-oriented host, there exists the question of what
- criteria the host should use to divide the file into records
- which can be processed locally. If this division is necessary,
- the FTP implementation should use the end-of-line sequence,
- Postel & Reynolds [Page 15]
-
- RFC 959 October 1985
- File Transfer Protocol
- <CRLF> for ASCII, or <NL> for EBCDIC text files, as the
- delimiter. If an FTP implementation adopts this technique, it
- must be prepared to reverse the transformation if the file is
- retrieved with file-structure.
- 3.1.2.1. FILE STRUCTURE
- File structure is the default to be assumed if the STRUcture
- command has not been used.
- In file-structure there is no internal structure and the
- file is considered to be a continuous sequence of data
- bytes.
- 3.1.2.2. RECORD STRUCTURE
- Record structures must be accepted for "text" files (i.e.,
- files with TYPE ASCII or EBCDIC) by all FTP implementations.
- In record-structure the file is made up of sequential
- records.
- 3.1.2.3. PAGE STRUCTURE
- To transmit files that are discontinuous, FTP defines a page
- structure. Files of this type are sometimes known as
- "random access files" or even as "holey files". In these
- files there is sometimes other information associated with
- the file as a whole (e.g., a file descriptor), or with a
- section of the file (e.g., page access controls), or both.
- In FTP, the sections of the file are called pages.
- To provide for various page sizes and associated
- information, each page is sent with a page header. The page
- header has the following defined fields:
- Header Length
- The number of logical bytes in the page header
- including this byte. The minimum header length is 4.
- Page Index
- The logical page number of this section of the file.
- This is not the transmission sequence number of this
- page, but the index used to identify this page of the
- file.
- Postel & Reynolds [Page 16]
-
- RFC 959 October 1985
- File Transfer Protocol
- Data Length
- The number of logical bytes in the page data. The
- minimum data length is 0.
- Page Type
- The type of page this is. The following page types
- are defined:
- 0 = Last Page
- This is used to indicate the end of a paged
- structured transmission. The header length must
- be 4, and the data length must be 0.
- 1 = Simple Page
- This is the normal type for simple paged files
- with no page level associated control
- information. The header length must be 4.
- 2 = Descriptor Page
- This type is used to transmit the descriptive
- information for the file as a whole.
- 3 = Access Controlled Page
- This type includes an additional header field
- for paged files with page level access control
- information. The header length must be 5.
- Optional Fields
- Further header fields may be used to supply per page
- control information, for example, per page access
- control.
- All fields are one logical byte in length. The logical byte
- size is specified by the TYPE command. See Appendix I for
- further details and a specific case at the page structure.
- A note of caution about parameters: a file must be stored and
- retrieved with the same parameters if the retrieved version is to
- Postel & Reynolds [Page 17]
-
- RFC 959 October 1985
- File Transfer Protocol
- be identical to the version originally transmitted. Conversely,
- FTP implementations must return a file identical to the original
- if the parameters used to store and retrieve a file are the same.
- 3.2. ESTABLISHING DATA CONNECTIONS
- The mechanics of transferring data consists of setting up the data
- connection to the appropriate ports and choosing the parameters
- for transfer. Both the user and the server-DTPs have a default
- data port. The user-process default data port is the same as the
- control connection port (i.e., U). The server-process default
- data port is the port adjacent to the control connection port
- (i.e., L-1).
- The transfer byte size is 8-bit bytes. This byte size is relevant
- only for the actual transfer of the data; it has no bearing on
- representation of the data within a host's file system.
- The passive data transfer process (this may be a user-DTP or a
- second server-DTP) shall "listen" on the data port prior to
- sending a transfer request command. The FTP request command
- determines the direction of the data transfer. The server, upon
- receiving the transfer request, will initiate the data connection
- to the port. When the connection is established, the data
- transfer begins between DTP's, and the server-PI sends a
- confirming reply to the user-PI.
- Every FTP implementation must support the use of the default data
- ports, and only the USER-PI can initiate a change to non-default
- ports.
- It is possible for the user to specify an alternate data port by
- use of the PORT command. The user may want a file dumped on a TAC
- line printer or retrieved from a third party host. In the latter
- case, the user-PI sets up control connections with both
- server-PI's. One server is then told (by an FTP command) to
- "listen" for a connection which the other will initiate. The
- user-PI sends one server-PI a PORT command indicating the data
- port of the other. Finally, both are sent the appropriate
- transfer commands. The exact sequence of commands and replies
- sent between the user-controller and the servers is defined in the
- Section on FTP Replies.
- In general, it is the server's responsibility to maintain the data
- connection--to initiate it and to close it. The exception to this
- Postel & Reynolds [Page 18]
-
- RFC 959 October 1985
- File Transfer Protocol
- is when the user-DTP is sending the data in a transfer mode that
- requires the connection to be closed to indicate EOF. The server
- MUST close the data connection under the following conditions:
- 1. The server has completed sending data in a transfer mode
- that requires a close to indicate EOF.
- 2. The server receives an ABORT command from the user.
- 3. The port specification is changed by a command from the
- user.
- 4. The control connection is closed legally or otherwise.
- 5. An irrecoverable error condition occurs.
- Otherwise the close is a server option, the exercise of which the
- server must indicate to the user-process by either a 250 or 226
- reply only.
- 3.3. DATA CONNECTION MANAGEMENT
- Default Data Connection Ports: All FTP implementations must
- support use of the default data connection ports, and only the
- User-PI may initiate the use of non-default ports.
- Negotiating Non-Default Data Ports: The User-PI may specify a
- non-default user side data port with the PORT command. The
- User-PI may request the server side to identify a non-default
- server side data port with the PASV command. Since a connection
- is defined by the pair of addresses, either of these actions is
- enough to get a different data connection, still it is permitted
- to do both commands to use new ports on both ends of the data
- connection.
- Reuse of the Data Connection: When using the stream mode of data
- transfer the end of the file must be indicated by closing the
- connection. This causes a problem if multiple files are to be
- transfered in the session, due to need for TCP to hold the
- connection record for a time out period to guarantee the reliable
- communication. Thus the connection can not be reopened at once.
- There are two solutions to this problem. The first is to
- negotiate a non-default port. The second is to use another
- transfer mode.
- A comment on transfer modes. The stream transfer mode is
- Postel & Reynolds [Page 19]
-
- RFC 959 October 1985
- File Transfer Protocol
- inherently unreliable, since one can not determine if the
- connection closed prematurely or not. The other transfer modes
- (Block, Compressed) do not close the connection to indicate the
- end of file. They have enough FTP encoding that the data
- connection can be parsed to determine the end of the file.
- Thus using these modes one can leave the data connection open
- for multiple file transfers.
- 3.4. TRANSMISSION MODES
- The next consideration in transferring data is choosing the
- appropriate transmission mode. There are three modes: one which
- formats the data and allows for restart procedures; one which also
- compresses the data for efficient transfer; and one which passes
- the data with little or no processing. In this last case the mode
- interacts with the structure attribute to determine the type of
- processing. In the compressed mode, the representation type
- determines the filler byte.
- All data transfers must be completed with an end-of-file (EOF)
- which may be explicitly stated or implied by the closing of the
- data connection. For files with record structure, all the
- end-of-record markers (EOR) are explicit, including the final one.
- For files transmitted in page structure a "last-page" page type is
- used.
- NOTE: In the rest of this section, byte means "transfer byte"
- except where explicitly stated otherwise.
- For the purpose of standardized transfer, the sending host will
- translate its internal end of line or end of record denotation
- into the representation prescribed by the transfer mode and file
- structure, and the receiving host will perform the inverse
- translation to its internal denotation. An IBM Mainframe record
- count field may not be recognized at another host, so the
- end-of-record information may be transferred as a two byte control
- code in Stream mode or as a flagged bit in a Block or Compressed
- mode descriptor. End-of-line in an ASCII or EBCDIC file with no
- record structure should be indicated by <CRLF> or <NL>,
- respectively. Since these transformations imply extra work for
- some systems, identical systems transferring non-record structured
- text files might wish to use a binary representation and stream
- mode for the transfer.
- Postel & Reynolds [Page 20]
-
- RFC 959 October 1985
- File Transfer Protocol
- The following transmission modes are defined in FTP:
- 3.4.1. STREAM MODE
- The data is transmitted as a stream of bytes. There is no
- restriction on the representation type used; record structures
- are allowed.
- In a record structured file EOR and EOF will each be indicated
- by a two-byte control code. The first byte of the control code
- will be all ones, the escape character. The second byte will
- have the low order bit on and zeros elsewhere for EOR and the
- second low order bit on for EOF; that is, the byte will have
- value 1 for EOR and value 2 for EOF. EOR and EOF may be
- indicated together on the last byte transmitted by turning both
- low order bits on (i.e., the value 3). If a byte of all ones
- was intended to be sent as data, it should be repeated in the
- second byte of the control code.
- If the structure is a file structure, the EOF is indicated by
- the sending host closing the data connection and all bytes are
- data bytes.
- 3.4.2. BLOCK MODE
- The file is transmitted as a series of data blocks preceded by
- one or more header bytes. The header bytes contain a count
- field, and descriptor code. The count field indicates the
- total length of the data block in bytes, thus marking the
- beginning of the next data block (there are no filler bits).
- The descriptor code defines: last block in the file (EOF) last
- block in the record (EOR), restart marker (see the Section on
- Error Recovery and Restart) or suspect data (i.e., the data
- being transferred is suspected of errors and is not reliable).
- This last code is NOT intended for error control within FTP.
- It is motivated by the desire of sites exchanging certain types
- of data (e.g., seismic or weather data) to send and receive all
- the data despite local errors (such as "magnetic tape read
- errors"), but to indicate in the transmission that certain
- portions are suspect). Record structures are allowed in this
- mode, and any representation type may be used.
- The header consists of the three bytes. Of the 24 bits of
- header information, the 16 low order bits shall represent byte
- count, and the 8 high order bits shall represent descriptor
- codes as shown below.
- Postel & Reynolds [Page 21]
-
- RFC 959 October 1985
- File Transfer Protocol
- Block Header
- +----------------+----------------+----------------+
- | Descriptor | Byte Count |
- | 8 bits | 16 bits |
- +----------------+----------------+----------------+
-
- The descriptor codes are indicated by bit flags in the
- descriptor byte. Four codes have been assigned, where each
- code number is the decimal value of the corresponding bit in
- the byte.
- Code Meaning
-
- 128 End of data block is EOR
- 64 End of data block is EOF
- 32 Suspected errors in data block
- 16 Data block is a restart marker
- With this encoding, more than one descriptor coded condition
- may exist for a particular block. As many bits as necessary
- may be flagged.
- The restart marker is embedded in the data stream as an
- integral number of 8-bit bytes representing printable
- characters in the language being used over the control
- connection (e.g., default--NVT-ASCII). <SP> (Space, in the
- appropriate language) must not be used WITHIN a restart marker.
- For example, to transmit a six-character marker, the following
- would be sent:
- +--------+--------+--------+
- |Descrptr| Byte count |
- |code= 16| = 6 |
- +--------+--------+--------+
- +--------+--------+--------+
- | Marker | Marker | Marker |
- | 8 bits | 8 bits | 8 bits |
- +--------+--------+--------+
- +--------+--------+--------+
- | Marker | Marker | Marker |
- | 8 bits | 8 bits | 8 bits |
- +--------+--------+--------+
- Postel & Reynolds [Page 22]
-
- RFC 959 October 1985
- File Transfer Protocol
- 3.4.3. COMPRESSED MODE
- There are three kinds of information to be sent: regular data,
- sent in a byte string; compressed data, consisting of
- replications or filler; and control information, sent in a
- two-byte escape sequence. If n>0 bytes (up to 127) of regular
- data are sent, these n bytes are preceded by a byte with the
- left-most bit set to 0 and the right-most 7 bits containing the
- number n.
- Byte string:
- 1 7 8 8
- +-+-+-+-+-+-+-+-+ +-+-+-+-+-+-+-+-+ +-+-+-+-+-+-+-+-+
- |0| n | | d(1) | ... | d(n) |
- +-+-+-+-+-+-+-+-+ +-+-+-+-+-+-+-+-+ +-+-+-+-+-+-+-+-+
- ^ ^
- |---n bytes---|
- of data
- String of n data bytes d(1),..., d(n)
- Count n must be positive.
- To compress a string of n replications of the data byte d, the
- following 2 bytes are sent:
- Replicated Byte:
- 2 6 8
- +-+-+-+-+-+-+-+-+ +-+-+-+-+-+-+-+-+
- |1 0| n | | d |
- +-+-+-+-+-+-+-+-+ +-+-+-+-+-+-+-+-+
- A string of n filler bytes can be compressed into a single
- byte, where the filler byte varies with the representation
- type. If the type is ASCII or EBCDIC the filler byte is <SP>
- (Space, ASCII code 32, EBCDIC code 64). If the type is Image
- or Local byte the filler is a zero byte.
- Filler String:
- 2 6
- +-+-+-+-+-+-+-+-+
- |1 1| n |
- +-+-+-+-+-+-+-+-+
- The escape sequence is a double byte, the first of which is the
- Postel & Reynolds [Page 23]
-
- RFC 959 October 1985
- File Transfer Protocol
- escape byte (all zeros) and the second of which contains
- descriptor codes as defined in Block mode. The descriptor
- codes have the same meaning as in Block mode and apply to the
- succeeding string of bytes.
- Compressed mode is useful for obtaining increased bandwidth on
- very large network transmissions at a little extra CPU cost.
- It can be most effectively used to reduce the size of printer
- files such as those generated by RJE hosts.
- 3.5. ERROR RECOVERY AND RESTART
- There is no provision for detecting bits lost or scrambled in data
- transfer; this level of error control is handled by the TCP.
- However, a restart procedure is provided to protect users from
- gross system failures (including failures of a host, an
- FTP-process, or the underlying network).
- The restart procedure is defined only for the block and compressed
- modes of data transfer. It requires the sender of data to insert
- a special marker code in the data stream with some marker
- information. The marker information has meaning only to the
- sender, but must consist of printable characters in the default or
- negotiated language of the control connection (ASCII or EBCDIC).
- The marker could represent a bit-count, a record-count, or any
- other information by which a system may identify a data
- checkpoint. The receiver of data, if it implements the restart
- procedure, would then mark the corresponding position of this
- marker in the receiving system, and return this information to the
- user.
- In the event of a system failure, the user can restart the data
- transfer by identifying the marker point with the FTP restart
- procedure. The following example illustrates the use of the
- restart procedure.
- The sender of the data inserts an appropriate marker block in the
- data stream at a convenient point. The receiving host marks the
- corresponding data point in its file system and conveys the last
- known sender and receiver marker information to the user, either
- directly or over the control connection in a 110 reply (depending
- on who is the sender). In the event of a system failure, the user
- or controller process restarts the server at the last server
- marker by sending a restart command with server's marker code as
- its argument. The restart command is transmitted over the control
- Postel & Reynolds [Page 24]
-
- RFC 959 October 1985
- File Transfer Protocol
- connection and is immediately followed by the command (such as
- RETR, STOR or LIST) which was being executed when the system
- failure occurred.
- 4. FILE TRANSFER FUNCTIONS
- The communication channel from the user-PI to the server-PI is
- established as a TCP connection from the user to the standard server
- port. The user protocol interpreter is responsible for sending FTP
- commands and interpreting the replies received; the server-PI
- interprets commands, sends replies and directs its DTP to set up the
- data connection and transfer the data. If the second party to the
- data transfer (the passive transfer process) is the user-DTP, then it
- is governed through the internal protocol of the user-FTP host; if it
- is a second server-DTP, then it is governed by its PI on command from
- the user-PI. The FTP replies are discussed in the next section. In
- the description of a few of the commands in this section, it is
- helpful to be explicit about the possible replies.
- 4.1. FTP COMMANDS
- 4.1.1. ACCESS CONTROL COMMANDS
- The following commands specify access control identifiers
- (command codes are shown in parentheses).
- USER NAME (USER)
- The argument field is a Telnet string identifying the user.
- The user identification is that which is required by the
- server for access to its file system. This command will
- normally be the first command transmitted by the user after
- the control connections are made (some servers may require
- this). Additional identification information in the form of
- a password and/or an account command may also be required by
- some servers. Servers may allow a new USER command to be
- entered at any point in order to change the access control
- and/or accounting information. This has the effect of
- flushing any user, password, and account information already
- supplied and beginning the login sequence again. All
- transfer parameters are unchanged and any file transfer in
- progress is completed under the old access control
- parameters.
- Postel & Reynolds [Page 25]
-
- RFC 959 October 1985
- File Transfer Protocol
- PASSWORD (PASS)
- The argument field is a Telnet string specifying the user's
- password. This command must be immediately preceded by the
- user name command, and, for some sites, completes the user's
- identification for access control. Since password
- information is quite sensitive, it is desirable in general
- to "mask" it or suppress typeout. It appears that the
- server has no foolproof way to achieve this. It is
- therefore the responsibility of the user-FTP process to hide
- the sensitive password information.
- ACCOUNT (ACCT)
- The argument field is a Telnet string identifying the user's
- account. The command is not necessarily related to the USER
- command, as some sites may require an account for login and
- others only for specific access, such as storing files. In
- the latter case the command may arrive at any time.
- There are reply codes to differentiate these cases for the
- automation: when account information is required for login,
- the response to a successful PASSword command is reply code
- 332. On the other hand, if account information is NOT
- required for login, the reply to a successful PASSword
- command is 230; and if the account information is needed for
- a command issued later in the dialogue, the server should
- return a 332 or 532 reply depending on whether it stores
- (pending receipt of the ACCounT command) or discards the
- command, respectively.
- CHANGE WORKING DIRECTORY (CWD)
- This command allows the user to work with a different
- directory or dataset for file storage or retrieval without
- altering his login or accounting information. Transfer
- parameters are similarly unchanged. The argument is a
- pathname specifying a directory or other system dependent
- file group designator.
- CHANGE TO PARENT DIRECTORY (CDUP)
- This command is a special case of CWD, and is included to
- simplify the implementation of programs for transferring
- directory trees between operating systems having different
- Postel & Reynolds [Page 26]
-
- RFC 959 October 1985
- File Transfer Protocol
- syntaxes for naming the parent directory. The reply codes
- shall be identical to the reply codes of CWD. See
- Appendix II for further details.
- STRUCTURE MOUNT (SMNT)
- This command allows the user to mount a different file
- system data structure without altering his login or
- accounting information. Transfer parameters are similarly
- unchanged. The argument is a pathname specifying a
- directory or other system dependent file group designator.
- REINITIALIZE (REIN)
- This command terminates a USER, flushing all I/O and account
- information, except to allow any transfer in progress to be
- completed. All parameters are reset to the default settings
- and the control connection is left open. This is identical
- to the state in which a user finds himself immediately after
- the control connection is opened. A USER command may be
- expected to follow.
- LOGOUT (QUIT)
- This command terminates a USER and if file transfer is not
- in progress, the server closes the control connection. If
- file transfer is in progress, the connection will remain
- open for result response and the server will then close it.
- If the user-process is transferring files for several USERs
- but does not wish to close and then reopen connections for
- each, then the REIN command should be used instead of QUIT.
- An unexpected close on the control connection will cause the
- server to take the effective action of an abort (ABOR) and a
- logout (QUIT).
- 4.1.2. TRANSFER PARAMETER COMMANDS
- All data transfer parameters have default values, and the
- commands specifying data transfer parameters are required only
- if the default parameter values are to be changed. The default
- value is the last specified value, or if no value has been
- specified, the standard default value is as stated here. This
- implies that the server must "remember" the applicable default
- values. The commands may be in any order except that they must
- precede the FTP service request. The following commands
- specify data transfer parameters:
- Postel & Reynolds [Page 27]
-
- RFC 959 October 1985
- File Transfer Protocol
- DATA PORT (PORT)
- The argument is a HOST-PORT specification for the data port
- to be used in data connection. There are defaults for both
- the user and server data ports, and under normal
- circumstances this command and its reply are not needed. If
- this command is used, the argument is the concatenation of a
- 32-bit internet host address and a 16-bit TCP port address.
- This address information is broken into 8-bit fields and the
- value of each field is transmitted as a decimal number (in
- character string representation). The fields are separated
- by commas. A port command would be:
- PORT h1,h2,h3,h4,p1,p2
- where h1 is the high order 8 bits of the internet host
- address.
- PASSIVE (PASV)
- This command requests the server-DTP to "listen" on a data
- port (which is not its default data port) and to wait for a
- connection rather than initiate one upon receipt of a
- transfer command. The response to this command includes the
- host and port address this server is listening on.
- REPRESENTATION TYPE (TYPE)
- The argument specifies the representation type as described
- in the Section on Data Representation and Storage. Several
- types take a second parameter. The first parameter is
- denoted by a single Telnet character, as is the second
- Format parameter for ASCII and EBCDIC; the second parameter
- for local byte is a decimal integer to indicate Bytesize.
- The parameters are separated by a <SP> (Space, ASCII code
- 32).
- The following codes are assigned for type:
- \ /
- A - ASCII | | N - Non-print
- |-><-| T - Telnet format effectors
- E - EBCDIC| | C - Carriage Control (ASA)
- / \
- I - Image
-
- L <byte size> - Local byte Byte size
- Postel & Reynolds [Page 28]
-
- RFC 959 October 1985
- File Transfer Protocol
- The default representation type is ASCII Non-print. If the
- Format parameter is changed, and later just the first
- argument is changed, Format then returns to the Non-print
- default.
- FILE STRUCTURE (STRU)
- The argument is a single Telnet character code specifying
- file structure described in the Section on Data
- Representation and Storage.
- The following codes are assigned for structure:
- F - File (no record structure)
- R - Record structure
- P - Page structure
- The default structure is File.
- TRANSFER MODE (MODE)
- The argument is a single Telnet character code specifying
- the data transfer modes described in the Section on
- Transmission Modes.
- The following codes are assigned for transfer modes:
- S - Stream
- B - Block
- C - Compressed
- The default transfer mode is Stream.
- 4.1.3. FTP SERVICE COMMANDS
- The FTP service commands define the file transfer or the file
- system function requested by the user. The argument of an FTP
- service command will normally be a pathname. The syntax of
- pathnames must conform to server site conventions (with
- standard defaults applicable), and the language conventions of
- the control connection. The suggested default handling is to
- use the last specified device, directory or file name, or the
- standard default defined for local users. The commands may be
- in any order except that a "rename from" command must be
- followed by a "rename to" command and the restart command must
- be followed by the interrupted service command (e.g., STOR or
- RETR). The data, when transferred in response to FTP service
- Postel & Reynolds [Page 29]
-
- RFC 959 October 1985
- File Transfer Protocol
- commands, shall always be sent over the data connection, except
- for certain informative replies. The following commands
- specify FTP service requests:
- RETRIEVE (RETR)
- This command causes the server-DTP to transfer a copy of the
- file, specified in the pathname, to the server- or user-DTP
- at the other end of the data connection. The status and
- contents of the file at the server site shall be unaffected.
- STORE (STOR)
- This command causes the server-DTP to accept the data
- transferred via the data connection and to store the data as
- a file at the server site. If the file specified in the
- pathname exists at the server site, then its contents shall
- be replaced by the data being transferred. A new file is
- created at the server site if the file specified in the
- pathname does not already exist.
- STORE UNIQUE (STOU)
- This command behaves like STOR except that the resultant
- file is to be created in the current directory under a name
- unique to that directory. The 250 Transfer Started response
- must include the name generated.
- APPEND (with create) (APPE)
- This command causes the server-DTP to accept the data
- transferred via the data connection and to store the data in
- a file at the server site. If the file specified in the
- pathname exists at the server site, then the data shall be
- appended to that file; otherwise the file specified in the
- pathname shall be created at the server site.
- ALLOCATE (ALLO)
- This command may be required by some servers to reserve
- sufficient storage to accommodate the new file to be
- transferred. The argument shall be a decimal integer
- representing the number of bytes (using the logical byte
- size) of storage to be reserved for the file. For files
- sent with record or page structure a maximum record or page
- size (in logical bytes) might also be necessary; this is
- indicated by a decimal integer in a second argument field of
- Postel & Reynolds [Page 30]
-
- RFC 959 October 1985
- File Transfer Protocol
- the command. This second argument is optional, but when
- present should be separated from the first by the three
- Telnet characters <SP> R <SP>. This command shall be
- followed by a STORe or APPEnd command. The ALLO command
- should be treated as a NOOP (no operation) by those servers
- which do not require that the maximum size of the file be
- declared beforehand, and those servers interested in only
- the maximum record or page size should accept a dummy value
- in the first argument and ignore it.
- RESTART (REST)
- The argument field represents the server marker at which
- file transfer is to be restarted. This command does not
- cause file transfer but skips over the file to the specified
- data checkpoint. This command shall be immediately followed
- by the appropriate FTP service command which shall cause
- file transfer to resume.
- RENAME FROM (RNFR)
- This command specifies the old pathname of the file which is
- to be renamed. This command must be immediately followed by
- a "rename to" command specifying the new file pathname.
- RENAME TO (RNTO)
- This command specifies the new pathname of the file
- specified in the immediately preceding "rename from"
- command. Together the two commands cause a file to be
- renamed.
- ABORT (ABOR)
- This command tells the server to abort the previous FTP
- service command and any associated transfer of data. The
- abort command may require "special action", as discussed in
- the Section on FTP Commands, to force recognition by the
- server. No action is to be taken if the previous command
- has been completed (including data transfer). The control
- connection is not to be closed by the server, but the data
- connection must be closed.
- There are two cases for the server upon receipt of this
- command: (1) the FTP service command was already completed,
- or (2) the FTP service command is still in progress.
- Postel & Reynolds [Page 31]
-
- RFC 959 October 1985
- File Transfer Protocol
- In the first case, the server closes the data connection
- (if it is open) and responds with a 226 reply, indicating
- that the abort command was successfully processed.
- In the second case, the server aborts the FTP service in
- progress and closes the data connection, returning a 426
- reply to indicate that the service request terminated
- abnormally. The server then sends a 226 reply,
- indicating that the abort command was successfully
- processed.
- DELETE (DELE)
- This command causes the file specified in the pathname to be
- deleted at the server site. If an extra level of protection
- is desired (such as the query, "Do you really wish to
- delete?"), it should be provided by the user-FTP process.
- REMOVE DIRECTORY (RMD)
- This command causes the directory specified in the pathname
- to be removed as a directory (if the pathname is absolute)
- or as a subdirectory of the current working directory (if
- the pathname is relative). See Appendix II.
- MAKE DIRECTORY (MKD)
- This command causes the directory specified in the pathname
- to be created as a directory (if the pathname is absolute)
- or as a subdirectory of the current working directory (if
- the pathname is relative). See Appendix II.
- PRINT WORKING DIRECTORY (PWD)
- This command causes the name of the current working
- directory to be returned in the reply. See Appendix II.
- LIST (LIST)
- This command causes a list to be sent from the server to the
- passive DTP. If the pathname specifies a directory or other
- group of files, the server should transfer a list of files
- in the specified directory. If the pathname specifies a
- file then the server should send current information on the
- file. A null argument implies the user's current working or
- default directory. The data transfer is over the data
- connection in type ASCII or type EBCDIC. (The user must
- Postel & Reynolds [Page 32]
-
- RFC 959 October 1985
- File Transfer Protocol
- ensure that the TYPE is appropriately ASCII or EBCDIC).
- Since the information on a file may vary widely from system
- to system, this information may be hard to use automatically
- in a program, but may be quite useful to a human user.
- NAME LIST (NLST)
- This command causes a directory listing to be sent from
- server to user site. The pathname should specify a
- directory or other system-specific file group descriptor; a
- null argument implies the current directory. The server
- will return a stream of names of files and no other
- information. The data will be transferred in ASCII or
- EBCDIC type over the data connection as valid pathname
- strings separated by <CRLF> or <NL>. (Again the user must
- ensure that the TYPE is correct.) This command is intended
- to return information that can be used by a program to
- further process the files automatically. For example, in
- the implementation of a "multiple get" function.
- SITE PARAMETERS (SITE)
- This command is used by the server to provide services
- specific to his system that are essential to file transfer
- but not sufficiently universal to be included as commands in
- the protocol. The nature of these services and the
- specification of their syntax can be stated in a reply to
- the HELP SITE command.
- SYSTEM (SYST)
- This command is used to find out the type of operating
- system at the server. The reply shall have as its first
- word one of the system names listed in the current version
- of the Assigned Numbers document [4].
- STATUS (STAT)
- This command shall cause a status response to be sent over
- the control connection in the form of a reply. The command
- may be sent during a file transfer (along with the Telnet IP
- and Synch signals--see the Section on FTP Commands) in which
- case the server will respond with the status of the
- operation in progress, or it may be sent between file
- transfers. In the latter case, the command may have an
- argument field. If the argument is a pathname, the command
- is analogous to the "list" command except that data shall be
- Postel & Reynolds [Page 33]
-
- RFC 959 October 1985
- File Transfer Protocol
- transferred over the control connection. If a partial
- pathname is given, the server may respond with a list of
- file names or attributes associated with that specification.
- If no argument is given, the server should return general
- status information about the server FTP process. This
- should include current values of all transfer parameters and
- the status of connections.
- HELP (HELP)
- This command shall cause the server to send helpful
- information regarding its implementation status over the
- control connection to the user. The command may take an
- argument (e.g., any command name) and return more specific
- information as a response. The reply is type 211 or 214.
- It is suggested that HELP be allowed before entering a USER
- command. The server may use this reply to specify
- site-dependent parameters, e.g., in response to HELP SITE.
- NOOP (NOOP)
- This command does not affect any parameters or previously
- entered commands. It specifies no action other than that the
- server send an OK reply.
- The File Transfer Protocol follows the specifications of the Telnet
- protocol for all communications over the control connection. Since
- the language used for Telnet communication may be a negotiated
- option, all references in the next two sections will be to the
- "Telnet language" and the corresponding "Telnet end-of-line code".
- Currently, one may take these to mean NVT-ASCII and <CRLF>. No other
- specifications of the Telnet protocol will be cited.
- FTP commands are "Telnet strings" terminated by the "Telnet end of
- line code". The command codes themselves are alphabetic characters
- terminated by the character <SP> (Space) if parameters follow and
- Telnet-EOL otherwise. The command codes and the semantics of
- commands are described in this section; the detailed syntax of
- commands is specified in the Section on Commands, the reply sequences
- are discussed in the Section on Sequencing of Commands and Replies,
- and scenarios illustrating the use of commands are provided in the
- Section on Typical FTP Scenarios.
- FTP commands may be partitioned as those specifying access-control
- identifiers, data transfer parameters, or FTP service requests.
- Certain commands (such as ABOR, STAT, QUIT) may be sent over the
- control connection while a data transfer is in progress. Some
- Postel & Reynolds [Page 34]
-
- RFC 959 October 1985
- File Transfer Protocol
- servers may not be able to monitor the control and data connections
- simultaneously, in which case some special action will be necessary
- to get the server's attention. The following ordered format is
- tentatively recommended:
- 1. User system inserts the Telnet "Interrupt Process" (IP) signal
- in the Telnet stream.
- 2. User system sends the Telnet "Synch" signal.
- 3. User system inserts the command (e.g., ABOR) in the Telnet
- stream.
- 4. Server PI, after receiving "IP", scans the Telnet stream for
- EXACTLY ONE FTP command.
- (For other servers this may not be necessary but the actions listed
- above should have no unusual effect.)
- 4.2. FTP REPLIES
- Replies to File Transfer Protocol commands are devised to ensure
- the synchronization of requests and actions in the process of file
- transfer, and to guarantee that the user process always knows the
- state of the Server. Every command must generate at least one
- reply, although there may be more than one; in the latter case,
- the multiple replies must be easily distinguished. In addition,
- some commands occur in sequential groups, such as USER, PASS and
- ACCT, or RNFR and RNTO. The replies show the existence of an
- intermediate state if all preceding commands have been successful.
- A failure at any point in the sequence necessitates the repetition
- of the entire sequence from the beginning.
- The details of the command-reply sequence are made explicit in
- a set of state diagrams below.
- An FTP reply consists of a three digit number (transmitted as
- three alphanumeric characters) followed by some text. The number
- is intended for use by automata to determine what state to enter
- next; the text is intended for the human user. It is intended
- that the three digits contain enough encoded information that the
- user-process (the User-PI) will not need to examine the text and
- may either discard it or pass it on to the user, as appropriate.
- In particular, the text may be server-dependent, so there are
- likely to be varying texts for each reply code.
- A reply is defined to contain the 3-digit code, followed by Space
- Postel & Reynolds [Page 35]
-
- RFC 959 October 1985
- File Transfer Protocol
- <SP>, followed by one line of text (where some maximum line length
- has been specified), and terminated by the Telnet end-of-line
- code. There will be cases however, where the text is longer than
- a single line. In these cases the complete text must be bracketed
- so the User-process knows when it may stop reading the reply (i.e.
- stop processing input on the control connection) and go do other
- things. This requires a special format on the first line to
- indicate that more than one line is coming, and another on the
- last line to designate it as the last. At least one of these must
- contain the appropriate reply code to indicate the state of the
- transaction. To satisfy all factions, it was decided that both
- the first and last line codes should be the same.
- Thus the format for multi-line replies is that the first line
- will begin with the exact required reply code, followed
- immediately by a Hyphen, "-" (also known as Minus), followed by
- text. The last line will begin with the same code, followed
- immediately by Space <SP>, optionally some text, and the Telnet
- end-of-line code.
- For example:
- 123-First line
- Second line
- 234 A line beginning with numbers
- 123 The last line
- The user-process then simply needs to search for the second
- occurrence of the same reply code, followed by <SP> (Space), at
- the beginning of a line, and ignore all intermediary lines. If
- an intermediary line begins with a 3-digit number, the Server
- must pad the front to avoid confusion.
- This scheme allows standard system routines to be used for
- reply information (such as for the STAT reply), with
- "artificial" first and last lines tacked on. In rare cases
- where these routines are able to generate three digits and a
- Space at the beginning of any line, the beginning of each
- text line should be offset by some neutral text, like Space.
- This scheme assumes that multi-line replies may not be nested.
- The three digits of the reply each have a special significance.
- This is intended to allow a range of very simple to very
- sophisticated responses by the user-process. The first digit
- denotes whether the response is good, bad or incomplete.
- (Referring to the state diagram), an unsophisticated user-process
- will be able to determine its next action (proceed as planned,
- Postel & Reynolds [Page 36]
-
- RFC 959 October 1985
- File Transfer Protocol
- redo, retrench, etc.) by simply examining this first digit. A
- user-process that wants to know approximately what kind of error
- occurred (e.g. file system error, command syntax error) may
- examine the second digit, reserving the third digit for the finest
- gradation of information (e.g., RNTO command without a preceding
- RNFR).
- There are five values for the first digit of the reply code:
- 1yz Positive Preliminary reply
- The requested action is being initiated; expect another
- reply before proceeding with a new command. (The
- user-process sending another command before the
- completion reply would be in violation of protocol; but
- server-FTP processes should queue any commands that
- arrive while a preceding command is in progress.) This
- type of reply can be used to indicate that the command
- was accepted and the user-process may now pay attention
- to the data connections, for implementations where
- simultaneous monitoring is difficult. The server-FTP
- process may send at most, one 1yz reply per command.
- 2yz Positive Completion reply
- The requested action has been successfully completed. A
- new request may be initiated.
- 3yz Positive Intermediate reply
- The command has been accepted, but the requested action
- is being held in abeyance, pending receipt of further
- information. The user should send another command
- specifying this information. This reply is used in
- command sequence groups.
- 4yz Transient Negative Completion reply
- The command was not accepted and the requested action did
- not take place, but the error condition is temporary and
- the action may be requested again. The user should
- return to the beginning of the command sequence, if any.
- It is difficult to assign a meaning to "transient",
- particularly when two distinct sites (Server- and
- User-processes) have to agree on the interpretation.
- Each reply in the 4yz category might have a slightly
- different time value, but the intent is that the
- Postel & Reynolds [Page 37]
-
- RFC 959 October 1985
- File Transfer Protocol
- user-process is encouraged to try again. A rule of thumb
- in determining if a reply fits into the 4yz or the 5yz
- (Permanent Negative) category is that replies are 4yz if
- the commands can be repeated without any change in
- command form or in properties of the User or Server
- (e.g., the command is spelled the same with the same
- arguments used; the user does not change his file access
- or user name; the server does not put up a new
- implementation.)
- 5yz Permanent Negative Completion reply
- The command was not accepted and the requested action did
- not take place. The User-process is discouraged from
- repeating the exact request (in the same sequence). Even
- some "permanent" error conditions can be corrected, so
- the human user may want to direct his User-process to
- reinitiate the command sequence by direct action at some
- point in the future (e.g., after the spelling has been
- changed, or the user has altered his directory status.)
- The following function groupings are encoded in the second
- digit:
- x0z Syntax - These replies refer to syntax errors,
- syntactically correct commands that don't fit any
- functional category, unimplemented or superfluous
- commands.
- x1z Information - These are replies to requests for
- information, such as status or help.
- x2z Connections - Replies referring to the control and
- data connections.
- x3z Authentication and accounting - Replies for the login
- process and accounting procedures.
- x4z Unspecified as yet.
- x5z File system - These replies indicate the status of the
- Server file system vis-a-vis the requested transfer or
- other file system action.
- The third digit gives a finer gradation of meaning in each of
- the function categories, specified by the second digit. The
- list of replies below will illustrate this. Note that the text
- Postel & Reynolds [Page 38]
-
- RFC 959 October 1985
- File Transfer Protocol
- associated with each reply is recommended, rather than
- mandatory, and may even change according to the command with
- which it is associated. The reply codes, on the other hand,
- must strictly follow the specifications in the last section;
- that is, Server implementations should not invent new codes for
- situations that are only slightly different from the ones
- described here, but rather should adapt codes already defined.
- A command such as TYPE or ALLO whose successful execution
- does not offer the user-process any new information will
- cause a 200 reply to be returned. If the command is not
- implemented by a particular Server-FTP process because it
- has no relevance to that computer system, for example ALLO
- at a TOPS20 site, a Positive Completion reply is still
- desired so that the simple User-process knows it can proceed
- with its course of action. A 202 reply is used in this case
- with, for example, the reply text: "No storage allocation
- necessary." If, on the other hand, the command requests a
- non-site-specific action and is unimplemented, the response
- is 502. A refinement of that is the 504 reply for a command
- that is implemented, but that requests an unimplemented
- parameter.
- 4.2.1 Reply Codes by Function Groups
- 200 Command okay.
- 500 Syntax error, command unrecognized.
- This may include errors such as command line too long.
- 501 Syntax error in parameters or arguments.
- 202 Command not implemented, superfluous at this site.
- 502 Command not implemented.
- 503 Bad sequence of commands.
- 504 Command not implemented for that parameter.
-
- Postel & Reynolds [Page 39]
-
- RFC 959 October 1985
- File Transfer Protocol
- 110 Restart marker reply.
- In this case, the text is exact and not left to the
- particular implementation; it must read:
- MARK yyyy = mmmm
- Where yyyy is User-process data stream marker, and mmmm
- server's equivalent marker (note the spaces between markers
- and "=").
- 211 System status, or system help reply.
- 212 Directory status.
- 213 File status.
- 214 Help message.
- On how to use the server or the meaning of a particular
- non-standard command. This reply is useful only to the
- human user.
- 215 NAME system type.
- Where NAME is an official system name from the list in the
- Assigned Numbers document.
-
- 120 Service ready in nnn minutes.
- 220 Service ready for new user.
- 221 Service closing control connection.
- Logged out if appropriate.
- 421 Service not available, closing control connection.
- This may be a reply to any command if the service knows it
- must shut down.
- 125 Data connection already open; transfer starting.
- 225 Data connection open; no transfer in progress.
- 425 Can't open data connection.
- 226 Closing data connection.
- Requested file action successful (for example, file
- transfer or file abort).
- 426 Connection closed; transfer aborted.
- 227 Entering Passive Mode (h1,h2,h3,h4,p1,p2).
-
- 230 User logged in, proceed.
- 530 Not logged in.
- 331 User name okay, need password.
- 332 Need account for login.
- 532 Need account for storing files.
-
- Postel & Reynolds [Page 40]
-
- RFC 959 October 1985
- File Transfer Protocol
- 150 File status okay; about to open data connection.
- 250 Requested file action okay, completed.
- 257 "PATHNAME" created.
- 350 Requested file action pending further information.
- 450 Requested file action not taken.
- File unavailable (e.g., file busy).
- 550 Requested action not taken.
- File unavailable (e.g., file not found, no access).
- 451 Requested action aborted. Local error in processing.
- 551 Requested action aborted. Page type unknown.
- 452 Requested action not taken.
- Insufficient storage space in system.
- 552 Requested file action aborted.
- Exceeded storage allocation (for current directory or
- dataset).
- 553 Requested action not taken.
- File name not allowed.
-
- 4.2.2 Numeric Order List of Reply Codes
- 110 Restart marker reply.
- In this case, the text is exact and not left to the
- particular implementation; it must read:
- MARK yyyy = mmmm
- Where yyyy is User-process data stream marker, and mmmm
- server's equivalent marker (note the spaces between markers
- and "=").
- 120 Service ready in nnn minutes.
- 125 Data connection already open; transfer starting.
- 150 File status okay; about to open data connection.
-
- Postel & Reynolds [Page 41]
-
- RFC 959 October 1985
- File Transfer Protocol
- 200 Command okay.
- 202 Command not implemented, superfluous at this site.
- 211 System status, or system help reply.
- 212 Directory status.
- 213 File status.
- 214 Help message.
- On how to use the server or the meaning of a particular
- non-standard command. This reply is useful only to the
- human user.
- 215 NAME system type.
- Where NAME is an official system name from the list in the
- Assigned Numbers document.
- 220 Service ready for new user.
- 221 Service closing control connection.
- Logged out if appropriate.
- 225 Data connection open; no transfer in progress.
- 226 Closing data connection.
- Requested file action successful (for example, file
- transfer or file abort).
- 227 Entering Passive Mode (h1,h2,h3,h4,p1,p2).
- 230 User logged in, proceed.
- 250 Requested file action okay, completed.
- 257 "PATHNAME" created.
-
- 331 User name okay, need password.
- 332 Need account for login.
- 350 Requested file action pending further information.
-
- 421 Service not available, closing control connection.
- This may be a reply to any command if the service knows it
- must shut down.
- 425 Can't open data connection.
- 426 Connection closed; transfer aborted.
- 450 Requested file action not taken.
- File unavailable (e.g., file busy).
- 451 Requested action aborted: local error in processing.
- 452 Requested action not taken.
- Insufficient storage space in system.
-
- Postel & Reynolds [Page 42]
-
- RFC 959 October 1985
- File Transfer Protocol
- 500 Syntax error, command unrecognized.
- This may include errors such as command line too long.
- 501 Syntax error in parameters or arguments.
- 502 Command not implemented.
- 503 Bad sequence of commands.
- 504 Command not implemented for that parameter.
- 530 Not logged in.
- 532 Need account for storing files.
- 550 Requested action not taken.
- File unavailable (e.g., file not found, no access).
- 551 Requested action aborted: page type unknown.
- 552 Requested file action aborted.
- Exceeded storage allocation (for current directory or
- dataset).
- 553 Requested action not taken.
- File name not allowed.
-
- 5. DECLARATIVE SPECIFICATIONS
- 5.1. MINIMUM IMPLEMENTATION
- In order to make FTP workable without needless error messages, the
- following minimum implementation is required for all servers:
- TYPE - ASCII Non-print
- MODE - Stream
- STRUCTURE - File, Record
- COMMANDS - USER, QUIT, PORT,
- TYPE, MODE, STRU,
- for the default values
- RETR, STOR,
- NOOP.
- The default values for transfer parameters are:
- TYPE - ASCII Non-print
- MODE - Stream
- STRU - File
- All hosts must accept the above as the standard defaults.
- Postel & Reynolds [Page 43]
-
- RFC 959 October 1985
- File Transfer Protocol
- 5.2. CONNECTIONS
- The server protocol interpreter shall "listen" on Port L. The
- user or user protocol interpreter shall initiate the full-duplex
- control connection. Server- and user- processes should follow the
- conventions of the Telnet protocol as specified in the
- ARPA-Internet Protocol Handbook [1]. Servers are under no
- obligation to provide for editing of command lines and may require
- that it be done in the user host. The control connection shall be
- closed by the server at the user's request after all transfers and
- replies are completed.
- The user-DTP must "listen" on the specified data port; this may be
- the default user port (U) or a port specified in the PORT command.
- The server shall initiate the data connection from his own default
- data port (L-1) using the specified user data port. The direction
- of the transfer and the port used will be determined by the FTP
- service command.
- Note that all FTP implementation must support data transfer using
- the default port, and that only the USER-PI may initiate the use
- of non-default ports.
- When data is to be transferred between two servers, A and B (refer
- to Figure 2), the user-PI, C, sets up control connections with
- both server-PI's. One of the servers, say A, is then sent a PASV
- command telling him to "listen" on his data port rather than
- initiate a connection when he receives a transfer service command.
- When the user-PI receives an acknowledgment to the PASV command,
- which includes the identity of the host and port being listened
- on, the user-PI then sends A's port, a, to B in a PORT command; a
- reply is returned. The user-PI may then send the corresponding
- service commands to A and B. Server B initiates the connection
- and the transfer proceeds. The command-reply sequence is listed
- below where the messages are vertically synchronous but
- horizontally asynchronous:
- Postel & Reynolds [Page 44]
-
- RFC 959 October 1985
- File Transfer Protocol
- User-PI - Server A User-PI - Server B
- ------------------ ------------------
-
- C->A : Connect C->B : Connect
- C->A : PASV
- A->C : 227 Entering Passive Mode. A1,A2,A3,A4,a1,a2
- C->B : PORT A1,A2,A3,A4,a1,a2
- B->C : 200 Okay
- C->A : STOR C->B : RETR
- B->A : Connect to HOST-A, PORT-a
- Figure 3
- The data connection shall be closed by the server under the
- conditions described in the Section on Establishing Data
- Connections. If the data connection is to be closed following a
- data transfer where closing the connection is not required to
- indicate the end-of-file, the server must do so immediately.
- Waiting until after a new transfer command is not permitted
- because the user-process will have already tested the data
- connection to see if it needs to do a "listen"; (remember that the
- user must "listen" on a closed data port BEFORE sending the
- transfer request). To prevent a race condition here, the server
- sends a reply (226) after closing the data connection (or if the
- connection is left open, a "file transfer completed" reply (250)
- and the user-PI should wait for one of these replies before
- issuing a new transfer command).
- Any time either the user or server see that the connection is
- being closed by the other side, it should promptly read any
- remaining data queued on the connection and issue the close on its
- own side.
- 5.3. COMMANDS
- The commands are Telnet character strings transmitted over the
- control connections as described in the Section on FTP Commands.
- The command functions and semantics are described in the Section
- on Access Control Commands, Transfer Parameter Commands, FTP
- Service Commands, and Miscellaneous Commands. The command syntax
- is specified here.
- The commands begin with a command code followed by an argument
- field. The command codes are four or fewer alphabetic characters.
- Upper and lower case alphabetic characters are to be treated
- identically. Thus, any of the following may represent the
- retrieve command:
- Postel & Reynolds [Page 45]
-
- RFC 959 October 1985
- File Transfer Protocol
- RETR Retr retr ReTr rETr
- This also applies to any symbols representing parameter values,
- such as A or a for ASCII TYPE. The command codes and the argument
- fields are separated by one or more spaces.
- The argument field consists of a variable length character string
- ending with the character sequence <CRLF> (Carriage Return, Line
- Feed) for NVT-ASCII representation; for other negotiated languages
- a different end of line character might be used. It should be
- noted that the server is to take no action until the end of line
- code is received.
- The syntax is specified below in NVT-ASCII. All characters in the
- argument field are ASCII characters including any ASCII
- represented decimal integers. Square brackets denote an optional
- argument field. If the option is not taken, the appropriate
- default is implied.
- Postel & Reynolds [Page 46]
-
- RFC 959 October 1985
- File Transfer Protocol
- 5.3.1. FTP COMMANDS
- The following are the FTP commands:
- USER <SP> <username> <CRLF>
- PASS <SP> <password> <CRLF>
- ACCT <SP> <account-information> <CRLF>
- CWD <SP> <pathname> <CRLF>
- CDUP <CRLF>
- SMNT <SP> <pathname> <CRLF>
- QUIT <CRLF>
- REIN <CRLF>
- PORT <SP> <host-port> <CRLF>
- PASV <CRLF>
- TYPE <SP> <type-code> <CRLF>
- STRU <SP> <structure-code> <CRLF>
- MODE <SP> <mode-code> <CRLF>
- RETR <SP> <pathname> <CRLF>
- STOR <SP> <pathname> <CRLF>
- STOU <CRLF>
- APPE <SP> <pathname> <CRLF>
- ALLO <SP> <decimal-integer>
- [<SP> R <SP> <decimal-integer>] <CRLF>
- REST <SP> <marker> <CRLF>
- RNFR <SP> <pathname> <CRLF>
- RNTO <SP> <pathname> <CRLF>
- ABOR <CRLF>
- DELE <SP> <pathname> <CRLF>
- RMD <SP> <pathname> <CRLF>
- MKD <SP> <pathname> <CRLF>
- PWD <CRLF>
- LIST [<SP> <pathname>] <CRLF>
- NLST [<SP> <pathname>] <CRLF>
- SITE <SP> <string> <CRLF>
- SYST <CRLF>
- STAT [<SP> <pathname>] <CRLF>
- HELP [<SP> <string>] <CRLF>
- NOOP <CRLF>
- Postel & Reynolds [Page 47]
-
- RFC 959 October 1985
- File Transfer Protocol
- 5.3.2. FTP COMMAND ARGUMENTS
- The syntax of the above argument fields (using BNF notation
- where applicable) is:
- <username> ::= <string>
- <password> ::= <string>
- <account-information> ::= <string>
- <string> ::= <char> | <char><string>
- <char> ::= any of the 128 ASCII characters except <CR> and
- <LF>
- <marker> ::= <pr-string>
- <pr-string> ::= <pr-char> | <pr-char><pr-string>
- <pr-char> ::= printable characters, any
- ASCII code 33 through 126
- <byte-size> ::= <number>
- <host-port> ::= <host-number>,<port-number>
- <host-number> ::= <number>,<number>,<number>,<number>
- <port-number> ::= <number>,<number>
- <number> ::= any decimal integer 1 through 255
- <form-code> ::= N | T | C
- <type-code> ::= A [<sp> <form-code>]
- | E [<sp> <form-code>]
- | I
- | L <sp> <byte-size>
- <structure-code> ::= F | R | P
- <mode-code> ::= S | B | C
- <pathname> ::= <string>
- <decimal-integer> ::= any decimal integer
- Postel & Reynolds [Page 48]
-
- RFC 959 October 1985
- File Transfer Protocol
- 5.4. SEQUENCING OF COMMANDS AND REPLIES
- The communication between the user and server is intended to be an
- alternating dialogue. As such, the user issues an FTP command and
- the server responds with a prompt primary reply. The user should
- wait for this initial primary success or failure response before
- sending further commands.
- Certain commands require a second reply for which the user should
- also wait. These replies may, for example, report on the progress
- or completion of file transfer or the closing of the data
- connection. They are secondary replies to file transfer commands.
- One important group of informational replies is the connection
- greetings. Under normal circumstances, a server will send a 220
- reply, "awaiting input", when the connection is completed. The
- user should wait for this greeting message before sending any
- commands. If the server is unable to accept input right away, a
- 120 "expected delay" reply should be sent immediately and a 220
- reply when ready. The user will then know not to hang up if there
- is a delay.
- Spontaneous Replies
- Sometimes "the system" spontaneously has a message to be sent
- to a user (usually all users). For example, "System going down
- in 15 minutes". There is no provision in FTP for such
- spontaneous information to be sent from the server to the user.
- It is recommended that such information be queued in the
- server-PI and delivered to the user-PI in the next reply
- (possibly making it a multi-line reply).
- The table below lists alternative success and failure replies for
- each command. These must be strictly adhered to; a server may
- substitute text in the replies, but the meaning and action implied
- by the code numbers and by the specific command reply sequence
- cannot be altered.
- Command-Reply Sequences
- In this section, the command-reply sequence is presented. Each
- command is listed with its possible replies; command groups are
- listed together. Preliminary replies are listed first (with
- their succeeding replies indented and under them), then
- positive and negative completion, and finally intermediary
- Postel & Reynolds [Page 49]
-
- RFC 959 October 1985
- File Transfer Protocol
- replies with the remaining commands from the sequence
- following. This listing forms the basis for the state
- diagrams, which will be presented separately.
- Connection Establishment
- 120
- 220
- 220
- 421
- Login
- USER
- 230
- 530
- 500, 501, 421
- 331, 332
- PASS
- 230
- 202
- 530
- 500, 501, 503, 421
- 332
- ACCT
- 230
- 202
- 530
- 500, 501, 503, 421
- CWD
- 250
- 500, 501, 502, 421, 530, 550
- CDUP
- 200
- 500, 501, 502, 421, 530, 550
- SMNT
- 202, 250
- 500, 501, 502, 421, 530, 550
- Logout
- REIN
- 120
- 220
- 220
- 421
- 500, 502
- QUIT
- 221
- 500
- Postel & Reynolds [Page 50]
-
- RFC 959 October 1985
- File Transfer Protocol
- Transfer parameters
- PORT
- 200
- 500, 501, 421, 530
- PASV
- 227
- 500, 501, 502, 421, 530
- MODE
- 200
- 500, 501, 504, 421, 530
- TYPE
- 200
- 500, 501, 504, 421, 530
- STRU
- 200
- 500, 501, 504, 421, 530
- File action commands
- ALLO
- 200
- 202
- 500, 501, 504, 421, 530
- REST
- 500, 501, 502, 421, 530
- 350
- STOR
- 125, 150
- (110)
- 226, 250
- 425, 426, 451, 551, 552
- 532, 450, 452, 553
- 500, 501, 421, 530
- STOU
- 125, 150
- (110)
- 226, 250
- 425, 426, 451, 551, 552
- 532, 450, 452, 553
- 500, 501, 421, 530
- RETR
- 125, 150
- (110)
- 226, 250
- 425, 426, 451
- 450, 550
- 500, 501, 421, 530
- Postel & Reynolds [Page 51]
-
- RFC 959 October 1985
- File Transfer Protocol
- LIST
- 125, 150
- 226, 250
- 425, 426, 451
- 450
- 500, 501, 502, 421, 530
- NLST
- 125, 150
- 226, 250
- 425, 426, 451
- 450
- 500, 501, 502, 421, 530
- APPE
- 125, 150
- (110)
- 226, 250
- 425, 426, 451, 551, 552
- 532, 450, 550, 452, 553
- 500, 501, 502, 421, 530
- RNFR
- 450, 550
- 500, 501, 502, 421, 530
- 350
- RNTO
- 250
- 532, 553
- 500, 501, 502, 503, 421, 530
- DELE
- 250
- 450, 550
- 500, 501, 502, 421, 530
- RMD
- 250
- 500, 501, 502, 421, 530, 550
- MKD
- 257
- 500, 501, 502, 421, 530, 550
- PWD
- 257
- 500, 501, 502, 421, 550
- ABOR
- 225, 226
- 500, 501, 502, 421
- Postel & Reynolds [Page 52]
-
- RFC 959 October 1985
- File Transfer Protocol
- Informational commands
- SYST
- 215
- 500, 501, 502, 421
- STAT
- 211, 212, 213
- 450
- 500, 501, 502, 421, 530
- HELP
- 211, 214
- 500, 501, 502, 421
- Miscellaneous commands
- SITE
- 200
- 202
- 500, 501, 530
- NOOP
- 200
- 500 421
- Postel & Reynolds [Page 53]
-
- RFC 959 October 1985
- File Transfer Protocol
- 6. STATE DIAGRAMS
- Here we present state diagrams for a very simple minded FTP
- implementation. Only the first digit of the reply codes is used.
- There is one state diagram for each group of FTP commands or command
- sequences.
- The command groupings were determined by constructing a model for
- each command then collecting together the commands with structurally
- identical models.
- For each command or command sequence there are three possible
- outcomes: success (S), failure (F), and error (E). In the state
- diagrams below we use the symbol B for "begin", and the symbol W for
- "wait for reply".
- We first present the diagram that represents the largest group of FTP
- commands:
-
- 1,3 +---+
- ----------->| E |
- | +---+
- |
- +---+ cmd +---+ 2 +---+
- | B |---------->| W |---------->| S |
- +---+ +---+ +---+
- |
- | 4,5 +---+
- ----------->| F |
- +---+
-
- This diagram models the commands:
- ABOR, ALLO, DELE, CWD, CDUP, SMNT, HELP, MODE, NOOP, PASV,
- QUIT, SITE, PORT, SYST, STAT, RMD, MKD, PWD, STRU, and TYPE.
- Postel & Reynolds [Page 54]
-
- RFC 959 October 1985
- File Transfer Protocol
- The other large group of commands is represented by a very similar
- diagram:
-
- 3 +---+
- ----------->| E |
- | +---+
- |
- +---+ cmd +---+ 2 +---+
- | B |---------->| W |---------->| S |
- +---+ --->+---+ +---+
- | | |
- | | | 4,5 +---+
- | 1 | ----------->| F |
- ----- +---+
-
- This diagram models the commands:
- APPE, LIST, NLST, REIN, RETR, STOR, and STOU.
- Note that this second model could also be used to represent the first
- group of commands, the only difference being that in the first group
- the 100 series replies are unexpected and therefore treated as error,
- while the second group expects (some may require) 100 series replies.
- Remember that at most, one 100 series reply is allowed per command.
- The remaining diagrams model command sequences, perhaps the simplest
- of these is the rename sequence:
-
- +---+ RNFR +---+ 1,2 +---+
- | B |---------->| W |---------->| E |
- +---+ +---+ -->+---+
- | | |
- 3 | | 4,5 |
- -------------- ------ |
- | | | +---+
- | ------------->| S |
- | | 1,3 | | +---+
- | 2| --------
- | | | |
- V | | |
- +---+ RNTO +---+ 4,5 ----->+---+
- | |---------->| W |---------->| F |
- +---+ +---+ +---+
-
- Postel & Reynolds [Page 55]
-
- RFC 959 October 1985
- File Transfer Protocol
- The next diagram is a simple model of the Restart command:
-
- +---+ REST +---+ 1,2 +---+
- | B |---------->| W |---------->| E |
- +---+ +---+ -->+---+
- | | |
- 3 | | 4,5 |
- -------------- ------ |
- | | | +---+
- | ------------->| S |
- | | 3 | | +---+
- | 2| --------
- | | | |
- V | | |
- +---+ cmd +---+ 4,5 ----->+---+
- | |---------->| W |---------->| F |
- +---+ -->+---+ +---+
- | |
- | 1 |
- ------
-
- Where "cmd" is APPE, STOR, or RETR.
- We note that the above three models are similar. The Restart differs
- from the Rename two only in the treatment of 100 series replies at
- the second stage, while the second group expects (some may require)
- 100 series replies. Remember that at most, one 100 series reply is
- allowed per command.
- Postel & Reynolds [Page 56]
-
- RFC 959 October 1985
- File Transfer Protocol
- The most complicated diagram is for the Login sequence:
-
- 1
- +---+ USER +---+------------->+---+
- | B |---------->| W | 2 ---->| E |
- +---+ +---+------ | -->+---+
- | | | | |
- 3 | | 4,5 | | |
- -------------- ----- | | |
- | | | | |
- | | | | |
- | --------- |
- | 1| | | |
- V | | | |
- +---+ PASS +---+ 2 | ------>+---+
- | |---------->| W |------------->| S |
- +---+ +---+ ---------->+---+
- | | | | |
- 3 | |4,5| | |
- -------------- -------- |
- | | | | |
- | | | | |
- | -----------
- | 1,3| | | |
- V | 2| | |
- +---+ ACCT +---+-- | ----->+---+
- | |---------->| W | 4,5 -------->| F |
- +---+ +---+------------->+---+
- Postel & Reynolds [Page 57]
-
- RFC 959 October 1985
- File Transfer Protocol
- Finally, we present a generalized diagram that could be used to model
- the command and reply interchange:
-
- ------------------------------------
- | |
- Begin | |
- | V |
- | +---+ cmd +---+ 2 +---+ |
- -->| |------->| |---------->| | |
- | | | W | | S |-----|
- -->| | -->| |----- | | |
- | +---+ | +---+ 4,5 | +---+ |
- | | | | | | |
- | | | 1| |3 | +---+ |
- | | | | | | | | |
- | | ---- | ---->| F |-----
- | | | | |
- | | | +---+
- -------------------
- |
- |
- V
- End
-
- Postel & Reynolds [Page 58]
-
- RFC 959 October 1985
- File Transfer Protocol
- 7. TYPICAL FTP SCENARIO
- User at host U wanting to transfer files to/from host S:
- In general, the user will communicate to the server via a mediating
- user-FTP process. The following may be a typical scenario. The
- user-FTP prompts are shown in parentheses, '---->' represents
- commands from host U to host S, and '<----' represents replies from
- host S to host U.
- LOCAL COMMANDS BY USER ACTION INVOLVED
- ftp (host) multics<CR> Connect to host S, port L,
- establishing control connections.
- <---- 220 Service ready <CRLF>.
- username Doe <CR> USER Doe<CRLF>---->
- <---- 331 User name ok,
- need password<CRLF>.
- password mumble <CR> PASS mumble<CRLF>---->
- <---- 230 User logged in<CRLF>.
- retrieve (local type) ASCII<CR>
- (local pathname) test 1 <CR> User-FTP opens local file in ASCII.
- (for. pathname) test.pl1<CR> RETR test.pl1<CRLF> ---->
- <---- 150 File status okay;
- about to open data
- connection<CRLF>.
- Server makes data connection
- to port U.
-
- <---- 226 Closing data connection,
- file transfer successful<CRLF>.
- type Image<CR> TYPE I<CRLF> ---->
- <---- 200 Command OK<CRLF>
- store (local type) image<CR>
- (local pathname) file dump<CR> User-FTP opens local file in Image.
- (for.pathname) >udd>cn>fd<CR> STOR >udd>cn>fd<CRLF> ---->
- <---- 550 Access denied<CRLF>
- terminate QUIT <CRLF> ---->
- Server closes all
- connections.
- 8. CONNECTION ESTABLISHMENT
- The FTP control connection is established via TCP between the user
- process port U and the server process port L. This protocol is
- assigned the service port 21 (25 octal), that is L=21.
- Postel & Reynolds [Page 59]
-
- RFC 959 October 1985
- File Transfer Protocol
- APPENDIX I - PAGE STRUCTURE
- The need for FTP to support page structure derives principally from
- the need to support efficient transmission of files between TOPS-20
- systems, particularly the files used by NLS.
- The file system of TOPS-20 is based on the concept of pages. The
- operating system is most efficient at manipulating files as pages.
- The operating system provides an interface to the file system so that
- many applications view files as sequential streams of characters.
- However, a few applications use the underlying page structures
- directly, and some of these create holey files.
- A TOPS-20 disk file consists of four things: a pathname, a page
- table, a (possibly empty) set of pages, and a set of attributes.
- The pathname is specified in the RETR or STOR command. It includes
- the directory name, file name, file name extension, and generation
- number.
- The page table contains up to 2**18 entries. Each entry may be
- EMPTY, or may point to a page. If it is not empty, there are also
- some page-specific access bits; not all pages of a file need have the
- same access protection.
- A page is a contiguous set of 512 words of 36 bits each.
- The attributes of the file, in the File Descriptor Block (FDB),
- contain such things as creation time, write time, read time, writer's
- byte-size, end-of-file pointer, count of reads and writes, backup
- system tape numbers, etc.
- Note that there is NO requirement that entries in the page table be
- contiguous. There may be empty page table slots between occupied
- ones. Also, the end of file pointer is simply a number. There is no
- requirement that it in fact point at the "last" datum in the file.
- Ordinary sequential I/O calls in TOPS-20 will cause the end of file
- pointer to be left after the last datum written, but other operations
- may cause it not to be so, if a particular programming system so
- requires.
- In fact, in both of these special cases, "holey" files and
- end-of-file pointers NOT at the end of the file, occur with NLS data
- files.
- Postel & Reynolds [Page 60]
-
- RFC 959 October 1985
- File Transfer Protocol
- The TOPS-20 paged files can be sent with the FTP transfer parameters:
- TYPE L 36, STRU P, and MODE S (in fact, any mode could be used).
- Each page of information has a header. Each header field, which is a
- logical byte, is a TOPS-20 word, since the TYPE is L 36.
- The header fields are:
- Word 0: Header Length.
- The header length is 5.
- Word 1: Page Index.
- If the data is a disk file page, this is the number of that
- page in the file's page map. Empty pages (holes) in the file
- are simply not sent. Note that a hole is NOT the same as a
- page of zeros.
- Word 2: Data Length.
- The number of data words in this page, following the header.
- Thus, the total length of the transmission unit is the Header
- Length plus the Data Length.
- Word 3: Page Type.
- A code for what type of chunk this is. A data page is type 3,
- the FDB page is type 2.
- Word 4: Page Access Control.
- The access bits associated with the page in the file's page
- map. (This full word quantity is put into AC2 of an SPACS by
- the program reading from net to disk.)
- After the header are Data Length data words. Data Length is
- currently either 512 for a data page or 31 for an FDB. Trailing
- zeros in a disk file page may be discarded, making Data Length less
- than 512 in that case.
- Postel & Reynolds [Page 61]
-
- RFC 959 October 1985
- File Transfer Protocol
- APPENDIX II - DIRECTORY COMMANDS
- Since UNIX has a tree-like directory structure in which directories
- are as easy to manipulate as ordinary files, it is useful to expand
- the FTP servers on these machines to include commands which deal with
- the creation of directories. Since there are other hosts on the
- ARPA-Internet which have tree-like directories (including TOPS-20 and
- Multics), these commands are as general as possible.
- Four directory commands have been added to FTP:
- MKD pathname
- Make a directory with the name "pathname".
- RMD pathname
- Remove the directory with the name "pathname".
- PWD
- Print the current working directory name.
- CDUP
- Change to the parent of the current working directory.
- The "pathname" argument should be created (removed) as a
- subdirectory of the current working directory, unless the "pathname"
- string contains sufficient information to specify otherwise to the
- server, e.g., "pathname" is an absolute pathname (in UNIX and
- Multics), or pathname is something like "<abso.lute.path>" to
- TOPS-20.
- REPLY CODES
- The CDUP command is a special case of CWD, and is included to
- simplify the implementation of programs for transferring directory
- trees between operating systems having different syntaxes for
- naming the parent directory. The reply codes for CDUP be
- identical to the reply codes of CWD.
- The reply codes for RMD be identical to the reply codes for its
- file analogue, DELE.
- The reply codes for MKD, however, are a bit more complicated. A
- freshly created directory will probably be the object of a future
- Postel & Reynolds [Page 62]
-
- RFC 959 October 1985
- File Transfer Protocol
- CWD command. Unfortunately, the argument to MKD may not always be
- a suitable argument for CWD. This is the case, for example, when
- a TOPS-20 subdirectory is created by giving just the subdirectory
- name. That is, with a TOPS-20 server FTP, the command sequence
- MKD MYDIR
- CWD MYDIR
- will fail. The new directory may only be referred to by its
- "absolute" name; e.g., if the MKD command above were issued while
- connected to the directory <DFRANKLIN>, the new subdirectory
- could only be referred to by the name <DFRANKLIN.MYDIR>.
- Even on UNIX and Multics, however, the argument given to MKD may
- not be suitable. If it is a "relative" pathname (i.e., a pathname
- which is interpreted relative to the current directory), the user
- would need to be in the same current directory in order to reach
- the subdirectory. Depending on the application, this may be
- inconvenient. It is not very robust in any case.
- To solve these problems, upon successful completion of an MKD
- command, the server should return a line of the form:
- 257<space>"<directory-name>"<space><commentary>
- That is, the server will tell the user what string to use when
- referring to the created directory. The directory name can
- contain any character; embedded double-quotes should be escaped by
- double-quotes (the "quote-doubling" convention).
- For example, a user connects to the directory /usr/dm, and creates
- a subdirectory, named pathname:
- CWD /usr/dm
- 200 directory changed to /usr/dm
- MKD pathname
- 257 "/usr/dm/pathname" directory created
- An example with an embedded double quote:
- MKD foo"bar
- 257 "/usr/dm/foo""bar" directory created
- CWD /usr/dm/foo"bar
- 200 directory changed to /usr/dm/foo"bar
- Postel & Reynolds [Page 63]
-
- RFC 959 October 1985
- File Transfer Protocol
- The prior existence of a subdirectory with the same name is an
- error, and the server must return an "access denied" error reply
- in that case.
- CWD /usr/dm
- 200 directory changed to /usr/dm
- MKD pathname
- 521-"/usr/dm/pathname" directory already exists;
- 521 taking no action.
- The failure replies for MKD are analogous to its file creating
- cousin, STOR. Also, an "access denied" return is given if a file
- name with the same name as the subdirectory will conflict with the
- creation of the subdirectory (this is a problem on UNIX, but
- shouldn't be one on TOPS-20).
- Essentially because the PWD command returns the same type of
- information as the successful MKD command, the successful PWD
- command uses the 257 reply code as well.
- SUBTLETIES
- Because these commands will be most useful in transferring
- subtrees from one machine to another, carefully observe that the
- argument to MKD is to be interpreted as a sub-directory of the
- current working directory, unless it contains enough information
- for the destination host to tell otherwise. A hypothetical
- example of its use in the TOPS-20 world:
- CWD <some.where>
- 200 Working directory changed
- MKD overrainbow
- 257 "<some.where.overrainbow>" directory created
- CWD overrainbow
- 431 No such directory
- CWD <some.where.overrainbow>
- 200 Working directory changed
- CWD <some.where>
- 200 Working directory changed to <some.where>
- MKD <unambiguous>
- 257 "<unambiguous>" directory created
- CWD <unambiguous>
- Note that the first example results in a subdirectory of the
- connected directory. In contrast, the argument in the second
- example contains enough information for TOPS-20 to tell that the
- Postel & Reynolds [Page 64]
-
- RFC 959 October 1985
- File Transfer Protocol
- <unambiguous> directory is a top-level directory. Note also that
- in the first example the user "violated" the protocol by
- attempting to access the freshly created directory with a name
- other than the one returned by TOPS-20. Problems could have
- resulted in this case had there been an <overrainbow> directory;
- this is an ambiguity inherent in some TOPS-20 implementations.
- Similar considerations apply to the RMD command. The point is
- this: except where to do so would violate a host's conventions for
- denoting relative versus absolute pathnames, the host should treat
- the operands of the MKD and RMD commands as subdirectories. The
- 257 reply to the MKD command must always contain the absolute
- pathname of the created directory.
- Postel & Reynolds [Page 65]
-
- RFC 959 October 1985
- File Transfer Protocol
- APPENDIX III - RFCs on FTP
- Bhushan, Abhay, "A File Transfer Protocol", RFC 114 (NIC 5823),
- MIT-Project MAC, 16 April 1971.
- Harslem, Eric, and John Heafner, "Comments on RFC 114 (A File
- Transfer Protocol)", RFC 141 (NIC 6726), RAND, 29 April 1971.
- Bhushan, Abhay, et al, "The File Transfer Protocol", RFC 172
- (NIC 6794), MIT-Project MAC, 23 June 1971.
- Braden, Bob, "Comments on DTP and FTP Proposals", RFC 238 (NIC 7663),
- UCLA/CCN, 29 September 1971.
- Bhushan, Abhay, et al, "The File Transfer Protocol", RFC 265
- (NIC 7813), MIT-Project MAC, 17 November 1971.
- McKenzie, Alex, "A Suggested Addition to File Transfer Protocol",
- RFC 281 (NIC 8163), BBN, 8 December 1971.
- Bhushan, Abhay, "The Use of "Set Data Type" Transaction in File
- Transfer Protocol", RFC 294 (NIC 8304), MIT-Project MAC,
- 25 January 1972.
- Bhushan, Abhay, "The File Transfer Protocol", RFC 354 (NIC 10596),
- MIT-Project MAC, 8 July 1972.
- Bhushan, Abhay, "Comments on the File Transfer Protocol (RFC 354)",
- RFC 385 (NIC 11357), MIT-Project MAC, 18 August 1972.
- Hicks, Greg, "User FTP Documentation", RFC 412 (NIC 12404), Utah,
- 27 November 1972.
- Bhushan, Abhay, "File Transfer Protocol (FTP) Status and Further
- Comments", RFC 414 (NIC 12406), MIT-Project MAC, 20 November 1972.
- Braden, Bob, "Comments on File Transfer Protocol", RFC 430
- (NIC 13299), UCLA/CCN, 7 February 1973.
- Thomas, Bob, and Bob Clements, "FTP Server-Server Interaction",
- RFC 438 (NIC 13770), BBN, 15 January 1973.
- Braden, Bob, "Print Files in FTP", RFC 448 (NIC 13299), UCLA/CCN,
- 27 February 1973.
- McKenzie, Alex, "File Transfer Protocol", RFC 454 (NIC 14333), BBN,
- 16 February 1973.
- Postel & Reynolds [Page 66]
-
- RFC 959 October 1985
- File Transfer Protocol
- Bressler, Bob, and Bob Thomas, "Mail Retrieval via FTP", RFC 458
- (NIC 14378), BBN-NET and BBN-TENEX, 20 February 1973.
- Neigus, Nancy, "File Transfer Protocol", RFC 542 (NIC 17759), BBN,
- 12 July 1973.
- Krilanovich, Mark, and George Gregg, "Comments on the File Transfer
- Protocol", RFC 607 (NIC 21255), UCSB, 7 January 1974.
- Pogran, Ken, and Nancy Neigus, "Response to RFC 607 - Comments on the
- File Transfer Protocol", RFC 614 (NIC 21530), BBN, 28 January 1974.
- Krilanovich, Mark, George Gregg, Wayne Hathaway, and Jim White,
- "Comments on the File Transfer Protocol", RFC 624 (NIC 22054), UCSB,
- Ames Research Center, SRI-ARC, 28 February 1974.
- Bhushan, Abhay, "FTP Comments and Response to RFC 430", RFC 463
- (NIC 14573), MIT-DMCG, 21 February 1973.
- Braden, Bob, "FTP Data Compression", RFC 468 (NIC 14742), UCLA/CCN,
- 8 March 1973.
- Bhushan, Abhay, "FTP and Network Mail System", RFC 475 (NIC 14919),
- MIT-DMCG, 6 March 1973.
- Bressler, Bob, and Bob Thomas "FTP Server-Server Interaction - II",
- RFC 478 (NIC 14947), BBN-NET and BBN-TENEX, 26 March 1973.
- White, Jim, "Use of FTP by the NIC Journal", RFC 479 (NIC 14948),
- SRI-ARC, 8 March 1973.
- White, Jim, "Host-Dependent FTP Parameters", RFC 480 (NIC 14949),
- SRI-ARC, 8 March 1973.
- Padlipsky, Mike, "An FTP Command-Naming Problem", RFC 506
- (NIC 16157), MIT-Multics, 26 June 1973.
- Day, John, "Memo to FTP Group (Proposal for File Access Protocol)",
- RFC 520 (NIC 16819), Illinois, 25 June 1973.
- Merryman, Robert, "The UCSD-CC Server-FTP Facility", RFC 532
- (NIC 17451), UCSD-CC, 22 June 1973.
- Braden, Bob, "TENEX FTP Problem", RFC 571 (NIC 18974), UCLA/CCN,
- 15 November 1973.
- Postel & Reynolds [Page 67]
-
- RFC 959 October 1985
- File Transfer Protocol
- McKenzie, Alex, and Jon Postel, "Telnet and FTP Implementation -
- Schedule Change", RFC 593 (NIC 20615), BBN and MITRE,
- 29 November 1973.
- Sussman, Julie, "FTP Error Code Usage for More Reliable Mail
- Service", RFC 630 (NIC 30237), BBN, 10 April 1974.
- Postel, Jon, "Revised FTP Reply Codes", RFC 640 (NIC 30843),
- UCLA/NMC, 5 June 1974.
- Harvey, Brian, "Leaving Well Enough Alone", RFC 686 (NIC 32481),
- SU-AI, 10 May 1975.
- Harvey, Brian, "One More Try on the FTP", RFC 691 (NIC 32700), SU-AI,
- 28 May 1975.
- Lieb, J., "CWD Command of FTP", RFC 697 (NIC 32963), 14 July 1975.
- Harrenstien, Ken, "FTP Extension: XSEN", RFC 737 (NIC 42217), SRI-KL,
- 31 October 1977.
- Harrenstien, Ken, "FTP Extension: XRSQ/XRCP", RFC 743 (NIC 42758),
- SRI-KL, 30 December 1977.
- Lebling, P. David, "Survey of FTP Mail and MLFL", RFC 751, MIT,
- 10 December 1978.
- Postel, Jon, "File Transfer Protocol Specification", RFC 765, ISI,
- June 1980.
- Mankins, David, Dan Franklin, and Buzz Owen, "Directory Oriented FTP
- Commands", RFC 776, BBN, December 1980.
- Padlipsky, Michael, "FTP Unique-Named Store Command", RFC 949, MITRE,
- July 1985.
- Postel & Reynolds [Page 68]
-
- RFC 959 October 1985
- File Transfer Protocol
- REFERENCES
- [1] Feinler, Elizabeth, "Internet Protocol Transition Workbook",
- Network Information Center, SRI International, March 1982.
- [2] Postel, Jon, "Transmission Control Protocol - DARPA Internet
- Program Protocol Specification", RFC 793, DARPA, September 1981.
- [3] Postel, Jon, and Joyce Reynolds, "Telnet Protocol
- Specification", RFC 854, ISI, May 1983.
- [4] Reynolds, Joyce, and Jon Postel, "Assigned Numbers", RFC 943,
- ISI, April 1985.
- Postel & Reynolds [Page 69]
|