日韩黑丝制服一区视频播放|日韩欧美人妻丝袜视频在线观看|九九影院一级蜜桃|亚洲中文在线导航|青草草视频在线观看|婷婷五月色伊人网站|日本一区二区在线|国产AV一二三四区毛片|正在播放久草视频|亚洲色图精品一区

分享

RFC959 FTP

 大蟲1972 2011-01-25

原文參考RFC0959,源自:http://www./ /翻譯:果皮版本:v1.0 02010-7-28 8
文件傳輸協(xié)議
備忘錄的狀況
此備忘錄是FTP P協(xié)議的官方規(guī)范,可無條件分發(fā)。
下列新的可選命令包含在此版本的規(guī)范中:CDUP P(Change eto oParent tDirectory), ,SMNT T(Structure eMount), ,STOU(Store eUnique), ,RMD D(Remove eDirectory),MKD(MakeDirectory),PWD(PrintDirectory),andSYST(System). .
注意此規(guī)范兼容以前的版本。1 .簡介
FTP P的目標(biāo)如下:
1)促進(jìn)文件共享(計算機(jī)程序和數(shù)據(jù)),2)鼓勵間接或隱式(通過程序)的使用遠(yuǎn)程計算機(jī),3)使用戶免受主機(jī)之間文件存儲系統(tǒng)的變化,4)可靠高效的傳輸數(shù)據(jù)。盡管用戶可在終端機(jī)上直接使用FTP P,但設(shè)計FTP P主要是為了在程序中使用。
此規(guī)范試圖用一個簡單且容易實現(xiàn)的協(xié)議設(shè)計來滿足用戶的各種需求,如大型機(jī)、小型機(jī)、個人工作站和TACs。
這篇文章假設(shè)您已熟悉TCP P和Telnet t協(xié)議,相關(guān)文檔包含在ARPA A互聯(lián)網(wǎng)協(xié)議手冊中。2 .概述
本節(jié)內(nèi)容討論歷史、術(shù)語和FTP P模型。本節(jié)定義的術(shù)語僅僅是那些在FTP P中有特殊意義的詞語。某些術(shù)語僅針對FTP P模型;當(dāng)回顧術(shù)語時,一些讀者可能需要借助于本節(jié)的FTP P模型。2.1 歷史
多年來,F(xiàn)TP P協(xié)議有一個長期的演化。附錄III I是和FTP P有關(guān)的按時間排序的RFC C文檔列表。這些文檔包含1971 1年第一個被提議的文件傳輸機(jī)制,它在麻省理工學(xué)院(M.I.T.)(RFC114)的主機(jī)上實現(xiàn),RFC141 1中加上了注解和討論。
RFC172 2提供了一個面向用戶級的在主機(jī)間(包括終端IMPs s)傳輸文件的協(xié)
議。作為修訂版,RFC265 5改編了FTP,RFC281 1提議做進(jìn)一步的改變。1982 2年1 1月,RFC294 4提議使用事務(wù)數(shù)據(jù)集類型(?"SetDataType" "transaction)。
RFC354 4淘汰了RFC264 4和265。FTP P現(xiàn)在被定義為在ARPANET T上主機(jī)之間進(jìn)行文件傳輸?shù)囊粋€協(xié)議,F(xiàn)TP P的主要功能是在主機(jī)之間高效可靠的傳輸文件,并允許方便的使用遠(yuǎn)程文件存儲功能。RFC385 5進(jìn)一步評論了協(xié)議的錯誤、目的和附件,RFC414 4則提供了關(guān)于serverFTP和userFTP P工作情況的報告。1973 3年發(fā)布的RFC430 0提出關(guān)于FTP P的進(jìn)一步評議。最終,一份正式的FTP P文檔出版了,這就是RFC454。
1973 3年7 7月以前,F(xiàn)TP P的最后一個版本發(fā)生了相當(dāng)大的改變,但總體結(jié)構(gòu)未變。作為新的官方規(guī)范,RFC542 2的發(fā)布體現(xiàn)了這些變化。盡管如此,基于舊版本的許多實現(xiàn)未被更新。
1974 4年,RFC607 7和614 4繼續(xù)對FTP P發(fā)表評論。RFC624 4提出了深層的設(shè)計更改和小的修訂。1975 5年,RFC686 6,標(biāo)題為"Leaving gWell lEnoughAlone" ",討論了所有新舊FTP P版本的不同。RFC691 1提出了對RFC686 6的輕微修訂,和文件打印相關(guān)。
在底層協(xié)議從NCP P轉(zhuǎn)換到TCP P的推動下,基于上述所有的努力,RFC765 5詳述了FTP P在TCP P上的使用。
當(dāng)前版本的FTP P規(guī)范準(zhǔn)備改正一些小的文檔錯誤,來改善某些協(xié)議特征的解釋,并增加一些新的可選命令。
特別是,下列新的可選命令包含在此版本的規(guī)范中:
:CDUP– –進(jìn)入上一級目錄
錄SMNT T– –結(jié)構(gòu)裝載(?StructureMount)
)STOU U– –唯一存儲(?StoreUnique)
)RMD D– –刪除目錄MKD D– –新建目錄PWD D–打印目錄SYST T-System
m
此規(guī)范兼容以前的版本。依據(jù)先前版本實現(xiàn)的程序應(yīng)該可以自動適應(yīng)此規(guī)范。2.2 術(shù)語
ASCII I
ASCII I字符集定義在ARPA互聯(lián)網(wǎng)協(xié)議手冊中。在FTP P中,ASCII I字符集定義為一個八位編碼集的低半部分(例如,最高位是零)。
訪問控制(accesscontrols) )
訪問控制定義了用戶使用系統(tǒng)及系統(tǒng)文件的權(quán)限。訪問控制必須防止對文件進(jìn)行非法或意外的使用。調(diào)用訪問控制是server-FTPprocess s的特權(quán)。
字節(jié)大小(bytesize) )
FTP P中有兩種字節(jié)大?。何募倪壿嬜止?jié)大小,用于數(shù)據(jù)傳輸?shù)膫鬏斪止?jié)大小。傳輸字節(jié)大小總是8 8位。傳輸字節(jié)大小不一定是數(shù)據(jù)接收方系統(tǒng)的字節(jié)大小, ,也不一定是邏輯字節(jié)大?。ㄓ糜诮忉寯?shù)據(jù)的結(jié)構(gòu))。
控制連接(controlconnection) )
在USER-PI I和SERVER-PI I之間交換命令和應(yīng)答的通信路徑。此連接遵循
Telnet t協(xié)議。
數(shù)據(jù)連接(dataconnection) )
全雙工連接,在此之上,數(shù)據(jù)以一種指定的模式和類型進(jìn)行傳輸。被傳輸?shù)?br>數(shù)據(jù)可能是文件的一部分、整個文件或若干文件。連接可以建立在server-DTP P和user-DTP P之間,或者兩個server-DTP P之間。
數(shù)據(jù)端口(dataport) )
被動DTP P在數(shù)據(jù)端口上偵聽來自主動DTP P的連接,以便能夠打開數(shù)據(jù)連接。
DTP(datatransferprocess) )
DTP P建立和管理數(shù)據(jù)連接。DTP P可以是被動的或主動的。
行結(jié)束符(End-of-Line) )
行結(jié)束符定義了可打印行之間的間隔。回車+換行。
文件結(jié)束符(EOF) )
文件結(jié)束符定義了在傳文件的結(jié)尾。
記錄終止符(EOR) )
記錄終止符定義了在傳記錄的結(jié)尾。
錯誤恢復(fù)(errorrecovery) )
允許用戶從某些錯誤中恢復(fù),比如主機(jī)系統(tǒng)或DTP P的故障。在FTP P中,錯誤恢復(fù)可能涉及文件傳輸?shù)闹貑ⅲㄔ诮o定的檢查點)。
FTP P命令(FTPcommands) )
一個命令集,包含了從user-FTP P到server-FTP P傳輸?shù)目刂菩畔ⅰ?br>文件(File) )計算機(jī)數(shù)據(jù)(包括程序)的有序集合,具有任意長度,通過路徑名唯一識別。模式(mode) )在數(shù)據(jù)連接上,數(shù)據(jù)以此模式傳輸。模式定義了傳輸過程中的數(shù)據(jù)格式,包
括EOR R和EOF F。FTP P中定義的傳輸模式在TransmissionModes s一節(jié)中講述。
網(wǎng)絡(luò)虛擬終端(VNT) )
網(wǎng)絡(luò)虛擬終端同Telnet t協(xié)議中的定義相同。
網(wǎng)絡(luò)虛擬文件系統(tǒng)(NVFS) )
此概念定義了一個標(biāo)準(zhǔn)的網(wǎng)絡(luò)文件系統(tǒng),具有標(biāo)準(zhǔn)的命令和路徑名約定。
頁(Page) )
一個文件可能被結(jié)構(gòu)化為被稱為頁的獨立部分的集合。FTP P支持不連續(xù)文件
(獨立的索引頁)的傳輸。
路徑名(pathname) )
路徑名是用戶輸入到文件系統(tǒng)中的一個字符串,用于標(biāo)識一個文件。路徑名
一般包括設(shè)備和目錄名,以及文件名。FTP P尚未指定標(biāo)準(zhǔn)的路徑名約定。每個用戶必須遵循傳輸過程中所涉及文件系統(tǒng)的文件名約定。
協(xié)議解釋器(PI) )
Theprotocolinterpreter r。協(xié)議兩端的user r和server r具有不同的角色(分別在user-PI I和server-PI I中實現(xiàn))。
記錄(record) )
一個順序文件可能被結(jié)構(gòu)化為若干稱為記錄的部分。FTP P支持記錄結(jié)構(gòu),但傳輸?shù)奈募槐胤堑檬怯涗浗Y(jié)構(gòu)。
應(yīng)答(reply) )
應(yīng)答是server r通過控制連接向user r發(fā)送的一個確認(rèn)(肯定的或否定的),它是對FTP P命令的響應(yīng)。應(yīng)答的一般形式是一個完成碼(包括錯誤碼)后跟一個文本串。完成碼為程序所用,文本串通常為人類用戶所用。
服務(wù)器數(shù)據(jù)傳輸進(jìn)程(server-DTP) )
DTP P,以正常的主動狀態(tài),通過偵聽數(shù)據(jù)端口來建立數(shù)據(jù)連接。它為傳輸和存儲設(shè)置一些參數(shù),并且按照來自其協(xié)議解釋器(PI I)的命令傳輸數(shù)據(jù)。DTP P
可以設(shè)置為被動狀態(tài)進(jìn)行偵聽,而不是在數(shù)據(jù)端口發(fā)起一個連接。
服務(wù)器FTP P進(jìn)程(server-FTPprocess) )
一個process s或process s集合,它與一個user-FTPprocess s(也可能是另一個
server r)協(xié)作完成文件傳輸?shù)墓δ?。此功能包括一個協(xié)議解釋器(PI I)和一個數(shù)據(jù)傳輸進(jìn)程(DTP)。
服務(wù)器協(xié)議解釋器(server-PI) )
server-PI I在端口L(PortL L)上偵聽來自user-PI I的連接,并且建立一個控制通信連接。它接收來自user-PI I的標(biāo)準(zhǔn)FTP P命令,發(fā)送應(yīng)答,以及管理server-DTP P。
類型(type) )
數(shù)據(jù)表示類型,用于數(shù)據(jù)傳輸和存儲。類型意味著在數(shù)據(jù)存儲和數(shù)據(jù)傳輸之間的某些轉(zhuǎn)換。FTP P中定義的表示類型在EstablishingDataConnections s一節(jié)中講述。
用戶(user) )
想要獲得文件傳輸服務(wù)的一個人或可代表人的process s。人類用戶可以直接與server-FTPprocess s交互,但是應(yīng)優(yōu)先使用user-FTPprocess s,因為FTP P協(xié)議的
設(shè)計更傾向于自動裝置。
用戶數(shù)據(jù)傳輸進(jìn)程(user-DTP) )
DTP P在數(shù)據(jù)端口偵聽來自server-FTPprocess s的連接。如果兩個server r正在
相互傳輸數(shù)據(jù),那么此user-DTP P將是不活躍的。
用戶FTP P進(jìn)程(user-FTPprocess) )
一個功能集合,包括一個PI I、一個DTP P以及一個用戶界面,與一個或多個
server-FTPprocess s協(xié)作,共同完成文件傳輸功能。用戶界面允許在命令應(yīng)答中使用本地語言與user r進(jìn)行對話。
用戶協(xié)議解釋器(user-PI) )
用戶協(xié)議解釋器(userprotocolinterpreter r)發(fā)起從其端口U(portU U)到server-FTPprocess s的控制連接,發(fā)出FTP P命令,并且管理user-DTP P(若其屬于
此次文件傳輸)。2.3FTP 模型
(THEFTPMODEL)
基于上述定義,下面的模型(圖1)解釋了一個FTPservice。
注意:1.數(shù)據(jù)連接可用于任何一個方向。
2.數(shù)據(jù)連接不必一直存在。
。圖1--FTP P使用模型
在圖1 1描述的模型中,User-PI I發(fā)起了控制連接。控制連接遵循Telnet t協(xié)議。在user r的發(fā)起時刻,標(biāo)準(zhǔn)FTP P命令由user-PI I生成并通過控制連接傳輸給server rprocess。(user r可以直接建立一個到server-FTP P的控制連接,例如從一個TAC C終端機(jī),獨立的生成標(biāo)準(zhǔn)FTP P命令,繞過user-FTPprocess s)為響應(yīng)命令,server-PI I通過控制連接向user-PI I發(fā)送標(biāo)準(zhǔn)應(yīng)答。
FTP P命令為數(shù)據(jù)連接及文件系統(tǒng)操作指定了若干參數(shù),前者的參數(shù)有數(shù)據(jù)端口、傳輸模式、表示類型和結(jié)構(gòu),后者有存儲、獲取、附加、刪除等等。user-DTP P或其指派(?designate)應(yīng)在特定數(shù)據(jù)端口上偵聽,server r按照規(guī)定的參數(shù)發(fā)起數(shù)據(jù)連接和數(shù)據(jù)傳輸。注意,數(shù)據(jù)端口不必在發(fā)出FTP P命令的主機(jī)上,但是user r或user-FTPprocess s必須保證在指定的數(shù)據(jù)端口上偵聽。也應(yīng)注意,數(shù)據(jù)連接可能同時用于收發(fā)。
另一種情況,user r可能希望在兩個遠(yuǎn)程主機(jī)間傳輸文件。User r建立到兩個server r的控制連接,接著安排server r之間的數(shù)據(jù)連接。這樣,控制信息被傳遞給user-PI,但是數(shù)據(jù)在server-DTP P間傳輸。下圖是這種server-server r交互的模型。
圖2 2
當(dāng)數(shù)據(jù)正在傳輸時,此協(xié)議要求控制連接處于打開狀態(tài)。當(dāng)FTPservice e使用完畢時,user r有責(zé)任請求關(guān)閉控制連接,盡管是server r執(zhí)行關(guān)閉動作。如果控制連接在沒有收到命令的情況下被關(guān)閉了,server r可能會終止數(shù)據(jù)傳輸。
FTP P和Telnet t的關(guān)系:
FTP P在控制連接中使用Telnet t協(xié)議。這可以通過兩種方式完成:第一,user-PI I或者server-PI I可在它們自己的程序中直接實現(xiàn)Telnet t協(xié)議的規(guī)則;第二,user-PI I或者server-PI I可利用系統(tǒng)中已存在的Telnet t組件。
第二種方法適用于免實現(xiàn)、代碼共享及模塊化編程的情況。若講求效率和自主性則選第一種方法。
事實上,F(xiàn)TP P只用到了很少的Telnet t協(xié)議,因此第一種方法不需要寫大量的代碼。3. 數(shù)據(jù)傳輸功能(DATATRANSFERFUNCTIONS) )
文件僅通過數(shù)據(jù)連接進(jìn)行傳輸??刂七B接用于傳輸命令(描述了將要執(zhí)行的功能)以及這些命令的應(yīng)答(見FTPReplies s小節(jié))。一些命令涉及到主機(jī)間數(shù)據(jù)的傳輸,這些命令包括MODE E命令(指定了數(shù)據(jù)位如何傳輸)、STRUCTURE E以及TYPE E命令(定義了數(shù)據(jù)的表示方式)。傳輸和表示基本上是無關(guān)的,但是流傳輸模式取決于文件結(jié)構(gòu)屬性,如果使用了壓縮傳輸模式,填充字節(jié)取決于表示類型。3.1 數(shù)據(jù)表示和存儲(DATAREPRESENTATIONANDSTORAGE)
數(shù)據(jù)從發(fā)送者主機(jī)的存儲設(shè)備中傳輸?shù)浇邮照咧鳈C(jī)的存儲設(shè)備中。因為這兩個系統(tǒng)的數(shù)據(jù)存儲表示法常常是不同的,所以需要執(zhí)行某些數(shù)據(jù)轉(zhuǎn)換。例如,在不同的系統(tǒng)中,NVT-ASCII I具有不同的數(shù)據(jù)存儲表示法。DECTOPS-20s s通常將NVT-ASCII I存儲為5 5個7 7位ASCII I字符,在一個36 6位字中左對齊。IBM M大型機(jī)將NVT-ASCII I存儲為8 8位EBCDIC C碼。Multics s將NVT-ASCII I存儲為4 4個9 9位字符,在一個36 6位字中。在不同的系統(tǒng)間傳輸文本時,適合將字符轉(zhuǎn)換成標(biāo)準(zhǔn)NVT-ASCII I表示法。收發(fā)方需在標(biāo)準(zhǔn)表示法和它們的內(nèi)部表示法之間執(zhí)行必要的轉(zhuǎn)換。
當(dāng)在不同字長的主機(jī)系統(tǒng)間傳輸二進(jìn)制數(shù)據(jù)時,在表示法上出現(xiàn)了一個問
題。并不總是能夠清楚的知道發(fā)送者如何發(fā)送數(shù)據(jù)以及接收者如何存儲之。例如, ,當(dāng)從32 2位字長的系統(tǒng)向36 6位字長的系統(tǒng)傳輸32 2位字節(jié)時,在后者系統(tǒng)中,在36 6位字中按照右對齊來存儲32 2位字節(jié)可能是合適的。在任何情況下,user r應(yīng)該能夠指定數(shù)據(jù)表示法和轉(zhuǎn)換方法。應(yīng)該注意FTP P提供的數(shù)據(jù)類型表示法非常有限,其它類型的數(shù)據(jù)轉(zhuǎn)換應(yīng)該由user r直接執(zhí)行。
3.3.3.3.1.1.1.1.1111數(shù)據(jù)類型(DATATYPES) )
FTP依據(jù)user指定的表示類型來處理數(shù)據(jù)表示。指定的類型可能含蓄的(asin nASCIIorEBCDIC)或明確的(asinLocalbyte)定義了邏輯字節(jié)大小。注意,這與在數(shù)據(jù)連接上傳輸?shù)淖止?jié)大?。ǚQ為傳輸字節(jié)大小)沒有任何關(guān)系,二者不能混淆。例如,NVT-ASCII I的邏輯字節(jié)大小為8 8位。如果類型為本地字節(jié),那么TYPE E命令必須用第二個參數(shù)來指定邏輯字節(jié)大小。傳輸字節(jié)大小總是8位。3.1.1.1.ASCII 類型( ASCIITYPE)
這是所有的FTP P必須接受的默認(rèn)類型,主要用于傳輸文本文件。如果雙方主機(jī)認(rèn)為使用EBCDIC C類型更方便,則不使用ASCII I類型。
發(fā)送方將數(shù)據(jù)由字符的內(nèi)部表示法轉(zhuǎn)換為標(biāo)準(zhǔn)的8位NVT-ASCII表示法(參見Telnet t規(guī)范)。接收方則把數(shù)據(jù)由標(biāo)準(zhǔn)表示法轉(zhuǎn)換為內(nèi)部表示法。
按照NVT T標(biāo)準(zhǔn),在文本行尾應(yīng)當(dāng)使用<CRLF> >序列。(參見Data aRepresentationandStorage e小節(jié)最后關(guān)于文件結(jié)構(gòu)的討論)
使用標(biāo)準(zhǔn)的NVT-ASCII I表示法意味著必須將8位數(shù)據(jù)看作一個字節(jié)。
ASCII I和EBCDIC C類型的格式參數(shù)將在下面討論。3.1.1.2.EBCDIC EBCDICTYPE)
當(dāng)某些主機(jī)采用EBCDIC C作為內(nèi)部字符表示法時,EBCDIC C可用于此類主機(jī)間的高效數(shù)據(jù)傳輸。
為進(jìn)行傳輸,數(shù)據(jù)被表示為8位EBCDIC C字符序列。EBCDIC C和ASCII I類型的唯一區(qū)別在于字符編碼。
EBCDIC C類型中很少使用行結(jié)束符(end-of-line),但使用換行符<NL>。3.1.1.3. 圖像IMAGETYPE)
圖像類型數(shù)據(jù)被看作連續(xù)的位,這些位被打包成8位傳輸字節(jié),以便進(jìn)行傳輸。接收方須將這些數(shù)據(jù)存儲為連續(xù)的位。存儲系統(tǒng)的結(jié)構(gòu)可能要求對文件或文件中的記錄進(jìn)行填充,使得文件或記錄處于字節(jié)、字或塊的邊界上。填充字節(jié)全為0,僅在文件或記錄的末尾用到。對于填充字節(jié),必須有一種識別方法,在重新獲取文件時可將其剔除。填充字節(jié)的轉(zhuǎn)換必須實現(xiàn),使得用戶可以進(jìn)行文件存儲。
圖像類型用于高效存儲、文件檢索以及二進(jìn)制數(shù)據(jù)的傳輸。建議所有的FTP P都應(yīng)具有處理圖像類型的能力。
3.1.1.4. 本地類型(LOCALTYPE)
此類型數(shù)據(jù)以邏輯字節(jié)進(jìn)行傳輸,字節(jié)大小由第二個參數(shù)指定。參數(shù)二的值必須是十進(jìn)制整數(shù),且沒有默認(rèn)值。邏輯字節(jié)不必與傳輸字節(jié)大小相同。若這兩種字節(jié)大小不同,那么應(yīng)將數(shù)據(jù)連續(xù)的包裝成邏輯字節(jié),而不考慮傳輸字節(jié)的邊界,末尾也無需進(jìn)行字節(jié)填充。
當(dāng)數(shù)據(jù)到達(dá)接收方主機(jī)時,將按某種方式進(jìn)行轉(zhuǎn)換,這取決于邏輯字節(jié)大小和特定的主機(jī)。這種轉(zhuǎn)換必須是可逆的(若使用相同參數(shù),獲取到的文件也應(yīng)相同),所有的FTP P應(yīng)該實現(xiàn)此種轉(zhuǎn)換。
例如,將36 6位浮點數(shù)發(fā)送到32 2位字長的主機(jī)時,數(shù)據(jù)應(yīng)當(dāng)按本地類型傳輸,邏輯字節(jié)為36 6位。接收方主機(jī)存儲這些邏輯字節(jié)以便它們能更容易被操作; ;此例將36 6位邏輯字節(jié)放入64 4位雙字中就足夠了。
另一個例子,兩臺36 6位字長的主機(jī),彼此間使用TYPEL36 6按字傳輸數(shù)據(jù)。數(shù)據(jù)將按8 8位傳輸字節(jié)打包傳輸,如此,9 9個傳輸字節(jié)可以運(yùn)載2 2個字。3.1.1.5. 格式控制FORMATCONTROL)
ASCII I和EBCDIC C類型都接受第二個可選參數(shù),指出了與文件相關(guān)聯(lián)的垂直格式控制。
向主機(jī)傳輸一個字符文件,目的有三個:打印,存儲及以后的獲取,處理。若傳輸?shù)奈募糜诖蛴。邮辗街鳈C(jī)必須知道垂直格式控制是如何表示的。對于第二個目的,文件存儲在主機(jī)上以后,必須能夠原樣取回。最后,當(dāng)文件從一臺主機(jī)傳輸?shù)搅硪慌_后,應(yīng)可以在第二臺主機(jī)上順利的處理它。單獨的ASCII I或EBCDIC C格式無法滿足所有的情況。因此,這些類型具有第二個參數(shù),用來說明下列三種格式:3.1.1.5.1.NONPRINT
若省略第二個格式參數(shù),NONPRINT T將是默認(rèn)使用的參數(shù)。所有FTP P必須實現(xiàn)Non-print t格式。
該文件無需包含垂直格式信息。若將此文件傳給了printerprocess,此process s可能采用空格和邊距的標(biāo)準(zhǔn)值。
通常,NONPRINT T格式適用于僅執(zhí)行處理或存儲操作的文件。
3.3.3.3.1.1.1.1.1.1.1.1.5.5.5.5.2.2.2.2.TTTTeeeellllnnnneeeetttt格式控制(TELNETFORMATCONTROLS) )
printerprocess s能夠正確地解釋文件中的ASCII/EBCDIC C垂直格式控制,例如<CR>,<LF>,<NL>,<VT>,<FF>。<CRLF>表示行結(jié)束。
3.1.1.5.3.CARRIAGECONTROL(ASA)
文件包含ASA(FORTRAN N)垂直格式控制字符。按照ASA A標(biāo)準(zhǔn)格式化后, ,行或記錄的第一個字符不打印,此字符用于確定紙張的垂直移動,紙張移動發(fā)生在剩余內(nèi)容打印之前。ASA A標(biāo)準(zhǔn)指定了下列控制字符:
字符
垂直間距
空白
將紙張向上移動一行
0
0
將紙張向上移動兩行
1
1
將紙張移動到下一頁的頂部
+
+
無移動,比如套印
很明顯,必須有一些方法使得打printerprocess s能夠辨別結(jié)構(gòu)實體的末端。對于記錄結(jié)構(gòu)的文件不存在任何問題;在傳輸和存儲的過程中記錄將被明確的標(biāo)記。若文件不是記錄結(jié)構(gòu),<CRLF>行結(jié)束符序列用于分割printinglines s,但這些格式控制字符被ASA A控制符覆蓋。
3.3.3.3.1.1.1.1.2.2.2.2.數(shù)據(jù)結(jié)構(gòu)(DATASTRUCTURES) )
除了不同的表示類型外,F(xiàn)TP P允許指定文件的結(jié)構(gòu)。FTP P定義了三種文件結(jié)構(gòu):
file-structure e沒有內(nèi)部結(jié)構(gòu),文件被看作是數(shù)據(jù)字節(jié)的連續(xù)序列。
record-structure e文件由若干有序記錄組成。
page-structure e文件由獨立的若干索引頁組成。
如果STRUcture e命令未被使用,默認(rèn)為file-structure,但是對于文本文件(例如ASCII I或EBCDIC C類型)來說,所有的FTP P必須實現(xiàn)file-structure e和record-structure。
文件的固有結(jié)構(gòu)取決于存儲它的主機(jī)類型。在IBM M大型機(jī)上source-code e文件以定長記錄的形式存儲,但在DECTOPS-20 0上以字符流存儲,字符流被CRLF F分割成多行。若文件在這不同的主機(jī)之間傳輸,必須有一些方法使得一臺主機(jī)可以識別另一臺主機(jī)的文件結(jié)構(gòu)。
若將某種結(jié)構(gòu)的文件傳輸?shù)街С至硪环N文件結(jié)構(gòu)的主機(jī)上,可能會出現(xiàn)問題。如果文本文件以record-structure e傳輸?shù)街С謋ile-structure e的主機(jī)上,那么該主機(jī)應(yīng)對此文件做一個內(nèi)部轉(zhuǎn)換。顯然,此轉(zhuǎn)換是有用的,同時必須可逆,以便按record-structure e重新得到原文件。
當(dāng)文件以file-structure e傳輸?shù)街С謗ecord-structure e的主機(jī)上時,這就出現(xiàn)一個問題,主機(jī)如何將文件分割成若干record。如果必須分割,F(xiàn)TP P應(yīng)該使用end-of-line e序列,ASCII I使用<CRLF>,EBCDIC C使用<NL>作為定界符。如果采用這種技術(shù),那么當(dāng)以file-structure e重新獲取文件時,F(xiàn)TP P必須支持逆變換。3.1.2.1. 文件結(jié)構(gòu)(FILESTRUCTURE)
STRUcture e命令未被使用時,默認(rèn)為file-structure。file-structure e不存在內(nèi)部結(jié)構(gòu),此結(jié)構(gòu)的文件被看作是連續(xù)的數(shù)據(jù)字節(jié)序列。
3.1.2.2. 記錄結(jié)構(gòu)(RECORDSTRUCTURE)
對于文本文件(例如ASCII I或EBCDIC C類型的文件)來說,所有的FTP P必須支持record-structure。具有record-structure e結(jié)構(gòu)的文件由若干有序的record d組成。3.1.2.3. 頁P(yáng)AGESTRUCTURE)
為傳輸不連續(xù)的文件,F(xiàn)TP P定義了pagestructure。此類文件有時被叫做"randomaccessfiles"或者也稱為"holeyfiles"。傳輸這些文件時,需要添加一些附加信息:為整個文件添加filedescriptor r,為文件的一個section n添加pageaccess scontrols s,或者兩者同時添加。在FTP P中,文件的section n稱為page。為提供各種page e大小和相關(guān)信息,每一page e在傳輸時都帶有一個pageheader。Pageheader r包含下列定義域:
HeaderLength h–pageheader r的邏輯字節(jié)數(shù)(包括此字節(jié)),headerlength h最小值為4。
PageIndex x– –邏輯頁編號,而非此頁的傳輸序列號,此編號用于識別文件中的頁。
DataLength h– –頁中的邏輯字節(jié)數(shù),最小值為0。
PageType e– –頁類型。
。頁類型定義如下:

