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