FTP協議連接模式的分析
對于網絡來說,現在它已經不是單獨的一個事物了。在融合了多種應用的現下,它和其它協議的融合讓其協議結構更為多樣。現在我們就來簡單學習一下FTP協議的鏈接模式。起初,FTP協議并不是應用于IP網絡上的協議,而是ARPANEt網絡中計算機間的文件傳輸協議, ARPANET是美國國防部組建的老網絡,于1960-1980年使用。在那時,FTP的主要功能是在主機間高速可靠地傳輸文件。目前FTP仍然保持其可靠性,即使在今天,它還允許文件遠程存取。這使得用戶可以在某個系統上工作,而將 文件存貯在別的系統。例如,如果某用戶運行Web服務器,需要從遠程主機上取得HTML文件和CGI程序在本機上工作,他需要從遠程存儲站點獲取文件(遠 程站點也需安裝Web服務器)。當用戶完成工作后,可使用FTP協議將文件傳回到Web服務器。采用這種方法,用戶無需使用Telnet登錄到遠程主機進行工 作,這樣就使Web服務器的更新工作變得如此的輕松。
FTP是TCP/IP的一種具體應用,它工作在OSI模型的第七層,TCP模型的第四層上,即應用層,使用TCP 傳輸而不是UDP,這樣FTP客戶在和服務器建立連接前就要經過一個被廣為熟知的"三次握手"的過程,它帶來的意義在于客戶與服務器之間的連接是可靠的, 而且是面向連接,為數據的傳輸提供了可靠的保證。
下面,讓我們來看看,一個FTP客戶在和服務器連接是怎么樣的一個過程(以標準的FTP端口號為例)。
首先,FTP并不像HTTP協議那樣,只需要一個端口作為連接(HTTP的默認端口是80,FTP的默認端口是 21),FTP需要2個端口,一個端口是作為控制連接端口,也就是21這個端口,用于發送指令給服務器以及等待服務器響應;另一個端口是數據傳輸端口,端 口號為20(僅PORT模式),是用來建立數據傳輸通道的,主要有3個作用:
從客戶向服務器發送一個文件。
從服務器向客戶發送一個文件。
從服務器向客戶發送文件或目錄列表。
FTP協議連接模式
其次,FTP的連接模式有兩種,PORT和PASV。PORT模式是一個主動模式,PASV是被動模式,這里都是相對于服務器而言的。
PORT模式
當FTP客戶以PORT模式連接服務器時,他動態的選擇一個端口號(本次試驗是6015)連接服務器的21端口, 注意這個端口號一定是1024以上的,因為1024以前的端口都已經預先被定義好,被一些典型的服務使用,當然有的還沒使用,保留給以后會用到這些端口的 資源服務。當經過TCP的三次握手后,連接(控制信道)被建立。現在用戶要列出服務器上的目錄結構(使用ls或dir命令),那么首先就 要建立一個數據通道,因為只有數據通道才能傳輸目錄和文件列表,此時用戶會發出PORT指令告訴服務器連接自己的什么端口來建立一條數據通道(這個命令由 控制信道發送給服務器),當服務器接到這一指令時,服務器會使用20端口連接用戶在PORT指令中指定的端口號,用以發送目錄的列表。當完成這 一操作時,FTP客戶也許要下載一個文件,那么就會發出get指令,請注意,這時客戶會再次發送PORT指令,告訴服務器連接他的哪個"新"端口,你可以 先用netstat -na這個命令驗證,上一次使用的6044已經處于TIME_WAIT狀態。當這個新的數據傳輸通道建立后(在微軟的系統中,客戶端通常會使用 連續的端口,也就是說這一次客戶端會用6045這個端口),就開始了文件傳輸的工作。
PASV模式
然而,當FTP協議的客戶以PASV模式連接服務器時,情況就有些不同了。在初始化連接這個過程即連接服務器這個過程和 PORT模式是一樣的,不同的是,當FTP客戶發送ls、dir、get等這些要求數據返回的命令時,他不向服務器發送PORT指令而是發送PASV指 令,在這個指令中,用戶告訴服務器自己要連接服務器的某一個端口,如果這個服務器上的這個端口是空閑的可用的,那么服務器會返回ACK的確認信息,之后數 據傳輸通道被建立并返回用戶所要的信息(根據用戶發送的指令,如ls、dir、get等);如果服務器的這個端口被另一個資源所使用,那么服務器返回 UNACK的信息,那么這時,FTP客戶會再次發送PASV命令,這也就是所謂的連接建立的協商過程。為了驗證這個過程我們不得不借助CUTEFTP Pro這個大家經常使用的FTP客戶端軟件,因為微軟自帶的FTP命令客戶端,不支持PASV模式。雖然你可以使用QUOTE PASV這個命令強制使用PASV模式,但是當你用ls命令列出服務器目錄列表,你會發現它還是使用PORT方式來連接服務器的。