FTP主動模式和被動模式

向往自由的独行者發表於2024-05-09

FTP主動模式和被動模式(1)


目錄
  • FTP主動模式和被動模式(1)
    • FTP工作原理
      • FTP主動模式
      • FTP被動模式


FTP工作原理

FTP 是基於客戶—伺服器(C/S)模型而設計的,FTP 的獨特的優勢同時也是與其它客戶伺服器程式最大的不同點就在於它在兩臺通訊的主機之間使用了兩條 TCP 連線,一條是資料連線,用於資料傳送;另一條是控制連線,用於傳送控制資訊(命令和響應),這種將命令和資料分開傳送的思想大大提高了 FTP 的效率,使得一個FTP伺服器可以同時和多個客戶端傳輸資料。

FTP有兩種工作模式,主動模式和被動模式,其中主動模式是預設的模式,並且是由客戶端決定工作在哪種模式。

FTP的主動和被動模式是針對資料連線的,而且是針對伺服器而言的;

FTP的被動模式較長使用,因為在存在防火牆的環境中,被動模式對於客戶端在防火牆內部的情況是比較友好的,主動模式對伺服器在防火牆內部是比較友好的,下面會詳細說明原因。

FTP主動模式

主動模式的工作原理如下圖:

image

  • 首先建立控制連線,進行控制連線的TCP三次握手,客戶端開啟一個大於1024的隨機埠N向伺服器端的TCP21埠傳送一個TCP連線,伺服器收到後向客戶端的N埠傳送ACK確認訊息;
  • 同時客戶端向伺服器端傳送FTP使用者名稱和密碼進行校驗,切換工作目錄,確定資料傳輸格式等,之後客戶端向伺服器端傳送PORT命令,告知伺服器自身使用哪個埠建立資料連線,PORT命令的格式為PORT 192,16,2,210,221,123,其中前四個為客戶端的IP地址,後兩個為客戶端使用的資料埠,透過221*256+123=56699算出,這裡的埠可能是N+1,也可能使用隨機埠;
  • 伺服器端使用固定埠TCP20(也可能是隨機埠)主動向客戶端的資料埠傳送資料連線,完成資料連線的TCP三次握手之後就可以進行資料傳輸了。

FTP主動模式完整的抓包過程(伺服器端)如下,其中192.168.2.210是FTP客戶端,192.168.2.131是FTP伺服器端,這裡伺服器在資料連線上沒有使用20埠,使用的是PORT命令通告的隨機埠:

image

FTP被動模式

FTP被動模式的工作原理如下圖:

image

  • 同樣首先建立控制連線,進行控制連線的TCP三次握手,客戶端開啟一個大於1024的隨機埠N向伺服器端的TCP21埠傳送一個TCP連線,完成三次握手;
  • 之後由伺服器驗證客戶端傳送的FTP使用者名稱密碼,驗證透過後,伺服器回覆230表示登入成功,然後客戶端切換到伺服器工作目錄,伺服器回覆250目錄切換成功,客戶端確定資料互動的方式,TYPE A表示使用ASCII二進位制型別,伺服器回覆200;
  • 客戶端向伺服器傳送PASV命令,表示要使用FTP被動模式,伺服器端回應227進入被動模式,並告知客戶端自己使用的資料連線埠號,格式為PASV 192,16,2,131,236,146,其中前四個為客戶端的IP地址,後兩個為客戶端使用的資料埠,透過236*256+146=60562算出;
  • 客戶端開始建立資料連線的三次握手,客戶端使用自身的隨機埠,一般是N+1埠(也可能是隨機埠)向伺服器的上面的60562隨機埠發起資料連線,建立完成後就可以正常進行資料傳輸了,傳輸完成後進行資料連線的四次揮手斷開連線;

FTP被動模式完整的抓包過程(伺服器端)如下,其中192.168.2.210是FTP客戶端,192.168.2.131是FTP伺服器端:

image

透過上面的抓包可以看到我們是可以看到FTP登入的使用者名稱和密碼以及傳輸的內容的,因此FTP不是一個安全的協議,很容易洩露資料資訊,可以使用SFTP,SCP等基於SSH實現的檔案傳輸協議,這些都是加密的。

可以看出整個FTP的傳輸過程中FTP的控制連線一直是不斷開的,直到這個客戶端的連線斷開為止,同時伺服器的21埠一直處於監聽狀態,每個客戶端使用不同的資料連線埠,這樣就可以實現一個伺服器同時和多個客戶端傳輸資料,提升資料傳輸速率。

相關文章