TCP/IP協議中,FTP標準命令TCP端口號爲21,Port方式數據端口爲20。FTP協議的任務是從一臺計算機將文件傳送到另外一臺計算機,它與這兩臺計算機所處的位置、聯接的方式、甚至是是否使用相同的操做系統無關。假設兩臺計算機經過ftp協議對話,而且能訪問Internet, 你能夠用ftp命令來傳輸文件。每種操做系統使用上有某一些細微差異,可是每種協議基本的命令結構是相同的。數據庫
FTP的傳輸有兩種方式:ASCII傳輸模式和二進制數據傳輸模式。服務器
1.ASCII傳輸方式:假定用戶正在拷貝的文件包含的簡單ASCII碼文本,若是在遠程機器上運行的不是UNIX,當文件傳輸時ftp一般會自動地調整文件的內容以便於把文件解釋成另外那臺計算機存儲文本文件的格式。網絡
可是經常有這樣的狀況,用戶正在傳輸的文件包含的不是文本文件,它們多是程序,數據庫,字處理文件或者壓縮文件(儘管字處理文件包含的大部分是文本,其中也包含有指示頁尺寸,字庫等信息的非打印字符)。在拷貝任何非文本文件以前,用binary 命令告訴ftp逐字拷貝,不要對這些文件進行處理,這也是下面要講的二進制傳輸。ide
2.二進制傳輸模式:在二進制傳輸中,保存文件的位序,以便原始和拷貝的是逐位一一對應的。即便目的地機器上包含位序列的文件是沒意義的。例如,macintosh以二進制方式傳送可執行文件到Windows系統,在對方系統上,此文件不能執行。spa
若是你在ASCII方式下傳輸二進制文件,即便不須要也仍會轉譯。這會使傳輸稍微變慢 ,也會損壞數據,使文件變得不能用。(在大多數計算機上,ASCII方式通常假設每一字符的第一有效位無心義,由於ASCII字符組合不使用它。若是你傳輸二進制文件,全部的位都是重要的。)若是你知道這兩臺機器是一樣的,則二進制方式對文本文件和數據文件都是有效的。操作系統
5. FTP的工做方式orm
FTP支持兩種模式,一種方式叫作Standard (也就是 PORT方式,主動方式),一種是 Passive (也就是PASV,被動方式)。 Standard模式 FTP的客戶端發送 PORT 命令到FTP服務器。Passive模式FTP的客戶端發送 PASV命令到 FTP Server。server
下面介紹一個這兩種方式的工做原理:ci
Port模式FTP 客戶端首先和FTP服務器的TCP 21端口創建鏈接,經過這個通道發送命令,客戶端須要接收數據的時候在這個通道上發送PORT命令。 PORT命令包含了客戶端用什麼端口接收數據。在傳送數據的時候,服務器端經過本身的TCP 20端口鏈接至客戶端的指定端口發送數據。 FTP server必須和客戶端創建一個新的鏈接用來傳送數據。(能夠看到在這種方式下是客戶端和服務器創建控制鏈接,服務器向客戶端創建數據鏈接,其中,客戶端的控制鏈接和數據鏈接的端口號是大於1024的兩個端口號(臨時端口),而FTP服務器的數據端口爲20,控制端口爲21)開發
Passive模式在創建控制通道的時候和Standard模式相似,但創建鏈接後發送的不是Port命令,而是Pasv命令。FTP服務器收到Pasv命令後,隨機打開一個臨時端口(也叫自由端口,端口號大於1023小於65535)而且通知客戶端在這個端口上傳送數據的請求,客戶端鏈接FTP服務器此端口,而後FTP服務器將經過這個端口進行數據的傳送,這個時候FTP server再也不須要創建一個新的和客戶端之間的鏈接。(能夠看到這種狀況下的鏈接都是由客戶端向服務器發起的,與下面所說的「爲了解決服務器發起到客戶的鏈接的問題,人們開發了一種不一樣的FTP鏈接方式。這就是所謂的被動方式」相對應,而服務器端的數據端口是臨時端口,而不是常規的20)
不少防火牆在設置的時候都是不容許接受外部發起的鏈接的,因此許多位於防火牆後或內網的FTP服務器不支持PASV模式,由於客戶端沒法穿過防火牆打開FTP服務器的高端端口;而許多內網的客戶端不能用PORT模式登錄FTP服務器,由於從服務器的TCP 20沒法和內部網絡的客戶端創建一個新的鏈接,形成沒法工做。