一文詳解 FTP、FTPS 與 SFTP 的原理

來自:知乎,作者: 又拍雲

鏈接:https://zhuanlan.zhihu.com/p/208617545

無論是網盤還是雲存儲,上傳都是一項很簡單的操作。那些便捷好用的上傳整理工具所用的 FTP 協議到底是什麼意義,繁雜的模式又有何區別?二狗子最近搭建了一個圖片分享網站,每天都有好多人在他的網站上傳許多照片,這些照片還會通過內部的邏輯同步到又拍雲存儲中,非常方便。但不久後問題就來了,由於剛開始的用戶照片管理規劃沒有做好,隨着用戶上傳的圖片越來越多,雲存儲的內容也越來越混亂,二狗子看着也非常難受。這不,趁着今天休息,二狗子決定好好的調整一番。

二狗子打開又拍雲控制檯,上上下下找了一番沒有找到將對應文件移動到對應目錄中的功能。向又拍雲客服尋求幫助後,客服薇薇告訴他,可以通過 FTP 工具來管理雲存儲的文件,同時還提供了一篇詳盡的幫助文檔給二狗子 ——FTP 工具連接又拍雲存儲文檔[https://help.upyun.com/knowledge-base/developer_tools/] 。二狗子終於通過 FTP 工具連接上了雲存儲,一頓操作之後,二狗子成功把照片整理的整整齊齊。看着這個讓強迫症患者滿意舒適的存儲界面,又看了看能夠打造這個效果的 FTP 工具,二狗子滿意的點了點頭,決定一不做二不休徹徹底底的瞭解一下 FTP ,也看看 FTP 還有沒有其他的好用功能了。

FTP、FTPS 與 SFTP 簡介

FTP

在看相關功能之前,二狗子發現客戶端有三種不同的協議,分別是 FTP、FTPS 與 SFTP,爲了弄清楚這是什麼,二狗子打開了萬能的百科。首先來了解一下什麼是 FTP,維基百科說:FTP 即 文件傳輸協議(英語:File Transfer Protocol 的縮寫)是一個用於計算機網絡上在客戶端和服務器之間進行文件傳輸的應用層協議。完整的 FTP 是由 FTP 服務器 和 FTP 客戶端組成的,客戶端可以將本地的文件通過 FTP 協議上傳到服務器,也可以將服務器的文件下載到本地。它是當今使用的最古老的文件傳輸協議之一,是一種非常便捷的移動文件的方式。

FTP 的工作原理

FTP 連接需要 FTP 服務器和客戶端兩方在網絡上建立通信。建立 FTP 連接時會有兩個不同的通信通道。一個被稱爲命令通道,它的作用是發出和響應指令。另一個爲數據通道,用於客戶端和服務器端進行數據交互。使用 FTP 傳輸文件時,用戶需要通過向 FTP 服務器提供憑據來獲得文件傳輸許可。當然某些公共 FTP 服務器可能不需要憑據即可訪問其文件,但是無法保證數據傳輸的安全性,任何未加密公共網絡上的數據發送都是非常危險的,所以爲了保護傳輸數據的安全,由 FTP 衍生而出的就是下面的兩種協議:FTPS 與 SFTP。

FTPS

接下來二狗子查詢了一下,發現 FPTS 有 FTPS 隱式 SSL 和 FTPS 顯示 SSL 兩種模式,兩者都是用 SSL 加密。那麼兩者有什麼區別呢?

  • FTPS 隱式 SSL:該模式通常在端口 990 上運行。在這個模式下全部數據的交換都需要在客戶端和服務器之間建立 SSL 會話,並且服務器會拒絕任何不使用 SSL 進行的連接嘗試。
  • FTPS 顯式 SSL:顯示 SSL 下服務器可以同時支持 FTP 和 FTPS 會話。開始會話前客戶端需要先建立與 FTP 服務器的未加密連接,並在發送用戶憑證前先發送 AUTH TLS 或 AUTH SSL 命令來請求服務器將命令通道切換到 SSL 加密通道,成功建立通道後再將用戶憑證發送到 FTP 服務器,從而保證在會話期間的任何命令都可以通過 SSL 通道自動加密。

二狗子來給大家簡單快速的總結一下。當啓用隱式模式時,FTP 的默認端口就被改爲 TCP/990,服務器自動建立安全連接,並且要求客戶端也必須支持安全連接模式也就是使用 SSL 進行連接。當啓用顯式模式時,與 FTP 連接方式和默認端口一樣,但是需要以命令 AUTH SSL/TLS 類型的命令進行激活安全連接後才能正常傳輸數據。

SFTP

最後大家來一起看看 SFTP,SFTP 是 Secure File Transfer Protocol 的縮寫,也叫作安全文件傳送協議。如果說 FTPS 是在 FTP 協議上增加了一層 SSL ,那麼 SFTP 就是是基於網絡協議SSH(安全外殼)的協議與前面所說的 FTP 完全不同。SFTP 不使用單獨的命令通道和數據通道,而是數據和命令都會通過單個連接以特殊格式的數據包進行傳輸。

SFTP 提供了兩種驗證連接的方法。

  • 與 FTP 一樣,連接時只需要驗證用戶 ID 和密碼就可以了。但是,與FTP不同的是,這些憑據是加密的,這是 SFTP 最主要的安全優勢。

  • 除密碼外,還可以通過 SSH 密鑰來驗證並通過 SFTP 協議連接。

瞭解了這幾個協議之後,二狗子使用 FTP 客戶端工具就更加順手了,他可以根據自己的需求更改協議以及加密方式,而不用爲不懂某個設置而煩惱。

但是,新的疑問又出現了,二狗子看到這裏的傳輸設置中的傳輸模式,有主動和被動之分,這又是什麼意思呢。不懂就問的他又打開了 Google…

FTP 軟件的主動模式和被動模式的區別

主動模式

一般 FTP 的默認模式就是主動模式,也稱爲 port 模式。它是通過兩個步驟來進行工作的:

  • 首先客戶端上的隨機端口與服務器上的 FTP 端口 21 建立命令通道,客戶端發送 PORT 命令,指定服務器與客戶端其中一個端口連接,並建立數據通道。
  • 然後服務器從端口 20 連接到爲數據通道指定的客戶端端口。建立連接後,即可通過這些客戶端和服務器端口進行文件傳輸。

被動模式

在傳輸方式欄,你還可以手動調整爲被動傳輸模式,在該模式下用戶端進行文件傳輸時,會先通過隨機端口 A 連接到服務器上的端口 21,併發出 PASV 命令建立命令通道,告訴服務端這次是被動模式連接。之後服務器會打開一個隨機端口用於數據傳輸,而客戶端通過與發出命令的端口不同的隨機端口 B 建立數據通道,從而進行文件傳輸。

被動模式與主動模式不同的地方就是客戶端啓動數據連接。在主動模式下,客戶端在命令通道上建立連接後,服務器將啓動與客戶端的數據連接。而在被動模式下,建立命令通道後,由客戶端啓動與服務器的數據連接。因爲這個區別,可以得出兩者的優勢和缺陷。比如主動模式有利於管理 FTP 服務端,因爲只需要打開 21 端口的“准入”、20 端口的“準出” 即可,但是由於服務器連接到客戶端的端口隨機,所以客戶端有可能會觸發防火牆,甚至直接被防火牆攔截掉。反之被動模式則有利於管理客戶端。沒想到一個看似簡單的存儲工具居然還有着這麼多的分類和區別,不同的模式不同的方式都可以對應不同的需求,看來以後在使用工具的時候還是可以多少了解一點相關知識,能讓工具用起來更順手更舒心~

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