注意:數(shù)據(jù)連接是雙向的,它不用整個(gè)時(shí)間都存在。上圖中用戶PI開始控制連接,控制連接與Telnet協(xié)議很象。在開始階段,標(biāo)準(zhǔn)FTP命令由用戶PI產(chǎn)生并通過控制連接傳送到服務(wù)器進(jìn)程。服務(wù)器PI向用戶PI返回標(biāo)準(zhǔn)應(yīng)答。FTP命令指定數(shù)據(jù)連接參數(shù)和文件系統(tǒng)操作。用戶DTP在特定數(shù)據(jù)端口偵聽,服務(wù)器開始數(shù)據(jù)連接并以指定的參數(shù)開始數(shù)據(jù)傳輸。數(shù)據(jù)端口不必在開始FTP命令的機(jī)器上,但用戶或用戶FTP進(jìn)程必須確定它在指定的數(shù)據(jù)端口上偵聽。這個(gè)數(shù)據(jù)連接是全雙工的。
在另外一種情況下,用戶或許希望在兩個(gè)主機(jī)間傳送文件,不是兩個(gè)本地主機(jī)。用戶在兩臺(tái)主機(jī)間建立控制連接,然后規(guī)劃數(shù)據(jù)連接。用這種方式,控制信息由用戶PI獲得,但是數(shù)據(jù)在服務(wù)器DTP之間傳送。下面就是一個(gè)例子:
協(xié)議要求數(shù)據(jù)傳輸在處理時(shí)打開控制連接。在完成FTP服務(wù)后由用戶中止控制連接,而服務(wù)器具體操作。如果在未接收命令時(shí)關(guān)閉了控制連接,服務(wù)器也會(huì)關(guān)閉數(shù)據(jù)傳輸。FTP和Telnet很有聯(lián)系,F(xiàn)TP使用Telnet協(xié)議進(jìn)行控制連接,可有兩種方法達(dá)到目的:用戶PI或服務(wù)器PI可以在自己的過程中實(shí)現(xiàn) Telnet協(xié)議的功能;第二種方法是利用系統(tǒng)中現(xiàn)有的Telnet模塊。實(shí)現(xiàn)上,F(xiàn)TP對(duì)Telnet協(xié)議的依賴也不多,即使重新實(shí)現(xiàn),代碼量也不大。
3. 數(shù)據(jù)傳輸功能
數(shù)據(jù)連接只傳輸數(shù)據(jù),控制連接傳送命令和響應(yīng)。幾個(gè)命令是關(guān)于在主機(jī)間傳輸數(shù)據(jù)的,數(shù)據(jù)傳輸基本上獨(dú)立于物理結(jié)構(gòu)的,但是如果在壓縮傳輸模式下流式傳輸與文件結(jié)構(gòu)有關(guān),文件的屬性與表示類型有關(guān)。
3.1. 數(shù)據(jù)表示與保存
數(shù)據(jù)是在主機(jī)間的存儲(chǔ)設(shè)置間傳送的。因?yàn)閮蓚€(gè)系統(tǒng)的數(shù)據(jù)存儲(chǔ)方式不同,因此需要對(duì)它進(jìn)行轉(zhuǎn)換,在傳送文本時(shí)會(huì)有對(duì)ASCII表示的問題,在進(jìn)行二進(jìn)制傳送的時(shí)候,會(huì)有不同系統(tǒng)對(duì)字節(jié)長(zhǎng)度規(guī)定不同的問題,有的系統(tǒng)是7位,有的系統(tǒng)可能是32位,這也需要進(jìn)行轉(zhuǎn)換。需要提供數(shù)據(jù)表示與傳輸模型函數(shù),但是FTP提供這方面的功能不多,超過FTP提供功能的那一部分要用戶自己實(shí)現(xiàn)。
3.1.1. 數(shù)據(jù)類型
數(shù)據(jù)表示是由用戶指定的表示類型,它可以是隱含的,也可以是用戶指定的。請(qǐng)一定注意:邏輯字節(jié)長(zhǎng)度與物理字節(jié)長(zhǎng)度是不同的。
3.1.1.1. ASCII類型
這是所有FTP必須實(shí)現(xiàn)的默認(rèn)類型,用于傳送文本文件,當(dāng)在主機(jī)間使用EBCDIC傳送時(shí)更方便,則不使用ASCII類型。發(fā)送方將內(nèi)部表示轉(zhuǎn)換為NVT- ASCII格式,接收方則進(jìn)行相反的過程接收數(shù)據(jù)。根據(jù)NVT標(biāo)準(zhǔn),要在行結(jié)束處使用序列。NVT-ASCII是8位的。ASCII和EBCDIC的格式參數(shù)在下面討論。
3.1.1.2. EBCDIC類型
它是作為ASCII的另一種方法在主機(jī)間傳送數(shù)據(jù)的數(shù)據(jù)類型。EBCDIC和ASCII很象,僅在類型的功能描述上有一些差別。行結(jié)束符使用很少。
3.1.1.3. 圖象類型
在此類型下傳送的數(shù)據(jù)被看作連續(xù)的位,發(fā)送方將數(shù)據(jù)打包到8位傳輸字節(jié)中傳送。因?yàn)榻Y(jié)構(gòu)的需要要對(duì)傳送數(shù)據(jù)進(jìn)行填充,填充字節(jié)全部為0,填充必須在文件結(jié)構(gòu)時(shí)使用,而且要標(biāo)記出以便接收方過濾掉。它用于傳送二進(jìn)制數(shù)據(jù)和有效地傳送和存儲(chǔ)文件,因此所有FTP也必須實(shí)現(xiàn)。
3.1.1.4. 本地類型
也可以以十進(jìn)制指定邏輯字節(jié)大小。如果物理字節(jié)大小和邏輯字節(jié)大小不同,直接將物理數(shù)據(jù)打包為邏輯字節(jié),不用什么填充。接收方根據(jù)邏輯字節(jié)大小進(jìn)行和本機(jī)的存儲(chǔ)特點(diǎn)進(jìn)行轉(zhuǎn)換。傳輸必須是可重復(fù)的,也就是說,相同的文件相同的參數(shù),那內(nèi)容必須是一樣的。
3.1.1.5. 格式控制
ASCII 和EBCDIC有一個(gè)可選參數(shù),它說明文件垂直格式控制,下面的數(shù)據(jù)表示類型在FTP中有定義。字符文件可能有三種用途,打印,存儲(chǔ)或留待以后處理。如果是用于打印,那主機(jī)必須知道垂直格式控制的表示,如果存儲(chǔ)或等以后處理,也需要保留文件格式。如果在遠(yuǎn)程主機(jī)上處理完后傳輸回本地主機(jī),要保證遠(yuǎn)程主機(jī)處理時(shí)沒有麻煩。這都需要在ASCII和EBCDIC格式上加入新的參數(shù)。
3.1.1.5.1. NON PRINT
未指定第二個(gè)參數(shù)是它是默認(rèn)值。它必須為所有FTP接受。如果傳輸?shù)奈募怯糜诖蛴〉模瑒t使用邊界和間隔的默認(rèn)值。通常它不用于打印目的,而用于保存文件或執(zhí)行文件。
3.1.1.5.2. TELNET格式控制
文件包括ASCII/EBCDIC垂直格式控制,這些控制字符可以使打印正常進(jìn)行。
3.1.1.5.3. CARRIAGE CONTROL (ASA)
文件包含ASA (FORTRAN)垂直格式控制字符。在以ASA標(biāo)準(zhǔn)形成的行中,第一個(gè)字符不打印,它用于決定打印前的走紙量。下面是定義了的ASA字符:
blank: 向下移動(dòng)1行;0:向下移動(dòng)2行;1:移動(dòng)至下一頁;+:不移動(dòng)
打印機(jī)必須能夠決定結(jié)構(gòu)體的結(jié)束。如果文件本身有記錄結(jié)構(gòu)就沒有問題,如果沒有,用于區(qū)別打印行,但這些格式標(biāo)記已經(jīng)由ASA控制字符使用了。
3.1.2. 數(shù)據(jù)結(jié)構(gòu)
除了有不同的數(shù)據(jù)類型外,F(xiàn)TP還允許有不同的文件結(jié)構(gòu),下面是三種文件結(jié)構(gòu):文件式結(jié)構(gòu):文件中沒有內(nèi)部結(jié)構(gòu),文件被看作是二進(jìn)制流;記錄結(jié)構(gòu):文件是由一系列記錄組成的;頁結(jié)構(gòu):文件是由不同的索引頁組成的。
如果未使用STRU命令,文件結(jié)構(gòu)是默認(rèn)值。文件的結(jié)構(gòu)會(huì)影響傳輸模型,存儲(chǔ)和數(shù)據(jù)表示。文件本來的屬性和保存它的主機(jī)有關(guān),不同的機(jī)器會(huì)以自己的方式保存文件。在不同主機(jī)間傳送文件時(shí)必須使主機(jī)能夠識(shí)別相互的表示。有些主機(jī)上的文件是面向字節(jié)的,有些是面向記錄的,在傳送時(shí)就會(huì)出現(xiàn)問題。那就要在接收方進(jìn)行內(nèi)部轉(zhuǎn)換。在進(jìn)行轉(zhuǎn)換的時(shí)候,需要區(qū)別記錄的邊界,在ASCII中使用,在EBCDIC中使用作為分隔符。采用這種實(shí)現(xiàn)方法的必須保證轉(zhuǎn)換是可逆的。
3.1.2.1. 文件結(jié)構(gòu)
如果未使用STRU命令,文件結(jié)構(gòu)是默認(rèn)值。文件結(jié)構(gòu)中沒有默認(rèn)值,文件被看作是連續(xù)的字節(jié)串。
3.1.2.2. 記錄結(jié)構(gòu)
對(duì)于文本文件,記錄結(jié)構(gòu)必須是所有FTP實(shí)現(xiàn)必須有的。記錄結(jié)構(gòu)文件是由連續(xù)的記錄構(gòu)成的。
3.1.2.3. 頁結(jié)構(gòu)
文件是非連續(xù)時(shí)使用頁結(jié)構(gòu)。這種文件稱為隨機(jī)訪問文件。這些文件中有時(shí)會(huì)的和文件整體或部分相關(guān)的信息出現(xiàn)。在FTP中,文件的一個(gè)部分稱為頁。為了提供不同的頁大小和相關(guān)信息,每頁都帶頁頭發(fā)送。頁頭中有如下域:
頭長(zhǎng)度
包括此字節(jié)的頁頭長(zhǎng)度,單位為字節(jié),最小長(zhǎng)度為4
頁索引
指出此部分在原文件中的位置,它和傳輸編號(hào)不是一回事
數(shù)據(jù)長(zhǎng)度
頁數(shù)據(jù)中的邏輯字節(jié)數(shù),最小值為0
頁類型
頁的類型有以下幾種:0=未頁,指示傳輸結(jié)構(gòu),包頭必須為4,數(shù)據(jù)長(zhǎng)度必須為0;1=通常頁,沒有控制信息的通常頁文件的普通類型;2=描述子頁,用于傳送整體文件的描述信息;3=訪問控制頁,包括頁級(jí)訪問控制信息的頁文件頭域,包頭長(zhǎng)度必須為5
可選域
提供每頁的控制信息
所有域均以1個(gè)邏輯字節(jié)長(zhǎng)度為大小,邏輯字節(jié)長(zhǎng)度由TYPE命令指定。如果讀取版本與和開始版本號(hào)一致,文件訪問時(shí)必須以相同的參數(shù)進(jìn)行。如果參數(shù)相同,F(xiàn)TP實(shí)現(xiàn)要保證取得的文件內(nèi)容是相同的。
3.2. 建立數(shù)據(jù)連接
傳送數(shù)據(jù)機(jī)制包括建立連接選擇數(shù)據(jù)參數(shù)。用戶和服務(wù)器DTP有默認(rèn)數(shù)據(jù)端口。用戶進(jìn)程默認(rèn)數(shù)據(jù)端口和控制連接端口相同。服務(wù)器進(jìn)程默認(rèn)數(shù)據(jù)端口和控制連接端口相鄰。傳輸字節(jié)大小是8位字節(jié)。此字節(jié)是實(shí)際傳輸字節(jié),但不代表主機(jī)內(nèi)的數(shù)據(jù)表示。被動(dòng)數(shù)據(jù)傳輸進(jìn)程在數(shù)據(jù)端口接收數(shù)據(jù),F(xiàn)TP請(qǐng)求命令決定數(shù)據(jù)傳輸?shù)姆较?。服?wù)器在接收到請(qǐng)求以后,將初始化端口的數(shù)據(jù)連接。當(dāng)連接建立后,傳輸在DTP之間傳送,服務(wù)器PI對(duì)用戶PI返回應(yīng)答。FTP實(shí)現(xiàn)運(yùn)行一個(gè)默認(rèn)數(shù)據(jù)端口,用戶PI才能改變默認(rèn)端口。
通過PORT命令可能改變端口,用戶可能希望數(shù)據(jù)在第三方主機(jī)上進(jìn)行其它操作,用戶PI需要在兩個(gè)服務(wù)器PI上建立連接。一個(gè)服務(wù)器被告知偵聽另一服務(wù)器的請(qǐng)求。用戶PI通過PORT命令通知另一服務(wù)器的數(shù)據(jù)端口。最后雙方發(fā)送相應(yīng)的傳送命令。通常,服務(wù)器負(fù)責(zé)支持?jǐn)?shù)據(jù)連接,初始化并關(guān)閉它,除非用戶DTP在傳輸模式下要求關(guān)閉連接。服務(wù)器在下面情況下關(guān)閉數(shù)據(jù)連接:
1. 服務(wù)器結(jié)束發(fā)送數(shù)據(jù),通過EOF要求中止傳送;
2. 用戶發(fā)送ABORT命令;
3. 用戶改變端口;
4. 控制連接關(guān)閉;
5. 發(fā)生不可恢復(fù)錯(cuò)誤。
3.3. 數(shù)據(jù)連接管理
默認(rèn)數(shù)據(jù)連接端口:所有FTP必須支持默認(rèn)數(shù)據(jù)連接,只有用戶PI能夠初始化非默認(rèn)端口的使用。
確定非默認(rèn)數(shù)據(jù)端口:用戶PI可以使用PORT命令指定非默認(rèn)端口,它要求服務(wù)器方以PASV確定非默認(rèn)數(shù)據(jù)端口。連接是由雙方地址確定的,因此改變一方地址就改變了連接。
數(shù)據(jù)連接的重用:在使用流式數(shù)據(jù)傳輸模型時(shí),文件結(jié)束通過關(guān)閉連接指示。如果要傳送多個(gè)文件時(shí)就會(huì)出麻煩,解決的方法有兩個(gè),一個(gè)是確定非默認(rèn)端口,另一個(gè)是使用另一種傳輸模式。就傳輸模式而言,流傳輸模式是不安全的,因此無法確定連接是暫時(shí)還是永久關(guān)閉。其它傳輸模式不通過關(guān)閉連接表示文件結(jié)構(gòu),它們可以通過FTP命令決定傳送結(jié)構(gòu)。因此使用這些傳輸模式可以在保持連接的情況下傳送多個(gè)文件。
3.4. 傳輸模式
有三種傳輸模式:一種將數(shù)據(jù)格式化并考慮重新開始過程;一種壓縮數(shù)據(jù);一種是不經(jīng)過處理(少量處理)傳送。所有數(shù)據(jù)傳輸必須以一個(gè)EOF結(jié)束,它可以顯式給出,也可以通過關(guān)閉連接隱式給出。對(duì)于記錄文件,所有EOR是顯式的,包括最后一個(gè)記錄。對(duì)于以頁結(jié)構(gòu)傳送的文件,使用“最后一頁”表示結(jié)束。從這里開始,下文中我們提到的字節(jié)指的是“傳輸字節(jié)”。
為了進(jìn)行標(biāo)準(zhǔn)化傳送,傳送主機(jī)必須把行結(jié)束或記錄結(jié)束的內(nèi)部表示轉(zhuǎn)化為傳輸模式和文件結(jié)構(gòu)指定的形式傳送,接收方則進(jìn)行相反的工作。IBM大型機(jī)的記錄計(jì)數(shù)域可能不能為其它主機(jī)識(shí)別,所以記錄結(jié)束標(biāo)記在流模式下以雙字節(jié)控制碼傳送,在塊或壓縮模式下以標(biāo)記位傳送。而ASCII或EBCDIC的行結(jié)束則則或指示。這樣的轉(zhuǎn)換需要時(shí)間,所以相同的系統(tǒng)在傳送文本文件時(shí)采用二進(jìn)制或流表示比較合適。下面是 FTP定義的傳輸模式:
3.4.1. 流模式
數(shù)據(jù)以字節(jié)流的形式傳送。使用的表示類型沒有限制,允許記錄結(jié)構(gòu)。在記錄結(jié)構(gòu)文件EOR和EOF表示為雙字節(jié)控制碼。第一字節(jié)全為0,后一字節(jié)為轉(zhuǎn)義字符。當(dāng)?shù)诙恢禐?時(shí)表示EOR,為2時(shí)表示EOF,如果要同時(shí)表示EOR和 EOF,值為3。全1字節(jié)作為數(shù)據(jù)發(fā)送時(shí)必須使用雙字節(jié)傳送,其中數(shù)據(jù)保存在第二個(gè)字節(jié)內(nèi)。如果是文件結(jié)構(gòu),通過發(fā)送方關(guān)閉連接表示EOF,接收到的所有數(shù)據(jù)就是文件內(nèi)容。
3.4.2. 塊模式
文件以塊形式傳送,塊帶有自己的頭部分。頭字節(jié)包括計(jì)數(shù)域和描述子代碼。計(jì)數(shù)域說明了數(shù)據(jù)塊的字節(jié)數(shù),描述子代碼定義了以下內(nèi)容:EOF,EOR重新開始標(biāo)記或懷疑錯(cuò)誤數(shù)據(jù)。懷疑錯(cuò)誤數(shù)據(jù)不是為了進(jìn)行差錯(cuò)控制,它是為了站點(diǎn)間交換特定數(shù)據(jù),傳送時(shí)不管本地錯(cuò)誤(如硬盤錯(cuò)誤)而只管傳送,但是傳送時(shí)可要指出,這個(gè)數(shù)據(jù)可能有錯(cuò)。在此模式下可以使用記錄結(jié)構(gòu),也可以使用相應(yīng)的數(shù)據(jù)表示。頭字節(jié)的結(jié)構(gòu)如下圖所示:
描述子 8位
字節(jié)計(jì)數(shù) 16位
描述子代碼由在描述子字節(jié)中的位標(biāo)記說明,下面是已經(jīng)指定的四種代碼及其意義:
代碼
意義
128
數(shù)據(jù)塊結(jié)束是EOR
64
數(shù)據(jù)塊結(jié)束是EOF
32
數(shù)據(jù)塊內(nèi)有懷疑錯(cuò)誤
16
數(shù)據(jù)塊是重新開始標(biāo)記
以這種編碼,對(duì)于特定塊可能存在多個(gè)描述子編碼條件,所需要的位必須全部設(shè)置。重新開始標(biāo)記包括在數(shù)據(jù)流中,它作為8位整數(shù)代表在控制連接上使用語言的可打印字節(jié),但不得出現(xiàn)在其中。例如要傳送6字節(jié)標(biāo)記,下面就是例子:
Descrptr code = 16
Byte count = 6
Marker 8位
Marker 8位
Marker 8位
Marker 8位
Marker 8位
Marker 8位
3.4.3. 壓縮模式
有三種信息需要傳送:常規(guī)數(shù)據(jù)以字節(jié)串傳送;壓縮數(shù)據(jù),包括復(fù)本和過濾器;控制信息,以兩個(gè)轉(zhuǎn)義字符傳送。如果有N(>0但小于127)個(gè)常規(guī)數(shù)據(jù)傳送,在數(shù)據(jù)前一位加上一個(gè)字節(jié),這個(gè)字節(jié)最高位為0,其它位表示的數(shù)值等于N。如下圖:
若要壓縮一個(gè)數(shù)據(jù)位D的N復(fù)本字符串,用兩個(gè)字節(jié)傳送,如下圖,它表示的是壓縮的字節(jié):
一串N過慮器字節(jié)可以壓縮為一個(gè)字節(jié),而過濾器字節(jié)根據(jù)表示法不同而不同。如果類型是ASCII或EBCDIC,過濾器字節(jié)是,如果是圖象或本地類型,則是0。下面就是過濾器字節(jié):
轉(zhuǎn)義序列是雙字節(jié),頭一個(gè)全0,后一個(gè)內(nèi)是定義于塊模式下的描述子代碼。描述子代碼與塊模式中的意義相同,它作用于其后串中的字節(jié)。而壓縮模式對(duì)于增加帶寬有好處(因?yàn)閿?shù)據(jù)是壓縮過的)。
3.5. 差錯(cuò)恢復(fù)和重新開始
位丟失和數(shù)據(jù)錯(cuò)誤是這一層的差錯(cuò)控制由TCP負(fù)責(zé)。而重新開始則是給用戶一個(gè)處理系統(tǒng)(包括操作系統(tǒng),網(wǎng)絡(luò)等)失敗的方法。重新開始過程僅適用于塊和壓縮模式,它要求發(fā)送者在數(shù)據(jù)流中加入特定標(biāo)記,標(biāo)記僅對(duì)傳送者有意義,但其中的內(nèi)容是控制連接使用的語言。標(biāo)記可以代表一個(gè)位記數(shù),記錄記數(shù)或可以標(biāo)記數(shù)據(jù)數(shù)目的任何點(diǎn)。如果接收方也支持重新開始,將會(huì)在接收系統(tǒng)中保存這一標(biāo)記。在系統(tǒng)失敗重新啟動(dòng)后,用戶可以根據(jù)原來的標(biāo)記重新開始數(shù)據(jù)傳送,也就是我們通常熟悉的斷點(diǎn)續(xù)傳過程。接收方接收到一段數(shù)據(jù),然后記下一點(diǎn),如果發(fā)送方失敗了,就從這一點(diǎn)以后再傳送相應(yīng)的數(shù)據(jù)。具體的這里不多說了。
4. 文件傳輸功能
從用戶PI到服務(wù)器的信道是建立在用戶到標(biāo)記服務(wù)器端口間的。用戶協(xié)議解釋器負(fù)責(zé)發(fā)送命令和解釋接收的應(yīng)答;服務(wù)器PI解釋命令,發(fā)送應(yīng)答,指導(dǎo)DTP建立數(shù)據(jù)連接并傳送數(shù)據(jù)。如果數(shù)據(jù)傳輸?shù)牡诙绞怯脩鬌TP,通過用戶FTP主機(jī)的內(nèi)部協(xié)議對(duì)它進(jìn)行控制;如果第二方是服務(wù)器DTP,它由用戶PI發(fā)來的命令經(jīng)過自己的PI控制。
4.1. FTP命令
4.1.1. 訪問控制命令
下列命令指定訪問控制標(biāo)記(命令碼在括號(hào)內(nèi)):
用戶名(USER)
參數(shù)是標(biāo)記用戶的Telnet串。用戶標(biāo)記是訪問服務(wù)器必須的,此命令通常是控制連接后第一個(gè)發(fā)出的命令,有些主機(jī)還會(huì)要求口令和帳戶。服務(wù)器可以在任何時(shí)間接收新的USER命令以改變?cè)L問控制和(或)帳戶信息。這可以重新開始登錄過程,所以傳輸參數(shù)不變,在進(jìn)行中的文件傳輸在過去的訪問控制參數(shù)下完成。
口令(PASS)
參數(shù)是標(biāo)記用戶口令的Telnet串。此命令緊跟USER命令,在某些站點(diǎn)它是完成訪問控制不可缺少的一步。因此口令是個(gè)重要的東西,因此不能顯示出來,服務(wù)器方?jīng)]有辦法隱藏口令,所以這一任務(wù)得由用戶FTP進(jìn)程完成。
ACCOUNT (ACCT)
參數(shù)是標(biāo)記用戶帳戶的Telnet串。此命令不需要與USER相關(guān),一些站點(diǎn)可能需要帳戶用于登錄,另一些可以限制帳戶的權(quán)限,在后一種情況下,此命令可在任何時(shí)候發(fā)送。應(yīng)答的不同可以區(qū)別不同的情況:當(dāng)?shù)卿浶枰獛粜畔r(shí),對(duì)PASS命令的響應(yīng)是332。另外,如果不需要帳戶信息,對(duì)PASS的響應(yīng)是 230,如果需要帳戶信息在以后需要,服務(wù)器會(huì)返回332或532,這要看它是保存此命令還是拒絕此命令了。
改變工作目錄(CWD)
此命令使用戶可以在不同的目錄或數(shù)據(jù)集下工作而不用改變它的登錄或帳戶信息。傳輸參數(shù)也不變。參數(shù)一般是目錄名或與系統(tǒng)相關(guān)的文件集合。
回到上一層目錄(CDUP)
此命令要求系統(tǒng)實(shí)現(xiàn)目錄樹結(jié)構(gòu),它的響應(yīng)和CWD的相同。
結(jié)構(gòu)加載(SMNT)
此命令使用戶在不改變登錄或帳戶信息的情況下加載另一個(gè)文件系統(tǒng)數(shù)據(jù)結(jié)構(gòu)。傳輸參數(shù)也不變。參數(shù)是文件目錄或與系統(tǒng)相關(guān)的文件集合。
重新初始化(REIN)
此命令終止USER,將所有I/O和帳戶信息寫入,但不許進(jìn)行中的數(shù)據(jù)傳輸完成。重置所有參數(shù),控制連接打開,可以再次開始USER命令。
退出登錄(QUIT)
此命令終止USER,如果沒有數(shù)據(jù)傳輸,服務(wù)器關(guān)閉控制連接;如果有數(shù)據(jù)傳輸,在得到傳輸響應(yīng)后服務(wù)器關(guān)閉控制連接。如果用戶進(jìn)程正在向不同的USER傳輸數(shù)據(jù),不希望對(duì)每個(gè)USER關(guān)閉然后再打開,可以使用REIN。對(duì)控制連接的意外關(guān)閉,可以導(dǎo)致服務(wù)器運(yùn)行中止(ABOR)和退出登錄(QUIT)。
4.1.2. 傳輸參數(shù)命令
所有數(shù)據(jù)傳輸參數(shù)有默認(rèn)值。服務(wù)器必須記錄下默認(rèn)值,在FTP服務(wù)請(qǐng)求后,可以以任何順序發(fā)送。下面命令傳送參數(shù):
數(shù)據(jù)端口(PORT)
參數(shù)是要使用的數(shù)據(jù)連接端口,通常情況下對(duì)此不需要命令響應(yīng)。如果使用此命令時(shí),要發(fā)送32位的IP地址和16位的TCP端口號(hào)。上面的信息以8位為一組,逗號(hào)間隔十進(jìn)制傳輸,如下例:
PORT h1,h2,h3,h4,p1,p2
其中h1是IP地址的最高8位。
被動(dòng)(PASV)
此命令要求服務(wù)器DTP在指定的數(shù)據(jù)端口偵聽,進(jìn)入被動(dòng)接收請(qǐng)求的狀態(tài),參數(shù)是主機(jī)和端口地址。
表示類型(TYPE)
參數(shù)指定表示類型。有些類型需要第二個(gè)參數(shù),第一個(gè)參數(shù)由單個(gè)Telnet字符定義,第二個(gè)參數(shù)是十進(jìn)制整數(shù)指定字節(jié)大小,參數(shù)間以分隔。下面是格式:
默認(rèn)表示類型是ASCII非打印字符,如果參數(shù)未改變,以后只改變了第一個(gè)參數(shù),則使用默認(rèn)值。
文件結(jié)構(gòu)(STRU)
參數(shù)是一個(gè)Telnet字符代碼指定文件結(jié)構(gòu)。下面是代碼及其意義:
F - 文件(非記錄結(jié)構(gòu)),它是默認(rèn)值
R - 記錄結(jié)構(gòu)
P - 頁結(jié)構(gòu)
傳輸模式(MODE)
參數(shù)是一個(gè)Telnet字符代碼指定傳輸模式。下面是代碼及其意義:
S - 流(默認(rèn)值)
B - 塊
C - 壓縮
4.1.3. FTP服務(wù)命令
FTP 服務(wù)命令定義用戶請(qǐng)求的文件傳輸或文件系統(tǒng)功能。此命令的參數(shù)通常是路徑名,其語法要和服務(wù)器的規(guī)范一致。推薦的默認(rèn)值是最近指定的設(shè)備目錄或目錄。命令順序通常沒有限制,只有"rename from"命令后面必須是"rename to",重新啟動(dòng)命令后面必須是中斷服務(wù)命令。服務(wù)命令的響應(yīng)通常在數(shù)據(jù)連接上傳輸。下面是具體的命令:
獲得文件(RETR)
此命令使服務(wù)器DTP傳送指定路徑內(nèi)的文件復(fù)本到服務(wù)器或用戶DTP。這邊服務(wù)器上文件的狀態(tài)和內(nèi)容不受影響。
保存(STOR)
此命令使服務(wù)器DTP接收數(shù)據(jù)連接上傳送過來的數(shù)據(jù),并將數(shù)據(jù)保存在服務(wù)器的文件中。如果文件已存在,原文件將被覆蓋。如果文件不存在,則新建文件。
唯一保存(STOU)
此命令和STOR差不多,此命令要求在此目錄下的文件名是唯一的,對(duì)此命令的響應(yīng)必須包括產(chǎn)生的用戶名。
附加(APPE)
它和STOR的功能差不多,但是如果文件在指定路徑內(nèi)已存在,則把數(shù)據(jù)附加到原文件尾部,如果不存在則新建文件。
分配(ALLO)
此命令用于在一些主機(jī)上為新傳送的文件分配足夠的存儲(chǔ)空間。參數(shù)是十進(jìn)制的邏輯字節(jié)數(shù)。如果是記錄或頁結(jié)構(gòu),頁或記錄的最大大小也需要,這在第二個(gè)參數(shù)內(nèi)以十進(jìn)制指定。第二個(gè)參數(shù)是可選的,如果有它,它和第一個(gè)參數(shù)以Telnet字符 R 分隔。此命令在STOR或APPE命令后,對(duì)于不需要分配存儲(chǔ)空間的機(jī)器,它的作用等于NOOP。
重新開始(REST)
參數(shù)域代表服務(wù)器要重新開始的那一點(diǎn),此命令并不傳送文件,而是略過指定點(diǎn)后的數(shù)據(jù),此命令后應(yīng)該跟其它要求文件傳輸?shù)腇TP命令。
重命名(RNFR)
這個(gè)命令和我們?cè)谄渌僮飨到y(tǒng)中使用的一樣,只不過后面要跟"rename to"指定新的文件名。
重命名為(RNTO)
此命令和上面的命令共同完成對(duì)文件的重命名。
放棄(ABOR)
此命令通知服務(wù)中止以前的FTP命令和與之相關(guān)的數(shù)據(jù)傳送。如果先前的操作已經(jīng)完成,則沒有動(dòng)作,返回226。如果沒有完成,返回426,然后再返回226。關(guān)閉控制連接,數(shù)據(jù)連接不關(guān)閉。
刪除(DELE)
此命令刪除指定路徑下的文件。用戶進(jìn)程負(fù)責(zé)對(duì)刪除的提示。
刪除目錄(RMD)
此命令刪除目錄。
創(chuàng)建目錄(MKD)
此命令在指定路徑下創(chuàng)建新目錄。
打印工作目錄(PWD)
在響應(yīng)是返回當(dāng)前工作目錄。
列表(LIST)
服務(wù)器傳送列表到被動(dòng)DTP,如果路徑指定一個(gè)目錄或許多文件,返回指定路徑下的文件列表。如果路徑名指定一個(gè)文件,服務(wù)器返回文件的當(dāng)前信息,參數(shù)為空表示用戶當(dāng)前的工作目錄或默認(rèn)目錄。數(shù)據(jù)傳輸在ASCII或EBCDIC下進(jìn)行,用戶必須確認(rèn)這一點(diǎn)。因?yàn)槲募畔⒁蛳到y(tǒng)不同而不同,所以不可能被程序自動(dòng)利用,但是人類用戶卻很需要。
名字列表(NLST)
服務(wù)器傳送目錄表名到用戶,路徑名應(yīng)指定目錄或其它系統(tǒng)指定的文件群描述子;空參數(shù)指當(dāng)前目錄。服務(wù)器返回文件名數(shù)據(jù)流,以ASCII或EBCDIC形式傳送,并以或分隔。這里返回的信息有時(shí)可以供程序進(jìn)行進(jìn)一步處理。
站點(diǎn)參數(shù)(SITE)
服務(wù)器用來提供服務(wù)器系統(tǒng)信息,信息因系統(tǒng)不同而不同,格式在HELP SITE命令應(yīng)答中給出。
系統(tǒng)(SYST)
用于確定服務(wù)器上運(yùn)行的操作系統(tǒng)。
狀態(tài)(STAT)
此命令返回控制連接狀態(tài),它可以在文件傳送過程中發(fā)送,服務(wù)器返回操作進(jìn)行的狀態(tài)。也可以在文件傳送之間發(fā)送,這時(shí)命令有參數(shù),參數(shù)是路徑名,此命令的功能除了數(shù)據(jù)在控制連接上傳送以外和列表命令相似。如果指定部分路徑,服務(wù)器以文件名或與說明相關(guān)的屬性返回;如沒有參數(shù),服務(wù)器返回服務(wù)器FTP進(jìn)程的狀態(tài)信息,包括傳輸參數(shù)的當(dāng)前值和連接狀態(tài)。
幫助(HELP)
這條命令我們?cè)谄匠O到y(tǒng)中得到的幫助沒有什么區(qū)別,響應(yīng)類型是211或214。建議在使用USER命令前使用此命令。
等待(NOOP)
此命令不產(chǎn)生什么實(shí)際動(dòng)作,它僅使服務(wù)器返回OK。
FTP 在控制連接上使用Telnet通信,因此有機(jī)會(huì)大家可以看看相關(guān)的協(xié)議說明。對(duì)下文的理解會(huì)很有好處。下面內(nèi)容將對(duì)命令的應(yīng)答和關(guān)于命令的詳細(xì)信息作以說明。FTP命令可分為訪問控制標(biāo)記,數(shù)據(jù)傳輸參數(shù)或FTP服務(wù)請(qǐng)求,特定的命令(如ABOR,STAT)可以在數(shù)據(jù)傳輸過程中在控制連接上傳輸。有些服務(wù)器不能同時(shí)監(jiān)視數(shù)據(jù)和控制鏈路,那就要另外采取措施了。請(qǐng)注意下面的幾點(diǎn)建議:
1. 用戶系統(tǒng)將Telnet的"Interrupt Process"(IP)信息插入Telnet流;
2. 用戶系統(tǒng)發(fā)送Telnet的"Synch"信號(hào);
3. 用戶系統(tǒng)將命令(如ABOR)插入Telnet流;
4. 服務(wù)器PI在接收到IP后,在Telnet流中尋找僅有一個(gè)的FTP命令。
4.2. FTP應(yīng)答
FTP 命令的響應(yīng)是為了對(duì)數(shù)據(jù)傳輸請(qǐng)求和過程進(jìn)行同步,也是為了讓用戶了解服務(wù)器的狀態(tài)。每個(gè)命令必須有最少一個(gè)響應(yīng),如果是多個(gè),它們要易于區(qū)別。有些命令是有順序性的,因此其中任何一個(gè)命令的失敗會(huì)導(dǎo)致從頭開始。FTP響應(yīng)由三個(gè)數(shù)字構(gòu)成,后面是一些文本。數(shù)字帶有足夠的信息命名用戶PI不用檢查文本就知道發(fā)生了什么。文本信息與服務(wù)器相關(guān),用戶可能得到不同的文本信息。文本和數(shù)字以間隔,文本后以Telnet行結(jié)束符結(jié)束。文本可能多于一行,這時(shí)文本必須在括號(hào)內(nèi),第一行內(nèi)要有信息表示文本多于一行,最后一行也要有所標(biāo)記。如果是多行,可以在數(shù)字代碼后加上"-",最后一行以數(shù)字開始,后面是,再加上 Telnet的行結(jié)束符就可以了。下面是一個(gè)例子:
123-第一行
第二行
234 以數(shù)字開始的一行
123 最后一行
三位數(shù)字每位都有一定的意義,第一位確定響應(yīng)是好的,壞的還是不完全的,通過檢查第一位,用戶進(jìn)程通常就能夠知道大致要采取什么行動(dòng)了。如果用戶程序希望了解出了什么問題,可以檢查第二位,第三位留表示其它信息。第一位有五個(gè)值:
1yz 確定預(yù)備應(yīng)答
請(qǐng)求的操作正在被初始化;在進(jìn)入下一個(gè)命令前等待另外的應(yīng)答。這類響應(yīng)用于說明命令被接受,在實(shí)現(xiàn)中如何同步監(jiān)視有困難,用戶進(jìn)程現(xiàn)在可以關(guān)注數(shù)據(jù)連接了。服務(wù)器FTP進(jìn)程對(duì)第個(gè)命令幾乎都返回1yz響應(yīng)。
2yz 確定完成應(yīng)答
要求的操作已經(jīng)完成,可以執(zhí)行新命令。
3yz 確定中間應(yīng)答
命令已接受,但要求的操作被停止,停止接收更新的信息。
4yz 暫時(shí)拒絕完成應(yīng)答
未接受命令,要求的操作未執(zhí)行,但錯(cuò)誤是臨時(shí)的,過一會(huì)兒可以再次發(fā)送消息。用戶應(yīng)該返回命令序列的開始。這個(gè)暫時(shí)可是不好確定,此命令的意思就是讓用戶進(jìn)程再次嘗試使用此命令。
5yz 永遠(yuǎn)拒絕完成應(yīng)答
它與暫時(shí)拒絕完成應(yīng)答的區(qū)別就在于錯(cuò)誤條件是一時(shí)半會(huì)不會(huì)消失。
下面我們來看看第二位所代表的意義:
x0z 格式錯(cuò)誤;
x1z 此類應(yīng)答是為了請(qǐng)求信息的;
x2z 此類應(yīng)答是關(guān)于控制和數(shù)據(jù)連接的;
x3z 關(guān)于認(rèn)證和帳戶登錄過程;
x4z 未使用;
x5z 此類應(yīng)答是關(guān)于文件系統(tǒng)的;
第三個(gè)數(shù)字是在第二個(gè)數(shù)字的基礎(chǔ)上對(duì)應(yīng)答內(nèi)容的進(jìn)一步細(xì)化。一般來說,數(shù)字代碼后要有文本信息。實(shí)現(xiàn)時(shí)應(yīng)該盡量使用現(xiàn)有的代碼,而不要隨便添加新的意義不大的代碼。
有些命令如TYPE或ALLO,它們的成功不為用戶進(jìn)程提供任務(wù)新信息,所以不會(huì)有200應(yīng)答返回。如果有些命令對(duì)于服務(wù)器來說不支持,也要返回確定完成應(yīng)答,這樣用戶進(jìn)程才有可能進(jìn)行下面的命令。如果要求的不是可選實(shí)現(xiàn)的命令,而這個(gè)命令確實(shí)沒有實(shí)現(xiàn),那就要返回代碼502。下面我們根據(jù)數(shù)字順序列出各個(gè)應(yīng)答碼及其意義:
110
重新啟動(dòng)標(biāo)記應(yīng)答。在這種情況下文本是確定的,它必須是:MARK yyyy=mmmm,其中yyyy是用戶進(jìn)程數(shù)據(jù)流標(biāo)記,mmmm是服務(wù)器標(biāo)記。
120
服務(wù)在nnn分鐘內(nèi)準(zhǔn)備好
125
數(shù)據(jù)連接已打開,準(zhǔn)備傳送
150
文件狀態(tài)良好,打開數(shù)據(jù)連接
200
命令成功
202
命令未實(shí)現(xiàn)
211
系統(tǒng)狀態(tài)或系統(tǒng)幫助響應(yīng)
212
目錄狀態(tài)
213
文件狀態(tài)
214
幫助信息,信息僅對(duì)人類用戶有用
215
名字系統(tǒng)類型
220
對(duì)新用戶服務(wù)準(zhǔn)備好
221
服務(wù)關(guān)閉控制連接,可以退出登錄
225
數(shù)據(jù)連接打開,無傳輸正在進(jìn)行
226
關(guān)閉數(shù)據(jù)連接,請(qǐng)求的文件操作成功
227
進(jìn)入被動(dòng)模式
230
用戶登錄
250
請(qǐng)求的文件操作完成
257
創(chuàng)建"PATHNAME"
331
用戶名正確,需要口令
332
登錄時(shí)需要帳戶信息
350
請(qǐng)求的文件操作需要進(jìn)一步命令
421
不能提供服務(wù),關(guān)閉控制連接
425
不能打開數(shù)據(jù)連接
426
關(guān)閉連接,中止傳輸
450
請(qǐng)求的文件操作未執(zhí)行
451
中止請(qǐng)求的操作:有本地錯(cuò)誤
452
未執(zhí)行請(qǐng)求的操作:系統(tǒng)存儲(chǔ)空間不足
500
格式錯(cuò)誤,命令不可識(shí)別
501
參數(shù)語法錯(cuò)誤
502
命令未實(shí)現(xiàn)
503
命令順序錯(cuò)誤
504
此參數(shù)下的命令功能未實(shí)現(xiàn)
530
未登錄
532
存儲(chǔ)文件需要帳戶信息
550
未執(zhí)行請(qǐng)求的操作
551
請(qǐng)求操作中止:頁類型未知
552
請(qǐng)求的文件操作中止,存儲(chǔ)分配溢出
553
未執(zhí)行請(qǐng)求的操作:文件名不合法
5. 說明
5.1. 最小實(shí)現(xiàn)
下面是Ftp服務(wù)器的最小實(shí)現(xiàn):
類型 - ASCII Non-print
模式 - Stream
結(jié)構(gòu) - File, Record
命令 - USER, QUIT, PORT,TYPE, MODE, STRU,RETR, STOR,NOOP.
傳輸?shù)哪J(rèn)參數(shù)為:
類型 - ASCII Non-print
模式 - Stream
結(jié)構(gòu) - File
所有主機(jī)都將上面的值作為默認(rèn)值。
5.2. 連接
服務(wù)器協(xié)議解釋器會(huì)在端口L偵聽,用戶或用戶協(xié)議解釋器初始化全雙工控制連接,服務(wù)器和用戶進(jìn)程應(yīng)該遵守Telnet協(xié)議的說明進(jìn)行。服務(wù)器不提供對(duì)命令行的編輯功能,應(yīng)該由用戶負(fù)責(zé)這一切。在全部傳送和應(yīng)答結(jié)束后,在用戶的請(qǐng)求下服務(wù)器關(guān)閉控制連接。用戶DTP必須在指定的數(shù)據(jù)端口上偵聽,它可以是默認(rèn)端口U或由PORT命令指定的端口。服務(wù)器的默認(rèn)數(shù)據(jù)端口為L(zhǎng)-1。傳輸方向和端口均可由FTP命令決定。只有用戶PI可以改變默認(rèn)端口。當(dāng)數(shù)據(jù)在服務(wù)器A 和B之間傳送時(shí),用戶PI,C,在兩個(gè)服務(wù)器PI之間建立控制連接。其中一個(gè)服務(wù)器A,在接收到傳輸服務(wù)命令時(shí)接收PASV命令初始化連接,用戶PI接收到PASV命令的確認(rèn)時(shí)(確認(rèn)內(nèi)包括主機(jī)標(biāo)識(shí)和端口),將端口以PORT命令發(fā)送到B。在接收到確認(rèn)后,用戶PI可以發(fā)送相應(yīng)的命令給A和B了,B初始連接和傳輸進(jìn)程,命令應(yīng)答序列如下面所示,請(qǐng)根據(jù)位置注意時(shí)差:
在任何時(shí)間,服務(wù)器和用戶只要有一方關(guān)閉連接,另一方就要趕快讀取緩沖中的數(shù)據(jù),然后也關(guān)閉本方的連接。
5.3. 命令
本節(jié)主要討論命令格式。命令對(duì)大小寫不敏感。命令通常由命令碼和相應(yīng)的參數(shù)組成。中間由一個(gè)或幾個(gè)空格分開。參數(shù)域由結(jié)束,服務(wù)器在未接收到行結(jié)束符時(shí)不會(huì)采取任何動(dòng)作。下面描述的格式是以NVT-ASCII以準(zhǔn)的,方括號(hào)代表可選的參數(shù)域,如果未選擇可選的參數(shù)域則采用默認(rèn)值。
5.3.1. FTP命令
下面是FTP命令,其中username代表用戶名,password代表口令,pathname代表路徑名,host-port代表主機(jī)端口, account-information代表帳戶信息,typecode代表類型代碼,decimal-integer代表十進(jìn)制整數(shù),marker代表標(biāo)記,string代表字符串:
USER
PASS
ACCT
CWD
CDUP
SMNT
QUIT
REIN
PORT
PASV
TYPE
STRU
MODE
RETR
STOR
STOU
APPE
ALLO
[ R ]
REST
RNFR
RNTO
ABOR
DELE
RMD
MKD
PWD
LIST [ ]
NLST [ ]
SITE
SYST
STAT [ ]
HELP [ ]
NOOP
5.3.2. FTP命令參數(shù)
下面是用BNF范式表示的參數(shù)格式:
::=
::=
::=
::= |
::= 除和外的所有ASCII字符
::=
::= |
::= 可打印ASCII字符,從33到126
::=
::= ,
::= ,,,
::= ,
::= 從1到255的十進(jìn)制整數(shù)
::= N | T | C
::= A [ ]| E [ ]| I| L
::= F | R | P
::= S | B | C
::=
::= 任何十進(jìn)制整數(shù)
5.4. 命令和響應(yīng)序列
服務(wù)器和用戶之間的通信是對(duì)話的過程,用戶發(fā)送FTP命令,然后等待服務(wù)器的一個(gè)(或多個(gè))響應(yīng),根據(jù)響應(yīng)再發(fā)送新命令。
連接時(shí)的響應(yīng)帶有許多信息,通常情況下,服務(wù)器會(huì)返回220應(yīng)答,等待輸入,用戶在接收到此響應(yīng)后才發(fā)送新命令,如果服務(wù)器不能立即接收輸入,會(huì)在220后面返回120。有些信息如服務(wù)器將在15分鐘后停止工作是要服務(wù)器發(fā)向用戶的,但是服務(wù)器卻不能直接發(fā)向用戶,處理的方法是將消息緩沖,在下一個(gè)響應(yīng)中返回給用戶。下面列出命令的應(yīng)答,第一個(gè)是預(yù)備應(yīng)答,第二個(gè)是確定完成,第三個(gè)是拒絕完成,最后是中間應(yīng)答。這些應(yīng)答是構(gòu)成狀態(tài)圖的基礎(chǔ),狀態(tài)圖會(huì)在下節(jié)中給出:
建立連接
120
220
220
421
登錄
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
退出登錄
REIN
120
220
220
421
500, 502
QUIT
221
500
傳輸參數(shù)
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
文件操作命令
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
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
獲得信息命令
SYST
215
500, 501, 502, 421
STAT
211, 212, 213
450
500, 501, 502, 421, 530
HELP
211, 214
500, 501, 502, 421
其它命令
SITE
200
202
500, 501, 530
NOOP
200
500 421
6. 狀態(tài)圖
下面是一個(gè)簡(jiǎn)單實(shí)現(xiàn)的FTP的狀態(tài)圖,只用到響應(yīng)碼的首位。對(duì)于所有命令或命令序列有三種可能性:成功(S),失?。‵)或錯(cuò)誤(E)。在狀態(tài)圖中B代表開始,W代表等待響應(yīng)。下面我們給出一個(gè)總圖,總圖可以包括的命令有:
ABOR,ALLO,DELE,CWD,CDUP,SMNT,HELP,MODE,NOOP,PASV,QUIT,SITE,PORT,SYST,STAT,RMD,MKD,PWD,STRU和TYPE
而下圖可以包括的命令有:APPE,LIST,NLST,REIN,RETR,STOR和STOU。
第一幅圖和第二幅圖差別不大,第一幅圖中如果出現(xiàn)了100系列響應(yīng)會(huì)是錯(cuò)誤,而在第二幅圖中不會(huì)。下面是重命名過程:
下面是重新啟動(dòng)命令,其中cmd代表APPE,STOR或RETR。
下圖代表登錄過程:
7. 典型FTP過程
假設(shè)位于U的用戶希望從S上(下)傳文件,通常用戶需要使用用戶FTP進(jìn)程和服務(wù)器通信,下面就是一個(gè)例子:
用戶發(fā)出的本地命令
解釋
ftp (host) multics
連接到S的端口L,建立控制連接
<---- 220 Service ready .
用戶名 Doe
need password.
USER Doe---->
<---- 331 用戶名正確
口令
PASS 口令---->
<---- 230 User logged in.
retrieve (local type) ASCII
(local pathname) test 1
(for. pathname) test.pl1
User-FTP opens local file in ASCII.
RETR test.pl1 ---->
<---- 150 文件狀態(tài)正常,將打開數(shù)據(jù)連接
服務(wù)器于端口U建立數(shù)據(jù)連接
文件傳輸中
<---- 226 關(guān)閉數(shù)據(jù)連接,文件傳輸正確
type Image
TYPE I ---->
<---- 200 Command OK
store (local type) image
(local pathname) file dump
(for.pathname) >udd>cn>fd
User-FTP opens local file in Image.
STOR >udd>cn>fd ---->
<---- 550 訪問拒絕
中止
QUIT ---->
服務(wù)器關(guān)閉所有連接
FTP控制連接通過用戶進(jìn)程端口U和服務(wù)器端口L建立,這里默認(rèn)的L=21。
新聞熱點(diǎn)
疑難解答
圖片精選