前言
FTP這個簡單服務竟然還區分主動和被動。我第一次接觸到它,是在一次測試環境聯調排查問題時,發現了網絡通信異常,最后查資料才發現了FTP的主動和被動模式。
結論
先來上個簡單的結論。
主動模式(PORT):客戶端連FTP的默認21端口,先驗證用戶名密碼,然后服務器會開放20端口,再去主動連客戶端,連上后進行數據傳輸。
被動模式(PASV):客戶端連FTP的默認21端口,先驗證用戶名密碼,然后服務器會開放一個隨機端口(大于1024)告訴客戶端,等著客戶端來連自己,連上后進行數據傳輸。
主動模式
FTP客戶端使用隨機端口N(大于1024)連接到FTP服務器的21端口,發送用戶名和密碼登錄,登錄成功后要list列表或者讀取數據時,客戶端開放N+1端口(如果端口已經被占用,則會再加1),發送 PORT命令到FTP服務器,告訴服務器客戶端采用主動模式并開放端口。
FTP服務器收到PORT主動模式命令和端口號后,通過服務器的20端口和客戶端開放的端口連接,發送數據。
被動模式
FTP客戶端使用隨機端口N(大于1024)連接FTP服務器的21端口,發送用戶名和密碼登錄,登錄成功后要list列表或者讀取數據時,發送PASV命令到FTP服務器,服務器在本地開放一個端口(大于1024),然后把開放的端口告訴客戶端, 客戶端再通過N+1端口連接到服務器開放的端口進行數據傳輸。
如何選擇
知道了主動模式與被動模式的原理后,我們再來總結一下二者的區別:
二者的區別主要在于建立數據傳輸連接的時候,主模式的連接發起方為服務器端,使用20號端口連接客戶端的N+1端口建立數據連接。
被動模式連接發起方為客戶端,客戶端使用端口號+1去連接服務器的某一高位端口。
所以,使用哪一種模式,取決于你的防火墻是如何設置的。
我們搭建完FTP服務器后,通常會在防火墻放行21和20端口,只要客戶端這邊沒有特殊的防火墻規則,那么使用主動模式一定沒問題。
反過來,如果客戶端這邊有很嚴格的防火墻規則,而服務端防火墻規則可控(需要放行21和一個隨機端口范圍),那么就使用被動模式。
有一種常見問題是:服務器端只開放了21端口, 客戶端機器沒開放任何端口。
FTP客戶端連接采用的被動模式,結果客戶端能登錄成功,但是無法LIST列表和讀取數據。
很明顯,是因為服務端沒開放被動模式下的隨機端口導致。
由于被動模式下,服務器端開放的端口隨機,但是防火墻要不能全部開放,解決的方案是,在FTP服務器配置被動模式下開放部分隨機高位端口(范圍在FTP服務器軟件設置,可以設置任意1024以上的端口段),然后在防火墻設置規則,開放服務器端相應的端口號即可。
審核編輯:劉清
-
服務器
+關注
關注
12文章
9021瀏覽量
85184 -
FTP
+關注
關注
0文章
108瀏覽量
40595
原文標題:一文搞懂FTP的主動模式和被動模式
文章出處:【微信號:aming_linux,微信公眾號:阿銘linux】歡迎添加關注!文章轉載請注明出處。
發布評論請先 登錄
相關推薦
評論