作者:又拍雲_
來源:https://my.oschina.net/upyun/blog/4542799_
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 端口的“準出” 即可,但是由于伺服器連接配接到用戶端的端口随機,是以用戶端有可能會觸發防火牆,甚至直接被防火牆攔截掉。反之被動模式則有利于管理用戶端。
沒想到一個看似簡單的存儲工具居然還有着這麼多的分類和差別,不同的模式不同的方式都可以對應不同的需求,看來以後在使用工具的時候還是可以多少了解一點相關知識,能讓工具用起來更順手更舒心~
(完)
最近熱文:
分享一份Java架構師學習資料!
用圖講解 ElasticSearch 搜尋原理
Mybatis3.3.x:SqlSession與SqlSessionFactory到底是什麼關系?
參數驗證 @Validated 和 @Valid 的差別?
SpringBoot實作API接口統一JSON格式傳回
靈魂拷問:你寫的SQL一般有幾個join ?
Docker 遇到 Intellij IDEA 這個插件
SQL判斷是否"存在",還在用 count 操作?
——長按關注Java大後端——
戳原文,擷取一份面試題資料!