0=LastPage e用于指明傳輸過程的結(jié)束。Headerlength h必須為4,data alength h必須為0。
1=SimplePage e
常規(guī)類型,用于不含頁級訪問控制信息的簡單頁文件。Headerlength h必須為4。2=DescriptorPage e
用于傳輸文件整體的描述信息。
3=AccessControlledPage e
對于具有頁級訪問控制信息的文件來說,此類型頁包含一個附加的headerfield。Headerlength h必須為5。
OptionalFields s–Furtherheaderfields,可能用于提供每一頁的控制信息,例
如每頁的訪問控制。所有的域在長度上都是一個邏輯字節(jié)。邏輯字節(jié)的大小由TYPE E命令指定。參數(shù)警告:如果想得到與初始的傳輸文件完全相同的文件,所需參數(shù)應(yīng)同存
儲文件時用到的一樣。反之,若使用相同的參數(shù)來存儲和獲取文件,那么FTP P必須返回與原文件完全相同的文件。
3.2. 建立數(shù)據(jù)連接(ESTABLISHINGDATACONNECTIONS)
傳輸數(shù)據(jù)的過程包括在合適的端口建立數(shù)據(jù)連接,選擇傳輸參數(shù)。User r和server-DTP P都有一個默認(rèn)的數(shù)據(jù)端口。User-process s的默認(rèn)數(shù)據(jù)端口與控制連接端口(即U)相同。Server-process s的默認(rèn)數(shù)據(jù)端口與控制連接端口(即L-1 1)鄰近。
傳輸字節(jié)大小為8 8位。傳輸字節(jié)大小僅和實際的數(shù)據(jù)傳輸有關(guān),與主機(jī)文件系統(tǒng)中數(shù)據(jù)的表示無關(guān)。
被動DTP P(可能是一個user-DTP P或server-DTP P)在發(fā)送傳輸請求命令前,必須在數(shù)據(jù)端口上偵聽。請求命令決定了數(shù)據(jù)傳輸?shù)姆较?。依?jù)收到的傳輸請求, ,server r向特定端口發(fā)起數(shù)據(jù)連接。當(dāng)連接建立后,DTP P之間開始數(shù)據(jù)傳輸,server-PI I給user-PI I發(fā)送一個確認(rèn)應(yīng)答。
所有FTP P必須支持默認(rèn)數(shù)據(jù)端口的使用,僅有user-PI I能修改為非默認(rèn)端口。
User r可以通過PORT T命令指定一個備用數(shù)據(jù)端口。User r可能想將文件傳到TAClineprinter r或者從第三方主機(jī)獲取一個文件。在后一種情況中,user-PI I與兩個server-PI I建立控制連接。其中一個server r(通過一個FTP P命令)被告知偵聽另一個server r發(fā)起的連接。User-PI I向一個server-PI I發(fā)送PORT命令,指明另一個server r的數(shù)據(jù)端口。最后,兩個server r就可以互相發(fā)送傳輸命令了。User-controller r和server r之間發(fā)送的命令和應(yīng)答序列在FTPReplies s一節(jié)中定義。
一般來說,server r負(fù)責(zé)數(shù)據(jù)連接的發(fā)起和關(guān)閉,有一種情況例外,當(dāng)user-DTP P正在發(fā)送數(shù)據(jù)時需要關(guān)閉連接來表示文件結(jié)束。遇到下列情況server r必須關(guān)閉數(shù)據(jù)連接:
1、server r已經(jīng)完成數(shù)據(jù)傳輸,需要關(guān)閉連接以表明文件結(jié)束。
2、server r收到了來自user r的ABORT T命令。
3、默認(rèn)端口被用戶命令改變。
4、控制連接被關(guān)閉
5、發(fā)生了不可恢復(fù)的錯誤。
其它情況下,server r可選擇是否關(guān)閉數(shù)據(jù)連接,server r必須向user-process s發(fā)送250 0或226 6應(yīng)答。3.3. 的管理DATACONNECTIONMANAGEMENT)
默認(rèn)的數(shù)據(jù)連接端口:所有FTP P必須支持默認(rèn)數(shù)據(jù)連接端口的使用,僅有user-PI I可以使用非默認(rèn)端口。
非默認(rèn)數(shù)據(jù)端口的協(xié)商:user-PI I可通過PORT T命令指定一個非默認(rèn)的user rside e數(shù)據(jù)端口。User-PI I可通過PASV V命令請求server r識別非默認(rèn)serverside e數(shù)據(jù)端口。因為連接由地址對確定,僅執(zhí)行PORT T和PASV V其中一個就足以獲得一個不同的數(shù)據(jù)連接。但是允許這兩個命令全部執(zhí)行,這樣可在數(shù)據(jù)連接的兩端全部使用新的端口。
數(shù)據(jù)連接的重用:當(dāng)使用流模式傳輸數(shù)據(jù)時,必須通過關(guān)閉連接來表明文件結(jié)束。由于TCP P需要將連接保持一個超時周期來保證通信的可靠,因而當(dāng)一個會話中有多個文件需要傳輸時,會造成問題:無法立即重新打開連接。
對這個問題,有兩種解決方案:協(xié)商一個非默認(rèn)端口,或者使用另一種傳輸
模式。
關(guān)于傳輸模式的評論。流傳輸模式與生俱來是不可靠的,因為它不能確定連接是否過早的被關(guān)閉。其它傳輸模式(Block,Compressed)不通過關(guān)閉連接來表明文件結(jié)束,它們有足夠的FTPencoding g來解析數(shù)據(jù)連接,以確定文件是否結(jié)束。因此使用這些模式就能在傳輸多個文件時保持?jǐn)?shù)據(jù)連接的打開。3.4. 傳輸模式(TRANSMISSIONMODES)
傳輸數(shù)據(jù)還需要選擇合適的傳輸模式。有三種模式:第一種,將數(shù)據(jù)格式化, ,允許重啟程序;第二種,為高效傳輸而將數(shù)據(jù)壓縮;第三種,傳輸數(shù)據(jù)時,僅做極少的或不做處理。在最后一種情況中,傳輸模式與數(shù)據(jù)結(jié)構(gòu)共同決定了處理操作的類型。在壓縮模式中,表示類型(representationtype e)決定了填充字節(jié)(filler rbyte)。
所有的數(shù)據(jù)傳輸在文件結(jié)束時完成,end-of-file(EOF F)可以明確地給出,或者通過關(guān)閉數(shù)據(jù)連接來表示。對于recordstructure e類型的文件,所有的end-of-record(EOR)標(biāo)記都是明確給出的,包括最后一個。對于pagestructure e文件,傳輸結(jié)束時使用last-page e頁類型。
注意:在本節(jié)其余內(nèi)容里,byte e是指傳輸字節(jié),除非有明確的說明。
為使傳輸合乎標(biāo)準(zhǔn),發(fā)送主機(jī)將end-of-line e或end-of-record d符號的內(nèi)部表示法轉(zhuǎn)變?yōu)橛蓚鬏斈J郊拔募Y(jié)構(gòu)規(guī)定的表示法,接收主機(jī)將執(zhí)行逆變換。IBM M大型機(jī)的recordcount t域可能不被其它主機(jī)識別,因此end-of-record d信息在流模式中被當(dāng)作兩個字節(jié)控制碼傳輸,在Block k或Compressed d模式中被當(dāng)作描述符的一個標(biāo)志位。ASCII I或EBCDIC C文件不具有recordstructure,其中的end-of-line e應(yīng)當(dāng)分別通過<CRLF>或<NL>來表示。對于某些系統(tǒng),這些轉(zhuǎn)換意味著額外的工作,同類型的系統(tǒng)之間傳輸非記錄結(jié)構(gòu)的文本文件時,可能希望使用二進(jìn)制表示法和流傳輸模式。
下列傳輸模式定義于FTP P中:
3.3.3.3.4.4.4.4.1.1.1.1.流模式(STREAMMODE) )
數(shù)據(jù)以字節(jié)流傳輸。不限制表示類型,允許recordstructure。
在recordstructure e文件中,EOR R和EOF F分別用一個兩字節(jié)控制碼表示??刂拼a的第一個字節(jié)都一樣,為轉(zhuǎn)義字符。對于EOR R,第二個字節(jié)的低階位(low worderbit t)為1,其余位全0;對于EOF F,第二字節(jié)的次低階位(secondloworder rbit t)為1,其余位為0;也就是說,對于EOR R和EOF F,第二字節(jié)的值分別為1 1和2。將第二字節(jié)的最后兩位置1(也即值為3),可同時表示EOR R和EOF。Ifa abyte eof fall lones swas sintended dto obe esent tas sdata, ,it tshould dbe erepeated din nthe esecond dbyteofthecontrolcode. .
在filestructure e文件中,發(fā)送主機(jī)關(guān)閉數(shù)據(jù)連接就表示EOF。所有字節(jié)都是數(shù)據(jù)字節(jié)。
3.3.3.3.4.4.4.4.2.2.2.2.塊模式(BLOCKMODE) )
文件以一系列數(shù)據(jù)塊傳輸,數(shù)據(jù)塊頭部加上了一個或多個headerbytes。Headerbyte e包含一個countfield d和descriptorcode。Countfield d指明了數(shù)據(jù)塊的字節(jié)總數(shù),因而也標(biāo)記了下一個數(shù)據(jù)塊(無填充字節(jié))的開始位置。descriptorcode e定義了如下內(nèi)容:文件的最后一個塊(EOF),記錄的最后一個塊(EOR),restart tmarker r(見ErrorRecoveryandRestart t一節(jié)),suspectdata a(也即傳輸?shù)臄?shù)據(jù)不可靠,被懷疑有錯誤)。其中suspectdata a不是用于FTP P錯誤控制的。它是出于主機(jī)交換某類型數(shù)據(jù)(例如地震或天氣數(shù)據(jù))的要求:收發(fā)所有的數(shù)據(jù)而忽略本地錯誤(比如磁帶讀錯誤),但在傳輸過程中指明某些部分是不可信的。塊模式允許record dstructure,可以使用任何表示類型。
Header r包含三個字節(jié)。在header r的24 4個位中,低16 6位表示bytecount,高8 8位表示descriptorcodes,如下所示。
descriptorcodes s由descriptor r字節(jié)的標(biāo)志位指出,共有4 4個code,每一個code e
編號以十進(jìn)制表示。
Code e
Meaning g
128 8
數(shù)據(jù)塊結(jié)尾是EOR R
64 4
數(shù)據(jù)塊結(jié)尾是EOF F
32 2
數(shù)據(jù)塊中的可疑錯誤
16 6
數(shù)據(jù)塊是一個restart tmarker r
依上述編碼,一個塊可以有多種狀態(tài)。按照需要設(shè)置相應(yīng)的位。restartmarker r作為一個整數(shù)(8-bitbytes s)嵌入到數(shù)據(jù)流中,marker r中的字節(jié)都是可打印字符,restartmarker r內(nèi)不能使用<SP>(空格)。例如,傳輸一個六字符marker,下列內(nèi)容將被傳輸:
3.3.3.3.4.4.4.4.3.3.3.3.壓縮模式(COMPRESSEDMODE) )
有三種信息將被發(fā)送:常規(guī)數(shù)據(jù),按字節(jié)串發(fā)送;壓縮數(shù)據(jù),由replications s或填充字節(jié)組成;控制信息,以兩字節(jié)轉(zhuǎn)義序列的方式發(fā)送。如果有n(0<n<127) )個字節(jié)的常規(guī)數(shù)據(jù)被發(fā)送,在這n
n個字節(jié)之前加上一個字節(jié),該字節(jié)的最左邊一位置0,右邊7 7位表示數(shù)n。
n
個數(shù)據(jù)字節(jié)d(1),...,d(n),n必須是正數(shù)。為壓縮傳輸n個重復(fù)的數(shù)據(jù)字節(jié)d,發(fā)送下面2 2個字節(jié):
N
N
個填充字節(jié)可被壓縮成一個字節(jié),填充字節(jié)依表示類型而變化。若類型為ASCII I或EBCDIC,填充字節(jié)是<SP>(空格,ASCII I碼32,EBCDIC C碼64)。若類型是Image e或Local,填充字節(jié)是0。
轉(zhuǎn)義序列是雙字節(jié),字節(jié)1 1是轉(zhuǎn)義字節(jié)(全0),字節(jié)2包含descriptorcodes。此處descriptorcodes s與塊模式中的定義相同,并應(yīng)用于隨后的字節(jié)串。
壓縮模式有助于增加帶寬,在網(wǎng)絡(luò)傳輸中僅需要一點點額外的CPU U開銷。它可以有效地減小printerfiles s的大小,比如由遠(yuǎn)程作業(yè)輸入(RJE E)主機(jī)生成的文件。3.5. 錯誤恢復(fù)與重啟(ERRORRECOVERYANDRESTART)
數(shù)據(jù)傳輸過程中無法檢測位丟失和亂序;此級別的錯誤控制由TCP P處理。盡管如此,重啟過程用于保護(hù)用戶免受顯而易見的系統(tǒng)故障(包括主機(jī)、FTP-process s或者底層網(wǎng)絡(luò)的故障)。
重啟過程僅用于塊或流模式的數(shù)據(jù)傳輸。它要求發(fā)送者向數(shù)據(jù)流中插入一個
特殊的markercode。Marker信息僅對發(fā)送者有意義,但必須是可打印字符。Marker r可以表示一個bit-count,一個record-count,或者其它任何信息,系統(tǒng)利用marker r來識別一個數(shù)據(jù)檢查點。若接收者支持重啟過程,將在數(shù)據(jù)流中標(biāo)記出此marker r的相應(yīng)位置,并且向user r返回此信息。
如果系統(tǒng)發(fā)生故障,user r可通過識別markerpoint,利用FTPrestartprocedure e重啟數(shù)據(jù)傳輸。下面的例子說明了restartprocedure e的使用。
發(fā)送者在數(shù)據(jù)流的某個點插入一個適當(dāng)?shù)膍arker r塊。接收方主機(jī)在其文件系統(tǒng)內(nèi)標(biāo)記相應(yīng)的數(shù)據(jù)點,并且將最后一個已知的發(fā)送者和接收者marker r信息傳達(dá)給user,傳達(dá)方式要么是直接的,要么通過控制連接上的一個110 0應(yīng)答,這取決于誰是發(fā)送者。若發(fā)生系統(tǒng)故障,user r或者controllerprocess s通過發(fā)送重啟命令在最后一個servermarker r點重啟server r,重啟命令的參數(shù)為server r的marker rcode。重啟命令在控制連接上傳輸,緊隨其后的命令如RETR、STOR R或LIST, ,這些命令在系統(tǒng)發(fā)生故障時執(zhí)行。4. 文件傳輸功能(FILETRANSFERFUNCTIONS) )
從user-PI I到server-PI I的通信信道是TCP P連接。User-PI I負(fù)責(zé)發(fā)送FTP P命令及解釋收到的應(yīng)答;server-PI I解釋命令,發(fā)送應(yīng)答,指導(dǎo)其DTP P建立數(shù)據(jù)連接及傳輸數(shù)據(jù)。在被動傳輸過程中,一方是server-DTP,如果第二方是user-DTP, ,那么它被user-FTP P主機(jī)通過內(nèi)部協(xié)議進(jìn)行管理;若第二方同樣是server-DTP,那么它被其PI I按照來自user-PI I的命令進(jìn)行管理。FTP P應(yīng)答在下一節(jié)中討論。此節(jié)中描述的幾個命令,有助于明確可能的應(yīng)答。4.1.FTP 命令(FTPCOMMANDS)
4.4.4.4.1.1.1.1.1.1.1.1.
訪問控制命令(ACCESSCONTROLCOMMANDS) )
下列命令指定了訪問控制標(biāo)識符(命令碼顯示在括號中)。
USERNAME(USER) )
參數(shù)域是標(biāo)識user r的Telnet t串。Server r需要user r標(biāo)識來訪問其文件系統(tǒng)。當(dāng)控制連接建立后(一些server r需要這樣),此命令通常是user r傳送的第一個命令。某些server r還需要額外的標(biāo)識信息(以password d或account t命令的形式)。Server r允許在任何時候輸入新的USER R命令,以改變訪問控制或accounting ginformation。這會沖掉任何user、密碼和accountinformation,再次啟動登錄過程。所有的傳輸參數(shù)未變,任何正在進(jìn)行的文件傳輸按照原來的訪問控制參數(shù)完成。
PASSWORD(PASS) )
參數(shù)域是一個Telnet t串,指明了用戶密碼。此命令必須緊跟在USER R命令之后,完成user r的識別,進(jìn)行訪問控制。因為密碼信息非常敏感,通常應(yīng)掩蓋它
或禁止屏幕顯示。server r沒有十分安全的方法來完成此任務(wù),因此user-FTPprocess s有責(zé)任隱藏敏感的密碼信息。
ACCOUNT(ACCT) )
參數(shù)域是標(biāo)識用戶賬戶的Telnet t串。此命令與USER R命令沒有必然聯(lián)系,一些主機(jī)可能需要一個account t用于登錄,另一些僅用于特定的訪問,比如存儲文件。對于后一種情況,此命令可能隨時到達(dá)。
有一些應(yīng)答碼用于自動區(qū)分這些情況:當(dāng)account t信息用于登錄時,成功執(zhí)行PASSword d命令的應(yīng)答碼為332。另一方面,若登錄不需要account t信息,成功執(zhí)行PASSword d命令的應(yīng)答碼是230;若在以后的對話中發(fā)出了一個命令,需要account t信息,server r應(yīng)該返回應(yīng)答碼332 2或532,這取決于server r是存儲(pending greceiptoftheACCounTcommand) )還是丟棄此命令。
CHANGEWORKINGDIRECTORY(CWD) )
此命令允許用戶改變工作目錄或dataset,進(jìn)行文件存取,無須改變其登錄或accounting g信息。傳輸參數(shù)同樣不變。此命令的參數(shù)為目錄路徑名或其它與系統(tǒng)相關(guān)的文件組標(biāo)志符。
CHANGETOPARENTDIRECTORY(CDUP) )
此命令是CWD D的特例,在具有不同父目錄命名語法的操作系統(tǒng)間傳輸目錄樹時,此命令可簡化程序的實現(xiàn)。應(yīng)答碼與CWD D的應(yīng)答碼相同。更多細(xì)節(jié)見附錄II I。
STRUCTUREMOUNT(SMNT) )
此命令允許user r裝載一個不同的文件系統(tǒng)數(shù)據(jù)結(jié)構(gòu),無須改變其登錄或accounting g信息,傳輸參數(shù)同樣未變。此命令的參數(shù)為目錄的路徑名或其它與系統(tǒng)相關(guān)的文件組標(biāo)志符。
REINITIALIZE(REIN) )
此命令終止USER R,沖掉所有的I/O O和accountinformation n,但允許執(zhí)行完正在進(jìn)行的傳輸。所有的參數(shù)重置為默認(rèn)值,控制連接保持打開。Thisisidenticalto othe estate ein nwhich ha auser rfinds shimself fimmediately yafter rthe econtrol lconnection nis sopened.USER R命令應(yīng)該緊跟REIN N之后。
LOGOUT(QUIT) )
此命令終止USER R,若沒有文件在傳輸,server r關(guān)閉控制連接。若有文件正在傳輸,連接將保持打開直至有響應(yīng)結(jié)果,此時server r將關(guān)閉連接。如果user-process s正在給若干個USER R傳輸文件,但不愿關(guān)閉連接然后重新打開,那
么應(yīng)該使用REIN命令來取代QUIT。若控制連接意外關(guān)閉,server r將執(zhí)行ABOR R和QUIT T命令。
4.4.4.4.1.1.1.1.2.2.2.2.傳輸參數(shù)命令(TRANSFERPARAMETERCOMMANDS) )
所有的數(shù)據(jù)傳輸參數(shù)都有缺省值,僅當(dāng)改變?nèi)笔?shù)值時,才需要執(zhí)行用于指定傳輸參數(shù)的命令,最后給定的值將被作為缺省值。若傳輸數(shù)據(jù)時未指定傳輸參數(shù),則標(biāo)準(zhǔn)缺省值如上所述。這意味著sever r必須記住可用的缺省值。傳輸參數(shù)命令可按任何順序執(zhí)行,但必須在FTPservice e請求之前。下列命令指定了數(shù)據(jù)傳輸參數(shù):
DATA APORT(PORT) )
其參數(shù)說明了用于數(shù)據(jù)連接的數(shù)據(jù)端口。User r和server r都有默認(rèn)的數(shù)據(jù)端口,正常情況下,不需要此命令及其應(yīng)答。若使用了該命令,其參數(shù)是32 2位因特網(wǎng)主機(jī)地址加上16 6位TCP P端口地址。地址信息被分割為多個8 8位的域,每個域的值被轉(zhuǎn)換為一個十進(jìn)制數(shù)(以字符串的形式表示)。所有的域以逗號隔開。PORT命令如下:
PORTh1,h2,h3,h4,p1,p2 2
其中,h1 1是因特網(wǎng)主機(jī)地址的高8位。
PASSIVE(PASV) )
此命令請求server-DTP P在某個數(shù)據(jù)端口(非默認(rèn)端口)上偵聽,等待連接, ,而不是收到傳輸命令時發(fā)起連接。此命令的響應(yīng)包含server r正在偵聽的主機(jī)和端口的地址。
REPRESENTATIONTYPE(TYPE) )
其參數(shù)指明了表示類型(DataRepresentationandStorage e一節(jié)中有描述)。某些類型需要第二個參數(shù)。參數(shù)一用一個單獨的Telnet t字符表示,如同ASCII I和EBCDIC C的第二個格式參數(shù);參數(shù)二是一個十進(jìn)制整數(shù),用于指出本地字節(jié)的大小。兩個參數(shù)用<SP>分割(空格,ASCII I碼32)。
類型碼如下:
默認(rèn)的表示類型是ASCIINon-print。如果格式參數(shù)發(fā)生改變,只是第一個參數(shù)被改變,那么格式將恢復(fù)到默認(rèn)的Non-print。
FILESTRUCTURE(STRU) )
其參數(shù)是一個單獨的Telent t字符,指明了文件的結(jié)構(gòu)(在DataRepresentation nandStorage e一節(jié)中有描述)。
文件結(jié)構(gòu)的編碼如下:
F-File(norecordstructure) )R-Recordstructure eP-Pagestructure e
默認(rèn)結(jié)構(gòu)是File。
TRANSFERMODE(MODE) )
其參數(shù)是一個單獨的Telnet t字符,指明了數(shù)據(jù)傳輸模式(在Transmission nModes s一節(jié)中描述)。
傳輸模式的編碼如下:
S-Stream mB-Block kC-Compressed d
默認(rèn)傳輸模式是Stream。
4.4.4.4.1.1.1.1.3.3.3.3.FFFFTTTTPPPP服務(wù)命令(FTPSERVICECOMMANDS) )
FTPservice e命令定義了文件傳輸或者用戶請求的文件系統(tǒng)功能。FTPservice e命令的參數(shù)正常情況下是一個路徑名。路徑名的語法必須符合server r的約定及控制連接的約定。默認(rèn)使用最后指定的設(shè)備、目錄或文件名,或者本地缺省值。此類命令可按任意次序執(zhí)行,例外情況:renamefrom m命令之后必須是renameto o命令,restart t命令后必須是中斷服務(wù)命令(例如STOR R或者RETR)。為響應(yīng)FTP Pservice e命令而傳輸?shù)臄?shù)據(jù),總是通過數(shù)據(jù)連接發(fā)送,某些informativereplies s除外。下列命令說明了FTPservice e請求:
RETRIEVE(RETR) )
此命令要求server-DTP P向數(shù)據(jù)連接另一端的server-或user-DTP P傳輸一個由pathname e指定的文件的拷貝。Server r上原文件的狀態(tài)和內(nèi)容應(yīng)不受影響。
STORE(STOR) )
此命令請求server-DTP P接收由數(shù)據(jù)連接傳來的數(shù)據(jù),并將這些數(shù)據(jù)以文件的形式存儲在server r上。若指定的文件路徑名在server r上已存在,其內(nèi)容將被這些數(shù)據(jù)替換。若指定的文件路徑名不存在,將在server r上創(chuàng)建一個新文件。
STOREUNIQUE(STOU) )
此命令同STOR R一樣,有一點除外:文件在當(dāng)前目錄下以唯一的名字創(chuàng)建。TransferStarted d的響應(yīng)(250)必須包含生成的文件名。
APPEND(withcreate)(APPE) )
此命令請求server-DTP P接收由數(shù)據(jù)連接傳來的數(shù)據(jù),并將這些數(shù)據(jù)以文件的形式存儲在server r上。若server r上存在指定的文件路徑名,數(shù)據(jù)將被附加到該文件中;否則將按指定的路徑名在server r上創(chuàng)建一個文件。
ALLOCATE(ALLO) )
某些server r可能需要此命令來預(yù)留足夠的空間,以便容納傳輸來的新文件。其參數(shù)是一個十進(jìn)制整數(shù),表示預(yù)留給新文件的存儲字節(jié)數(shù)。對于按record d或page e結(jié)構(gòu)傳輸?shù)奈募瑀ecord d或page e尺寸(以邏輯字節(jié)計)的最大值可能同樣需要,此命令的第二個參數(shù)指明了這個值(十進(jìn)制整數(shù))。參數(shù)二是可選的,與參數(shù)一通過三個Telnet t字符<SP>R<SP> >進(jìn)行分割。此命令之后應(yīng)該緊跟著一個STORe e或APPEnd d命令。對于那些不必事先聲明文件最大值的server r,或者僅對record d或page e的尺寸最大值感興趣的server,ALLO O命令被當(dāng)作一個NOOP P(無操作)命令,第二類server r將參數(shù)一視為假值并忽略它。
RESTART(REST) )
其參數(shù)表示servermarker r,將在此處重啟文件傳輸。此命令不會啟動文件傳輸,只是定位到指定的數(shù)據(jù)檢查點。此命令之后應(yīng)該緊跟著適當(dāng)?shù)腇TPservice e命令,用于啟動文件傳輸。
RENAMEFROM(RNFR) )
此命令指定了重命名文件的舊路徑名。該命令之后必須緊跟著一個renameto o命令,用于指定新的文件路徑名。
RENAMETO(RNTO) )
此命令指定了重命名文件的新路徑名,與RNFR R命令一起完成文件重命名。
ABORT(ABOR) )
此命令告知server r中止先前的FTPservice e命令以及與之相關(guān)的數(shù)據(jù)傳輸。中止命令可能需要特殊的動作(依照FTPCommands s一節(jié)中的討論)來強(qiáng)制server r做出識別。如果先前的命令已經(jīng)完成(包括數(shù)據(jù)傳輸),則不執(zhí)行任何特殊動作。Server r不關(guān)閉控制連接,但必須關(guān)閉數(shù)據(jù)連接。
Server r收到此命令時,有兩種情況:FTPservice e命令已經(jīng)完成,或者正在執(zhí)
行當(dāng)中。
在第一種情況中,server r關(guān)閉數(shù)據(jù)連接(若是打開狀態(tài)),發(fā)出應(yīng)答碼226, ,表明abort t命令成功執(zhí)行。
第二種情況,server r中止正在執(zhí)行的FTPservice e,關(guān)閉數(shù)據(jù)連接,返回應(yīng)答碼426,表明service e請求非正常結(jié)束。接著server r發(fā)送應(yīng)答碼226,表明abort t命令成功執(zhí)行。
DELETE(DELE) )
此命令依給定的pathname e刪除server r上的文件。若要求額外的保護(hù),比如“確信要刪除嗎?”,這應(yīng)該由user-FTPprocess s提供。
REMOVEDIRECTORY(RMD) )
此命令依給定的pathname e移除相應(yīng)的目錄,pathname e可以是絕對路徑或相對路徑。見附錄II I。
MAKEDIRECTORY(MKD) )
此命令依給定的pathname e創(chuàng)建一個目錄,pathname e可以是絕對目錄或相對目錄。見附錄II I。
PRINTWORKINGDIRECTORY(PWD) )
此命令將在reply y中返回當(dāng)前工作目錄的名稱。見附錄II I。
LIST(LIST) )
此命令從server r向passiveDTP P發(fā)送一個列表。如果pathname e指定了一個目錄或其它的文件組,server r應(yīng)該傳輸指定目錄的一個文件列表。如果pathname e指定了一個文件,server r應(yīng)當(dāng)發(fā)送文件的當(dāng)前信息。若參數(shù)為null l意味著用戶的當(dāng)前工作目錄或缺省目錄。數(shù)據(jù)以ASCII I或EBCDIC C類型在數(shù)據(jù)連接上傳輸。
(用戶必須保證TYPE E是ASCII I或EBCDIC)。因為文件信息隨著系統(tǒng)的不同而不同, ,很難被程序自動使用,但對人類用戶非常有用。
NAMELIST(NLST) )
此命令從server r向用戶發(fā)送一個目錄列表。Pathname e應(yīng)當(dāng)給出一個目錄或其它系統(tǒng)特有的文件組描述符;參數(shù)為null l是指當(dāng)前目錄。Server r將返回一個文件名稱流,而沒有其它信息。數(shù)據(jù)將按ASCII I或EBCDIC C類型通過數(shù)據(jù)連接進(jìn)行傳輸,<CRLF> >或<NL> >將這些數(shù)據(jù)分割為有效的路徑名字符串。(用戶必須保證TYPE E是正確的)。此命令返回的信息能夠被程序使用,以便進(jìn)一步自動處理這些文件,例如,用于“multipleget t”功能的實現(xiàn)。
SITEPARAMETERS(SITE) )
Server r使用此命令提供針對自身系統(tǒng)的service e,這些service e對于數(shù)據(jù)傳輸是必要的,但不具有普遍性,不能作為協(xié)議中的命令。這些service e的本性以及它們的語法規(guī)格在HELPSITE E命令的響應(yīng)中有陳述。
SYSTEM(SYST) )
此命令用于獲取server r操作系統(tǒng)的類型。
STATUS S(STAT) )
此命令將以應(yīng)答的形式通過控制連接發(fā)送一個狀態(tài)響應(yīng)。此命令可在一個文件傳輸過程中發(fā)送(連同TelnetIP P和同步信號一起—見FTPCommands s一節(jié)), ,此時server r將以正在執(zhí)行的操作的狀態(tài)作為回復(fù);STAT T也可在多個文件傳輸過程中發(fā)送。在后一種情況下,STAT T命令有一個參數(shù)。若此參數(shù)是一個pathname, ,STAT T與list t命令相似,只不過數(shù)據(jù)通過控制連接進(jìn)行傳輸。如果只給出了部分pathname,server r可能返回與之相關(guān)的文件名或?qū)傩粤斜?。若沒有給出參數(shù),應(yīng)當(dāng)返回serverFTPprocess s的一般狀態(tài)信息,包括所有傳輸參數(shù)的當(dāng)前值和連server接狀態(tài)。
HELP(HELP) )
此命令請求server r通過控制連接向用戶發(fā)送有關(guān)其實現(xiàn)狀態(tài)(implementation nstatus s)的幫助信息。HELP P命令可以有一個參數(shù)(例如任何一個命令名),并且返回更多的詳細(xì)信息。應(yīng)答碼是211 1或214。建議在輸入USER R命令之前允許HELP P命令的執(zhí)行。Server r可以利用此應(yīng)答來列舉站點依賴(site-dependent t)的參數(shù),例如對HELPSITE E的響應(yīng)。
NOOP(NOOP) )
此命令不影響任何參數(shù)或以前輸入的命令。它不執(zhí)行動作,僅server r發(fā)送一個OK K應(yīng)答。
對控制連接上的所有通信,F(xiàn)TP P遵循Telnet t協(xié)議規(guī)范。
FTP P命令是以Telnet t行結(jié)束符終止的Telnet t字符串。命令碼(commandcodes) )本身是字母字符,其后若有參數(shù)則以<SP> >分割,若無參數(shù)則以Telnet t行結(jié)束符終止。本節(jié)討論了命令碼和命令的語義;詳細(xì)的命令語法在Commands s一節(jié)中給出,應(yīng)答序列在SequencingofCommandsandReplies s一節(jié)中討論,命令的使用情景說明在TypicalFTPScenarios s一節(jié)中提供。
FTP P命令可能被劃分為幾部分,分別用于指定訪問控制標(biāo)識符,數(shù)據(jù)傳輸參數(shù),或者FTP Pservice e請求。當(dāng)數(shù)據(jù)傳輸正在進(jìn)行時,某些命令(比如ABOR,STAT,QUIT T)可能通過控制連接進(jìn)行傳輸。某些server r可能無法同時監(jiān)測控制和數(shù)據(jù)連接,此時需要一些特殊的動作來獲得server r的關(guān)注。暫時推薦下列有序格式:
1、在Telnet t流中,用戶系統(tǒng)插入Telnet t“InterruptProcess”(IP)信號。2、用戶系統(tǒng)發(fā)送Telnet t同步信號。3、在Telnet t流中,用戶系統(tǒng)插入命令(例如ABOR)。4、在收到“IP”后,serverPI I掃描Telnet t流,以查找EXACTLYONEFTP P
命令。
(對其它server r來說可能不需要如此,但是上面列舉的action n應(yīng)該沒有不正常的影響)4.2.FTP 應(yīng)答(FTPREPLIES)
FTP P命令的應(yīng)答用來保證requests s和文件傳輸過程中的動作之間的同步,也用來保證userprocess s總是能知道server r的狀態(tài)。每個命令必須至少產(chǎn)生一個應(yīng)答,也可能多個;后一種情況中,多個應(yīng)答必須很容易被識別。另外,一些命令按照有序的組出現(xiàn),例如USER,PASS S和ACCT T,或者RNFR R和RNTO。如果先前所有的命令已經(jīng)成功執(zhí)行,應(yīng)答就說明了中間狀態(tài)的存在。在這個序列中任何一點發(fā)生故障,都將迫使整個序列從頭開始重新執(zhí)行。
下面的一組狀態(tài)圖明確的說明了命令應(yīng)答序列的細(xì)節(jié)。
一個FTP P應(yīng)答由三個數(shù)字(按三個數(shù)字字符傳輸)后跟一些文本組成。數(shù)字專供自動裝置使用,來決定下一步的輸入;文本專供人類用戶使用。三個數(shù)字包含了足夠的編碼信息,user-process(theuser-PI I)不需要檢查文本,并可能丟棄它或傳給user,視情況而定。特別的,文本可能依賴于server,所以對于每個應(yīng)答碼可能有不同的文本。
一個應(yīng)答定義為包含3 3位數(shù)字,跟著空格<SP> >,跟著一行文本(有些指定了文本行長度最大值),以Telnet t行結(jié)束符終止??墒且灿幸恍┣闆r,文本行超過一行,此時必須將文本用括號括起來,這樣user-process s才能知道何時停止讀reply(也即停止處理控制連接上的輸入),轉(zhuǎn)而去做其它事情。第一行文本需要特殊的格式表明文本有多行,最后一行文本也需要特殊格式指明其為最后一行。不論何種情況,應(yīng)答必須包含合適的應(yīng)答碼以表明傳輸?shù)臓顟B(tài)。為滿足所有的情況,第一行及最后一行的code e應(yīng)當(dāng)相同。
因此多行應(yīng)答的格式為第一行以應(yīng)答碼開始,緊跟著連字符“-”(也被稱為負(fù)號),接著是文本。最后一行以相同的應(yīng)答碼開始,緊跟著空格<SP> >,然后是可選的文本,最后是行結(jié)束符。
例如:
123-第一行
第二行
234 4以數(shù)字開始的行
123 3最后一行
于是user-process s僅需要搜索相同應(yīng)答碼第二次在行首出現(xiàn),且跟著空格<SP>。找到后,user-process s將忽略所有的中間行。若中間行以一個3位數(shù)開頭, ,server r必須填充該行頭部來避免混淆。
此scheme e允許標(biāo)準(zhǔn)的系統(tǒng)程序產(chǎn)生應(yīng)答信息(比如STAT T應(yīng)答),通過添加偽造的首行和尾行。這些系統(tǒng)程序一般不會在行的開始處產(chǎn)生3個數(shù)字和一個空格,每一文本行的開始處應(yīng)當(dāng)添加一些中性的文本,像空格。此scheme e假設(shè)多行應(yīng)答不被嵌套。
應(yīng)答碼的3 3個數(shù)字都有特別的意義。User-process s可利用這3個數(shù)字來簡化復(fù)雜的response e。第一個數(shù)字表示response e是好的,壞的或不完整的。(參閱狀態(tài)圖),user-process s通過簡單的檢查第一個數(shù)字就能決定下一步的動作(按計劃繼續(xù)執(zhí)行,重做,retrench h,等等)。若User-process s想知道發(fā)生了何種錯誤(例如文件系統(tǒng)錯誤,命令語法錯誤),可以檢查第二個數(shù)字,保留第三個數(shù)字用于信息分級(例如RNTO O命令先前沒有執(zhí)行RNFR R命令)。
應(yīng)答碼的第一個數(shù)字有五種取值:
1yz zPositive ePreliminary yreply y
請求的action n正在被發(fā)起;在繼續(xù)一個新命令前期待另一個應(yīng)答。(在應(yīng)答結(jié)束前,user-process s發(fā)送另一個命令將違反協(xié)議;若先前的命令正在執(zhí)行,server-FTPprocess s應(yīng)當(dāng)把此時收到的命令進(jìn)行排隊)此應(yīng)答類型表明命令已被接受,user-process s現(xiàn)在可以關(guān)注數(shù)據(jù)連接了。Server-FTPprocess s每個命令至多發(fā)送一個1yz z應(yīng)答。
2yz zPositiveCompletionreply y
請求的action n成功執(zhí)行。一個新的request t可以被發(fā)起。
3yz zPositiveIntermediatereply y
命令已被接受,但請求的action n處于暫停狀態(tài),等待收到進(jìn)一步的信息。User r應(yīng)當(dāng)發(fā)送另一個命令指定這個信息。此應(yīng)答用于命令序列組。
4yz zTransientNegativeCompletionreply y
命令沒被接受,請求的action n沒有發(fā)生,但錯誤情況是暫時的,action n可以被再次請求。User r應(yīng)當(dāng)返回命令序列的開始處,若有。很難為transient t指派一個含義,特別是兩個不同的site(server-和user-process s)都必須贊成這個解釋。4yz z類的每個應(yīng)答可能有稍微不同的time e值,但目的都是鼓勵user-process s再嘗試一次。判斷一個reply y屬于4yz z還是5yz z:若命令可被重復(fù),而無需改變命令形式或user/server r的屬性,則reply y屬于4yz z。(例如使用相同的命令及參數(shù);user r不改變文件訪問或username;server r沒有提出一個新的implementation.) )
5yz zPermanentNegativeCompletionreply y
命令沒被接受,請求的action n沒有發(fā)生。User-process s被勸阻不要再重復(fù)執(zhí)行相同的請求(按相同序列)。實際上某些“permanent t”錯誤情況可以被改正, ,因而人類用戶可通過directaction n指揮user-process s重新發(fā)起命令序列(例如,在改變拼寫后,或user r更改了目錄狀態(tài))。
第二個數(shù)字對下列功能組進(jìn)行了編碼:
x0z zSyntax x
此類應(yīng)答涉及語法錯誤,依照句法改正命令。
x1z zInformation n
對信息請求的應(yīng)答,例如status s或help。
x2z zConnections s
應(yīng)答涉及控制和數(shù)據(jù)連接。
x3z zAuthenticationandaccounting g
對登錄過程或accountingprocedures s的應(yīng)答。
x4z z尚未指明。
x5z zFile esystem m
此類應(yīng)答指出了server r文件系統(tǒng)的狀態(tài)。
在每個功能組(由第二個數(shù)字指定)中,第三個數(shù)字給出了一個好的gradation nofmeaning。下面的應(yīng)答列表將對此進(jìn)行說明。注意,建議(非強(qiáng)制)每個應(yīng)答關(guān)聯(lián)一些文本,依照與之相關(guān)的命令,這些文本可能會有所改變。另一方面,應(yīng)答碼必須嚴(yán)格遵循最后一節(jié)的規(guī)范;對于那些與此處描述稍有不同的情況,server rimplementations s不應(yīng)當(dāng)創(chuàng)造新的應(yīng)答碼,而是要適應(yīng)已定義的碼。
有些命令,如TYPE E或ALLO O,成功執(zhí)行后,不向user-process s提供任何新的信息,將返回一個200 0應(yīng)答。若一個特別的server-FTPprocess s沒有實現(xiàn)某個命令,例如TOPS20site e上的ALLO O,依然需要一個PositiveCompletionreply, ,以便簡單的user-process知道它能繼續(xù)進(jìn)行其action過程。此情況的應(yīng)答碼是202, ,應(yīng)答文本:“Nostorageallocationnecessary”。另一方面,若某個未實現(xiàn)的命令請求一個non-site-specificaction,應(yīng)答是502。對于已實現(xiàn)的命令,應(yīng)答是504,但需要一個未實現(xiàn)的參數(shù)。
4.4.4.4.2.2.2.2.1111依功能分組的應(yīng)答碼(ReplyCodesbyFunctionGroups) )
200 0命令ok k
500 0語法錯誤,命令無法識別
可以包含錯誤比如命令行太長
501 1參數(shù)語法錯誤
202 2命令未實現(xiàn),當(dāng)前主機(jī)不需要此命令
502 2命令未實現(xiàn)
503 3錯誤的命令序列504Commandnotimplementedforthatparameter. .
110Restartmarker r應(yīng)答這里,文本是確切的,與特定的實現(xiàn)無關(guān);
MARK Kyyyy y=
=此處yyyy y是user-process s數(shù)mmmm據(jù)流marker,mmmm m是server r的對等

