FTP的主動模式與被動模式
FTP服務器使用20和21兩個網絡端口與FTP客戶端進行通信。
FTP服務器的21端口用於傳輸FTP的控制命令,20端口用於傳輸文件數據。
FTP主動模式:
FTP客戶端向服務器的FTP控制端口(默認是21)發送連接請求,服務器接受連接,建立一條命令鏈路;當需要傳送數據時,客戶端在命令鏈路上用PORT的命令告訴服務器我開放了某端口,你過來連接我。於是服務器從20端口向客戶端的該端口發送連接請求,建立一條數據鏈路來傳送數據。在數據鏈路建立過程中是服務器主動請求,所以稱為主動模式。
當客戶端向服務端連接后,使用的是PORT模式,那么客戶端B會發送一
條命令告訴服務端(客戶端B在本地打開了一個端口N在等着你進行數據連接),當服務端收到這個Port命令后 就會向客戶端打開的那個端口N進行連接,這種數據連接就生成。
FTP被動模式:
FTP客戶端向服務器的FTP控制端口(默認21)發送連接請求,服務器接受連接,建立一條命令鏈路;當需要傳送數據時,服務器在命令鏈路上用PASV命令告訴客戶端,我打開了某端口,你過來連我。於是客戶端向服務器的該端口發送連接請求,建立一條數據鏈路來傳送數據。在數據鏈路建立的過程中是服務器被動等待客戶機的請求,所以稱被動模式。
由上面幾點可以看出,FTP服務器的主動與被動模式是以FTP服務器進行數據傳送連接的主動或被動為依據的。
對於FTP服務器與客戶機之間存在的網絡防火牆,不論是服務器側還是客戶機側的網 絡防火牆設置策略都要保證FTP服務器和客戶端之間能夠正常建立命令鏈路和數據鏈路。
當客戶端B向服務端連接后,使用的是PASV模式,服務端會發信息給客戶端,這個信息是(服務端在本地打開了一個端口M,你現在去連接我吧),當客戶端收到這個信息后,就可以向服務端的M端口進行連接,連接成功后,數據連接也建立了。
主動模式下:
客戶機 與 服務器之間建立連接時,客戶機是大於1024的端口上,服務器是 20 端口。
客戶機的端口是大於1024的,而服務器的端口是 21 端口接收請求,而是 20 端口給客戶機回應。
允許FTP客戶機從大於1024的端口連接服務器的21端口.
允許FTP服務器從21端口回應FTP客戶機中大於1024端口的網絡連接.
允許FTP服務器從20端口主動連接FTP客戶機中大於1024的端口
允許FTP客戶機從大於1024的端口回應來自FTP服務器的20端口的網絡連接.
被動模式下:
客戶機 與 服務器之間建立連接都是在大於1024的端口上的。
客戶機的端口是大於1024的,而服務器的端口是 21 端口接收請求,而是 從大於1024 端口給客戶機回應。
允許FTP客戶機從大於1024的端口連接服務器的21端口.
允許FTP服務器從21端口回應FTP客戶機中大於1024端口的網絡連接.
允計FTP客戶機從大於1024的端口連接FTP服務器的大於1024端口.
允許FTP服務器從大於1024的端口回應來自FTP客戶機大於1024端口的網絡連接
client開啟大於1024(21吧)的X端口連接服務器的21(命令端口),同時開啟X+1端口
當21號端口連接成功后,client會發送PASV命令,通知服務器自己處於被動模式,服務器收到這個消息后,就會開放一個大於1024的端口Y通知client,client接到通知后就會用X+1來連接服務器的Y端口,簡單的說就是client主動連接服務器 。
主動與被動FTP優缺點的簡要總結:
主動FTP對FTP服務器的管理有利,但對客戶端的管理不利。因為FTP服務器企圖與客戶端的高位隨機端口建立連接,而這個端口很有可能被客戶端的防火牆阻塞掉。
被動FTP對FTP客戶端的管理有利,但對服務器端的管理不利。因為客戶端要與服務器端建立兩個連接,其中一個連到一個高位隨機端口,而這個端口很有可能被服務器端的防火牆阻塞掉。
幸運的是,有折衷的辦法。既然FTP服務器的管理員需要他們的服務器有最多的客戶連接,那么必須得支持被動FTP。我們可以通過為FTP服務器指定一個有限的端口范圍來減小服務器高位端口的暴露。這樣,不在這個范圍的任何端口會被服務器的防火牆阻塞。雖然這沒有消除所有針對服務器的危險,但它大大減少了危險。
FTP主動與被動的好處和壞處:
在ISA(工業標准架構體系Industry Standard Architecture是IBM PC兼容機上的一種總線 )的情況,如果采用被動模式,由於IIS是完全隨機的選擇一個端口,並告知客戶,然后客戶進行主動連接,這就意味着在ISA上,你要讓所有的端口都允許動態入站連接才行,這樣肯定不行,因為太危險了,等於打開了所有的端口連。
如果采用主動模式(PORT Mode),IIS選擇好端口后,主動與客戶進行連接,這時候不需要像PASV模式那樣打開所有的動態入站連接,而且正好相反,我們需要打開所有的動態出站連接即可,安全性增加很多。而且由ISA的IP PACKET FILTER只對ISA本機起作用,不會造成局域網內的客戶“放了羊”。
FTPclient在被動模式下,傳送文件使用的是0端口,可以調用setActivePortRange設置主動模式時的端口范圍。
在windows下使用ftpclient時,需要處理windows下一個FTP主被動模式的缺陷,需要運行如下命令:
netsh advfirewall firewall add rule name=”FTP Service” action=allow service=ftpsvc protocol=TCP dir=in
netsh advfirewall set global StatefulFTP disable
https://technet.microsoft.com/zh-cn/library/dd421710(v=ws.10).aspx