FTP是File Transfer Protocol(檔案傳輸協定)的縮寫,用來在兩台計算機之間互相傳送檔案。相比于HTTP,FTP協定要複雜得多。複雜的原因,是因為FTP協定要用到兩個TCP連接配接,一個是指令鍊路,用來在FTP用戶端與伺服器之間傳遞指令;另一個是資料鍊路,用來上傳或下載下傳資料。
FTP協定有兩種工作方式:PORT方式和PASV方式,中文意思為主動式和被動式。
PORT(主動)方式的連接配接過程是:用戶端向伺服器的FTP端口(預設是21)發送連接配接請求,伺服器接受連接配接,建立一條指令鍊路。
當需要傳送資料時,用戶端在指令鍊路上用 PORT指令告訴伺服器:“我打開了****端口,你過來連接配接我”。于是伺服器從20端口向用戶端的****端口發送連接配接請求,建立一條資料鍊路來傳送資料。
PASV(被動)方式的連接配接過程是:用戶端向伺服器的FTP端口(預設是21)發送連接配接請求,伺服器接受連接配接,建立一條指令鍊路。
當需要傳送資料時,伺服器在指令鍊路上用 PASV指令告訴用戶端:“我打開了****端口,你過來連接配接我”。于是用戶端向伺服器的****端口發送連接配接請求,建立一條資料鍊路來傳送資料。
從上面可以看出,兩種方式的指令鍊路連接配接方法是一樣的,而資料鍊路的建立方法就完全不同。而FTP的複雜性就在于此。
FTP伺服器端的注意事項
一、FTP伺服器是公網IP,用公網動态域名;或是内網IP,用内網專業版TrueHost
1、伺服器如果安裝了防火牆,請記住要在防火牆上打開FTP端口(預設是21)。
2、所有FTP伺服器軟體都支援PORT方式。至于PASV方式,大部分FTP伺服器軟體都支援。支援PASV方式的FTP伺服器軟體,也可以設定為隻工作在PORT方式上。
3、為了PASV方式能正常工作,需要在FTP伺服器軟體上為PASV方式指定可用的端口範圍(設定方法)。此外,還要在伺服器的防火牆上打開這些端口。當用戶端以PASV方式連接配接伺服器的時候,伺服器就會在這個端口範圍裡挑選一個端口出來,給用戶端連接配接。
二、FTP伺服器是内網IP,用内網動态域名标準版cm*natpro*y
這種情況下,FTP伺服器不需要做特殊設定,隻要支援PASV方式就可以了。大部分FTP伺服器軟體都支援PASV方式。
FTP用戶端的注意事項
請注意:選擇用PASV方式還是PORT方式登入FTP伺服器,選擇權在FTP用戶端,而不是在FTP伺服器。
一、用戶端隻有内網IP,沒有公網IP
從上面的FTP基礎知識可知,如果用PORT方式,因為用戶端沒有公網IP,FTP将無法連接配接用戶端建立資料鍊路。是以,在這種情況下,用戶端必須要用PASV方式,才能連接配接FTP伺服器。大部分FTP站長發現自己的伺服器有人能登入上,有人登入不上,典型的錯誤原因就是因為用戶端沒有公網IP,但用了IE作為FTP用戶端來登入(IE預設使用PORT方式)。
作為FTP站長,有必要掌握FTP的基礎知識,然後指導您的朋友如何正确登入您的FTP。
二、用戶端有公網IP,但安裝了防火牆
如果用PASV方式登入FTP伺服器,因為建立資料鍊路的時候,是由用戶端向伺服器發送連接配接請求,沒有問題。反過來,如果用PORT方式登入FTP伺服器,因為建立資料鍊路的時候,是由伺服器向用戶端發送連接配接請求,此時連接配接請求會被防火牆攔截。如果要用PORT方式登入FTP伺服器,請在防火牆上打開 1024以上的高端端口。
三、連接配接用内網标準版cm*natpro*y搭建的FTP服務,必須要用PASV方式。連接配接任何公網FTP伺服器、或用内網專業版TrueHost搭建的FTP伺服器,PORT方式和PASV方式都可以使用。
當然,使用PORT方式的時候,還要滿足上面的兩個條件。
四、常見的FTP用戶端軟體PORT方式與PASV方式的切換方法。
大部分FTP用戶端預設使用PASV方式。IE預設使用PORT方式。
在大部分FTP用戶端的設定裡,常見到的字眼都是“PASV”或“被動模式”,極少見到“PORT”或“主動模式”等字眼。因為FTP的登入方式隻有兩種:PORT和PASV,取消PASV方式,就意味着使用PORT方式。
IE:
工具 -> Internet選項 -> 進階 -> “使用被動FTP”(需要IE6.0以上才支援)。
CuteFTP:
Edit -> Setting -> Connection -> Firewall -> “PASV Mode”
或
File -> Site Manager,在左邊選中站點 -> Edit -> “Use PASV mode”
FlashGet:
工具 -> 選項 -> 代理伺服器 -> 直接連接配接 -> 編輯 -> “PASV模式”
FlashFTP:
選項 -> 參數選擇 -> 代理/防火牆/辨別 -> “使用被動模式”
站點管理 -> 對應站點 -> 選項 -> “使用被動模式”
快速連接配接 -> 切換 -> “使用被動模式”
LeechFTP:
Option -> Firewall -> Do not Use
五、請盡量不要用IE作為FTP用戶端
IE隻是個很粗糙的FTP用戶端工具。首先,IE6.0以下的版本不支援PASV方式;其次,IE在登入FTP的時候,看不到登入資訊。在登入出錯的時候,無法找到錯誤的原因。在測試自己的FTP網站的時候,強烈建議不要使用IE。
FTP建站的詳細配置過程
請參考這個網頁的說明來配置:
使用Serv-U建立FTP網站
進階話題
一、為什麼沒有公網IP,也能使用PORT方式登入FTP?
NAT 網關的工作方式是在TCP/IP資料包的標頭裡找區域網路的源位址和源端口,替換成網關的位址和端口。對資料包裡的内容,是不會改變的。而使用PORT方式登入FTP的時候,IP位址與端口資訊是在資料包裡面的,而不是在標頭。是以,沒有公網IP,使用PORT方式是無法從internet上的ftp伺服器下載下傳資料的。
但是,極少數的NAT網關也支援PORT方式。這些NAT網關連資料包裡面的内容都掃描,掃描到 PORT指令後會替換PORT方式的IP和端口。在這種NAT網關下面,用PORT方式就沒問題了。不過,這些網關也隻掃描21端口的資料包,如果FTP 伺服器不是用預設的21端口,也無法使用PORT方式。
二、内網可以用PORT通路其他FTP,為什麼不能用PORT通路自己的TrueHost FTP?
下面要讨論的問題,隻是為了說明一些原理,是不影響實際使用的。如果您沒有興趣深究這些原理,不必花時間看。
内網使用者通過支援PORT方式的NAT網關,通路自己本機利用TrueHost建立的FTP伺服器,FTP指令鍊路的建立過程如下:
FTP用戶端
10.10.0.1
端口*** <==> ISP NAT網關
61.144.1.2
端口**** <==> TH伺服器
*.*.*.*
端口21 <==> TH用戶端 <==> 使用者FTP伺服器
端口21
FTP用戶端通過ISP的NAT網關、科邁TrueHost伺服器、TrueHost用戶端,連接配接使用者本機的FTP伺服器的21端口。
當需要下載下傳資料的時候,FTP用戶端通過這條指令鍊路,向FTP伺服器發送PORT指令。假設指令為:
PORT 10,10,0,1,30,4 (即IP=10.10.0.1 端口=30*256+4=7684)
當指令通過ISP的NAT網關的時候,NAT網關判斷目的端口是21,并且是PORT指令,于是,修改指令裡的IP和端口,替換為自己的IP和端口,比如:
PORT 61,144,1,2,50,6 (即IP=61.144.1.2 端口=50*256+6=12806)
使用者的FTP伺服器最終收到的是上面這個PORT指令。于是,FTP伺服器向這個IP和端口發送連接配接請求,建立資料鍊路。
使用者FTP伺服器
端口20 <==> ISP NAT網關
端口12806 <==> FTP用戶端
端口7684
但是,因為NAT網關的公網IP隻能接收外來的連接配接請求。就是說,61.144.1.2:12806隻能接收其他公網IP的連接配接請求,對于從NAT内部(10.10.0.1:20)發起的連接配接請求,是無法建立連接配接的。為什麼?原因很簡單,因為内網IP要通路外網,必須要通過NAT建立映射。于是FTP資料鍊路無法建立。于是,使用者無法在自己的機器上通過21端口通路自己的TrueHost FTP。
我們再來看看,如果FTP端口不是21,比如是22,會發生什麼情況呢?在FTP用戶端發送PORT指令的時候,NAT網關檢測到目标端口是22,因為支援PORT的 NAT網關隻監視目的端口是21的資料包,發現目的端口是22的資料包,不做任何處理,完全放行。于是FTP伺服器收到的PORT指令依然是PORT 10,10,0,1,30,4。于是FTP伺服器向這個IP和端口發送連接配接請求。
端口20 <==> FTP用戶端
這種情況下指令鍊路就可以建立起來了。而且是等于本機連接配接本機,速度飛快。
綜上所述,内網使用者無法用PORT方式通過21端口通路自己的TrueHost FTP伺服器。如果FTP端口不是21,則可以通路,而且實際上是本機連接配接本機。
上面的文字,僅僅是為了說明一些原理,不影響實際使用。如果本機通路本機,還要通過FTP的話,就有畫蛇添足之嫌了
本文出自 51CTO.COM技術部落格