FTP主動模式和被動模式


基於Centos7、vsftpd3.0.2

0、前導:

  • ftp通信中存在兩種連接:
    • 控制連接:用於傳遞控制命令及其他小數據量通信。
    • 數據連接:用於傳輸文件數據流。
  • 根據數據連接的建立方式分為主動模式(active mode)和被動模式(passive mode),主動和被動都是以ftp服務端為中心來說的。
    • 主動模式:顧名思義,主動模式就是ftp-erver主動發起通向ftp-client的數據連接
    • 被動模式:同理,被動模式就是ftp-erver不發起連接,而是被動接受ftp-client發起的數據連接
  • ftp仍然屬於tcp連接,故需三次握手。

一、主動模式:

vim /etc/vsftpd/vsftpd.conf
pasv_enable=NO  #1.關閉passive模式
port_enable=YES  #2.啟用active模式
connect_from_port_20=YES  #3.允許從20端口連接,主動模式使用20端口進行數據傳輸

pasv_min_port=3000  #active模式下屬無效配置
pasv_max_port=4000  #active模式下屬無效配置
systemctl restart vsftpd  #重啟ftp服務
ftp -A 192.168.50.87  #以active模式連接ftp-server,一定要加參數【-A】

連接過程:

  1. client用大於1024的任意端口(如1025)連接server的21端口,建立控制連接(controll-connection),用於控制通信。
  2. client另起一個大於1024的端口(如1026),並通過控制連接將此端口告訴server,server使用其20端口主動與此端口建立數據連接(data-connection)。

二、被動模式:

vim /etc/vsftpd/vsftpd.conf
pasv_enable=YES  #1.開啟被動模式,如果不配置pasv_enable=NO,默認是passive模式

#默認值為0,表示取任意(1024 – 65535端口),把端口范圍設在比較高的一段范圍內,比如3000-4000
pasv_min_port=3000  #2.指定數據連接端口下界
pasv_max_port=4000  #3.指定數據連接端口上界
systemctl restart vsftpd  #重啟ftp服務
ftp -p 192.168.50.87  #以passive模式連接ftp-server,【-p】為可選參數

連接過程:

  1. client用大於1024的任意端口(如1025)連接server的21端口,建立控制連接(controll-connection),用於控制通信。

  2. client告訴server要發起數據通信,此時server就從指定的端口范圍內選擇一個端口(如3001),並對其監聽,而后將此端口告訴client。client另起一個大於1024的端口(如1026),主動去連接server的3001端口,server被動接受並建立數據連接。

三、區別:

  1. 若ftp服務器只在局域網內使用,任選一種模式都沒問題。
  2. 若ftp要通過互聯網提供服務,由於邊界路由器、NAT、防火牆等機制的存在,主動模式下server會誤認為邊界路由器就是client,所以會試圖用自己的20端口去和邊界路由器的1026端口建立數據連接,而不能抵達真實client,造成能連上server但是卻不能上傳、下載、新建目錄的問題。
  3. 若使用被動模式則不存在這樣的問題,因為數據連接由client主動發起,能准確連接上server監聽的數據端口。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM