FTP(File Transfer Protocol,檔案傳輸協定)** 是 TCP/IP 協定族中應用層協定,用於客戶端與伺服器間檔案傳輸。核心操作:
FTP 基於傳輸層 TCP 協定**,提供可靠、面向連線的傳輸保障。

FTP 採用**雙通道設計**,這是其區別於其他協定的關鍵特徵:
| 通道類型 | 功能 | 預設埠號 | 傳輸內容 |
|---|---|---|---|
| 控制連線 | 傳送控制資訊(命令與回應) | 21 | 單行命令、應答碼 |
| 資料連線 | 實際檔案資料傳輸 | 20 | 文字檔、圖片、應用程式等各類資料 |
設計動機:控制資訊簡短固定,資料類型多樣複雜。分離通道可獨立優化,控制通道持久連線,資料通道按需建立。

| 模式名稱 | 別名 | 適用場景 |
|---|---|---|
| ASCII 模式 | 文字傳輸模式 | 純文字檔案(原始碼、HTML、設定檔),會進行行尾轉換 |
| Binary 模式 | 二進制資料傳輸模式 | 所有非文字檔(圖片、壓縮檔、執行檔、資料庫檔),位元級完整傳輸 |
實務建議:預設使用 Binary 模式,僅在確認為純文字檔且需跨平台行尾轉換時使用 ASCII 模式。
anonymous,密碼通常為電子郵件,提供公開檔案下載USER # 指定用戶名
PASS # 指定密碼
ABOR # 異常中斷資料連線
QUIT # 登出
REIN # 重新初始化連線
CWD # 切換工作目錄
CDUP # 切換到父目錄
DELE # 刪除檔案
LIST # 列出目錄/檔案
MKD # 建立目錄
PWD # 顯示當前工作目錄
RMD # 刪除目錄
TYPE # 設定檔案類型:ASCII/EBCDIC/Image/Local
STRU # 設定資料結構:File/Record/Page
MODE # 設定傳輸模式:Stream/Block/Compressed
PASV # 被動模式:伺服器開啟埠,客戶端主動連接
PORT # 主動模式:客戶端開啟埠,伺服器主動連接
RETR # 下載:伺服器→客戶端
STOR # 上傳:客戶端→伺服器
STAT # 檔案狀態查詢
ALLO # 預分配儲存空間
HELP # 查詢伺服器支援命令
NOOP # 檢查伺服器連線狀態
SITE # 站點特定命令
SYST # 查詢伺服器作業系統類型
三位數字編碼:xyz
| 位置 | 含義 | 數值對照 |
|---|---|---|
| 第一位 (x) | 命令處理狀態 | 1=收到待處理, 2=成功完成, 3=需進一步資訊, 4=暫時錯誤, 5=永久錯誤 |
| 第二位 (y) | 回應分類 | 0=語法, 1=系統狀態, 2=連線狀態, 3=認證相關, 4=未指定, 5=檔案系統 |
| 第三位 (z) | 補充細節 | 具體子代碼 |
常見回應碼範例:
220:服務就緒(連線建立成功)230:登入成功150:資料連線開啟,準備傳輸226:傳輸完成,關閉資料連線530:未登入或認證失敗550:檔案不可用(不存在/無權限)理解 FTP 的雙通道架構、主動/被動模式差異、命令與回應碼體系,是實作健壯 FTP 客戶端的前提。下一篇將介紹 Java 實作 FTP 客戶端的核心類別設計與連線管理。