---
# System prepended metadata

title: FTP/SFTP

---

# FTP/SFTP 

檔案傳輸方式

以檔案方式進行交換，不是即時處理

![image](https://hackmd.io/_uploads/SJgLoDnQR.png)



## 儲放檔案的系統

CD Server

### SFG(IBM Sterling File Gateway)

![image](https://hackmd.io/_uploads/H1FjmdnXA.png)



## 主動模式、被動模式

FTP有兩種使用模式：主動和被動。主動模式要求用戶端和伺服器端同時打開並且監聽一個埠以建立連接。在這種情況下，用戶端由於安裝了防火牆會產生一些問題。所以，創立了被動模式。被動模式只要求伺服器端產生一個監聽相應埠的行程，這樣就可以繞過用戶端安裝了防火牆的問題

### 主動模式（Active Mode）

在主動模式下，客戶端建立到服務器的控制連接，並告訴服務器用於數據傳輸的端口號。具體步驟如下：

1. 控制連接：客戶端打開一個隨機端口，並從該端口向服務器的21號端口發起控制連接。
2. 告知數據端口：客戶端通過控制連接告訴服務器，它將在某個端口等待數據連接（通常是1024以上的任意端口）。
3. 建立數據連接：服務器從自己的20號端口向客戶端指定的端口發起數據連接，進行數據傳輸。

主動模式的優點是較為簡單，但其缺點是客戶端需要開放防火牆，允許服務器從20號端口連接客戶端的隨機端口，這可能存在安全風險。

### 被動模式（Passive Mode）

在被動模式下，客戶端控制連接和數據連接的主動權都在客戶端。具體步驟如下：

1. 控制連接：客戶端打開一個隨機端口，並從該端口向服務器的21號端口發起控制連接。
2. 請求被動模式：客戶端通過控制連接告訴服務器，它希望使用被動模式。
3. 服務器告知數據端口：服務器打開一個隨機的高位端口（通常是1024以上），並告訴客戶端這個端口號。
4. 建立數據連接：客戶端從隨機端口向服務器指定的高位端口發起數據連接，進行數據傳輸。

被動模式的優點是更加安全，因為客戶端可以通過防火牆的設置，限制外部的連入連接，僅需要打開一個控制連接端口（21）和一個數據連接端口。這種模式特別適合於位於防火牆或NAT（網絡地址轉換）後面的客戶端。

## FTP和HTTP差異

1. 用途：FTP 主要用於在客戶端和伺服器之間傳輸文件，而 HTTP 主要用於在網頁伺服器和瀏覽器之間傳輸網頁和相關資訊。

1. 連線方式：FTP 使用兩個連線，一個用於控制（命令），另一個用於數據傳輸。HTTP 則只使用一個連線。
 
1. 效率：FTP 在傳輸大型文件時通常比 HTTP 更有效率，因為 FTP 是專為文件傳輸設計的。
 
1. 安全性：HTTP 可以使用 SSL/TLS（稱為 HTTPS）來加密傳輸的數據，提供更好的安全性。FTP 也可以使用 SSL/TLS（稱為 FTPS）來加密數據，但這並不常見。另外，還有一種叫做 SFTP 的協定（SSH File Transfer Protocol），它是在 SSH 通道上運行的 FTP，提供了更好的安全性。
 
1. 操作方式：FTP 支援對文件的各種操作，如上傳、下載、刪除、重命名等。HTTP 主要用於獲取（GET）和發送（POST）網頁數據，並不直接支援對文件的操作。
 
1. 狀態碼：HTTP 有一套詳細的狀態碼系統，用於表示請求的狀態（如 200 表示成功，404 表示未找到等）。FTP 也有狀態碼，但不如 HTTP 詳細。

## SFTP

SFTP （ Secret File Transfer Protoco，安全檔案傳輸協定），也稱為 SSH 檔案傳輸協定（SSH File Transfer Protocol），為 FTP 提供了更安全的替代方案。SFTP 透過加密通道為資料提供端對端加密保護，採用 SSH 協定進行身分驗證和加密，確保登入文件傳輸不會被篡改和側錄。

## FTPS

通過SSL/TLS 提供加密

## Java 實作套件

FTPClient https://mvnrepository.com/artifact/commons-net/commons-net/3.6

https://bingdoal.github.io/backend/2021/03/java-ftp-passive-and-active-mode/

Jsch https://mvnrepository.com/artifact/com.jcraft/jsch

Apache Camel：https://camel.apache.org/components/4.4.x/sftp-component.html

