1. 程式人生 > >FTP傳輸過程詳解

FTP傳輸過程詳解

介紹
FTP是一種非常常見的應用,已經成為檔案傳輸的Internet標準。FTP提供檔案傳輸的功能,即將完整的檔案從一個系統複製到另一系統,這一點與NFS(網路檔案系統)所提供的檔案訪問功能不同。在使用FTP時,可以要求提供帳號用以登入伺服器,也可使用匿名FTP方式登入伺服器。
FTP與Telnet最大的區別在於兩者處理不同主機、不同作業系統、不同檔案結構、不同字符集的方式,FTP針對不同系統採取特殊辦法,而telnet則強制不同系統使用同一標準,如7位ASCII碼等。
描述FTP的官方文件是RFC 959。

FTP協議
與其他應用不同的是FTP使用兩個連線,一個是用於控制的命令連線,用於控制命令從客戶端放到伺服器端,並將應答傳回給客戶端;另一個連線是實際的檔案傳輸連線,只在客戶端和伺服器端傳送檔案時建立。
FTP的體系結構包括使用者終端、客戶端、伺服器三部分,客戶端包含使用者命令直譯器,用於將使用者在使用者介面輸入的命令解釋為FTP協議協議。
在資料表示上,可以選擇使用以下檔案型別:ASCII檔案型別、EBCDIC檔案型別、影象檔案型別、本地檔案型別。
格式控制僅對於ASCII和EBCDIC檔案型別有效,它分為:非列印,即不包含向量格式資訊;Telnet格式控制,包含telnet向量格式控制;Fortran回車控制。
檔案結構上,可分為:檔案結構、記錄結構和頁結構。
在傳輸模式上,包分為:流模式、塊模式、壓縮模式。
常見FTP的UNIX實現限制使用者為以下選擇:
型別-ASCII或影象
格式控制-非列印
結構-檔案結構
傳輸模式-流模式

FTP命令
由於客戶端與伺服器之間的命令和應答都以NVT ASCII形式傳送,在每行結尾處都要有CR和LF對。
與FTP不同,telnet有兩種命令,一種是<IAC,IP>,它是一種中斷程序;另一種是telnet同步訊號,<IAC,DM>。兩種訊號的作用是中斷傳輸程序或查詢是否處於傳輸程序中。伺服器從客戶端接收的選項命令有WILL、WONT、DO、DONT,而應答命令只為DONT和WONT。
客戶端傳送給伺服器的命令有30種之多,以下是幾個常用FTP命令:
ABOR,中斷以前的FTP命令和任務的資料傳輸
LIST filelist,羅列檔案和目錄
PASS password,伺服器上的密碼
PORT n1,n2,n3,n4,n5,n6,客戶端IP地址(n1,n2,n3,n4)和埠(n5*256+n6)
QUIT,從伺服器登出
PETR filename,獲取(拿)檔案
STOR filename,儲存(放)檔案
SYST,伺服器返回系統型別
TPYE type,指定檔案型別:A代表ASCII,I代表影象
USER username,伺服器端的使用者名稱
有時互動式使用者輸入內容與FTP命令是一一對應的,而某些使用者命令會對應多條在控制連線上的FTP命令。

FTP應答
應答由3位數字和一段訊息字串組成,數字幫助軟體決定如何處理應答,字串幫助人們理解應答的含義。
不同數字有不同含義,如下所示:
1yz,肯定的初步應答。在傳送另一命令之前期望有另一個命令。
2yz,肯定的完成應答。可以傳送新命令了。
3yz,肯定的中間應答。命令已接受但必須傳送另一命令。
4yz,短暫的否定完成應答。要請求的行為未發生,但錯誤條件是暫時的,可以在以後重新發布命令。
5yz,永久的否定完成應答。命令未被接受,而且不應再重試了。

x0z,語法錯誤
x1z,資訊
x2z,連線。對控制和資料連線的應答
x3z,鑑權和記帳。對登入和記帳命令的應答
x4z,未指定
x5z,檔案系統狀態

第三位給出對錯誤訊息的附加含義。
以下是一些典型的應答:
125,資料連線已經開啟;傳送開始
200,命令成功
214,幫助訊息(對人)
331,使用者名稱正確,需要密碼
425,不能開啟資料連線
452,錯誤的檔案寫
500,語法錯誤(未識別的命令)
501,語法錯誤(非法引數)
502,未實現的MODE型別

一般每條FTP命令都會產生一行應答,如果對於產生多行應答的FTP命令,採用辦法為:在第一行開始是三位狀態碼,緊跟“-”符號,在最後一行開始依然是狀態碼,但緊跟的是空格,再然後跟的是資訊字串。

連線管理
資料連線用於三種目的:
將檔案從客戶端傳送至伺服器;
將檔案從伺服器傳送至客戶端;
從伺服器將檔案和目錄的列表傳送至客戶端。

FTP伺服器在向客戶端通過資料連線傳送的是檔案列表,而不是在控制連線上的多個應答。這樣能夠避免對目錄列表大小的限制,更易於客戶端將目錄列表的輸出儲存為檔案,而不是直接在終端列印目錄列表。
控制連線在整個FTP傳輸過程中都是持續的,而資料連線則是按需要開啟或關閉。對於常見的流模式,檔案結束關閉資料連線,因此對於每個檔案傳輸和目錄列表都要建立一個新的連線。一般過程如下:
1,客戶端控制資料的建立
2,客戶端選取臨時的埠,作為本端的資料連線埠,並由此埠發出被動開啟指令
3,客戶端使用PORT命令將埠傳送給伺服器,使用的是控制連線
4,伺服器接收到埠號,也是通過控制連線,併發出對客戶端的主動開啟命令,而伺服器一般使用20埠

下面用圖來講解連線的狀態:設定客戶端選用1173作為控制連線的臨時埠,資料連線選用1174埠。客戶端發出的PORT命令會將逗號分隔的六個十進位制資料以ASCII碼形式發給伺服器端。前四個指定客戶端的IP地址,140.252.13.34,幫助伺服器發出主動開啟訊號,後兩個指定16位埠號4*256+150=1174
伺服器不僅發出主動開啟,通常還會發出主動關閉,但在流模式向伺服器傳送檔案時,就要求客戶端去關閉資料連線。
有時候不用客戶端傳送PORT命令,但資料連線仍然要建立,只不過採用與控制連線相同的埠,伺服器仍使用20和21兩個埠建立連線。