|
原文參考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的目標如下: 1)促進文件共享(計算機程序和數(shù)據(jù)),2)鼓勵間接或隱式(通過程序)的使用遠程計算機,3)使用戶免受主機之間文件存儲系統(tǒng)的變化,4)可靠高效的傳輸數(shù)據(jù)。盡管用戶可在終端機上直接使用FTP P,但設計FTP P主要是為了在程序中使用。 此規(guī)范試圖用一個簡單且容易實現(xiàn)的協(xié)議設計來滿足用戶的各種需求,如大型機、小型機、個人工作站和TACs。 這篇文章假設您已熟悉TCP P和Telnet t協(xié)議,相關文檔包含在ARPA A互聯(lián)網(wǎng)協(xié)議手冊中。2 .概述 本節(jié)內(nèi)容討論歷史、術語和FTP P模型。本節(jié)定義的術語僅僅是那些在FTP P中有特殊意義的詞語。某些術語僅針對FTP P模型;當回顧術語時,一些讀者可能需要借助于本節(jié)的FTP P模型。2.1 歷史 多年來,F(xiàn)TP P協(xié)議有一個長期的演化。附錄III I是和FTP P有關的按時間排序的RFC C文檔列表。這些文檔包含1971 1年第一個被提議的文件傳輸機制,它在麻省理工學院(M.I.T.)(RFC114)的主機上實現(xiàn),RFC141 1中加上了注解和討論。 RFC172 2提供了一個面向用戶級的在主機間(包括終端IMPs s)傳輸文件的協(xié) 議。作為修訂版,RFC265 5改編了FTP,RFC281 1提議做進一步的改變。1982 2年1 1月,RFC294 4提議使用事務數(shù)據(jù)集類型(?"SetDataType" "transaction)。 RFC354 4淘汰了RFC264 4和265。FTP P現(xiàn)在被定義為在ARPANET T上主機之間進行文件傳輸?shù)囊粋€協(xié)議,F(xiàn)TP P的主要功能是在主機之間高效可靠的傳輸文件,并允許方便的使用遠程文件存儲功能。RFC385 5進一步評論了協(xié)議的錯誤、目的和附件,RFC414 4則提供了關于serverFTP和userFTP P工作情況的報告。1973 3年發(fā)布的RFC430 0提出關于FTP P的進一步評議。最終,一份正式的FTP P文檔出版了,這就是RFC454。 1973 3年7 7月以前,F(xiàn)TP P的最后一個版本發(fā)生了相當大的改變,但總體結構未變。作為新的官方規(guī)范,RFC542 2的發(fā)布體現(xiàn)了這些變化。盡管如此,基于舊版本的許多實現(xiàn)未被更新。 1974 4年,RFC607 7和614 4繼續(xù)對FTP P發(fā)表評論。RFC624 4提出了深層的設計更改和小的修訂。1975 5年,RFC686 6,標題為"Leaving gWell lEnoughAlone" ",討論了所有新舊FTP P版本的不同。RFC691 1提出了對RFC686 6的輕微修訂,和文件打印相關。 在底層協(xié)議從NCP P轉(zhuǎn)換到TCP P的推動下,基于上述所有的努力,RFC765 5詳述了FTP P在TCP P上的使用。 當前版本的FTP P規(guī)范準備改正一些小的文檔錯誤,來改善某些協(xié)議特征的解釋,并增加一些新的可選命令。 特別是,下列新的可選命令包含在此版本的規(guī)范中: :CDUP– –進入上一級目錄 錄SMNT T– –結構裝載(?StructureMount) )STOU U– –唯一存儲(?StoreUnique) )RMD D– –刪除目錄MKD D– –新建目錄PWD D–打印目錄SYST T-System m 此規(guī)范兼容以前的版本。依據(jù)先前版本實現(xiàn)的程序應該可以自動適應此規(guī)范。2.2 術語 ASCII I ASCII I字符集定義在ARPA互聯(lián)網(wǎng)協(xié)議手冊中。在FTP P中,ASCII I字符集定義為一個八位編碼集的低半部分(例如,最高位是零)。 訪問控制(accesscontrols) ) 訪問控制定義了用戶使用系統(tǒng)及系統(tǒng)文件的權限。訪問控制必須防止對文件進行非法或意外的使用。調(diào)用訪問控制是server-FTPprocess s的特權。 字節(jié)大?。╞ytesize) ) FTP P中有兩種字節(jié)大?。何募倪壿嬜止?jié)大小,用于數(shù)據(jù)傳輸?shù)膫鬏斪止?jié)大小。傳輸字節(jié)大小總是8 8位。傳輸字節(jié)大小不一定是數(shù)據(jù)接收方系統(tǒng)的字節(jié)大小, ,也不一定是邏輯字節(jié)大?。ㄓ糜诮忉寯?shù)據(jù)的結構)。 控制連接(controlconnection) ) 在USER-PI I和SERVER-PI I之間交換命令和應答的通信路徑。此連接遵循 Telnet t協(xié)議。 數(shù)據(jù)連接(dataconnection) ) 全雙工連接,在此之上,數(shù)據(jù)以一種指定的模式和類型進行傳輸。被傳輸?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可以是被動的或主動的。 行結束符(End-of-Line) ) 行結束符定義了可打印行之間的間隔?;剀?換行。 文件結束符(EOF) ) 文件結束符定義了在傳文件的結尾。 記錄終止符(EOR) ) 記錄終止符定義了在傳記錄的結尾。 錯誤恢復(errorrecovery) ) 允許用戶從某些錯誤中恢復,比如主機系統(tǒng)或DTP P的故障。在FTP P中,錯誤恢復可能涉及文件傳輸?shù)闹貑ⅲㄔ诮o定的檢查點)。 FTP P命令(FTPcommands) ) 一個命令集,包含了從user-FTP P到server-FTP P傳輸?shù)目刂菩畔ⅰ?br>文件(File) )計算機數(shù)據(jù)(包括程序)的有序集合,具有任意長度,通過路徑名唯一識別。模式(mode) )在數(shù)據(jù)連接上,數(shù)據(jù)以此模式傳輸。模式定義了傳輸過程中的數(shù)據(jù)格式,包 括EOR R和EOF F。FTP P中定義的傳輸模式在TransmissionModes s一節(jié)中講述。 網(wǎng)絡虛擬終端(VNT) ) 網(wǎng)絡虛擬終端同Telnet t協(xié)議中的定義相同。 網(wǎng)絡虛擬文件系統(tǒng)(NVFS) ) 此概念定義了一個標準的網(wǎng)絡文件系統(tǒng),具有標準的命令和路徑名約定。 頁(Page) ) 一個文件可能被結構化為被稱為頁的獨立部分的集合。FTP P支持不連續(xù)文件 (獨立的索引頁)的傳輸。 路徑名(pathname) ) 路徑名是用戶輸入到文件系統(tǒng)中的一個字符串,用于標識一個文件。路徑名 一般包括設備和目錄名,以及文件名。FTP P尚未指定標準的路徑名約定。每個用戶必須遵循傳輸過程中所涉及文件系統(tǒng)的文件名約定。 協(xié)議解釋器(PI) ) Theprotocolinterpreter r。協(xié)議兩端的user r和server r具有不同的角色(分別在user-PI I和server-PI I中實現(xiàn))。 記錄(record) ) 一個順序文件可能被結構化為若干稱為記錄的部分。FTP P支持記錄結構,但傳輸?shù)奈募槐胤堑檬怯涗浗Y構。 應答(reply) ) 應答是server r通過控制連接向user r發(fā)送的一個確認(肯定的或否定的),它是對FTP P命令的響應。應答的一般形式是一個完成碼(包括錯誤碼)后跟一個文本串。完成碼為程序所用,文本串通常為人類用戶所用。 服務器數(shù)據(jù)傳輸進程(server-DTP) ) DTP P,以正常的主動狀態(tài),通過偵聽數(shù)據(jù)端口來建立數(shù)據(jù)連接。它為傳輸和存儲設置一些參數(shù),并且按照來自其協(xié)議解釋器(PI I)的命令傳輸數(shù)據(jù)。DTP P 可以設置為被動狀態(tài)進行偵聽,而不是在數(shù)據(jù)端口發(fā)起一個連接。 服務器FTP P進程(server-FTPprocess) ) 一個process s或process s集合,它與一個user-FTPprocess s(也可能是另一個 server r)協(xié)作完成文件傳輸?shù)墓δ?。此功能包括一個協(xié)議解釋器(PI I)和一個數(shù)據(jù)傳輸進程(DTP)。 服務器協(xié)議解釋器(server-PI) ) server-PI I在端口L(PortL L)上偵聽來自user-PI I的連接,并且建立一個控制通信連接。它接收來自user-PI I的標準FTP P命令,發(fā)送應答,以及管理server-DTP P。 類型(type) ) 數(shù)據(jù)表示類型,用于數(shù)據(jù)傳輸和存儲。類型意味著在數(shù)據(jù)存儲和數(shù)據(jù)傳輸之間的某些轉(zhuǎn)換。FTP P中定義的表示類型在EstablishingDataConnections s一節(jié)中講述。 用戶(user) ) 想要獲得文件傳輸服務的一個人或可代表人的process s。人類用戶可以直接與server-FTPprocess s交互,但是應優(yōu)先使用user-FTPprocess s,因為FTP P協(xié)議的 設計更傾向于自動裝置。 用戶數(shù)據(jù)傳輸進程(user-DTP) ) DTP P在數(shù)據(jù)端口偵聽來自server-FTPprocess s的連接。如果兩個server r正在 相互傳輸數(shù)據(jù),那么此user-DTP P將是不活躍的。 用戶FTP P進程(user-FTPprocess) ) 一個功能集合,包括一個PI I、一個DTP P以及一個用戶界面,與一個或多個 server-FTPprocess s協(xié)作,共同完成文件傳輸功能。用戶界面允許在命令應答中使用本地語言與user r進行對話。 用戶協(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ā)起了控制連接??刂七B接遵循Telnet t協(xié)議。在user r的發(fā)起時刻,標準FTP P命令由user-PI I生成并通過控制連接傳輸給server rprocess。(user r可以直接建立一個到server-FTP P的控制連接,例如從一個TAC C終端機,獨立的生成標準FTP P命令,繞過user-FTPprocess s)為響應命令,server-PI I通過控制連接向user-PI I發(fā)送標準應答。 FTP P命令為數(shù)據(jù)連接及文件系統(tǒng)操作指定了若干參數(shù),前者的參數(shù)有數(shù)據(jù)端口、傳輸模式、表示類型和結構,后者有存儲、獲取、附加、刪除等等。user-DTP P或其指派(?designate)應在特定數(shù)據(jù)端口上偵聽,server r按照規(guī)定的參數(shù)發(fā)起數(shù)據(jù)連接和數(shù)據(jù)傳輸。注意,數(shù)據(jù)端口不必在發(fā)出FTP P命令的主機上,但是user r或user-FTPprocess s必須保證在指定的數(shù)據(jù)端口上偵聽。也應注意,數(shù)據(jù)連接可能同時用于收發(fā)。 另一種情況,user r可能希望在兩個遠程主機間傳輸文件。User r建立到兩個server r的控制連接,接著安排server r之間的數(shù)據(jù)連接。這樣,控制信息被傳遞給user-PI,但是數(shù)據(jù)在server-DTP P間傳輸。下圖是這種server-server r交互的模型。 圖2 2 當數(shù)據(jù)正在傳輸時,此協(xié)議要求控制連接處于打開狀態(tài)。當FTPservice e使用完畢時,user r有責任請求關閉控制連接,盡管是server r執(zhí)行關閉動作。如果控制連接在沒有收到命令的情況下被關閉了,server r可能會終止數(shù)據(jù)傳輸。 FTP P和Telnet t的關系: 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ù)連接進行傳輸??刂七B接用于傳輸命令(描述了將要執(zhí)行的功能)以及這些命令的應答(見FTPReplies s小節(jié))。一些命令涉及到主機間數(shù)據(jù)的傳輸,這些命令包括MODE E命令(指定了數(shù)據(jù)位如何傳輸)、STRUCTURE E以及TYPE E命令(定義了數(shù)據(jù)的表示方式)。傳輸和表示基本上是無關的,但是流傳輸模式取決于文件結構屬性,如果使用了壓縮傳輸模式,填充字節(jié)取決于表示類型。3.1 數(shù)據(jù)表示和存儲(DATAREPRESENTATIONANDSTORAGE) 數(shù)據(jù)從發(fā)送者主機的存儲設備中傳輸?shù)浇邮照咧鳈C的存儲設備中。因為這兩個系統(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大型機將NVT-ASCII I存儲為8 8位EBCDIC C碼。Multics s將NVT-ASCII I存儲為4 4個9 9位字符,在一個36 6位字中。在不同的系統(tǒng)間傳輸文本時,適合將字符轉(zhuǎn)換成標準NVT-ASCII I表示法。收發(fā)方需在標準表示法和它們的內(nèi)部表示法之間執(zhí)行必要的轉(zhuǎn)換。 當在不同字長的主機系統(tǒng)間傳輸二進制數(shù)據(jù)時,在表示法上出現(xiàn)了一個問 題。并不總是能夠清楚的知道發(fā)送者如何發(fā)送數(shù)據(jù)以及接收者如何存儲之。例如, ,當從32 2位字長的系統(tǒng)向36 6位字長的系統(tǒng)傳輸32 2位字節(jié)時,在后者系統(tǒng)中,在36 6位字中按照右對齊來存儲32 2位字節(jié)可能是合適的。在任何情況下,user r應該能夠指定數(shù)據(jù)表示法和轉(zhuǎn)換方法。應該注意FTP P提供的數(shù)據(jù)類型表示法非常有限,其它類型的數(shù)據(jù)轉(zhuǎn)換應該由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é)大?。]有任何關系,二者不能混淆。例如,NVT-ASCII I的邏輯字節(jié)大小為8 8位。如果類型為本地字節(jié),那么TYPE E命令必須用第二個參數(shù)來指定邏輯字節(jié)大小。傳輸字節(jié)大小總是8位。3.1.1.1.ASCII 類型( ASCIITYPE) 這是所有的FTP P必須接受的默認類型,主要用于傳輸文本文件。如果雙方主機認為使用EBCDIC C類型更方便,則不使用ASCII I類型。 發(fā)送方將數(shù)據(jù)由字符的內(nèi)部表示法轉(zhuǎn)換為標準的8位NVT-ASCII表示法(參見Telnet t規(guī)范)。接收方則把數(shù)據(jù)由標準表示法轉(zhuǎn)換為內(nèi)部表示法。 按照NVT T標準,在文本行尾應當使用<CRLF> >序列。(參見Data aRepresentationandStorage e小節(jié)最后關于文件結構的討論) 使用標準的NVT-ASCII I表示法意味著必須將8位數(shù)據(jù)看作一個字節(jié)。 ASCII I和EBCDIC C類型的格式參數(shù)將在下面討論。3.1.1.2.EBCDIC EBCDICTYPE) 當某些主機采用EBCDIC C作為內(nèi)部字符表示法時,EBCDIC C可用于此類主機間的高效數(shù)據(jù)傳輸。 為進行傳輸,數(shù)據(jù)被表示為8位EBCDIC C字符序列。EBCDIC C和ASCII I類型的唯一區(qū)別在于字符編碼。 EBCDIC C類型中很少使用行結束符(end-of-line),但使用換行符<NL>。3.1.1.3. 圖像IMAGETYPE) 圖像類型數(shù)據(jù)被看作連續(xù)的位,這些位被打包成8位傳輸字節(jié),以便進行傳輸。接收方須將這些數(shù)據(jù)存儲為連續(xù)的位。存儲系統(tǒng)的結構可能要求對文件或文件中的記錄進行填充,使得文件或記錄處于字節(jié)、字或塊的邊界上。填充字節(jié)全為0,僅在文件或記錄的末尾用到。對于填充字節(jié),必須有一種識別方法,在重新獲取文件時可將其剔除。填充字節(jié)的轉(zhuǎn)換必須實現(xiàn),使得用戶可以進行文件存儲。 圖像類型用于高效存儲、文件檢索以及二進制數(shù)據(jù)的傳輸。建議所有的FTP P都應具有處理圖像類型的能力。 3.1.1.4. 本地類型(LOCALTYPE) 此類型數(shù)據(jù)以邏輯字節(jié)進行傳輸,字節(jié)大小由第二個參數(shù)指定。參數(shù)二的值必須是十進制整數(shù),且沒有默認值。邏輯字節(jié)不必與傳輸字節(jié)大小相同。若這兩種字節(jié)大小不同,那么應將數(shù)據(jù)連續(xù)的包裝成邏輯字節(jié),而不考慮傳輸字節(jié)的邊界,末尾也無需進行字節(jié)填充。 當數(shù)據(jù)到達接收方主機時,將按某種方式進行轉(zhuǎn)換,這取決于邏輯字節(jié)大小和特定的主機。這種轉(zhuǎn)換必須是可逆的(若使用相同參數(shù),獲取到的文件也應相同),所有的FTP P應該實現(xiàn)此種轉(zhuǎn)換。 例如,將36 6位浮點數(shù)發(fā)送到32 2位字長的主機時,數(shù)據(jù)應當按本地類型傳輸,邏輯字節(jié)為36 6位。接收方主機存儲這些邏輯字節(jié)以便它們能更容易被操作; ;此例將36 6位邏輯字節(jié)放入64 4位雙字中就足夠了。 另一個例子,兩臺36 6位字長的主機,彼此間使用TYPEL36 6按字傳輸數(shù)據(jù)。數(shù)據(jù)將按8 8位傳輸字節(jié)打包傳輸,如此,9 9個傳輸字節(jié)可以運載2 2個字。3.1.1.5. 格式控制FORMATCONTROL) ASCII I和EBCDIC C類型都接受第二個可選參數(shù),指出了與文件相關聯(lián)的垂直格式控制。 向主機傳輸一個字符文件,目的有三個:打印,存儲及以后的獲取,處理。若傳輸?shù)奈募糜诖蛴。邮辗街鳈C必須知道垂直格式控制是如何表示的。對于第二個目的,文件存儲在主機上以后,必須能夠原樣取回。最后,當文件從一臺主機傳輸?shù)搅硪慌_后,應可以在第二臺主機上順利的處理它。單獨的ASCII I或EBCDIC C格式無法滿足所有的情況。因此,這些類型具有第二個參數(shù),用來說明下列三種格式:3.1.1.5.1.NONPRINT 若省略第二個格式參數(shù),NONPRINT T將是默認使用的參數(shù)。所有FTP P必須實現(xiàn)Non-print t格式。 該文件無需包含垂直格式信息。若將此文件傳給了printerprocess,此process s可能采用空格和邊距的標準值。 通常,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>表示行結束。 3.1.1.5.3.CARRIAGECONTROL(ASA) 文件包含ASA(FORTRAN N)垂直格式控制字符。按照ASA A標準格式化后, ,行或記錄的第一個字符不打印,此字符用于確定紙張的垂直移動,紙張移動發(fā)生在剩余內(nèi)容打印之前。ASA A標準指定了下列控制字符: 字符 垂直間距 空白 將紙張向上移動一行 0 0 將紙張向上移動兩行 1 1 將紙張移動到下一頁的頂部 + + 無移動,比如套印 很明顯,必須有一些方法使得打printerprocess s能夠辨別結構實體的末端。對于記錄結構的文件不存在任何問題;在傳輸和存儲的過程中記錄將被明確的標記。若文件不是記錄結構,<CRLF>行結束符序列用于分割printinglines s,但這些格式控制字符被ASA A控制符覆蓋。 3.3.3.3.1.1.1.1.2.2.2.2.數(shù)據(jù)結構(DATASTRUCTURES) ) 除了不同的表示類型外,F(xiàn)TP P允許指定文件的結構。FTP P定義了三種文件結構: file-structure e沒有內(nèi)部結構,文件被看作是數(shù)據(jù)字節(jié)的連續(xù)序列。 record-structure e文件由若干有序記錄組成。 page-structure e文件由獨立的若干索引頁組成。 如果STRUcture e命令未被使用,默認為file-structure,但是對于文本文件(例如ASCII I或EBCDIC C類型)來說,所有的FTP P必須實現(xiàn)file-structure e和record-structure。 文件的固有結構取決于存儲它的主機類型。在IBM M大型機上source-code e文件以定長記錄的形式存儲,但在DECTOPS-20 0上以字符流存儲,字符流被CRLF F分割成多行。若文件在這不同的主機之間傳輸,必須有一些方法使得一臺主機可以識別另一臺主機的文件結構。 若將某種結構的文件傳輸?shù)街С至硪环N文件結構的主機上,可能會出現(xiàn)問題。如果文本文件以record-structure e傳輸?shù)街С謋ile-structure e的主機上,那么該主機應對此文件做一個內(nèi)部轉(zhuǎn)換。顯然,此轉(zhuǎn)換是有用的,同時必須可逆,以便按record-structure e重新得到原文件。 當文件以file-structure e傳輸?shù)街С謗ecord-structure e的主機上時,這就出現(xiàn)一個問題,主機如何將文件分割成若干record。如果必須分割,F(xiàn)TP P應該使用end-of-line e序列,ASCII I使用<CRLF>,EBCDIC C使用<NL>作為定界符。如果采用這種技術,那么當以file-structure e重新獲取文件時,F(xiàn)TP P必須支持逆變換。3.1.2.1. 文件結構(FILESTRUCTURE) STRUcture e命令未被使用時,默認為file-structure。file-structure e不存在內(nèi)部結構,此結構的文件被看作是連續(xù)的數(shù)據(jù)字節(jié)序列。 3.1.2.2. 記錄結構(RECORDSTRUCTURE) 對于文本文件(例如ASCII I或EBCDIC C類型的文件)來說,所有的FTP P必須支持record-structure。具有record-structure e結構的文件由若干有序的record d組成。3.1.2.3. 頁PAGESTRUCTURE) 為傳輸不連續(xù)的文件,F(xiàn)TP P定義了pagestructure。此類文件有時被叫做"randomaccessfiles"或者也稱為"holeyfiles"。傳輸這些文件時,需要添加一些附加信息:為整個文件添加filedescriptor r,為文件的一個section n添加pageaccess scontrols s,或者兩者同時添加。在FTP P中,文件的section n稱為page。為提供各種page e大小和相關信息,每一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用于指明傳輸過程的結束。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ù)應同存 儲文件時用到的一樣。反之,若使用相同的參數(shù)來存儲和獲取文件,那么FTP P必須返回與原文件完全相同的文件。 3.2. 建立數(shù)據(jù)連接(ESTABLISHINGDATACONNECTIONS) 傳輸數(shù)據(jù)的過程包括在合適的端口建立數(shù)據(jù)連接,選擇傳輸參數(shù)。User r和server-DTP P都有一個默認的數(shù)據(jù)端口。User-process s的默認數(shù)據(jù)端口與控制連接端口(即U)相同。Server-process s的默認數(shù)據(jù)端口與控制連接端口(即L-1 1)鄰近。 傳輸字節(jié)大小為8 8位。傳輸字節(jié)大小僅和實際的數(shù)據(jù)傳輸有關,與主機文件系統(tǒng)中數(shù)據(jù)的表示無關。 被動DTP P(可能是一個user-DTP P或server-DTP P)在發(fā)送傳輸請求命令前,必須在數(shù)據(jù)端口上偵聽。請求命令決定了數(shù)據(jù)傳輸?shù)姆较?。依?jù)收到的傳輸請求, ,server r向特定端口發(fā)起數(shù)據(jù)連接。當連接建立后,DTP P之間開始數(shù)據(jù)傳輸,server-PI I給user-PI I發(fā)送一個確認應答。 所有FTP P必須支持默認數(shù)據(jù)端口的使用,僅有user-PI I能修改為非默認端口。 User r可以通過PORT T命令指定一個備用數(shù)據(jù)端口。User r可能想將文件傳到TAClineprinter r或者從第三方主機獲取一個文件。在后一種情況中,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ā)送的命令和應答序列在FTPReplies s一節(jié)中定義。 一般來說,server r負責數(shù)據(jù)連接的發(fā)起和關閉,有一種情況例外,當user-DTP P正在發(fā)送數(shù)據(jù)時需要關閉連接來表示文件結束。遇到下列情況server r必須關閉數(shù)據(jù)連接: 1、server r已經(jīng)完成數(shù)據(jù)傳輸,需要關閉連接以表明文件結束。 2、server r收到了來自user r的ABORT T命令。 3、默認端口被用戶命令改變。 4、控制連接被關閉 5、發(fā)生了不可恢復的錯誤。 其它情況下,server r可選擇是否關閉數(shù)據(jù)連接,server r必須向user-process s發(fā)送250 0或226 6應答。3.3. 的管理DATACONNECTIONMANAGEMENT) 默認的數(shù)據(jù)連接端口:所有FTP P必須支持默認數(shù)據(jù)連接端口的使用,僅有user-PI I可以使用非默認端口。 非默認數(shù)據(jù)端口的協(xié)商:user-PI I可通過PORT T命令指定一個非默認的user rside e數(shù)據(jù)端口。User-PI I可通過PASV V命令請求server r識別非默認serverside e數(shù)據(jù)端口。因為連接由地址對確定,僅執(zhí)行PORT T和PASV V其中一個就足以獲得一個不同的數(shù)據(jù)連接。但是允許這兩個命令全部執(zhí)行,這樣可在數(shù)據(jù)連接的兩端全部使用新的端口。 數(shù)據(jù)連接的重用:當使用流模式傳輸數(shù)據(jù)時,必須通過關閉連接來表明文件結束。由于TCP P需要將連接保持一個超時周期來保證通信的可靠,因而當一個會話中有多個文件需要傳輸時,會造成問題:無法立即重新打開連接。 對這個問題,有兩種解決方案:協(xié)商一個非默認端口,或者使用另一種傳輸 模式。 關于傳輸模式的評論。流傳輸模式與生俱來是不可靠的,因為它不能確定連接是否過早的被關閉。其它傳輸模式(Block,Compressed)不通過關閉連接來表明文件結束,它們有足夠的FTPencoding g來解析數(shù)據(jù)連接,以確定文件是否結束。因此使用這些模式就能在傳輸多個文件時保持數(shù)據(jù)連接的打開。3.4. 傳輸模式(TRANSMISSIONMODES) 傳輸數(shù)據(jù)還需要選擇合適的傳輸模式。有三種模式:第一種,將數(shù)據(jù)格式化, ,允許重啟程序;第二種,為高效傳輸而將數(shù)據(jù)壓縮;第三種,傳輸數(shù)據(jù)時,僅做極少的或不做處理。在最后一種情況中,傳輸模式與數(shù)據(jù)結構共同決定了處理操作的類型。在壓縮模式中,表示類型(representationtype e)決定了填充字節(jié)(filler rbyte)。 所有的數(shù)據(jù)傳輸在文件結束時完成,end-of-file(EOF F)可以明確地給出,或者通過關閉數(shù)據(jù)連接來表示。對于recordstructure e類型的文件,所有的end-of-record(EOR)標記都是明確給出的,包括最后一個。對于pagestructure e文件,傳輸結束時使用last-page e頁類型。 注意:在本節(jié)其余內(nèi)容里,byte e是指傳輸字節(jié),除非有明確的說明。 為使傳輸合乎標準,發(fā)送主機將end-of-line e或end-of-record d符號的內(nèi)部表示法轉(zhuǎn)變?yōu)橛蓚鬏斈J郊拔募Y構規(guī)定的表示法,接收主機將執(zhí)行逆變換。IBM M大型機的recordcount t域可能不被其它主機識別,因此end-of-record d信息在流模式中被當作兩個字節(jié)控制碼傳輸,在Block k或Compressed d模式中被當作描述符的一個標志位。ASCII I或EBCDIC C文件不具有recordstructure,其中的end-of-line e應當分別通過<CRLF>或<NL>來表示。對于某些系統(tǒng),這些轉(zhuǎn)換意味著額外的工作,同類型的系統(tǒng)之間傳輸非記錄結構的文本文件時,可能希望使用二進制表示法和流傳輸模式。 下列傳輸模式定義于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ā)送主機關閉數(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ù),因而也標記了下一個數(shù)據(jù)塊(無填充字節(jié))的開始位置。descriptorcode e定義了如下內(nèi)容:文件的最后一個塊(EOF),記錄的最后一個塊(EOR),restart tmarker r(見ErrorRecoveryandRestart t一節(jié)),suspectdata a(也即傳輸?shù)臄?shù)據(jù)不可靠,被懷疑有錯誤)。其中suspectdata a不是用于FTP P錯誤控制的。它是出于主機交換某類型數(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é)的標志位指出,共有4 4個code,每一個code e 編號以十進制表示。 Code e Meaning g 128 8 數(shù)據(jù)塊結尾是EOR R 64 4 數(shù)據(jù)塊結尾是EOF F 32 2 數(shù)據(jù)塊中的可疑錯誤 16 6 數(shù)據(jù)塊是一個restart tmarker r 依上述編碼,一個塊可以有多種狀態(tài)。按照需要設置相應的位。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個重復的數(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與塊模式中的定義相同,并應用于隨后的字節(jié)串。 壓縮模式有助于增加帶寬,在網(wǎng)絡傳輸中僅需要一點點額外的CPU U開銷。它可以有效地減小printerfiles s的大小,比如由遠程作業(yè)輸入(RJE E)主機生成的文件。3.5. 錯誤恢復與重啟(ERRORRECOVERYANDRESTART) 數(shù)據(jù)傳輸過程中無法檢測位丟失和亂序;此級別的錯誤控制由TCP P處理。盡管如此,重啟過程用于保護用戶免受顯而易見的系統(tǒng)故障(包括主機、FTP-process s或者底層網(wǎng)絡的故障)。 重啟過程僅用于塊或流模式的數(shù)據(jù)傳輸。它要求發(fā)送者向數(shù)據(jù)流中插入一個 特殊的markercode。Marker信息僅對發(fā)送者有意義,但必須是可打印字符。Marker r可以表示一個bit-count,一個record-count,或者其它任何信息,系統(tǒng)利用marker r來識別一個數(shù)據(jù)檢查點。若接收者支持重啟過程,將在數(shù)據(jù)流中標記出此marker r的相應位置,并且向user r返回此信息。 如果系統(tǒng)發(fā)生故障,user r可通過識別markerpoint,利用FTPrestartprocedure e重啟數(shù)據(jù)傳輸。下面的例子說明了restartprocedure e的使用。 發(fā)送者在數(shù)據(jù)流的某個點插入一個適當?shù)膍arker r塊。接收方主機在其文件系統(tǒng)內(nèi)標記相應的數(shù)據(jù)點,并且將最后一個已知的發(fā)送者和接收者marker r信息傳達給user,傳達方式要么是直接的,要么通過控制連接上的一個110 0應答,這取決于誰是發(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ā)送FTP P命令及解釋收到的應答;server-PI I解釋命令,發(fā)送應答,指導其DTP P建立數(shù)據(jù)連接及傳輸數(shù)據(jù)。在被動傳輸過程中,一方是server-DTP,如果第二方是user-DTP, ,那么它被user-FTP P主機通過內(nèi)部協(xié)議進行管理;若第二方同樣是server-DTP,那么它被其PI I按照來自user-PI I的命令進行管理。FTP P應答在下一節(jié)中討論。此節(jié)中描述的幾個命令,有助于明確可能的應答。4.1.FTP 命令(FTPCOMMANDS) 4.4.4.4.1.1.1.1.1.1.1.1. 訪問控制命令(ACCESSCONTROLCOMMANDS) ) 下列命令指定了訪問控制標識符(命令碼顯示在括號中)。 USERNAME(USER) ) 參數(shù)域是標識user r的Telnet t串。Server r需要user r標識來訪問其文件系統(tǒng)。當控制連接建立后(一些server r需要這樣),此命令通常是user r傳送的第一個命令。某些server r還需要額外的標識信息(以password d或account t命令的形式)。Server r允許在任何時候輸入新的USER R命令,以改變訪問控制或accounting ginformation。這會沖掉任何user、密碼和accountinformation,再次啟動登錄過程。所有的傳輸參數(shù)未變,任何正在進行的文件傳輸按照原來的訪問控制參數(shù)完成。 PASSWORD(PASS) ) 參數(shù)域是一個Telnet t串,指明了用戶密碼。此命令必須緊跟在USER R命令之后,完成user r的識別,進行訪問控制。因為密碼信息非常敏感,通常應掩蓋它 或禁止屏幕顯示。server r沒有十分安全的方法來完成此任務,因此user-FTPprocess s有責任隱藏敏感的密碼信息。 ACCOUNT(ACCT) ) 參數(shù)域是標識用戶賬戶的Telnet t串。此命令與USER R命令沒有必然聯(lián)系,一些主機可能需要一個account t用于登錄,另一些僅用于特定的訪問,比如存儲文件。對于后一種情況,此命令可能隨時到達。 有一些應答碼用于自動區(qū)分這些情況:當account t信息用于登錄時,成功執(zhí)行PASSword d命令的應答碼為332。另一方面,若登錄不需要account t信息,成功執(zhí)行PASSword d命令的應答碼是230;若在以后的對話中發(fā)出了一個命令,需要account t信息,server r應該返回應答碼332 2或532,這取決于server r是存儲(pending greceiptoftheACCounTcommand) )還是丟棄此命令。 CHANGEWORKINGDIRECTORY(CWD) ) 此命令允許用戶改變工作目錄或dataset,進行文件存取,無須改變其登錄或accounting g信息。傳輸參數(shù)同樣不變。此命令的參數(shù)為目錄路徑名或其它與系統(tǒng)相關的文件組標志符。 CHANGETOPARENTDIRECTORY(CDUP) ) 此命令是CWD D的特例,在具有不同父目錄命名語法的操作系統(tǒng)間傳輸目錄樹時,此命令可簡化程序的實現(xiàn)。應答碼與CWD D的應答碼相同。更多細節(jié)見附錄II I。 STRUCTUREMOUNT(SMNT) ) 此命令允許user r裝載一個不同的文件系統(tǒng)數(shù)據(jù)結構,無須改變其登錄或accounting g信息,傳輸參數(shù)同樣未變。此命令的參數(shù)為目錄的路徑名或其它與系統(tǒng)相關的文件組標志符。 REINITIALIZE(REIN) ) 此命令終止USER R,沖掉所有的I/O O和accountinformation n,但允許執(zhí)行完正在進行的傳輸。所有的參數(shù)重置為默認值,控制連接保持打開。Thisisidenticalto othe estate ein nwhich ha auser rfinds shimself fimmediately yafter rthe econtrol lconnection nis sopened.USER R命令應該緊跟REIN N之后。 LOGOUT(QUIT) ) 此命令終止USER R,若沒有文件在傳輸,server r關閉控制連接。若有文件正在傳輸,連接將保持打開直至有響應結果,此時server r將關閉連接。如果user-process s正在給若干個USER R傳輸文件,但不愿關閉連接然后重新打開,那 么應該使用REIN命令來取代QUIT。若控制連接意外關閉,server r將執(zhí)行ABOR R和QUIT T命令。 4.4.4.4.1.1.1.1.2.2.2.2.傳輸參數(shù)命令(TRANSFERPARAMETERCOMMANDS) ) 所有的數(shù)據(jù)傳輸參數(shù)都有缺省值,僅當改變?nèi)笔?shù)值時,才需要執(zhí)行用于指定傳輸參數(shù)的命令,最后給定的值將被作為缺省值。若傳輸數(shù)據(jù)時未指定傳輸參數(shù),則標準缺省值如上所述。這意味著sever r必須記住可用的缺省值。傳輸參數(shù)命令可按任何順序執(zhí)行,但必須在FTPservice e請求之前。下列命令指定了數(shù)據(jù)傳輸參數(shù): DATA APORT(PORT) ) 其參數(shù)說明了用于數(shù)據(jù)連接的數(shù)據(jù)端口。User r和server r都有默認的數(shù)據(jù)端口,正常情況下,不需要此命令及其應答。若使用了該命令,其參數(shù)是32 2位因特網(wǎng)主機地址加上16 6位TCP P端口地址。地址信息被分割為多個8 8位的域,每個域的值被轉(zhuǎn)換為一個十進制數(shù)(以字符串的形式表示)。所有的域以逗號隔開。PORT命令如下: PORTh1,h2,h3,h4,p1,p2 2 其中,h1 1是因特網(wǎng)主機地址的高8位。 PASSIVE(PASV) ) 此命令請求server-DTP P在某個數(shù)據(jù)端口(非默認端口)上偵聽,等待連接, ,而不是收到傳輸命令時發(fā)起連接。此命令的響應包含server r正在偵聽的主機和端口的地址。 REPRESENTATIONTYPE(TYPE) ) 其參數(shù)指明了表示類型(DataRepresentationandStorage e一節(jié)中有描述)。某些類型需要第二個參數(shù)。參數(shù)一用一個單獨的Telnet t字符表示,如同ASCII I和EBCDIC C的第二個格式參數(shù);參數(shù)二是一個十進制整數(shù),用于指出本地字節(jié)的大小。兩個參數(shù)用<SP>分割(空格,ASCII I碼32)。 類型碼如下: 默認的表示類型是ASCIINon-print。如果格式參數(shù)發(fā)生改變,只是第一個參數(shù)被改變,那么格式將恢復到默認的Non-print。 FILESTRUCTURE(STRU) ) 其參數(shù)是一個單獨的Telent t字符,指明了文件的結構(在DataRepresentation nandStorage e一節(jié)中有描述)。 文件結構的編碼如下: F-File(norecordstructure) )R-Recordstructure eP-Pagestructure e 默認結構是File。 TRANSFERMODE(MODE) ) 其參數(shù)是一個單獨的Telnet t字符,指明了數(shù)據(jù)傳輸模式(在Transmission nModes s一節(jié)中描述)。 傳輸模式的編碼如下: S-Stream mB-Block kC-Compressed d 默認傳輸模式是Stream。 4.4.4.4.1.1.1.1.3.3.3.3.FFFFTTTTPPPP服務命令(FTPSERVICECOMMANDS) ) FTPservice e命令定義了文件傳輸或者用戶請求的文件系統(tǒng)功能。FTPservice e命令的參數(shù)正常情況下是一個路徑名。路徑名的語法必須符合server r的約定及控制連接的約定。默認使用最后指定的設備、目錄或文件名,或者本地缺省值。此類命令可按任意次序執(zhí)行,例外情況:renamefrom m命令之后必須是renameto o命令,restart t命令后必須是中斷服務命令(例如STOR R或者RETR)。為響應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)容應不受影響。 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一樣,有一點除外:文件在當前目錄下以唯一的名字創(chuàng)建。TransferStarted d的響應(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可能需要此命令來預留足夠的空間,以便容納傳輸來的新文件。其參數(shù)是一個十進制整數(shù),表示預留給新文件的存儲字節(jié)數(shù)。對于按record d或page e結構傳輸?shù)奈募?,record d或page e尺寸(以邏輯字節(jié)計)的最大值可能同樣需要,此命令的第二個參數(shù)指明了這個值(十進制整數(shù))。參數(shù)二是可選的,與參數(shù)一通過三個Telnet t字符<SP>R<SP> >進行分割。此命令之后應該緊跟著一個STORe e或APPEnd d命令。對于那些不必事先聲明文件最大值的server r,或者僅對record d或page e的尺寸最大值感興趣的server,ALLO O命令被當作一個NOOP P(無操作)命令,第二類server r將參數(shù)一視為假值并忽略它。 RESTART(REST) ) 其參數(shù)表示servermarker r,將在此處重啟文件傳輸。此命令不會啟動文件傳輸,只是定位到指定的數(shù)據(jù)檢查點。此命令之后應該緊跟著適當?shù)腇TPservice e命令,用于啟動文件傳輸。 RENAMEFROM(RNFR) ) 此命令指定了重命名文件的舊路徑名。該命令之后必須緊跟著一個renameto o命令,用于指定新的文件路徑名。 RENAMETO(RNTO) ) 此命令指定了重命名文件的新路徑名,與RNFR R命令一起完成文件重命名。 ABORT(ABOR) ) 此命令告知server r中止先前的FTPservice e命令以及與之相關的數(shù)據(jù)傳輸。中止命令可能需要特殊的動作(依照FTPCommands s一節(jié)中的討論)來強制server r做出識別。如果先前的命令已經(jīng)完成(包括數(shù)據(jù)傳輸),則不執(zhí)行任何特殊動作。Server r不關閉控制連接,但必須關閉數(shù)據(jù)連接。 Server r收到此命令時,有兩種情況:FTPservice e命令已經(jīng)完成,或者正在執(zhí) 行當中。 在第一種情況中,server r關閉數(shù)據(jù)連接(若是打開狀態(tài)),發(fā)出應答碼226, ,表明abort t命令成功執(zhí)行。 第二種情況,server r中止正在執(zhí)行的FTPservice e,關閉數(shù)據(jù)連接,返回應答碼426,表明service e請求非正常結束。接著server r發(fā)送應答碼226,表明abort t命令成功執(zhí)行。 DELETE(DELE) ) 此命令依給定的pathname e刪除server r上的文件。若要求額外的保護,比如“確信要刪除嗎?”,這應該由user-FTPprocess s提供。 REMOVEDIRECTORY(RMD) ) 此命令依給定的pathname e移除相應的目錄,pathname e可以是絕對路徑或相對路徑。見附錄II I。 MAKEDIRECTORY(MKD) ) 此命令依給定的pathname e創(chuàng)建一個目錄,pathname e可以是絕對目錄或相對目錄。見附錄II I。 PRINTWORKINGDIRECTORY(PWD) ) 此命令將在reply y中返回當前工作目錄的名稱。見附錄II I。 LIST(LIST) ) 此命令從server r向passiveDTP P發(fā)送一個列表。如果pathname e指定了一個目錄或其它的文件組,server r應該傳輸指定目錄的一個文件列表。如果pathname e指定了一個文件,server r應當發(fā)送文件的當前信息。若參數(shù)為null l意味著用戶的當前工作目錄或缺省目錄。數(shù)據(jù)以ASCII I或EBCDIC C類型在數(shù)據(jù)連接上傳輸。 (用戶必須保證TYPE E是ASCII I或EBCDIC)。因為文件信息隨著系統(tǒng)的不同而不同, ,很難被程序自動使用,但對人類用戶非常有用。 NAMELIST(NLST) ) 此命令從server r向用戶發(fā)送一個目錄列表。Pathname e應當給出一個目錄或其它系統(tǒng)特有的文件組描述符;參數(shù)為null l是指當前目錄。Server r將返回一個文件名稱流,而沒有其它信息。數(shù)據(jù)將按ASCII I或EBCDIC C類型通過數(shù)據(jù)連接進行傳輸,<CRLF> >或<NL> >將這些數(shù)據(jù)分割為有效的路徑名字符串。(用戶必須保證TYPE E是正確的)。此命令返回的信息能夠被程序使用,以便進一步自動處理這些文件,例如,用于“multipleget t”功能的實現(xiàn)。 SITEPARAMETERS(SITE) ) Server r使用此命令提供針對自身系統(tǒng)的service e,這些service e對于數(shù)據(jù)傳輸是必要的,但不具有普遍性,不能作為協(xié)議中的命令。這些service e的本性以及它們的語法規(guī)格在HELPSITE E命令的響應中有陳述。 SYSTEM(SYST) ) 此命令用于獲取server r操作系統(tǒng)的類型。 STATUS S(STAT) ) 此命令將以應答的形式通過控制連接發(fā)送一個狀態(tài)響應。此命令可在一個文件傳輸過程中發(fā)送(連同TelnetIP P和同步信號一起—見FTPCommands s一節(jié)), ,此時server r將以正在執(zhí)行的操作的狀態(tài)作為回復;STAT T也可在多個文件傳輸過程中發(fā)送。在后一種情況下,STAT T命令有一個參數(shù)。若此參數(shù)是一個pathname, ,STAT T與list t命令相似,只不過數(shù)據(jù)通過控制連接進行傳輸。如果只給出了部分pathname,server r可能返回與之相關的文件名或?qū)傩粤斜?。若沒有給出參數(shù),應當返回serverFTPprocess s的一般狀態(tài)信息,包括所有傳輸參數(shù)的當前值和連server接狀態(tài)。 HELP(HELP) ) 此命令請求server r通過控制連接向用戶發(fā)送有關其實現(xiàn)狀態(tài)(implementation nstatus s)的幫助信息。HELP P命令可以有一個參數(shù)(例如任何一個命令名),并且返回更多的詳細信息。應答碼是211 1或214。建議在輸入USER R命令之前允許HELP P命令的執(zhí)行。Server r可以利用此應答來列舉站點依賴(site-dependent t)的參數(shù),例如對HELPSITE E的響應。 NOOP(NOOP) ) 此命令不影響任何參數(shù)或以前輸入的命令。它不執(zhí)行動作,僅server r發(fā)送一個OK K應答。 對控制連接上的所有通信,F(xiàn)TP P遵循Telnet t協(xié)議規(guī)范。 FTP P命令是以Telnet t行結束符終止的Telnet t字符串。命令碼(commandcodes) )本身是字母字符,其后若有參數(shù)則以<SP> >分割,若無參數(shù)則以Telnet t行結束符終止。本節(jié)討論了命令碼和命令的語義;詳細的命令語法在Commands s一節(jié)中給出,應答序列在SequencingofCommandsandReplies s一節(jié)中討論,命令的使用情景說明在TypicalFTPScenarios s一節(jié)中提供。 FTP P命令可能被劃分為幾部分,分別用于指定訪問控制標識符,數(shù)據(jù)傳輸參數(shù),或者FTP Pservice e請求。當數(shù)據(jù)傳輸正在進行時,某些命令(比如ABOR,STAT,QUIT T)可能通過控制連接進行傳輸。某些server r可能無法同時監(jiān)測控制和數(shù)據(jù)連接,此時需要一些特殊的動作來獲得server r的關注。暫時推薦下列有序格式: 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應該沒有不正常的影響)4.2.FTP 應答(FTPREPLIES) FTP P命令的應答用來保證requests s和文件傳輸過程中的動作之間的同步,也用來保證userprocess s總是能知道server r的狀態(tài)。每個命令必須至少產(chǎn)生一個應答,也可能多個;后一種情況中,多個應答必須很容易被識別。另外,一些命令按照有序的組出現(xiàn),例如USER,PASS S和ACCT T,或者RNFR R和RNTO。如果先前所有的命令已經(jīng)成功執(zhí)行,應答就說明了中間狀態(tài)的存在。在這個序列中任何一點發(fā)生故障,都將迫使整個序列從頭開始重新執(zhí)行。 下面的一組狀態(tài)圖明確的說明了命令應答序列的細節(jié)。 一個FTP P應答由三個數(shù)字(按三個數(shù)字字符傳輸)后跟一些文本組成。數(shù)字專供自動裝置使用,來決定下一步的輸入;文本專供人類用戶使用。三個數(shù)字包含了足夠的編碼信息,user-process(theuser-PI I)不需要檢查文本,并可能丟棄它或傳給user,視情況而定。特別的,文本可能依賴于server,所以對于每個應答碼可能有不同的文本。 一個應答定義為包含3 3位數(shù)字,跟著空格<SP> >,跟著一行文本(有些指定了文本行長度最大值),以Telnet t行結束符終止??墒且灿幸恍┣闆r,文本行超過一行,此時必須將文本用括號括起來,這樣user-process s才能知道何時停止讀reply(也即停止處理控制連接上的輸入),轉(zhuǎn)而去做其它事情。第一行文本需要特殊的格式表明文本有多行,最后一行文本也需要特殊格式指明其為最后一行。不論何種情況,應答必須包含合適的應答碼以表明傳輸?shù)臓顟B(tài)。為滿足所有的情況,第一行及最后一行的code e應當相同。 因此多行應答的格式為第一行以應答碼開始,緊跟著連字符“-”(也被稱為負號),接著是文本。最后一行以相同的應答碼開始,緊跟著空格<SP> >,然后是可選的文本,最后是行結束符。 例如: 123-第一行 第二行 234 4以數(shù)字開始的行 123 3最后一行 于是user-process s僅需要搜索相同應答碼第二次在行首出現(xiàn),且跟著空格<SP>。找到后,user-process s將忽略所有的中間行。若中間行以一個3位數(shù)開頭, ,server r必須填充該行頭部來避免混淆。 此scheme e允許標準的系統(tǒng)程序產(chǎn)生應答信息(比如STAT T應答),通過添加偽造的首行和尾行。這些系統(tǒng)程序一般不會在行的開始處產(chǎn)生3個數(shù)字和一個空格,每一文本行的開始處應當添加一些中性的文本,像空格。此scheme e假設多行應答不被嵌套。 應答碼的3 3個數(shù)字都有特別的意義。User-process s可利用這3個數(shù)字來簡化復雜的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命令)。 應答碼的第一個數(shù)字有五種取值: 1yz zPositive ePreliminary yreply y 請求的action n正在被發(fā)起;在繼續(xù)一個新命令前期待另一個應答。(在應答結束前,user-process s發(fā)送另一個命令將違反協(xié)議;若先前的命令正在執(zhí)行,server-FTPprocess s應當把此時收到的命令進行排隊)此應答類型表明命令已被接受,user-process s現(xiàn)在可以關注數(shù)據(jù)連接了。Server-FTPprocess s每個命令至多發(fā)送一個1yz z應答。 2yz zPositiveCompletionreply y 請求的action n成功執(zhí)行。一個新的request t可以被發(fā)起。 3yz zPositiveIntermediatereply y 命令已被接受,但請求的action n處于暫停狀態(tài),等待收到進一步的信息。User r應當發(fā)送另一個命令指定這個信息。此應答用于命令序列組。 4yz zTransientNegativeCompletionreply y 命令沒被接受,請求的action n沒有發(fā)生,但錯誤情況是暫時的,action n可以被再次請求。User r應當返回命令序列的開始處,若有。很難為transient t指派一個含義,特別是兩個不同的site(server-和user-process s)都必須贊成這個解釋。4yz z類的每個應答可能有稍微不同的time e值,但目的都是鼓勵user-process s再嘗試一次。判斷一個reply y屬于4yz z還是5yz z:若命令可被重復,而無需改變命令形式或user/server r的屬性,則reply y屬于4yz z。(例如使用相同的命令及參數(shù);user r不改變文件訪問或username;server r沒有提出一個新的implementation.) ) 5yz zPermanentNegativeCompletionreply y 命令沒被接受,請求的action n沒有發(fā)生。User-process s被勸阻不要再重復執(zhí)行相同的請求(按相同序列)。實際上某些“permanent t”錯誤情況可以被改正, ,因而人類用戶可通過directaction n指揮user-process s重新發(fā)起命令序列(例如,在改變拼寫后,或user r更改了目錄狀態(tài))。 第二個數(shù)字對下列功能組進行了編碼: x0z zSyntax x 此類應答涉及語法錯誤,依照句法改正命令。 x1z zInformation n 對信息請求的應答,例如status s或help。 x2z zConnections s 應答涉及控制和數(shù)據(jù)連接。 x3z zAuthenticationandaccounting g 對登錄過程或accountingprocedures s的應答。 x4z z尚未指明。 x5z zFile esystem m 此類應答指出了server r文件系統(tǒng)的狀態(tài)。 在每個功能組(由第二個數(shù)字指定)中,第三個數(shù)字給出了一個好的gradation nofmeaning。下面的應答列表將對此進行說明。注意,建議(非強制)每個應答關聯(lián)一些文本,依照與之相關的命令,這些文本可能會有所改變。另一方面,應答碼必須嚴格遵循最后一節(jié)的規(guī)范;對于那些與此處描述稍有不同的情況,server rimplementations s不應當創(chuàng)造新的應答碼,而是要適應已定義的碼。 有些命令,如TYPE E或ALLO O,成功執(zhí)行后,不向user-process s提供任何新的信息,將返回一個200 0應答。若一個特別的server-FTPprocess s沒有實現(xiàn)某個命令,例如TOPS20site e上的ALLO O,依然需要一個PositiveCompletionreply, ,以便簡單的user-process知道它能繼續(xù)進行其action過程。此情況的應答碼是202, ,應答文本:“Nostorageallocationnecessary”。另一方面,若某個未實現(xiàn)的命令請求一個non-site-specificaction,應答是502。對于已實現(xiàn)的命令,應答是504,但需要一個未實現(xiàn)的參數(shù)。 4.4.4.4.2.2.2.2.1111依功能分組的應答碼(ReplyCodesbyFunctionGroups) ) 200 0命令ok k 500 0語法錯誤,命令無法識別 可以包含錯誤比如命令行太長 501 1參數(shù)語法錯誤 202 2命令未實現(xiàn),當前主機不需要此命令 502 2命令未實現(xiàn) 503 3錯誤的命令序列504Commandnotimplementedforthatparameter. . 110Restartmarker r應答這里,文本是確切的,與特定的實現(xià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應答212 2目錄狀態(tài)213 3文件狀態(tài)214 4幫助信息 關于server r的使用方法或特殊的非標準命令的含義。該應答僅對人類用戶有用。 215NAMEsystemtype. . 此處NAME E是一個官方系統(tǒng)名(來自號碼分配文檔)。120 0在nnn n分鐘內(nèi)serviceready y。220 0對于新用戶serviceready y。221service e關閉控制連接。 退出登錄(若支持logout) ) 421service e不可用,關閉控制連接。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應答碼的數(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 所有的主機必須接受上面的內(nèi)容作為缺省標準。5.2. 連接(CONNECTIONS) Server-PI I應當在PortL L上偵聽。User r或user-PI I將發(fā)起全雙工控制連接。Server-和user-process s應當遵循Telnet t協(xié)議(詳見ARPA-Internet tProtocol lHandbook[1] ])的約定。Server r沒有義務提供命令行編輯功能,可以要求在user r主機上完成。完成所有的傳輸和應答后,user r請求server r關閉控制連接。 User-DTP P必須在指定的數(shù)據(jù)端口上偵聽;可以是默認的用戶端口(U)或PORT命令指定的端口。Server r應當從自己的默認數(shù)據(jù)端口(L-1 1)向指定的用戶數(shù)據(jù)端口發(fā)起數(shù)據(jù)連接。傳輸?shù)姆较蚝褪褂玫亩丝谌Q于FTPservice e命令。 注意所有的FTP P必須支持使用默認端口的數(shù)據(jù)傳輸,僅有user-PI I可以開始使用非默認端口。 當數(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ā)起一個連接。當user-PI I收到PASV V命令的確認時,其中包括serverA A和端口的標識,user-PI I利用PORT命令把A的端口a a發(fā)送給B;B B返回一個應答。User-PI I給A和B發(fā)送相應的service e命令。B發(fā)起連接,開始傳輸。下面列出了命令-應答序列,消息在垂直方向上同步,水平方向異步。 在EstablishingDataConnections s一節(jié)描述的情況下,server r將關閉數(shù)據(jù)連接。如果數(shù)據(jù)連接要關閉時,接著有一個數(shù)據(jù)傳輸,此時不需要指明文件結束,server r 必須立即關閉連接。等待直至一個新的傳輸命令被拒絕,因為user-process s已經(jīng)測試了數(shù)據(jù)連接,看看是否需要進行偵聽(記住,在發(fā)送傳輸請求之前,user r必須偵聽一個已關閉的數(shù)據(jù)端口)。為避免情況紊亂,server r在關閉數(shù)據(jù)連接后發(fā)送一個226 6應答(若連接保持打開,會發(fā)送一個文件傳輸完成應答250,user-PI I在發(fā)出一個新的傳輸命令之前應當?shù)却@些應答)。 任何時候,user r或server r發(fā)現(xiàn)連接被另一方關閉,都應當立即讀取連接中剩余的隊列數(shù)據(jù)并且在自己一方進行關閉。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 這也可應用于任何表示參數(shù)值的符號,例如A A或a a表示ASCIITYPE。命令碼和參數(shù)域用一個或多個空格分割。 對于NVT-ASCII I表示法,參數(shù)域由一個可變長的字符串組成,以字符序列<CRLF>(CarriageReturn,LineFeed)結尾,對于其它協(xié)商的語言可能使用不同的行結束符。應當注意,server r不會執(zhí)行動作直至收到行結束符。 按照NVT-ASCII I表示法,下面給出了語法。參數(shù)域中的所有字符都是ASCII I字符,包括任何ASCII I表示的十進制整數(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. 命令和應答序列(SEQUENCINGOFCOMMANDSANDREPLIES) User和server之間的通信是一個交互的對話。User發(fā)出一個FTP命令,server r立刻以一個應答進行響應。User r在發(fā)送下一個命令前,應當?shù)却@個最初的成功或失敗的響應。 某些命令需要第二個應答,對此user r也應當?shù)却?。這些應答可以報告文件傳輸?shù)倪M度或完成,或者關閉數(shù)據(jù)連接。對于文件傳輸命令,它們是secondary yreplies。 一組重要的informationalreplies s是connectiongreetings。在正常情況下,當連接建立后,server r將發(fā)送一個220 0應答,“等待輸入”。User r在發(fā)送任何命令前應當?shù)却@個greetingmessage。若server r不能立即接受輸入,應當馬上發(fā)送120 0應答,就緒后再發(fā)送220 0應答。User r就可知道即使有延遲也不掛起。 自發(fā)應答(SpontaneousReplies) ) 有時系統(tǒng)自發(fā)的給用戶(通常是所有用戶)發(fā)送一個消息。例如,"System mgoingdownin15minutes"。FTP P沒有規(guī)定server r向user r發(fā)送這樣的自發(fā)信息。建議將此類信息放入server-PI I的隊列,并且在下一個reply(可能構成了一個多行應答)中傳達給user-PI。 下面的表格列出了每個命令的可選的成功和失敗的應答。必須嚴格遵守;server r可以替換應答中的文本,但不能改變應答編碼的含義以及特定命令應答序列暗指的action。 命令應答序列(Command-ReplySequences) ) 本節(jié)列出了命令應答序列。每個命令連同其可能的應答一起列出,同組的命令寫在了一起。首先列出開始的應答(后續(xù)的應答縮進寫在下面),然后是positive eandnegativecompletion n,最后是序列中其余命令的應答。這個列表是狀態(tài)圖的基礎,狀態(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)圖。僅使用了應答編碼的第一個數(shù)字。對每個FTP P命令組或命令序列都給出了狀態(tài)圖。 命令分組取決于每個命令的構造模型,用相同結構的模型把命令聚集在一起就形成了命令組。 對每個命令或命令序列,有三種可能的結果:success(S),failure(F),error(E)。在下面的狀態(tài)圖中,我們使用符號B B表示開始,符號W W表示等待應答。 我們首先給出的這個圖描繪了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系列的應答是出乎意料的,因此被看作是錯誤,但第二組期望(有些命令可能需要)100 0系列的應答。記住,每個命令至多允許一個100 0系列的應答。 其余的圖為命令序列建模,也許其中最簡單的是rename e序列。 下圖是Restart t命令的簡單模型: 此處cmd d是APPE,STOR R或者RETR R。 我們注意到上面三個模型是相似的。Restart t和Rename e的區(qū)別僅在于第二階段對100 0系列應答的處理,第二組期望(有些命令可能需要)100 0系列的應答。記住,每個命令至多允許一個100 0系列的應答。 最復雜的圖是Login n序列: 最后,我們給出了一個一般化的圖,可用來對命令和應答的交換進行建模: 7. 典型的FTP 場景(TYPICALFTPSCENARIO) ) 主機U U上的user r想和主機S S進行文件傳輸(to/from): : 一般的,user r通過一個間接的user-FTPprocess s和server r通訊。下面可能是一個典型的場景。User-FTP P提示出現(xiàn)在圓括號中,‘----> >’表示命令從主機U到主機S,'<----'表示從S到U的應答。 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(八進制25),也即L=21。
|