您是否正准備搭建自己的FTP網站?您知道FTP協議的工作機制嗎?您知道什么是PORT方式?什么是PASV方式嗎?如果您不知道,或沒有完全掌握,請您坐下來,花一點點時間,細心讀完這篇文章。所謂磨刀不誤砍柴功,掌握這些基礎知識,會令您事半功倍。否則,很可能折騰幾天,最后一事無成。
FTP基礎知識
FTP是File Transfer Protocol(文件傳輸協議)的縮寫,用來在兩台計算機之間互相傳送文件。相比於HTTP,FTP協議要復雜得多。復雜的原因,是因為FTP協議要用到兩個TCP連接,一個是命令鏈路,用來在FTP客戶端與服務器之間傳遞命令;另一個是數據鏈路,用來上傳或下載數據。
FTP協議有兩種工作方式:PORT方式和PASV方式,中文意思為主動式和被動式。
PORT(主動)方式的連接過程是:客戶端向服務器的FTP端口(默認是21)發送連接請求,服務器接受連接,建立一條命令鏈路。當需要傳送數據時,客戶端在命令鏈路上用PORT命令告訴服務器:“我打開了XXXX端口,你過來連接我”。於是服務器從20端口向客戶端的XXXX端口發送連接請求,建立一條數據鏈路來傳送數據。
PASV(被動)方式的連接過程是:客戶端向服務器的FTP端口(默認是21)發送連接請求,服務器接受連接,建立一條命令鏈路。當需要傳送數據時,服務器在命令鏈路上用PASV命令告訴客戶端:“我打開了XXXX端口,你過來連接我”。於是客戶端向服務器的XXXX端口發送連接請求,建立一條數據鏈路來傳送數據。
從上面可以看出,兩種方式的命令鏈路連接方法是一樣的,而數據鏈路的建立方法就完全不同。而FTP的復雜性就在於此。
FTP服務器端的注意事項
一、FTP服務器是公網IP,用公網動態域名;或是內網IP,在網關上開端口映射或用內網專業版TrueHost
1、服務器如果安裝了防火牆,請記住要在防火牆上打開FTP端口(默認是21)。
2、所有FTP服務器軟件都支持PORT方式。至於PASV方式,大部分FTP服務器軟件都支持。支持PASV方式的FTP服務器軟件,也可以設置為只工作在PORT方式上。
3、為了PASV方式能正常工作,需要在FTP服務器軟件上為PASV方式指定可用的端口范圍。此外,還要在服務器的防火牆上打開這些端口。當客戶端以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以上的高端端口。
四、常見的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模式”
FlashFXP:
選項 -> 參數選擇 -> 代理/防火牆/標識 -> “使用被動模式”
或
站點管理 -> 對應站點 -> 選項 -> “使用被動模式”
或
快速連接 -> 切換 -> “使用被動模式”
LeechFTP:
Option -> Firewall -> Do not Use
五、請盡量不要用IE作為FTP客戶端
IE只是個很粗糙的FTP客戶端工具。首先,IE6.0以下的版本不支持PASV方式;其次,IE在登錄FTP的時候,看不到登錄信息。在登錄出錯的時候,無法找到錯誤的原因。在測試自己的FTP網站的時候,強烈建議不要使用IE。
高級話題
一、為什么沒有公網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方式。
內網用端口映射方式建FTP的注意事項(原創)
根據上面的FTP原理,在只映射一個端口的情況下,只能要求來訪者使用PORT方式來訪問你的FTP服務器,但這樣的話就限制了內網用戶。
而如果映射很多個端口,就可以使用PASV方式了但還要從FTP服務器上作一些設置
比如,從網關上映射21端口和5000-5020端口到你的計算機21端口和5000-5020端口,在Serv-U的Local Server -> Settings -> Advanced -> PASV port range里,填入給PASV模式使用的端口范圍5000-5020,然后在你建立的域--設置--高級-允許被動模式數據傳輸,使用IP 里面填入你的網關在公網的IP地址。
還有,用端口映射方式建FTP是看不到來訪者的IP地址,只能看到網關在內網中的IP地址。(應該是這樣,但也不一定,畢竟我沒試過)這樣就不能限制一個IP的連接數了。