寫這篇文章主要是因為在使用ftp的時候有時候上傳文件會失敗,然后就卡住很久,原因就是默認(rèn)主動模式受限于客戶端防火墻的限制,有時候會導(dǎo)致上傳文件失敗所以整理了區(qū)別了一下兩種。
一、FTP的兩種工作模式
FTP兩種鏈接模式:主動模式(Active FTP)和被動模式(Passive FTP)
在主動模式下,F(xiàn)TP客戶端隨機(jī)開啟一個大于1024的端口N向服務(wù)器的21號端口發(fā)起連接,然后開放N+1號端口進(jìn)行監(jiān)聽,并向服務(wù)器發(fā)出PORT N+1命令。服務(wù)器接收到命令后,會用其本地的FTP數(shù)據(jù)端口(通常是20)來連接客戶端指定的端口N+1,進(jìn)行數(shù)據(jù)傳輸。
在被動模式下,F(xiàn)TP客戶端隨機(jī)開啟一個大于1024的端口N向服務(wù)器的21號端口發(fā)起連接,同時會開啟N+1號端口。然后向服務(wù)器發(fā)送PASV命令,通知服務(wù)器自己處于被動模式。服務(wù)器收到命令后,會開放一個大于1024的端口P進(jìn)行監(jiān)聽,然后用PORT P命令通知客戶端,自己的數(shù)據(jù)端口是P??蛻舳耸盏矫詈?,會通過N+1號端口連接服務(wù)器的端口P,然后在兩個端口之間進(jìn)行數(shù)據(jù)傳輸。
總的來說,主動模式的FTP是指服務(wù)器主動連接客戶端的數(shù)據(jù)端口,被動模式的FTP是指服務(wù)器被動地等待客戶端連接自己的數(shù)據(jù)端口。
被動模式的FTP通常用在處于防火墻之后的FTP客戶訪問外界FTP服務(wù)器的情況,因為在這種情況下,防火墻通常配置為不允許外界訪問防火墻之后的主機(jī),而只允許由防火墻之后的主機(jī)發(fā)起的連接請求通過。因此,在這種情況下不能使用主動模式的FTP傳輸,而被動模式的FTP可以良好的工作。
一般連接FTP客戶端軟件的連接模式默認(rèn)為Passive(被動連接)。即FTP客戶端向服務(wù)端口(默認(rèn)是21)發(fā)出連接請求,服務(wù)端接到請求后建立命令鏈路。然后服務(wù)端通過命令鏈路發(fā)消息告訴客戶端,服務(wù)端某個端口位于(1025—65535)之間開放,與客戶端建立起數(shù)據(jù)鏈路,從而客戶端可以進(jìn)行數(shù)據(jù)上傳與下載。這個被動指的是客戶端被動收到服務(wù)端的消息,才能開始傳輸。一般這樣的話,可能會受到服務(wù)端防火墻的阻隔。而主動模式,PORT即FTP客戶端向服務(wù)端口(默認(rèn)是21)發(fā)出連接請求,服務(wù)端接到請求后建立命令鏈路,這個過程與被動連接一樣。然后客戶端通過命令鏈路發(fā)消息告訴服務(wù)端,客戶端一般是20端口開放,服務(wù)端收到消息后連接該端口,建立起數(shù)據(jù)鏈路,從而進(jìn)行數(shù)據(jù)的上傳下載。這個主動是指客戶端主動開放20端口,并發(fā)起與服務(wù)端建立數(shù)據(jù)傳輸?shù)恼埱?。這種模式,可能受限于客戶端防火墻的限制,另外也不能用與代理上網(wǎng)時的FTP服務(wù),因為服務(wù)端收到客戶端請求后,他連接的代理服務(wù)器的端口。
二、FTP模式深入說明
主動FTP對FTP服務(wù)器的管理有利,但對客戶端的管理不利,因為FTP服務(wù)器企圖與客戶端的高位隨機(jī)端口建立連接,而這個端口很有可能被客戶端的防火墻阻塞掉。被動FTP對FTP客戶端的管理有利,但對服務(wù)器端的管理不利,因為客戶端要與服務(wù)器端建立兩個連接,其中一個連到一個高位隨機(jī)端口,而這個端口很有可能被服務(wù)器端的防火墻阻塞掉。
幸運(yùn)的是,有折衷的辦法。既然FTP服務(wù)器的管理員需要他們的服務(wù)器有最多的客戶連接,那么必須得支持被動FTP。我們可以通過為FTP服務(wù)器指定一個有限的端口范圍來減小服務(wù)器高位端口的暴露。這樣,不在這個范圍的任何端口會被服務(wù)器的防火墻阻塞。雖然這沒有消除所有針對服務(wù)器的危險,但它大大減少了危險。
簡而言之:主動模式(PORT)和被動模式(PASV)。主動模式是從服務(wù)器端向客戶端發(fā)起連接;被動模式是客戶端向服務(wù)器端發(fā)起連接。兩者的共同點(diǎn)是都使用21端口進(jìn)行用戶驗證及管理,差別在于傳送數(shù)據(jù)的方式不同,PORT模式的FTP服務(wù)器數(shù)據(jù)端口固定在20,而PASV模式則在1025-65535之間隨機(jī)。
通常我們使用ftp 都是默認(rèn)主動模式如何修改成被動模式,在連接的時候,有個選項目錄,在里面就有數(shù)據(jù)連接模式,我們在上傳遇到上傳失敗的時候,可以先試一下被動模式來試試是否是我們本地的防火墻原因?qū)е碌纳蟼飨螺d失敗,也算是一個使用ftp的小細(xì)節(jié)。