marker r(注意marker r和“=”間的空格)211 1系統(tǒng)狀態(tài),或systemhelp p應(yīng)答212 2目錄狀態(tài)213 3文件狀態(tài)214 4幫助信息
關(guān)于server r的使用方法或特殊的非標(biāo)準(zhǔn)命令的含義。該應(yīng)答僅對人類用戶有用。
215NAMEsystemtype. .
此處NAME E是一個官方系統(tǒng)名(來自號碼分配文檔)。120 0在nnn n分鐘內(nèi)serviceready y。220 0對于新用戶serviceready y。221service e關(guān)閉控制連接。
退出登錄(若支持logout) )
421service e不可用,關(guān)閉控制連接。Thismaybeareplytoanycommand dif ftheserviceknowsit tmustshutdown. .
125 5數(shù)據(jù)連接已打開,傳輸開始225 5數(shù)據(jù)連接已打開,無數(shù)據(jù)傳輸425Can'topendataconnection. .226Closingdataconnection. .
Requestedfileactionsuccessful(forexample,file e
transferorfileabort). .426Connectionclosed;transferaborted. .227EnteringPassiveMode(h1,h2,h3,h4,p1,p2). .
230Userloggedin,proceed. .530Notloggedin. .331Usernameokay,needpassword. .332Needaccountforlogin. .532Needaccountforstoringfiles. .
150Filestatusokay;abouttoopendataconnection. .250Requestedfileactionokay,completed. .257"PATHNAME" "created. .350Requestedfileactionpendingfurtherinformation. .450Requestedfileactionnottaken. .
Fileunavailable(e.g.,filebusy). .
550Requestedactionnottaken. .
Fileunavailable(e.g.,filenotfound,noaccess). .451Requestedactionaborted.Localerrorinprocessing. .551Requestedactionaborted.Pagetypeunknown. .452Requestedactionnottaken. .
Insufficientstoragespaceinsystem. .
552Requestedfileactionaborted. .Exceededstorageallocation(forcurrentdirectoryor rdataset). .
553Requestedactionnottaken.
.Filenamenotallowed.
.
4.4.4.4.2.2.2.2.2222應(yīng)答碼的數(shù)值序列表(NumericOrderListofReplyCodes) )
110Restartmarkerreply. .Inthiscase,thetextisexactandnotlefttothe eparticularimplementation;itmustread: :
MARKyyyy y=mmmm mWhereyyyyisUser-processdatastreammarker,andmmmm mserver'sequivalentmarker(notethespacesbetweenmarkers sand d"="). .
120Servicereadyinnnnminutes.
.125Dataconnectionalreadyopen;transferstarting.
.150Filestatusokay;abouttoopendataconnection.
.
200Commandokay.
.202Commandnotimplemented,superfluousatthissite.
.211Systemstatus,orsystemhelpreply.
.212Directorystatus.
.213Filestatus.
.214Helpmessage.
.
Onhowtousetheserverorthemeaningofaparticular rnon-standardcommand. .Thisreplyisusefulonlytothe ehumanuser. .
215NAMEsystemtype. .WhereNAMEisanofficialsystemnamefromthelistinthe eAssignedNumbersdocument. .
220Servicereadyfornewuser.
.221Serviceclosingcontrolconnection.
.
Loggedout tif fappropriate. .225Dataconnectionopen;notransferinprogress. .226Closingdataconnection. .
Requestedfileactionsuccessful(forexample,file etransferorfileabort). .
227EnteringPassiveMode(h1,h2,h3,h4,p1,p2).
.230Userloggedin,proceed.
.250Requestedfileactionokay,completed.
.257"PATHNAME" "created.
.
331Usernameokay,needpassword. .332Needaccountforlogin. .350Requestedfileactionpendingfurtherinformation. .
421Servicenotavailable,closingcontrolconnection. .Thismaybeareplytoanycommand dif ftheserviceknowsit tmustshutdown. .
425Can'topendataconnection.
.426Connectionclosed;transferaborted.
.450Requestedfileactionnottaken.
.
Fileunavailable(e.g.,filebusy). .451Requestedactionaborted:localerrorinprocessing. .452Requestedactionnottaken. .
Insufficientstoragespaceinsystem. .
500Syntaxerror,commandunrecognized. .
Thismayincludeerrorssuchascommandlinetoolong. .501Syntaxerrorinparametersorarguments. .502Commandnotimplemented. .503Badsequenceofcommands. .504Commandnotimplementedforthatparameter. .530Notloggedin. .532Needaccountforstoringfiles. .550Requestedactionnottaken. .
Fileunavailable(e.g.,filenotfound,noaccess). .551Requestedactionaborted:pagetypeunknown. .552Requestedfileactionaborted. .
Exceededstorageallocation(forcurrentdirectoryor rdataset). .553Requestedactionnottaken. .Filenamenotallowed. .5. 規(guī)范說明(DECLARATIVESPECIFICATIONS) )5.1. 最小實現(xiàn)(MINIMUMIMPLEMENTATION)
為了使FTP P能工作,而沒有多余的錯誤消息,所有的server r必須完成下面
的最小實現(xiàn):
TYPE E-ASCIINon-print t
MODE E-Stream m
STRUCTURE E-File,Record d
COMMANDS S-USER,QUIT,PORT,TYPE,MODE,STRU, ,
forthedefaultvaluesRETR,STOR,NOOP. .
傳輸參數(shù)的缺省值:
TYPE E-ASCIINon-print t
MODE E-Stream m
STRU U-File e
所有的主機(jī)必須接受上面的內(nèi)容作為缺省標(biāo)準(zhǔn)。5.2. 連接(CONNECTIONS)
Server-PI I應(yīng)當(dāng)在PortL L上偵聽。User r或user-PI I將發(fā)起全雙工控制連接。Server-和user-process s應(yīng)當(dāng)遵循Telnet t協(xié)議(詳見ARPA-Internet tProtocol lHandbook[1] ])的約定。Server r沒有義務(wù)提供命令行編輯功能,可以要求在user r主機(jī)上完成。完成所有的傳輸和應(yīng)答后,user r請求server r關(guān)閉控制連接。
User-DTP P必須在指定的數(shù)據(jù)端口上偵聽;可以是默認(rèn)的用戶端口(U)或PORT命令指定的端口。Server r應(yīng)當(dāng)從自己的默認(rèn)數(shù)據(jù)端口(L-1 1)向指定的用戶數(shù)據(jù)端口發(fā)起數(shù)據(jù)連接。傳輸?shù)姆较蚝褪褂玫亩丝谌Q于FTPservice e命令。
注意所有的FTP P必須支持使用默認(rèn)端口的數(shù)據(jù)傳輸,僅有user-PI I可以開始使用非默認(rèn)端口。
當(dāng)數(shù)據(jù)在兩個server r之間傳輸時,A A和B(參考圖2),user-PI,C,同兩個server-PI I建立控制連接。user-PI I向serverA A發(fā)送一個PASV V命令告知它在其數(shù)據(jù)端口上偵聽,而不是發(fā)起一個連接。當(dāng)user-PI I收到PASV V命令的確認(rèn)時,其中包括serverA A和端口的標(biāo)識,user-PI I利用PORT命令把A的端口a a發(fā)送給B;B B返回一個應(yīng)答。User-PI I給A和B發(fā)送相應(yīng)的service e命令。B發(fā)起連接,開始傳輸。下面列出了命令-應(yīng)答序列,消息在垂直方向上同步,水平方向異步。
在EstablishingDataConnections s一節(jié)描述的情況下,server r將關(guān)閉數(shù)據(jù)連接。如果數(shù)據(jù)連接要關(guān)閉時,接著有一個數(shù)據(jù)傳輸,此時不需要指明文件結(jié)束,server r
必須立即關(guān)閉連接。等待直至一個新的傳輸命令被拒絕,因為user-process s已經(jīng)測試了數(shù)據(jù)連接,看看是否需要進(jìn)行偵聽(記住,在發(fā)送傳輸請求之前,user r必須偵聽一個已關(guān)閉的數(shù)據(jù)端口)。為避免情況紊亂,server r在關(guān)閉數(shù)據(jù)連接后發(fā)送一個226 6應(yīng)答(若連接保持打開,會發(fā)送一個文件傳輸完成應(yīng)答250,user-PI I在發(fā)出一個新的傳輸命令之前應(yīng)當(dāng)?shù)却@些應(yīng)答)。
任何時候,user r或server r發(fā)現(xiàn)連接被另一方關(guān)閉,都應(yīng)當(dāng)立即讀取連接中剩余的隊列數(shù)據(jù)并且在自己一方進(jìn)行關(guān)閉。5.3. COMMANDS
命令是在控制連接上傳輸?shù)腡elnet t字符串,如同在FTPCommands s一節(jié)中描述的那樣。命令的功能和語義在AccessControlCommands,TransferParameter rCommands,FTPServiceCommands,andMiscellaneousCommands s節(jié)中描述。命令語法在此說明。
命令以命令碼開始,跟著一個參數(shù)域。命令碼是4 4個或更少的字母字符。不區(qū)分大小寫。因此,下列任何一個都可表示獲取命令:
RETR RRetr rretr rReTr rrETr r
這也可應(yīng)用于任何表示參數(shù)值的符號,例如A A或a a表示ASCIITYPE。命令碼和參數(shù)域用一個或多個空格分割。
對于NVT-ASCII I表示法,參數(shù)域由一個可變長的字符串組成,以字符序列<CRLF>(CarriageReturn,LineFeed)結(jié)尾,對于其它協(xié)商的語言可能使用不同的行結(jié)束符。應(yīng)當(dāng)注意,server r不會執(zhí)行動作直至收到行結(jié)束符。
按照NVT-ASCII I表示法,下面給出了語法。參數(shù)域中的所有字符都是ASCII I字符,包括任何ASCII I表示的十進(jìn)制整數(shù)。方括號表示一個可選的參數(shù)域。若沒有給出可選項,意味著使用缺省值。
5.5.5.5.3.3.3.3.1.1.1.1.FFFFTTTTPPPP命令(FTPCOMMANDS) )
下面是FTP P命令:
: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 D<SP><pathname><CRLF> >
MKD D<SP><pathname><CRLF> >
PWD D<CRLF> >
LIST[<SP><pathname>]<CRLF> >
NLST[<SP><pathname>]<CRLF> >
SITE<SP><string><CRLF> >
SYST<CRLF> >
STAT T[<SP><pathname>]<CRLF> >
HELP[<SP><string>]<CRLF> >
NOOP<CRLF> >
5.5.5.5.3.3.3.3.2.2.2.2.FFFFTTTTPPPP命令參數(shù)(FTPCOMMANDARGUMENTS) )
上述參數(shù)域(使用BNF F記號法)的語法是:
<username>::= =<string> >
<password>::= =<string> >
<account-information>::= =<string> >
<string>::= =<char>|<char><string> >
<char>::= =anyofthe128ASCIIcharactersexcept<CR>and d
<LF> >
<marker>::= =<pr-string> >
<pr-string>::= =<pr-char>|<pr-char><pr-string> >
<pr-char>::= =printablecharacters,any y
ASCIIcode33through126 6
<byte-size>::= =<number> >
<host-port>::= =<host-number>,<port-number> >
<host-number>::= =<number>,<number>,<number>,<number> >
<port-number>::= =<number>,<number> >
<number>::= =anydecimalinteger1through255 5
<form-code>::= =N|T|C C
<type-code>::=A[<sp><form-code>] ]
|E[<sp><form-code>] ]
|I I
|L<sp><byte-size> >
<structure-code>::= =F|R|P P<mode-code>::= =S|B|C C<pathname>::= =<string> ><decimal-integer>::= =anydecimalinteger r5.4. 命令和應(yīng)答序列(SEQUENCINGOFCOMMANDSANDREPLIES)
User和server之間的通信是一個交互的對話。User發(fā)出一個FTP命令,server r立刻以一個應(yīng)答進(jìn)行響應(yīng)。User r在發(fā)送下一個命令前,應(yīng)當(dāng)?shù)却@個最初的成功或失敗的響應(yīng)。
某些命令需要第二個應(yīng)答,對此user r也應(yīng)當(dāng)?shù)却?。這些應(yīng)答可以報告文件傳輸?shù)倪M(jìn)度或完成,或者關(guān)閉數(shù)據(jù)連接。對于文件傳輸命令,它們是secondary yreplies。
一組重要的informationalreplies s是connectiongreetings。在正常情況下,當(dāng)連接建立后,server r將發(fā)送一個220 0應(yīng)答,“等待輸入”。User r在發(fā)送任何命令前應(yīng)當(dāng)?shù)却@個greetingmessage。若server r不能立即接受輸入,應(yīng)當(dāng)馬上發(fā)送120 0應(yīng)答,就緒后再發(fā)送220 0應(yīng)答。User r就可知道即使有延遲也不掛起。
自發(fā)應(yīng)答(SpontaneousReplies) )
有時系統(tǒng)自發(fā)的給用戶(通常是所有用戶)發(fā)送一個消息。例如,"System mgoingdownin15minutes"。FTP P沒有規(guī)定server r向user r發(fā)送這樣的自發(fā)信息。建議將此類信息放入server-PI I的隊列,并且在下一個reply(可能構(gòu)成了一個多行應(yīng)答)中傳達(dá)給user-PI。
下面的表格列出了每個命令的可選的成功和失敗的應(yīng)答。必須嚴(yán)格遵守;server r可以替換應(yīng)答中的文本,但不能改變應(yīng)答編碼的含義以及特定命令應(yīng)答序列暗指的action。
命令應(yīng)答序列(Command-ReplySequences) )
本節(jié)列出了命令應(yīng)答序列。每個命令連同其可能的應(yīng)答一起列出,同組的命令寫在了一起。首先列出開始的應(yīng)答(后續(xù)的應(yīng)答縮進(jìn)寫在下面),然后是positive eandnegativecompletion n,最后是序列中其余命令的應(yīng)答。這個列表是狀態(tài)圖的基礎(chǔ),狀態(tài)圖將單獨給出。
ConnectionEstablishment
t120
0
220
0220
0421
1
Login n
USER
R230
0530
0
500,501,421 1331,332 2
PASS
S230
0202
2530
0500,501,503,421
1332
2
ACCT
T230
0202
2530
0500,501,503,421
1
CWD D250 0500,501,502,421,530,550 0
CDUP P200 0500,501,502,421,530,550 0
SMNT T202,250 0500,501,502,421,530,550 0
Logout tREIN N120 0
220
0220
0421
1500,502
2
QUIT
T221
1500
0
Transferparameters s
PORT
T200
0500,501,421,530
0
PASV V227 7500,501,502,421,530 0
MODE E200 0500,501,504,421,530 0
TYPE
E200
0
500,501,504,421,530 0
STRU U
200 0
500,501,504,421,530 0Fileactioncommands s
ALLO O
200 0
202 2
500,501,504,421,530 0
REST T
500,501,502,421,530 0
350 0
STOR R
125,150 0
(110) )226,250 0425,426,451,551,552 2
532,450,452,553
3500,501,421,530
0STOU
U125,150
0
(110) )226,250 0425,426,451,551,552 2
532,450,452,553
3500,501,421,530
0RETR
R125,150
0
(110) )226,250 0425,426,451 1
450,550 0
500,501,421,530 0
LIST T
125,150 0
226,250 0
425,426,451 1
450 0
500,501,502,421,530 0
NLST T
125,150 0
226,250 0
425,426,451 1
450 0
500,501,502,421,530 0APPE E125,150 0
(110) )226,250 0425,426,451,551,552 2
532,450,550,452,553 3
500,501,502,421,530 0
RNFR R
450,550 0
500,501,502,421,530 0
350 0
RNTO O
250 0
532,553 3
500,501,502,503,421,530 0
DELE E
250 0
450,550 0
500,501,502,421,530 0
RMD D
250 0
500,501,502,421,530,550 0
MKD D
257 7
500,501,502,421,530,550 0
PWD D
257 7
500,501,502,421,550 0
ABOR R
225,226 6
500,501,502,421 1Informationalcommands s
SYST T
215 5
500,501,502,421 1
STAT T
211,212,213 3
450 0
500,501,502,421,530 0
HELP P
211,214 4
500,501,502,421 1
Miscellaneouscommands s
SITE E
200 0
202 2
500,501,530 0
NOOP P
200 0
500421 16. 狀態(tài)圖(STATEDIAGRAMS) )
在此我們介紹一個簡單FTP P實現(xiàn)的狀態(tài)圖。僅使用了應(yīng)答編碼的第一個數(shù)字。對每個FTP P命令組或命令序列都給出了狀態(tài)圖。
命令分組取決于每個命令的構(gòu)造模型,用相同結(jié)構(gòu)的模型把命令聚集在一起就形成了命令組。
對每個命令或命令序列,有三種可能的結(jié)果:success(S),failure(F),error(E)。在下面的狀態(tài)圖中,我們使用符號B B表示開始,符號W W表示等待應(yīng)答。
我們首先給出的這個圖描繪了FTP P的最大命令組:
此圖為下列命令建模:
ABOR, ,ALLO, ,DELE, ,CWD, ,CDUP, ,SMNT, ,HELP, ,MODE, ,NOOP, ,PASV, ,QUIT,SITE,PORT,SYST, ,STAT, ,RMD,MKD,PWD,STRU,andTYPE. .
另一個大的命令組用一個類似的圖描繪:
此圖為下列命令建模:
APPE,LIST,NLST,REIN,RETR,STOR,andSTOU. .
注意第二個模型也能用來描繪第一組命令,僅有的區(qū)別在于,第一組中100 0系列的應(yīng)答是出乎意料的,因此被看作是錯誤,但第二組期望(有些命令可能需要)100 0系列的應(yīng)答。記住,每個命令至多允許一個100 0系列的應(yīng)答。
其余的圖為命令序列建模,也許其中最簡單的是rename e序列。
下圖是Restart t命令的簡單模型:
此處cmd d是APPE,STOR R或者RETR R。
我們注意到上面三個模型是相似的。Restart t和Rename e的區(qū)別僅在于第二階段對100 0系列應(yīng)答的處理,第二組期望(有些命令可能需要)100 0系列的應(yīng)答。記住,每個命令至多允許一個100 0系列的應(yīng)答。
最復(fù)雜的圖是Login n序列:
最后,我們給出了一個一般化的圖,可用來對命令和應(yīng)答的交換進(jìn)行建模:
7. 典型的FTP 場景(TYPICALFTPSCENARIO) )
主機(jī)U U上的user r想和主機(jī)S S進(jìn)行文件傳輸(to/from): :
一般的,user r通過一個間接的user-FTPprocess s和server r通訊。下面可能是一個典型的場景。User-FTP P提示出現(xiàn)在圓括號中,‘----> >’表示命令從主機(jī)U到主機(jī)S,'<----'表示從S到U的應(yīng)答。
LOCALCOMMANDSBYUSER RACTIONINVOLVED D
ftp(host)multics<CR> >
usernameDoe<CR> >
passwordmumble<CR> >
retrieve(localtype)ASCII<CR> >(localpathname)test1<CR> >(for.pathname)test.pl1<CR> >
ConnecttohostS,portL, ,
establishingcontrolconnections. .
<----220Serviceready<CRLF>. .
USERDoe<CRLF>----> >
<----331Usernameok, ,
needpassword<CRLF>. .PASSmumble<CRLF>----> ><----230Userloggedin<CRLF>. .
User-FTPopenslocalfileinASCII. .
RETRtest.pl1<CRLF> >----> >
<----150Filestatusokay; ;
abouttoopendata a
connection<CRLF>. .
Servermakesdataconnection n
toportU. .
<----226Closingdataconnection, ,
filetransfersuccessful<CRLF>. .typeImage<CR> >TYPEI<CRLF> >----> >
<----200CommandOK<CRLF> >store(localtype)image<CR> >(localpathname)filedump<CR> >User-FTPopenslocalfileinImage. .(for.pathname)>udd>cn>fd<CR> >STOR>udd>cn>fd<CRLF> >----> >
<----550Accessdenied<CRLF> >
terminate eQUIT<CRLF> >---->
>Serverclosesall
lconnections.
.8. 連接建立(CONNECTIONESTABLISHMENT) )
FTPcontrolconnection n通過TCP P在user-process s端口U U和serverprocess s端口L L之間建立。此協(xié)議被分配了serviceport21(八進(jìn)制25),也即L=21。

    本站是提供個人知識管理的網(wǎng)絡(luò)存儲空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點。請注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點擊一鍵舉報。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多