簡介
與大多數Internet服務一樣,FTP也是一個客戶機/服務器系統。用戶通過一個支持FTP協議的客戶機程序,連接到在遠程主機上的FTP服務器程序。用戶通過客戶機程序向服務器程序發出FTP命令,服務器程序執行用戶所發出的FTP命令,并将執行的結果返回到客戶機。
文件傳輸協議(FileTtranferProtocol,FTP)是一個被廣泛應用的協議,它能夠在網絡上方便地傳輸文件,早期FTP并沒有涉及安全問題,随着互連網應用的快速增長,人們對安全的要求也不斷提高。
FTP命令是Internet用戶使用最頻繁的命令之一,不論是在DOS、Windows的命令行、LINUX、UNⅨ還是AⅨ操作系統下都可以使用FTP,都會遇到大量的FTP内部命令,熟悉并靈活應用FTP命令,可以大大方便使用者,并收到事半功倍之效。
比如說,用戶發出一條命令,要求服務器向用戶傳送某一個文件的一份拷貝,服務器會響應這條命令,将指定文件送至用戶的機器上。客戶機程序代表用戶接收到這個文件,将其存放在用戶目錄中。
FTP服務器曆史
原始規範由Abhay Bhushan編寫,并于1971年4月16日作為RFC114發布。直到1980年,FTP才在TCP/IP的前身NCP上運行。該協議先被TCP/IP版本,RFC765(1980年6月)取代,後來又被RFC959(1985年10月)所取代,這也是當前規範。RFC959提出了若幹标準修改,例如RFC1579(1994年2月)使FTP能夠穿越NAT與防火牆(被動模式),RFC2228(1997年6月)提出安全擴展,RFC2428(1998年9月)增加了對IPv6的支持,并定義了一種新型的被動模式。
概述
FTP服務一般運行在20和21兩個端口。端口20用于在客戶端和服務器之間傳輸數據流,而端口21用于傳輸控制流,并且是命令通向ftp服務器的進口。當數據通過數據流傳輸時,控制流處于空閑狀态。而當控制流空閑很長時間後,客戶端的防火牆會将其會話置為超時,這樣當大量數據通過防火牆時,會産生一些問題。此時,雖然文件可以成功的傳輸,但因為控制會話,會被防火牆斷開;傳輸會産生一些錯誤。
FTP雖然可以被終端用戶直接使用,但是它是設計成被FTP客戶端程序所控制。
運行FTP服務的許多站點都開放匿名服務,在這種設置下,用戶不需要帳号就可以登錄服務器,默認情況下,匿名用戶的用戶名是:“anonymous”。這個帳号不需要密碼,雖然通常要求輸入用戶的郵件地址作為認證密碼,但這隻是一些細節或者此郵件地址根本不被确定,而是依賴于FTP服務器的配置情況。
FTP實現的目标
促進文件的共享(計算機程序或數據)
主條目:FTP命令列表主條目:FTP服務器返回碼主條目:FTPS主條目:SFTP主條目:TFTP
鼓勵間接或者隐式的使用遠程計算機
向用戶屏蔽不同主機中各種文件存儲系統(File system)的細節
可靠和高效的傳輸數據
主動和被動模式
FTP有兩種使用模式:主動和被動。主動模式要求客戶端和服務器端同時打開并且監聽一個端口以創建連接。在這種情況下,客戶端由于安裝了防火牆會産生一些問題。所以,創立了被動模式。被動模式隻要求服務器端産生一個監聽相應端口的進程,這樣就可以繞過客戶端安裝了防火牆的問題。
一個主動模式的FTP連接創建要遵循以下步驟:
客戶端打開一個随機的端口(端口号大于1024,在這裡,我們稱它為x),同時一個FTP進程連接至服務器的21号命令端口。此時,該tcp連接的來源地端口為客戶端指定的随機端口x,目的地端口(遠程端口)為服務器上的21号端口。
客戶端開始監聽端口(x+1),同時向服務器發送一個端口命令(通過服務器的21号命令端口),此命令告訴服務器客戶端正在監聽的端口号并且已準備好從此端口接收數據。這個端口就是我們所知的數據端口。
服務器打開20号源端口并且創建和客戶端數據端口的連接。此時,來源地的端口為20,遠程數據(目的地)端口為(x+1)。
客戶端通過本地的數據端口創建一個和服務器20号端口的連接,然後向服務器發送一個應答,告訴服務器它已經創建好了一個連接。
浏覽器支持情況
大多數最新的網頁浏覽器和文件管理器都能和FTP服務器創建連接。這使得在FTP上通過一個接口就可以操控遠程文件,如同操控本地文件一樣。這個功能通過給定一個FTP的URL實現,形如ftp://<服務器地址>(例如,ftp://ftp.gimp.org)。是否提供密碼是可選擇的,如果有密碼,則形如ftp://
安全性
FTP不是一項安全的協議,并且具有許多安全漏洞。1999年5月發布的RFC2577中列出了以下幾個主要的漏洞:
蠻力攻擊;
FTP反彈攻擊;
數據包捕獲;
端口竊取(猜測下一個開放端口并篡奪合法連接);
欺騙攻擊;
用戶名枚舉。
通過FTP傳輸的流量不會被加密,所有傳輸通過明文進行的。任何能夠在網絡上執行數據包捕獲(嗅探)的人都可以讀取用戶名、密碼、命令内容和數據。此問題在加密機制(如TLS或SSL)産生之前的許多Internet協議規範(如SMTP、Telnet、POP和IMAP)中較為普遍。此問題的常見解決方案包括:
使用協議的安全版本,例如FTPS而不是FTP,TelnetS而不是Telnet。
使用可以處理作業的不同的,更安全的協議,例如SSH文件傳輸協議或安全複制協議。
使用安全隧道(如Secure Shell或虛拟專用網)。
FTP命令
可以被發送到FTP服務器的FTP命令列表,包含由IETF在RFC 959中标準化的所有命令。需要注意的是,大多數命令行FTP客戶端都給用戶提供了額外的命令集。例如,GET是一個常見的用來下載文件的用戶命令,用來替代原始的RETR命令。
FTP服務器返回碼
包含由IETF在RFC 959中标準化的所有服務器返回碼。回複代碼是一個三位數值,第一個數字用于表示三種可能的結果之一————成功、失敗、表示錯誤或不完整的回複。
派生品
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)由RFC913定義,其複雜程度介于TFTP和FTP之間。它從未在互聯網上被廣泛接受。它通過端口115運行,支持三種類型的數據傳輸:ASCII、二進制和連續。該協議還支持使用用戶名和密碼登錄、文件夾和文件管理(包括重命名、删除、上傳、下載)。



















