FTP 是一種基于 TCP 的應(yīng)用層協(xié)議,它不支持 UDP 協(xié)議恳啥。 FTP 工作在一種特殊的服務(wù)機制上查描,它使用兩個端口宵蛀,一個 '數(shù)據(jù)' 端口和一個 '命令' 端口(也稱為控制端口)痴鳄。 通常情況下瘟斜,端口 21 用作命令端口,端口 20 用作數(shù)據(jù)端口。 然而螺句,我偶然間發(fā)現(xiàn)虽惭,數(shù)據(jù)端口有時候并不是在端口 20 上時,這就要談到 FTP 的被動模式了蛇尚。
主動模式
在主動模式的 FTP 中芽唇,客戶端從一個隨機的非系統(tǒng)端口(N > 1023)連接到 FTP 服務(wù)器的命令端口端口 21。然后佣蓉,客戶端開始監(jiān)聽端口 N+1,并將 FTP 命令端口 N+1 告訴 FTP 服務(wù)器亲雪,“請把數(shù)據(jù)發(fā)送給我的 N+1 端口”勇凭。然后,服務(wù)器將從本地數(shù)據(jù)端口 (端口20) 連接回客戶端的數(shù)據(jù)端口义辕,也就是 N+1 端口虾标。
因為服務(wù)器防火墻的隔離作用,我們應(yīng)該確保服務(wù)器 FTP 到客戶端的一下幾個通道的暢通:
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ù)端口 )
用圖來表示這些通道:
第 1 步灌砖,客戶端的命令端口與服務(wù)器的命令端口連接并發(fā)送命令端口 1027璧函。然后,服務(wù)器在第 2 步時將一個 ACK 發(fā)送回客戶端的命令端口基显。第 3 步蘸吓,服務(wù)器在其本地數(shù)據(jù)端口上啟動連接,連接到前面指定的客戶端的數(shù)據(jù)端口撩幽。最后库继,客戶端返回 ACK,如第 4 步所示窜醉。
主動模式的 FTP 主要問題實際上落在客戶端宪萄。FTP 的客戶端并不會主動連接到服務(wù)器的數(shù)據(jù)端口,而是是告訴服務(wù)器它正在監(jiān)聽哪個端口榨惰,然后服務(wù)器發(fā)起連接到客戶端上指定的端口拜英。但是,這樣的連接有時候會被客戶端的防火墻阻止琅催【有祝‘
被動模式
為了解決服務(wù)器主動發(fā)起到客戶端連接會北阻止的問題,另一種更完善的工作模式出現(xiàn)了藤抡,它就是 FTP 的被動模式排监,縮寫作 PASV,它工作的前提是客戶端明確告知 FTP 服務(wù)器它使用被動模式杰捂。
在被動模式的 FTP 中舆床,客戶端啟動到服務(wù)器的兩個連接,解決了防火墻阻止從服務(wù)器到客戶端的傳入數(shù)據(jù)端口連接的問題。FTP 連接建立后挨队,客戶端在本地打開兩個隨機的非系統(tǒng)端口 N 和 N + 1(N > 1023)谷暮。第一個端口連接服務(wù)器上的 21 端口,但是客戶端這次將會發(fā)出 PASV 命令盛垦,也就是不允許服務(wù)器連接回其數(shù)據(jù)端口湿弦。這樣,服務(wù)器隨后會打開一個隨機的非系統(tǒng)端口 P (P > 1023)腾夯,并將 P 發(fā)送給客戶端作為 PASV 命令的響應(yīng)颊埃。然后客戶端啟動從端口 N+1 到端口 P 的連接來傳輸數(shù)據(jù)。
在被動模式中蝶俱,要保持一下通道的暢通:
FTP服務(wù)器的 21 端口(接受所有客戶端)
FTP服務(wù)器的 21端口到 > 1023 的遠(yuǎn)程端口 ( 服務(wù)器響應(yīng)客戶端控制端口 )
FTP服務(wù)器 > 1023 的端口(接受所有客戶端發(fā)起的連接到服務(wù)器指定的隨機端口)
FTP服務(wù)器 > 1023 的端口到 > 1023 的遠(yuǎn)程端口(服務(wù)器發(fā)送 ack 和數(shù)據(jù)到客戶端數(shù)據(jù)端口)
被動模式用圖表示:
第 1 步班利,客戶端在命令端口上與服務(wù)器連接,并發(fā)出 PASV 命令榨呆。然后罗标,服務(wù)器在第 2 步時使用端口 2024 進(jìn)行響應(yīng),告訴客戶端它正在監(jiān)聽的數(shù)據(jù)連接端口积蜻。第 3 步闯割,客戶端啟動從其數(shù)據(jù)端口到指定服務(wù)器數(shù)據(jù)端口的數(shù)據(jù)連接。最后竿拆,服務(wù)器在第 4 步將 ACK 發(fā)送回客戶端的數(shù)據(jù)端口宙拉。
服務(wù)器防火墻需要給 FTP 的被動模式開放一個端口范圍允許所有客戶端連接,比如 5000 - 6000丙笋。
個人博客同步更新鼓黔,獲取更多技術(shù)分享請關(guān)注:鄭保樂的博客