FTP 的主動(dòng)模式和被動(dòng)模式

FTP 是一種基于 TCP 的應(yīng)用層協(xié)議,它不支持 UDP 協(xié)議。 FTP 工作在一種特殊的服務(wù)機(jī)制上,它使用兩個(gè)端口,一個(gè) '數(shù)據(jù)' 端口和一個(gè) '命令' 端口(也稱為控制端口)。 通常情況下,端口 21 用作命令端口,端口 20 用作數(shù)據(jù)端口。 然而,我偶然間發(fā)現(xiàn),數(shù)據(jù)端口有時(shí)候并不是在端口 20 上時(shí),這就要談到 FTP 的被動(dòng)模式了。

主動(dòng)模式

在主動(dòng)模式的 FTP 中,客戶端從一個(gè)隨機(jī)的非系統(tǒng)端口(N > 1023)連接到 FTP 服務(wù)器的命令端口端口 21。然后,客戶端開始監(jiān)聽端口 N+1,并將 FTP 命令端口 N+1 告訴 FTP 服務(wù)器,“請(qǐng)把數(shù)據(jù)發(fā)送給我的 N+1 端口”。然后,服務(wù)器將從本地?cái)?shù)據(jù)端口 (端口20) 連接回客戶端的數(shù)據(jù)端口,也就是 N+1 端口。

因?yàn)榉?wù)器防火墻的隔離作用,我們應(yīng)該確保服務(wù)器 FTP 到客戶端的一下幾個(gè)通道的暢通:

FTP 服務(wù)器端口 21 (接受全部客戶端)

FTP 服務(wù)器端口 21 到 > 1023 的端口 ( 服務(wù)器響應(yīng)客戶端控制端口 )

FTP 服務(wù)器端口 20 到 > 1023 的端口 ( 服務(wù)器發(fā)起到客戶端的數(shù)據(jù)端口的連接 )

從 > 1023的端口到 FTP 服務(wù)器端口 20 ( 客戶端發(fā)送 ack 到服務(wù)器的數(shù)據(jù)端口 )

用圖來表示這些通道:


activeftp.gif

第 1 步,客戶端的命令端口與服務(wù)器的命令端口連接并發(fā)送命令端口 1027。然后,服務(wù)器在第 2 步時(shí)將一個(gè) ACK 發(fā)送回客戶端的命令端口。第 3 步,服務(wù)器在其本地?cái)?shù)據(jù)端口上啟動(dòng)連接,連接到前面指定的客戶端的數(shù)據(jù)端口。最后,客戶端返回 ACK,如第 4 步所示。

主動(dòng)模式的 FTP 主要問題實(shí)際上落在客戶端。FTP 的客戶端并不會(huì)主動(dòng)連接到服務(wù)器的數(shù)據(jù)端口,而是是告訴服務(wù)器它正在監(jiān)聽哪個(gè)端口,然后服務(wù)器發(fā)起連接到客戶端上指定的端口。但是,這樣的連接有時(shí)候會(huì)被客戶端的防火墻阻止?!?/p>

被動(dòng)模式

為了解決服務(wù)器主動(dòng)發(fā)起到客戶端連接會(huì)北阻止的問題,另一種更完善的工作模式出現(xiàn)了,它就是 FTP 的被動(dòng)模式,縮寫作 PASV,它工作的前提是客戶端明確告知 FTP 服務(wù)器它使用被動(dòng)模式。

在被動(dòng)模式的 FTP 中,客戶端啟動(dòng)到服務(wù)器的兩個(gè)連接,解決了防火墻阻止從服務(wù)器到客戶端的傳入數(shù)據(jù)端口連接的問題。FTP 連接建立后,客戶端在本地打開兩個(gè)隨機(jī)的非系統(tǒng)端口 N 和 N + 1(N > 1023)。第一個(gè)端口連接服務(wù)器上的 21 端口,但是客戶端這次將會(huì)發(fā)出 PASV 命令,也就是不允許服務(wù)器連接回其數(shù)據(jù)端口。這樣,服務(wù)器隨后會(huì)打開一個(gè)隨機(jī)的非系統(tǒng)端口 P (P > 1023),并將 P 發(fā)送給客戶端作為 PASV 命令的響應(yīng)。然后客戶端啟動(dòng)從端口 N+1 到端口 P 的連接來傳輸數(shù)據(jù)。

在被動(dòng)模式中,要保持一下通道的暢通:

FTP服務(wù)器的 21 端口(接受所有客戶端)

FTP服務(wù)器的 21端口到 > 1023 的遠(yuǎn)程端口 ( 服務(wù)器響應(yīng)客戶端控制端口 )

FTP服務(wù)器 > 1023 的端口(接受所有客戶端發(fā)起的連接到服務(wù)器指定的隨機(jī)端口)

FTP服務(wù)器 > 1023 的端口到 > 1023 的遠(yuǎn)程端口(服務(wù)器發(fā)送 ack 和數(shù)據(jù)到客戶端數(shù)據(jù)端口)

被動(dòng)模式用圖表示:

passiveftp.gif

第 1 步,客戶端在命令端口上與服務(wù)器連接,并發(fā)出 PASV 命令。然后,服務(wù)器在第 2 步時(shí)使用端口 2024 進(jìn)行響應(yīng),告訴客戶端它正在監(jiān)聽的數(shù)據(jù)連接端口。第 3 步,客戶端啟動(dòng)從其數(shù)據(jù)端口到指定服務(wù)器數(shù)據(jù)端口的數(shù)據(jù)連接。最后,服務(wù)器在第 4 步將 ACK 發(fā)送回客戶端的數(shù)據(jù)端口。

服務(wù)器防火墻需要給 FTP 的被動(dòng)模式開放一個(gè)端口范圍允許所有客戶端連接,比如 5000 - 6000。

個(gè)人博客同步更新,獲取更多技術(shù)分享請(qǐng)關(guān)注:鄭保樂的博客

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容