FTP工作原理以及主動模式和被動模式

一 簡介

FTP的傳輸使用的是TCP數據包協議,TCP在建立連接前會先進行三次握手。不過FTP服務器比較麻煩一些,因爲FTP服務器使用了兩個連接,分別是命令通道與數據通道。因爲是TCP數據包,所以這兩個連接都需要經過三次握手。
根據數據連接的建立方式,FTP服務的數據傳輸可以分爲主動模式(Active)和被動(Passive)模式。下面就這兩種模式分別進行介紹。

二 主動模式

1、定義

主動模式是FTP服務器向FTP客戶端傳輸數據的默認模式。當FTP客戶端請求以主動模式傳輸數據時,由客戶端向服務器端發送準備接受數據的IP地址和端口Y,該端口應該是大於1024的非特權端口。服務器端主動發起並建立到指定的IP地址和端口Y上的連接。由於Y端可以隨機指定,導致這種方案要求客戶端機器必須允許FTP服務器能夠順利地連接所有的端口,因此可能存在一定的安全隱患。

2、FTP被動連接示意圖

在這裏插入圖片描述

3、主動模式分析

  • 步驟一:建立命令通道連接
    如上圖,客戶端會隨機取一個大於1024以上的端口(port AA)來與FTP服務器端的port 21實現連接,這個過程當然需要三次握手。實現連接後客戶端便可以通過這個連接來對FTP服務器執行命令,查詢文件名、下載、上傳等等命令都是利用這個通道來執行的。
  • 步驟二:通知FTP服務端使用Active且告訴連接的端口號
    FTP服務器端的端口 21號主要用在命令的執行,但是當牽涉到數據流時,就不是使用這個連接了。客戶端在需要數據的情況下,會告知服務器端要用什麼方式連接,如果是主動模式連接,客戶端會隨機啓用一個端口(port BB),且通過命令通道告知FTP服務器這兩個信息,並等待FTP服務器端的連接。
  • 步驟三:FTP服務端主動向客戶端連接
    FTP服務器由命令通道瞭解客戶端的需求後,會主動由port 20向客戶端port BB連接,這個連接當然也會經過三次握手。此時FTP的客戶端與服務器端建立了兩條連接,分別用在命令的執行和數據的傳輸。而默認FTP服務端使用主動連接端口就是port 20。這樣就建立起“命令”與“數據傳輸”兩個通道。
  • 注意:
    第1點:數據傳輸通道是在有數據傳輸的行爲纔會建立連接,並不是一開始連接到FTP服務器就立刻建立的數據通道。
    第2點:命令通道的FTP默認爲port 21。數據傳輸的FTP-DATA默認爲port 20。
    第3點:這兩個端口的工作原理是不一樣的,而且,兩者的連接發起端是不一樣的。首先port 21接受來自客戶端的主動連接,port 20則是FTP服務器主動連接到客戶端。

二 被動模式

1.定義

在被動模式下,客戶端通過PASV命令獲得服務器端IP地址和數據端口,然後向服務器端發起連接請求,從而建立數據連接。因此服務器端只是被動地監聽在指定端口上的請求。
當連接某個FTP服務器失敗時可以試着修改FTP客戶端工具配置,改變傳輸模式,這樣或許能夠連接成功。

2、FTP被動連接示意圖

在這裏插入圖片描述

3、被動模式分析

  • 步驟一:客戶端與服務器建立命令通道
    同樣需要建立命令通道,通過三次握手就可以建立起這個通道了。
  • 步驟二:客戶端發起PASV的連接要求
    當使用數據通道命令時,客戶端可通過命令通道發起PASV的被動式連接要求,並等待服務器的迴應。
  • 步驟三:FTP服務器啓動數據端口,並通知客戶端連接
    如果你使用的FTP服務器是能夠處理被動式連接的,此時FTP服務器會先啓動一個監聽端口。這個端口號碼可以是隨機的,也可以自定義某個範圍的端口。然後FTP服務器會通過命令通道告知客戶端已經啓動的端口(port PASV),並等待客戶端的連接。
  • 步驟四:客戶端隨機取用大於1024的端口進行連接
    最後你的客戶端會隨機取用一個大於1024端口來進行對FTP服務器port PASV連接。如果一切都順利,那麼FTP數據就可以通過port BB和port PASV來傳送了。
  • 注意:
    第1點:被動模式FTP數據通道是由客戶端向服務器端發起連接的。

4、被動模式抓包分析

通過ftp到ftp.ksu.edu.tw這個FTP服務器,我們抓一下包,下面是登錄過程。
在這裏插入圖片描述
第一步:客戶端發起命令通道的三次握手。
在這裏插入圖片描述
第二步:客戶端發起PASV的連接請求。
在這裏插入圖片描述
第三步:服務器端啓動數據端口,並告知客戶端該端口號。
在這裏插入圖片描述
第四步:客戶端發起數據通道的三次握手。
在這裏插入圖片描述

三、主動模式與被動模式的區別

(這部分是在原來的博客之外補充的)
主動模式中FTP的客戶端發送 PORT 命令到FTP服務器,FTP客戶端向FTP服務器發送數據傳輸需要的端口,FTP服務端去連接FTP客戶端的端口,也就是服務器向客戶端敲門,然後客戶端開門。被動模式中FTP的客戶端發送 PASV命令到 FTP 服務器,FTP服務器返回數據傳輸需要的端口,FTP客戶端去連接FTP服務端,也就是客戶端向服務器敲門,然後服務器開門。

主動FTP:
  命令連接:客戶端 >1023端口 -> 服務器 21端口
  數據連接:客戶端 >1023端口 <- 服務器 20端口

被動FTP:
  命令連接:客戶端 >1023端口 -> 服務器 21端口
  數據連接:客戶端 >1023端口 -> 服務器 >1023端口

源文章鏈接:https://cakin24.iteye.com/blog/2337669

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章