FTP基礎(chǔ)知識
FTP是File Transfer Protocol(文件傳輸協(xié)議)的縮寫,用來在兩臺計算機(jī)之間互相傳送文件。相比于HTTP,FTP協(xié)議要復(fù)雜得多。復(fù)雜的原因,是因為FTP協(xié)議要用 到兩個TCP連接,一個是命令鏈路,用來在FTP客戶端與服務(wù)器之間傳遞命令;另一個是數(shù)據(jù)鏈路,用來上傳或下載數(shù)據(jù)。
FTP協(xié)議有兩種工作方式:PORT方式和PASV方式,中文意思為主動式和被動式。
PORT(主動)方式的連接過程是:客戶端向服務(wù)器的FTP端口(默認(rèn)是21)發(fā)送連接請求,服務(wù)器接受連接,建立一條命令鏈路。
當(dāng)需要傳送數(shù)據(jù)時,客戶端在命令鏈路上用 PORT命令告訴服務(wù)器:“我打開了****端口,你過來連接我”。于是服務(wù)器從20端口向客戶端的****端口發(fā)送連接請求,建立一條數(shù)據(jù)鏈路來傳送數(shù)據(jù)。
PASV(被動)方式的連接過程是:客戶端向服務(wù)器的FTP端口(默認(rèn)是21)發(fā)送連接請求,服務(wù)器接受連接,建立一條命令鏈路。
當(dāng)需要傳送數(shù)據(jù)時,服務(wù)器在命令鏈路上用 PASV命令告訴客戶端:“我打開了****端口,你過來連接我”。于是客戶端向服務(wù)器的****端口發(fā)送連接請求,建立一條數(shù)據(jù)鏈路來傳送數(shù)據(jù)。
從上面可以看出,兩種方式的命令鏈路連接方法是一樣的,而數(shù)據(jù)鏈路的建立方法就完全不同。而FTP的復(fù)雜性就在于此。
FTP服務(wù)器端的注意事項
一、FTP服務(wù)器是公網(wǎng)IP,用公網(wǎng)動態(tài)域名;或是內(nèi)網(wǎng)IP,用內(nèi)網(wǎng)專業(yè)版TrueHost
1、服務(wù)器如果安裝了防火墻,請記住要在防火墻上打開FTP端口(默認(rèn)是21)。
2、所有FTP服務(wù)器軟件都支持PORT方式。至于PASV方式,大部分FTP服務(wù)器軟件都支持。支持PASV方式的FTP服務(wù)器軟件,也可以設(shè)置為只工作在PORT方式上。
3、為了PASV方式能正常工作,需要在FTP服務(wù)器軟件上為PASV方式指定可用的端口范圍(設(shè)置方法)。此外,還要在服務(wù)器的防火墻上打開這些端口。當(dāng)客戶端以PASV方式連接服務(wù)器的時候,服務(wù)器就會在這個端口范圍里挑選一個端口出來,給客戶端連接。
二、FTP服務(wù)器是內(nèi)網(wǎng)IP,用內(nèi)網(wǎng)動態(tài)域名標(biāo)準(zhǔn)版cm*natpro*y
這種情況下,FTP服務(wù)器不需要做特殊設(shè)置,只要支持PASV方式就可以了。大部分FTP服務(wù)器軟件都支持PASV方式。
FTP客戶端的注意事項
請注意:選擇用PASV方式還是PORT方式登錄FTP服務(wù)器,選擇權(quán)在FTP客戶端,而不是在FTP服務(wù)器。
一、客戶端只有內(nèi)網(wǎng)IP,沒有公網(wǎng)IP
從 上面的FTP基礎(chǔ)知識可知,如果用PORT方式,因為客戶端沒有公網(wǎng)IP,FTP將無法連接客戶端建立數(shù)據(jù)鏈路。因此,在這種情況下,客戶端必須要用 PASV方式,才能連接FTP服務(wù)器。大部分FTP站長發(fā)現(xiàn)自己的服務(wù)器有人能登錄上,有人登錄不上,典型的錯誤原因就是因為客戶端沒有公網(wǎng)IP,但用了 IE作為FTP客戶端來登錄(IE默認(rèn)使用PORT方式)。
二、客戶端有公網(wǎng)IP,但安裝了防火墻
如果用PASV方 式登錄FTP服務(wù)器,因為建立數(shù)據(jù)鏈路的時候,是由客戶端向服務(wù)器發(fā)送連接請求,沒有問題。反過來,如果用PORT方式登錄FTP服務(wù)器,因為建立數(shù)據(jù)鏈 路的時候,是由服務(wù)器向客戶端發(fā)送連接請求,此時連接請求會被防火墻攔截。如果要用PORT方式登錄FTP服務(wù)器,請在防火墻上打開 1024以上的高端端口。
三、連接用內(nèi)網(wǎng)標(biāo)準(zhǔn)版cm*natpro*y搭建的FTP服務(wù),必須要用PASV方式。連接任何公網(wǎng)FTP服務(wù)器、或用內(nèi)網(wǎng)專業(yè)版TrueHost搭建的FTP服務(wù)器,PORT方式和PASV方式都可以使用。
當(dāng)然,使用PORT方式的時候,還要滿足上面的兩個條件。
四、常見的FTP客戶端軟件PORT方式與PASV方式的切換方法。
大部分FTP客戶端默認(rèn)使用PASV方式。IE默認(rèn)使用PORT方式。
在大部分FTP客戶端的設(shè)置里,常見到的字眼都是“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:
工具 -> 選項 -> 代理服務(wù)器 -> 直接連接 -> 編輯 -> “PASV模式”
FlashFTP:
選項 -> 參數(shù)選擇 -> 代理/防火墻/標(biāo)識 -> “使用被動模式”
或
站點管理 -> 對應(yīng)站點 -> 選項 -> “使用被動模式”
或
快速連接 -> 切換 -> “使用被動模式”
LeechFTP:
Option -> Firewall -> Do not Use
五、請盡量不要用IE作為FTP客戶端
IE只是個很粗糙的FTP客戶端工具。首先,IE6.0以下的版本不支持PASV方式;其次,IE在登錄FTP的時候,看不到登錄信息。在登錄出錯的時候,無法找到錯誤的原因。在測試自己的FTP網(wǎng)站的時候,強(qiáng)烈建議不要使用IE。
FTP建站的詳細(xì)配置過程
請參考這個網(wǎng)頁的說明來配置:
使用Serv-U建立FTP網(wǎng)站
高級話題
①、為什么沒有公網(wǎng)IP,也能使用PORT方式登錄FTP?
NAT 網(wǎng)關(guān)的工作方式是在TCP/IP數(shù)據(jù)包的包頭里找局域網(wǎng)的源地址和源端口,替換成網(wǎng)關(guān)的地址和端口。對數(shù)據(jù)包里的內(nèi)容,是不會改變的。而使用PORT方式 登錄FTP的時候,IP地址與端口信息是在數(shù)據(jù)包里面的,而不是在包頭。因此,沒有公網(wǎng)IP,使用PORT方式是無法從internet上的ftp服務(wù)器 下載數(shù)據(jù)的。
但是,極少數(shù)的NAT網(wǎng)關(guān)也支持PORT方式。這些NAT網(wǎng)關(guān)連數(shù)據(jù)包里面的內(nèi)容都掃描,掃描到 PORT指令后會替換PORT方式的IP和端口。在這種NAT網(wǎng)關(guān)下面,用PORT方式就沒問題了。不過,這些網(wǎng)關(guān)也只掃描21端口的數(shù)據(jù)包,如果FTP 服務(wù)器不是用默認(rèn)的21端口,也無法使用PORT方式。
②、內(nèi)網(wǎng)可以用PORT訪問其他FTP,為什么不能用PORT訪問自己的TrueHost FTP?
下面要討論的問題,只是為了說明一些原理,是不影響實際使用的。如果您沒有興趣深究這些原理,不必花時間看。
內(nèi)網(wǎng)用戶通過支持PORT方式的NAT網(wǎng)關(guān),訪問自己本機(jī)利用TrueHost建立的FTP服務(wù)器,FTP命令鏈路的建立過程如下:
FTP客戶端
10.10.0.1
端口*** <==> ISP NAT網(wǎng)關(guān)
61.144.1.2
端口**** <==> TH服務(wù)器
*.*.*.*
端口21 <==> TH客戶端 <==> 用戶FTP服務(wù)器
10.10.0.1
端口21
FTP客戶端通過ISP的NAT網(wǎng)關(guān)、科邁TrueHost服務(wù)器、TrueHost客戶端,連接用戶本機(jī)的FTP服務(wù)器的21端口。
當(dāng)需要下載數(shù)據(jù)的時候,FTP客戶端通過這條命令鏈路,向FTP服務(wù)器發(fā)送PORT命令。假設(shè)命令為:
PORT 10,10,0,1,30,4 (即IP=10.10.0.1 端口=30*256+4=7684)
當(dāng)命令通過ISP的NAT網(wǎng)關(guān)的時候,NAT網(wǎng)關(guān)判斷目的端口是21,并且是PORT命令,于是,修改命令里的IP和端口,替換為自己的IP和端口,比如:
PORT 61,144,1,2,50,6 (即IP=61.144.1.2 端口=50*256+6=12806)
用戶的FTP服務(wù)器最終收到的是上面這個PORT命令。于是,FTP服務(wù)器向這個IP和端口發(fā)送連接請求,建立數(shù)據(jù)鏈路。
用戶FTP服務(wù)器
10.10.0.1
端口20 <==> ISP NAT網(wǎng)關(guān)
61.144.1.2
端口12806 <==> FTP客戶端
10.10.0.1
端口7684
但 是,因為NAT網(wǎng)關(guān)的公網(wǎng)IP只能接收外來的連接請求。就是說,61.144.1.2:12806只能接收其他公網(wǎng)IP的連接請求,對于從NAT內(nèi)部 (10.10.0.1:20)發(fā)起的連接請求,是無法建立連接的。為什么?原因很簡單,因為內(nèi)網(wǎng)IP要訪問外網(wǎng),必須要通過NAT建立映射。于是FTP數(shù) 據(jù)鏈路無法建立。于是,用戶無法在自己的機(jī)器上通過21端口訪問自己的TrueHost FTP。
我們再來看看,如果FTP端口不是 21,比如是22,會發(fā)生什么情況呢?在FTP客戶端發(fā)送PORT命令的時候,NAT網(wǎng)關(guān)檢測到目標(biāo)端口是22,因為支持PORT的 NAT網(wǎng)關(guān)只監(jiān)視目的端口是21的數(shù)據(jù)包,發(fā)現(xiàn)目的端口是22的數(shù)據(jù)包,不做任何處理,完全放行。于是FTP服務(wù)器收到的PORT命令依然是PORT 10,10,0,1,30,4。于是FTP服務(wù)器向這個IP和端口發(fā)送連接請求。
用戶FTP服務(wù)器
10.10.0.1
端口20 <==> FTP客戶端
10.10.0.1
端口7684
這種情況下命令鏈路就可以建立起來了。而且是等于本機(jī)連接本機(jī),速度飛快。
綜上所述,內(nèi)網(wǎng)用戶無法用PORT方式通過21端口訪問自己的TrueHost FTP服務(wù)器。如果FTP端口不是21,則可以訪問,而且實際上是本機(jī)連接本機(jī)。
function forumhottag_callback(data){ tags = data; } parsetag();
function forumhottag_callback(data){ tags = data; } parsetag();