文件傳輸協議

文件傳輸協議（File Transfer Protocol，縮寫FTP）是在計算機網絡的客戶端和服務器間傳輸文件的應用層協議。傳送文件（file transfer）和存取文件（file access）之間的區別在於：前者由FTP提供，後者由NFS等應用系統提供。由RFC 959規範。
FTP是8位的客戶端－服務器協議，能操作任何類型的文件而不需要後續處理，就像MIME或Unicode一樣，但FTP有極高的延時，意味從開始請求到第一次接收數據間的時間非常長；並且必須不時執行一些冗長的登錄進程。

**歷史**
Abhay Bhushan編寫原始規範，並於1971年4月16日作為RFC 114發佈。直到1980年，FTP才在TCP/IP的前身NCP運行。該協議先被TCP/IP版本，RFC 765（1980年6月）取代，後來又被 RFC 959（1985年10月）所取代，這也是當前規範。RFC 959提出了若干標準修改，例如 RFC 1579（1994年2月）使 FTP 能夠穿越NAT與防火牆（被動模式），RFC 2228（1997年6月）提出安全擴展，RFC 2428（1998年9月）增加了對IPv6的支持，並定義了一種新型的被動模式。

**概述**
FTP服務一般運行在20和21兩個端口。端口20用於在客戶端和服務器之間傳輸數據流，而端口21用於傳輸控制流，並且是命令通向ftp服務器的進口。當數據通過數據流傳輸時，控制流處於空閒狀態。而當控制流空閒很長時間後，客戶端的防火牆會將其會話置為超時，這樣當大量數據通過防火牆時，會產生一些問題。此時，雖然文件可以成功的傳輸，但因為控制會話，會被防火牆斷開；傳輸會產生一些錯誤。
FTP雖然可以被終端用戶直接使用，但是它是設計成被FTP客戶端程序所控制。
運行FTP服務的許多站點都開放匿名服務，在這種設置下，用戶不需要帳號就可以登錄服務器，默認情況下，匿名用戶的用戶名是：「anonymous」。這個帳號不需要密碼，雖然通常要求輸入用戶的郵件地址作為認證密碼，但這-{只}-是一些細節或者此郵件地址根本不被確定，而是依賴於FTP服務器的配置情況。 

**FTP實現的目標**
# 促進文件的共享（計算機程序或數據）右
# 鼓勵間接或者隱式的使用遠程計算機
# 向用戶屏蔽不同主機中各種文件存儲系統（File system）的細節
# 可靠和高效的傳輸數據

**主動和被動模式**
FTP有兩種使用模式：主動和被動。主動模式要求客戶端和服務器端同時打開並且監聽一個端口以建立連接。在這種情況下，客戶端由於安裝了防火牆會產生一些問題。所以，創立了被動模式。被動模式只要求服務器端產生一個監聽相應端口的進程，這樣就可以繞過客戶端安裝了防火牆的問題。
一個主動模式的FTP連接建立要遵循以下步驟：
# 客戶端打開一個隨機的端口（端口號大於1024，在這裡，我們稱它為x），同時一個FTP進程連接至服務器的21號命令端口。此時，該tcp連接的來源地端口為客戶端指定的隨機端口x，目的地端口（遠程端口）為服務器上的21號端口。
# 客戶端開始監聽端口（x+1），同時向服務器發送一個端口命令（通過服務器的21號命令端口），此命令告訴服務器客戶端正在監聽的端口號並且已準備好從此端口接收數據。這個端口就是我們所知的數據端口。
# 服務器打開20號源端口並且建立和客戶端數據端口的連接。此時，來源地的端口為20，遠程數據(目的地)端口為（x+1）。
# 客戶端通過本地的數據端口建立一個和服務器20號端口的連接，然後向服務器發送一個應答，告訴服務器它已經建立好了一個連接。

**軟件支持**

**瀏覽器**
大部分常見的網頁瀏覽器都可以檢索FTP服務器上託管的文件，儘管它們並不支持擴展協議，如FTPS。當瀏覽器訪問FTP格式的URL時，將以Web文件目錄顯示遠程服務器上的可訪問內容。使用類似FireFTP客戶端可獲得FTP擴展協議的完整支持。
Chrome和Firefox等主流瀏覽器都將計劃棄用對FTP的支持，2019年推出的Chrome 82已停止對FTP支持，在2020年因COVID-19疫情增加的遠距辦公需求而短暫恢復FTP，但於2021年10月推出的Chrome95完全移除FTP相關程式碼。而Firefox原預定於版本77中停止支持FTP，最終在2021年7月發行的90版正式停止支援FTP協定。微軟的Edge瀏覽器也在2020年起停止支援FTP，Internet Explorer 11仍保留FTP用戶端，直到2022年6月15日終止支援。

**語法**
FTP URL 格式已在1738指定，格式為：ftp://user:password@host:port/url-path（方括號內為可選參數）。
有關指定用戶名和密碼的更多詳細信息，可以在瀏覽器的文檔中找到（例如Firefox和Internet Explorer）。默認情況下，大多數Web瀏覽器使用被動（PASV）模式，該模式更容易遍歷終端防火牆。

**下載管理器**
大部分常見的下載管理器都可以收取FTP服務器上託管的文件，其中一些還提供界面來檢索FTP服務器上託管的文件。DownloadStudio和Internet Download Accelerator既能從FTP服務器下載文件，又能查看FTP服務器上的文件。

**其他**
LibreOffice支持打開FTP服務器上的文件，但從7.4版本起，這一功能被標記為過時，開發者打算在將來的版本中將其移除。

**安全性**
FTP不是一項安全的協議，並且具有許多安全漏洞。1999年5月發佈的2577中列出了以下幾個主要的漏洞：- 暴力破解- FTP bounce attack- 數據包捕獲- 端口竊取（猜測下一個開放端口並篡奪合法連接）- 欺騙攻擊- 用戶名枚舉
通過FTP傳輸的流量不會被加密，所有傳輸通過明文進行的。任何能夠在網絡上執行數據包捕獲（ 嗅探 ）的人都可以讀取用戶名、密碼、命令內容和數據。此問題在加密機制（如TLS或SSL）產生之前的許多Internet協議規範（如SMTP 、Telnet 、POP和IMAP）中較為普遍。
此問題的常見解決方案包括： 
# 使用協議的安全版本，例如FTPS而不是FTP，TelnetS而不是Telnet。
# 使用可以處理作業的不同的，更安全的協議，例如  SSH文件傳輸協議或安全複製協議 。
# 使用安全隧道（如Secure Shell或虛擬私人網路 ）。

**FTP 命令**
可以被傳送到FTP伺服器的FTP命令列表，包含由IETF在中標準化的所有命令。需要注意的是，大多數命令列FTP用戶端都給用戶提供了額外的命令集。例如，GET是一個常見的用來下載檔案的用戶命令，用來替代原始的RETR命令。

**FTP 服務器返回碼**
包含由IETF在中標準化的所有服務器返回碼。回覆代碼是一個三位數值，第一個數字用於表示三種可能的結果之一————成功、失敗、表示錯誤或不完整的回覆。

**衍生品**

**FTPS**
FTPS是FTP標準的擴展，添加了安全套接層（SSL）以及其繼任者傳輸層安全性協定（TLS）的支持。

**SSH文件傳輸協議**
SSH文件傳輸協議（縮寫：SFTP）可用於傳輸文件並具有類似的用戶命令集，但使用Secure Shell協議（SSH）傳輸文件。與FTP不同，它對命令和數據進行加密，防止密碼和敏感信息通過網絡公開傳輸。它無法與FTP兼容。

**小型文件傳輸協議**
小型文件傳輸協議（Trivial File Transfer Protocol, TFTP），是一種於1981年在RFC 783中定義的簡化的文件傳輸協議（FTP）。

**簡單文件傳輸協議**
簡單文件傳輸協議（Simple File Transfer Protocol）由913定義，其複雜程度介於TFTP和FTP之間。它從未在互聯網上被廣泛接受。它通過端口115運行，支持三種類型的數據傳輸： ASCII 、 二進制和連續。該協議還支持使用用戶名和密碼登錄、文件夾和文件管理（包括重命名、刪除、上傳、下載）。

**參考文獻**

**引用**

**來源**
 《RFC 0959文件傳輸協議》. J. Postel; J. Reynolds. 1985.10（格式：文本，147316字節. http://www.ietf.org/rfc/rfc959.txt date=20130326015352  ）. 最早的RFC 114和之後的RFC 765已被廢除。

**參見**
 小文件傳輸協議（TFTP）- SSH文件傳輸協議（SSH file transfer protocol）- 安全FTP（Secure FTP）- FTPS- 簡單文件傳輸協議（Simple File Transfer Protocol）- WS FTP（FTP 工具）- FTP客戶端比較 - FTP服務器列表

**外部鏈接 ==