學(xué)好三方面掌握FTP協(xié)議的工作原理
前面我們已經(jīng)介紹過(guò)了有關(guān)FTP協(xié)議的基本內(nèi)容了。相信大家對(duì)這個(gè)協(xié)議也有所了解。為了進(jìn)一步夯實(shí)這部分基礎(chǔ)內(nèi)容。我們?cè)賮?lái)對(duì)FTP的工作流程、模式和方式來(lái)進(jìn)行針對(duì)性的講解。
FTP協(xié)議工作原理
FTP有兩個(gè)過(guò)程一個(gè)是控制連接,一個(gè)是數(shù)據(jù)傳輸。FTP協(xié)議不像HTTP協(xié)議一樣需要一個(gè)端口作為連接(默認(rèn)時(shí)HTTP端口是80,F(xiàn)TP端口是21)。FTP協(xié)議需要兩個(gè)端口,一個(gè)端口是作為控制連接端口,也就是FTP的21端口,用于發(fā)送指令給服務(wù)器以及等待服務(wù)器響應(yīng);另外一個(gè)端口用于數(shù)據(jù)傳輸端口,端口號(hào)為20(僅用PORT模式),是用建立數(shù)據(jù)傳輸通道的,主要作用是從客戶向服務(wù)器發(fā)送一個(gè)文件,從服務(wù)器向客戶發(fā)送一個(gè)文件,從服務(wù)器向客戶發(fā)送文件或目錄列表。
FTP協(xié)議的傳輸模式
FTP協(xié)議的任務(wù)是從一臺(tái)計(jì)算機(jī)將文件傳送到另一臺(tái)計(jì)算機(jī),它與這兩臺(tái)計(jì)算機(jī)所處的位置、聯(lián)接的方式、甚至是是否使用相同的操作系統(tǒng)無(wú)關(guān)。假設(shè)兩臺(tái)計(jì)算機(jī)通過(guò)ftp協(xié)議對(duì)話,并且能訪問(wèn)Internet, 你可以用ftp命令來(lái)傳輸文件。每種操作系統(tǒng)使用上有某一些細(xì)微差別,但是每種協(xié)議基本的命令結(jié)構(gòu)是相同的。
FTP的傳輸有兩種方式:ASCII傳輸模式和二進(jìn)制數(shù)據(jù)傳輸模式。
ASCII傳輸方式假定用戶正在拷貝的文件包含的簡(jiǎn)單ASCII碼文本,如果在遠(yuǎn)程機(jī)器上運(yùn)行的不是UNIX,當(dāng)文件傳輸時(shí)ftp通常會(huì)自動(dòng)地調(diào)整文件的內(nèi)容以便于把文件解釋成另外那臺(tái)計(jì)算機(jī)存儲(chǔ)文本文件的格式。但是常常有這樣的情況,用戶正在傳輸?shù)奈募牟皇俏谋疚募?,它們可能是程序,?shù)據(jù)庫(kù),字處理文件或者壓縮文件(盡管字處理文件包含的大部分是文本,其中也包含有指示頁(yè)尺寸,字庫(kù)等信息的非打印字符)。在拷貝任何非文本文件之前,用binary 命令告訴ftp逐字拷貝,不要對(duì)這些文件進(jìn)行處理,這也是下面要講的二進(jìn)制傳輸。
二進(jìn)制傳輸模式在二進(jìn)制傳輸中,保存文件的位序,以便原始和拷貝的是逐位一一對(duì)應(yīng)的。即使目的地機(jī)器上包含位序列的文件是沒(méi)意義的。例如,macintosh以二進(jìn)制方式傳送可執(zhí)行文件到Windows系統(tǒng),在對(duì)方系統(tǒng)上,此文件不能執(zhí)行。如果你在ASCII方式下傳輸二進(jìn)制文件,即使不需要也仍會(huì)轉(zhuǎn)譯。這會(huì)使傳輸稍微變慢 ,也會(huì)損壞數(shù)據(jù),使文件變得不能用。(在大多數(shù)計(jì)算機(jī)上,ASCII方式一般假設(shè)每一字符的***有效位無(wú)意義,因?yàn)锳SCII字符組合不使用它。如果你傳輸二進(jìn)制文件,所有的位都是重要的。)如果你知道這兩臺(tái)機(jī)器是同樣的,則二進(jìn)制方式對(duì)文本文件和數(shù)據(jù)文件都是有效的。
FTP協(xié)議的工作方式
FTP支持兩種模式,一種方式叫做Standard (也就是 PORT方式,主動(dòng)方式),一種是 Passive (也就是PASV,被動(dòng)方式)。
Standard模式 FTP的客戶端發(fā)送 PORT 命令到FTP服務(wù)器。Passive模式FTP的客戶端發(fā)送 PASV命令到 FTP Server。
下面介紹一個(gè)這兩種方式的工作原理:
Port模式FTP客戶端首先動(dòng)態(tài)的選擇一個(gè)端口(一般是1024以上的)和FTP服務(wù)器的TCP 21端口建立連接,通過(guò)這個(gè)通道發(fā)送命令,客戶端需要接收數(shù)據(jù)的時(shí)候在這個(gè)通道上發(fā)送PORT命令。
PORT命令包含了客戶端用什么端口接收數(shù)據(jù)。在傳送數(shù)據(jù)的時(shí)候,服務(wù)器端通過(guò)自己的TCP 20端口連接至客戶端的指定端口發(fā)送數(shù)據(jù)。
FTP server必須和客戶端建立一個(gè)新的連接用來(lái)傳送數(shù)據(jù)。
Passive模式在建立控制通道的時(shí)候和Standard模式類(lèi)似,但建立連接后發(fā)送的不是Port命令,而是Pasv命令。FTP協(xié)議服務(wù)器收到Pasv命令后,隨機(jī)打開(kāi)一個(gè)高端端口(端口號(hào)大于1024)并且通知客戶端在這個(gè)端口上傳送數(shù)據(jù)的請(qǐng)求,客戶端連接FTP服務(wù)器此端口,然后FTP服務(wù)器將通過(guò)這個(gè)端口進(jìn)行數(shù)據(jù)的傳送,這個(gè)時(shí)候FTP server不再需要建立一個(gè)新的和客戶端之間的連接。很多防火墻在設(shè)置的時(shí)候都是不允許接受外部發(fā)起的連接的,所以許多位于防火墻后或內(nèi)網(wǎng)的FTP服務(wù)器不支持PASV模式,因?yàn)榭蛻舳藷o(wú)法穿過(guò)防火墻打開(kāi)FTP服務(wù)器的高端端口;而許多內(nèi)網(wǎng)的客戶端不能用PORT模式登陸FTP服務(wù)器,因?yàn)閺姆?wù)器的TCP 20無(wú)法和內(nèi)部網(wǎng)絡(luò)的客戶端建立一個(gè)新的連接,造成無(wú)法工作。