文件傳輸協議(英文:File Transfer Protocol,簡稱為FTP)是用于在網絡上進行文件傳輸的一套標準協議。它屬于網絡傳輸協議的應用層。
FTP是一個8位的客戶端-服務器協議,能操作任何類型的文件而不需要進一步處理,就像MIME或Unicode一樣。但是,FTP有著極高的延時,這意味著,從開始請求到第一次接收需求數據之間的時間,會非常長;并且不時的必須執行一些冗長的登陸進程。
?
概述
FTP服務一般運行在20和21兩個端口。端口20用于在客戶端和服務器之間傳輸數據流,而端口21用于傳輸控制流,并且是命令通向ftp服務器的進口。當數據通過數據流傳輸時,控制流處于空閑狀態。而當控制流,空閑很長時間后,客戶端的防火墻,會將其會話置為超時,這樣當大量數據通過防火墻時,會產生一些問題。此時,雖然文件可以成功的傳輸,但因為控制會話,會被防火墻斷開;傳輸會產生一些錯誤。
FTP實現的目標:
- 促進文件的共享(計算機程序或數據)
- 鼓勵間接或者隱式的使用遠程計算機
- 向用戶屏蔽不同主機中各種文件存儲系統(File system)的細節
- 可靠和高效的傳輸數據
缺點:
- 密碼和文件內容都使用明文傳輸,可能產生不希望發生的竊聽。
- 因為必須開放一個隨機的端口以創建連接,當防火墻存在時,客戶端很難過濾處于主動模式下的FTP流量。這個問題,通過使用被動模式的FTP,得到了很大解決。
- 服務器可能會被告知連接一個第三方計算機的保留端口。
- 此方式在需要傳輸文件數量很多的小文件時,性能不好
FTP雖然可以被終端用戶直接使用,但是它是設計成被FTP客戶端程序所控制。
運行FTP服務的許多站點都開放匿名服務,在這種設置下,用戶不需要帳號就可以登錄服務器,默認情況下,匿名用戶的用戶名是:"anonymous"。這個帳號不需要密碼,雖然通常要求輸入用戶的郵件地址作為認證密碼,但這只是一些細節或者此郵件地址根本不被確定,而是依賴于FTP服務器的配置情況。
FTP具有很強的兼容性,可以在不同的操作系統之間通信,可以使用不同的字符集、不同的文件結構以及不同的文件格式。
FTP使用三種傳輸方式:
流方式:數據作為連續的字節流從FTP交付給TCP
塊方式:數據按塊從FTP交付給TCP
壓縮方式:將數據壓縮后進行傳送
?
主動和被動模式
FTP有兩種使用模式:主動和被動。主動模式要求客戶端和服務器端同時打開并且監聽一個端口以創建連接。在這種情況下,客戶端由于安裝了防火墻會產生一些問題。所以,創立了被動模式。被動模式只要求服務器端產生一個監聽相應端口的進程,這樣就可以繞過客戶端安裝了防火墻的問題。
一個主動模式的FTP連接創建要遵循以下步驟:
- 客戶端打開一個隨機的端口(端口號大于1024,在這里,我們稱它為x),同時一個FTP進程連接至服務器的21號命令端口。此時,該tcp連接的來源地端口為客戶端指定的隨機端口x,目的地端口(遠程端口)為服務器上的21號端口。
- 客戶端開始監聽端口(x+1),同時向服務器發送一個端口命令(通過服務器的21號命令端口),此命令告訴服務器客戶端正在監聽的端口號并且已準備好從此端口接收數據。這個端口就是我們所知的數據端口。
- 服務器打開20號源端口并且創建和客戶端數據端口的連接。此時,來源地的端口為20,遠程數據(目的地)端口為(x+1)。
- 客戶端通過本地的數據端口創建一個和服務器20號端口的連接,然后向服務器發送一個應答,告訴服務器它已經創建好了一個連接。
?
FTP和網頁瀏覽器
大多數最新的網頁瀏覽器和文件管理器都能和FTP服務器創建連接。這使得在FTP上通過一個接口就可以操控遠程文件,如同操控本地文件一樣。這個功能通過給定一個FTP的URL實現,形如ftp://<服務器地址>(例如,ftp://ftp.gimp.org?)。是否提供密碼是可選擇的,如果有密碼,則形如ftp://<login>:<password>@<ftpserveraddress>。大部分網頁瀏覽器要求使用被動FTP模式,然而并不是所有的FTP服務器都支持被動模式。
?
架設FTP服務器
一、Windows Server 2008 R2
Windows Server 2008 R2 中自帶了FTP Server 7.5,可單獨下載安裝。
FTP 7.5 for IIS 7.x (x86)
FTP 7.5 for IIS 7.x (x64)
FTP 7.5 新特性:原文地址
與IIS 7.x集成(IIS 7.0、IIS 7.5):FTP 7.5已經作為IIS 7.x的一部分被安裝,便于集中管理、維護。
對互聯網標準更好、更安全的支持:支持SSL上的FTP、IPv6、UTF8。
共享宿主改進:可以將FTP架設在已經存在的站點,多個FTP使用同一IP。
改進的日志與功能性支持:提供更加詳細的日志記錄。
可擴展性增強:可以編寫自定義的用戶驗證機制。
?
下面在VirtualBox虛擬機中架設FTP服務器。宿主機IP:192.168.0.100,虛擬機IP:192.168.0.101,虛擬網卡采用橋連模式。
1.1、打開Server Manager,在角色中點擊【添加角色】:
?
1.2、選中【Web Server(IIS)】,點擊【下一步】:
?
1.3、點擊【下一步】:
?
1.4、在開發服務器上,建議全部選中,在生產服務器上,則酌情選擇,點擊【下一步】:
?
1.5、點擊【安裝】:
?
1.6、安裝成功后關閉向導:
?
1.7、開始à運行,輸入:inetmgr,打開IIS 管理器:
?
1.8、可以看到FTP 7.5包含的選項:
?
1.9、新建一個FTP站點:
?
1.10、輸入名稱和物理路徑,點擊【下一步】:
?
1.11、IP不限制,默認端口21,不需要SSL證書,點擊【下一步】:
?
1.12、設置權限,點擊【完成】:
?
1.13、在瀏覽器中輸入FTP服務器地址,若無法訪問請檢查宿主機與虛擬機的防火墻設置:
?
1.14、使用命令行訪問FTP
最常用的命令有:
ls 列出遠程機的當前目錄
cd 在遠程機上改變工作目錄
lcd 在本地機上改變工作目錄
ascii 設置文件傳輸方式為ASCII模式
binary 設置文件傳輸方式為二進制模式
close 終止當前的ftp會話
hash 每次傳輸完數據緩沖區中的數據后就顯示一個#號
get(mget) 從遠程機傳送指定文件到本地機
put(mput) 從本地機傳送指定文件到遠程機
open 連接遠程ftp站點
quit 斷開與遠程機的連接并退出ftp
? 顯示本地幫助信息
?
輸入ftp 主機名/IP登錄:
?
由于設置為允許匿名訪問,故可以用匿名賬戶登錄(用戶名:anonymous,密碼任意):
?
查看所有目錄和文件:
?
下載一個文件到本地:
?
輸入bye退出登錄:
?
1.15、使用FTP客戶端連接FTP服務器
我使用的FileZilla:
?
可以在WireShark中抓到數據包:
?
二、Ubuntu 11.04
Linux下有很多FTP軟件,這里以Ubuntu下面的Pure-FTPd為例來搭建一下Linux中的FTP Server。
Pure-FTPd是一個基于BSD協議授權的開源FTP Server,官方主頁:http://www.pureftpd.org,功能全面,具體功能可以查看文檔。
安裝Pure-FTPd
?
由于Ubuntu源里的包太老了,故我選擇直接下載源代碼編譯安裝。在http://download.pureftpd.org/pub/pure-ftpd/releases/下載最新穩定版,我下載的是pure-ftpd-1.0.32.tar.gz。
?
?
?
解壓縮:tar zxvf pure-ftpd-1.0.32.tar.gz
?
?
cd 壓縮后的目錄
?
?
./configure
?
?
make
?
?
sudo make install
?
?
?
啟動FTP Server:
?
?
sudo /usr/local/sbin/pure-ftpd &
?
?
連接測試:
?
?
ftp localhost
?
?
查看當前目錄下的目錄和文件:
?
?
在Windows中用命令行連接:
?
?
Pure-FTPd有很多命令及參數配置,具體用法請參閱官方文檔。
?
?
小結:
?
?
FTP作為十分常用的文件傳輸協議,在企業中有著廣泛的引用,各平臺下也提供了大量的Server、Client。在使用中除了關注傳輸速度之外,傳輸安全性也是必須考慮的。
?
?
以下引用維基百科中的常用FTP Server、Client,根據需要選用:
?
?
FTP服務器列表
維基百科,自由的百科全書
以下是FTP服務器的列表。
[編輯]圖形界面
- Bullet Proof FTP Server?[1]
- CesarFTP?[2]
- Cerberus FTP Server?[3]
- Gene6 FTP Server?[4]
- GuildFTPd?[5]
- PureFTPd?[6]
- RaidenFTPD?[7]
- Serv-U FTP Server?[8]
- War FTP Daemon?[9]
[編輯]文字界面
- AnomicFTPD?[10]
- BSD ftpd
- glFTPd?[11]
- ProFTPd
- vsftpd?[12]
- wu-ftpd?[13]
?
FTP客戶端列表
維基百科,自由的百科全書
以下是FTP客戶端的列表。
[編輯]圖形界面
- AnyClient?[1]
- Core FTP?[2]
- CrossFTP?[3]
- CuteFTP
- DeluxeFTP
- FileZilla
- FlashFXP
- FTP Surfer?[4]
- FTPRush?[5]
- gFTP
- OneButton FTP?[6]
- SmartFTP?[7]
- Total Commander
- WISE-FTP
- WS FTP?[8]
- 8uftp?[9]
[編輯]文字界面
- lftp
- NcFTP
- tnftp?[10]
- Wget(只能下傳)
[編輯]只支持SFTP/SCP
- Sftp for win32?[11]
- WinSCP?[12]