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