喫透FTP

FTP,即文件傳輸協議(File Transfer Protocol),作爲仍然活躍的客戶端--服務端之間的傳輸協議,其歷史可以追溯到上世紀70年代。

今天老張給大家全方位的講講FTP,如果你之前很少接觸FTP或者對FTP一知半解,老張保證大家看完本篇文章之後,可以在實際當中得心應手的應用與處理FTP相關工作。

 

1.FTP的工作模式

 

FTP有兩種工作模式,分別是主動模式和被動模式,目前絕大多數FTP服務器均採用了被動模式,但是某些場景下還是需要使用主動模式的。

現在是不是一頭霧水?不要急,拿出小本本,重點來了!

 

1.1主動模式

 

①客戶端隨機選取一個端口X,通過TCP向服務器21端口(默認端口,可以更改)發送請求,建立命令通道。命令通道一旦建立,後續無論上傳、下載等其他操作指令,都會首先通過命令通道來傳輸。當然建立命令通道的過程中,必然少不了TCP的三次握手。

②當涉及上傳、下載等操作時,客戶端會再次隨機一個端口Y,通過命令通道通知服務器,請求建立數據通道。區別於只傳輸指令的命令通道,數據通道用於實際的數據傳輸。

③服務器收到通知後,通過20端口(默認端口)主動連接客戶端的端口Y,此時數據通道正式建立,客戶端與服務器開始傳輸實際數據。

 

可以看到,FTP協議會用到兩條連接,分別用於傳輸指令的命令通道和傳輸數據的數據通道。需要注意的是數據通道一開始並不會建立,只有在涉及數據傳輸時纔會臨時建立。

 

現在問題來了,看起來主動模式可以很好的工作的,爲什麼還有一個被動模式,而且被動模式成爲了主流呢?

 

 

客戶端隱藏在防火牆後面的模型

答案是因爲現實世界中,客戶端同服務器之間往往存在防火牆或者路由器。當客戶端請求建立數據通道時,服務器將會主動連接防火牆的端口Y,而不是客戶端的端口Y,數據通道建立失敗。此時表現爲看似客戶端已經連接服務器,但是無法傳輸數據。

有沒有辦法避免因爲防火牆產生的尷尬呢?被動模式應運而生。

 

 

1.2 被動模式

 

①同主動模式一樣,客戶端隨機選取一個端口X,通過TCP向服務器21端口發送請求,建立命令通道。

②當涉及上傳、下載等操作時,客戶端通過命令通道通知服務器,請求建立數據通道。此時,被動模式下客戶端並沒有隨機選擇一個端口通知服務器。

③服務器收到建立數據通道的通知後,會隨機一個自身端口Z,繼續通過命令通道將端口Z告訴給客戶端。

④客戶端通過隨機一個自身端口Y,主動連接服務器端口Z。此時數據通道才正式建立。

 

被動模式解決了客戶端隱藏在防火牆背後,無法建立數據通道的弊端,因爲此時數據通道的建立由客戶端發起,服務器被動接收。但是,同樣的當服務器隱藏在防火牆背後時,被動模式依然無法建立數據通道。

 

不同模式適用於不同場景

當然,無論防火牆還是路由器都是可以有辦法穿透的,老張就不在這裏贅述了。

 

2.FTP服務器的搭建

 

講清楚了原理,搭建FTP服務器就顯得簡單了許多。

  • Linux下可以選擇安裝vsftpd服務。

  • Windows下可以使用系統自帶的IIS中的FTP服務。

具體的搭建過程,大家可以自行搜索查閱。

 

3.FTP客戶端的選擇

 

這裏老張強烈推薦XFTP,另外還有一款Filezilla也不錯。老張提醒一句,在使用軟件連接FTP服務器的時候注意區分FTP服務器的模式。

 

4.FTP的常見問題

 

  1. 對服務器而言,開放服務,提供文件的上傳、下載,其行爲本身就很危險。如果確實需要開啓FTP服務,務必配置好用戶權限。

  2. FTP是明文傳輸,所以協議本身並不安全。可以考慮使用SSH自帶的SFTP。

  3. 如果遇到“可以連接FTP服務器,但是無法傳輸文件”的情況,可以從FTP的模式以及服務器的文件權限下手排查問題。

 

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