文件傳輸協議:FTP
如下圖所示:用戶通過一個FTP用戶代理與FTP交互。該用戶首先提供遠程主機的主機名,使本地主機的FTP客戶機進程建立一個到遠程主機FTP服務器進程的TCP連接。然后,該用戶提供用戶標識和口令,作為FTP命令的一部分在該TCP連接上傳送。一旦該服務器向該用戶授權,用戶就可以向遠程文件系統拷貝存放在本地文件系統中的一個或多個文件(反之亦然)。
HTTP和FTP都是文件傳輸協議,並且有很多共同點。例如,他們都運行在TCP上。然而它們也有一些重要區別,其中最顯著的一點就是:
FTP使用兩個並行的TCP連接來傳輸文件,一個是控制連接(用於在兩主機之間傳遞控制信息),一個是數據連接(用於實際傳輸一個文件)。因為FTP協議使用一個分離的控制連接,所以我們也稱FTP的控制信息是帶外傳送的。
而HTTP協議是在傳輸文件的TCP連接中發送請求和響應首部行的。因此HTTP是帶內傳送控制信息的。
FTP協議的控制連接和數據連接如下圖所示:
·FTP客戶機聯系FTP服務器的21號端口,指定TCP為運輸協議
·客戶機通過控制連接獲得授權
·客戶機經控制連接通過發送命令瀏覽遠程目錄
·當服務器接收到一個文件傳輸命令時,該服務器打開到客戶機的一個數據連接
·在傳輸一個文件后,服務器關閉數據連接
·服務器打開第二個TCP數據連接,以傳輸另一個文件
總結:對FTP傳輸而言,控制連接貫穿了整個用戶會話期間,但是針對會話中的每一次文件傳輸都需要建立起一個新的數據連接(即數據連接是非持久的)。
注:FTP服務器必須在整個會話期間保留用戶的狀態信息。而HTTP是無狀態的,即它不需要對任何用戶狀態進行追蹤。
FTP命令和回答
下面是一些常用命令,它們經控制信道以ASCII 文本發送:
USER username:用於向服務器傳送用戶標識。
PASS password:用於向服務器傳送用戶口令。
LIST:返回當前目錄中的文件列表,文件列表是在(新建的非持久連接)數據連接上傳送的。
RETR filename:獲取(get) 文件,該命令觸發遠程主機發起一個數據連接,並在該數據連接上發送所請求文件。
STOR filename:存儲 (put)文件到遠程主機。
下面是一些常見的狀態碼及相應短語(如在HTTP中的那樣):
331 Username OK, password required
125 data connection already open; transfer starting
425 Can’t open data connection
452 Error writing file