FTP服務器的工作模式及流程


FTP協議
FTP(File transfer Protocol)是一種在互聯網中進行文件傳輸的協議,基於客戶端/服務器模式,默認使用20、21號端口,
其中端口20(數據端口)用於進行數據傳輸,端口21(命令端口)用於接受客戶端發出的相關FTP命令與參數。
FTP服務器一般部署於內網中,具有容易搭建、方便管理的特點。而且有些FTP客戶端工具還可以支持文件的多點下載以及斷點續傳技術,因此FTP服務得到了廣大用戶的青睞。

Ftp有兩種工作模式:
主動模式(PORT):服務器主動向客戶端發起連接請求.
被動模式(PAVS):FTP服務器等待客戶端發起連接請求(FTP的默認工作模式).

Ftp協議需要用到兩個TCP連接:
命令連接:用來在FTP客戶端與服務器之間傳遞命令。
數據連接:用來在服務器和客戶端進行文件傳輸。

無論是主動模式還是被動模式,其要進行文件傳輸都必須依次建立兩個連接,分別為命令連接與數據連接。而主動模式與被動模式的差異主要體現在數據連接通道上。

命令連接

當FTP客戶端需要登陸到FTP服務器上的時候,服務器與客戶端需要進行一系列的身份驗證過程,這個過程就叫做命令連接。
如在客戶端向服務器發起連接請求的時候,客戶端會隨即的選擇某個TCP端口來跟FTP服務器的21號端口進行連接,這主要是通過TCP三方握手來實現的。當三方握手完成之后,客戶端與 服務器之間便建立了命令連接通道。不過這個通道的用途是非常有限的,其主要用來傳輸FTP的相關指令。如查看文件列表、刪除文件等等,而不能夠用來在客戶 端與服務端進行文件傳輸

數據連接

在命令連接通道建立以后,如果想要在ftp服務器和客戶端之間傳輸文件,則需要建立數據連接通道。

根據建立數據連接是由誰發起的可以分為主動模式(PORT)和被動模式(PAVS)

主動模式

主動模式優點:

服務端配置簡單,利於服務器安全管理,服務器只需要開放21端口
缺點:
如果客戶端開啟了防火牆,或客戶端處於內網(NAT網關之后), 那么服務器對客戶端端口發起的連接可能會失敗

 

被動模式

被動模式通常用在處於防火牆之后的FTP客戶訪問外界FTp服務器的情況,因為在這種情況下,防火牆通常配置為不允許外界訪問防火牆之后主機,而只允許由防火牆之后的Ftp客戶端發起的連接請求通過。因此,在這種情況下不能使用主動模式的FTP傳輸,而被動模式的FTP可以良好的工作。
優點:
對客戶端網絡環境沒有要求
缺點:
服務器配置管理稍顯復雜,不利於安全,服務器需要開放隨機高位端口以便客戶端可以連接,因此大多數FTP服務軟件都可以手動配置被動端口的范圍

***************************************** 原文鏈接1:https://blog.csdn.net/lijun0302/article/details/108062836 **********************************************************

 

 

簡單地說,支持FTP協議的服務器就是FTP服務器。

與大多數Internet服務一樣,FTP也是一個C/S模式系統。用戶通過一個支持FTP協議的客戶機程序,連接到在遠程主機上的FTP服務器程序。用戶通過客戶機程序向服務器程序發出命令,服務器程序執行用戶所發出的命令,並將執行的結果返回到客戶機。比如說,用戶發出一條命令,要求服務器向用戶傳送某一個文件的一份拷貝,服務器會響應這條命令,將指定文件送至用戶的機器上。客戶機程序代表用戶接收到這個文件,將其存放在用戶目錄中。

FTP協議是基於TCP協議之上的應用層協議,支持兩種模式:Standard (PORT方式,主動方式),Passive (PASV,被動方式)。

 

Port模式

FTP 客戶端首先和服務器的TCP 21端口建立連接,用來發送命令,客戶端需要接收數據的時候在這個通道上發送PORT命令。PORT命令包含了客戶端用什么端口接收數據。在傳送數據的時候,服務器端通過自己的TCP 20端口連接至客戶端的指定端口發送數據。FTP server必須和客戶端建立一個新的連接用來傳送數據。

具體步驟詳情如下(筆者所用FTP服務器地址:10.0.1.66,客戶端地址:10.0.13.222):

 

客戶端主動發起TCP連接,連接服務器的21端口,建立用於傳輸命令的通道。
客戶端通過第一步建立的命令傳輸通道發送FTP數據包(含PORT信息)。
服務器通過解析客戶端發來的數據包計算所要連接客戶端端口,用本地的20端口主動去與計算出的端口建立數據通道的TCP連接。
實驗截圖如下:

 

抓包可以看到,FTP客戶端(IP:10.0.13.222,端口:10100)與FTP服務器(IP:10.0.1.66,端口:21)建立三次連接。然后登陸成功(230 login successful)后FTP客戶端發送 "PORT 10,0,13,222,39,136"。

 

接着可以看到服務器主動去發起TCP連接,該連接用於FTP數據傳輸的通道,協議包名為FTP-DATA。可以發現服務器用20端口去連接客戶端的10120端口,10120其實就是客戶端發送的"PORT 10,0,13,222,39,136"中根據后倆個數值得到的:連接端口(10120) =  256 * 倒數第二位(39)+ 倒數第一位(136)

 

Passive模式

建立控制通道和Standard模式類似,但建立連接后發送Pasv命令。服務器收到Pasv命令后,打開一個臨時端口(端口號大於1023小於65535)並且通知客戶端在這個端口上傳送數據的請求,客戶端連接FTP服務器此端口,然后FTP服務器將通過這個端口傳送數據。

具體步驟詳情如下(筆者所用FTP服務器地址:10.0.13.222,客戶端地址:10.0.13.111):

 

客戶端主動發起TCP連接,連接服務器的21端口,建立用於傳輸命令的通道。
服務器通過第一步建立的命令傳輸通道發送FTP數據包(含PASS信息)。
客戶端通過解析服務器發來的數據包計算所要連接服務器端口,主動去與計算出的端口建立數據通道的TCP連接,對於服務器來說此次連接是被連接。
實驗截圖如下:

 

 

 

 

主動和被動模式計算端口的方法都是相同的。

原文鏈接2:https://blog.csdn.net/ddazz0621/article/details/84890003




免責聲明!

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



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