FTP主動模式及被動模式

2021-04-12 20:09:02 字數 3147 閱讀 9317

起初, ftp並不是應用於ip網路上的協議,而是arpanet網路中計算機間的檔案傳輸協議, arpanet是美國國防部組建的老網路,於1960~2023年使用。在那時, 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個作用

1) 從客戶向伺服器傳送乙個檔案。

2) 從伺服器向客戶傳送乙個檔案。

3) 從伺服器向客戶傳送檔案或目錄列表。

其次,ftp的連線模式有兩種,port和pasv。port模式是乙個主動模式,pasv是被動模式,這裡都是相對於伺服器而言的。為了讓大家清楚的認識這兩種模式,朗月繁星分別舉例說明。

port模式

當ftp客戶以port模式連線伺服器時,他動態的選擇乙個埠號(本次試驗是6015)連線伺服器的21埠,注意這個埠號一定是1024以上的,因為1024以前的埠都已經預先被定義好,被一些典型的服務使用,當然有的還沒使用,保留給以後會用到這些埠的資源服務。當經過tcp的三次握手後,連線(控制通道)被建立(如圖1和圖2)。

圖1:ftp客戶使用ftp命令建立於伺服器的連線

圖2:用netstat命令檢視,控制通道被建立在客戶機的6015和伺服器的20埠

現在使用者要列出伺服器上的目錄結構(使用ls或dir命令),那麼首先就要建立乙個資料通道,因為只有資料通道才能傳輸目錄和檔案列表,此時使用者會發出port指令告訴伺服器連線自己的什麼埠來建立一條資料通道(這個命令由控制通道傳送給伺服器),當伺服器接到這一指令時,伺服器會使用20埠連線使用者在port指令中指定的埠號,用以傳送目錄的列表(如圖3)。

圖3:ls命令是乙個互動命令,它會首先與伺服器建立乙個資料傳輸通道。經驗證本次試驗客戶機使用6044埠

當這個新的資料傳輸通道建立後(在微軟的系統中,客戶端通常會使用連續的埠,也就是說這一次客戶端會用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方式來連線伺服器的。現在我們使用cuteftp pro以pasv模式連線伺服器(如圖5),

圖5:使用cuteftp pro以pasv模式連線伺服器

請注意連線log裡有這樣幾句話:

其中,

227 entering passive mode (127,0,0,1,26,80).代表客戶機使用pasv模式連線伺服器的26x256+108=6764埠。(當然伺服器要支援這種模式)

125 data connection already open; transfer starting.說明伺服器的這個埠可用,返回ack資訊。

再讓我們看看用cuteftp pro以port模式連線伺服器的情況。其中在log裡有這樣的記錄:

其中,

port 127,0,0,1,28,37告訴伺服器當收到這個port指令後,連線ftp客戶的28x256+37=7205這個埠

accepting connection: 127.0.0.1:20 表示伺服器接到指令後用20埠連線7205埠,而且被ftp客戶接受。

在這兩個例子中,請注意: port模式建立資料傳輸通道是由伺服器端發起的,伺服器使用20埠連線客戶端的某乙個大於1024的埠;在pasv模式中,資料傳輸的通道的建立是由ftp客戶端發起的,他使用乙個大於1024的埠連線伺服器的1024以上的某乙個埠。如果從c/s模型這個角度來說,port對於伺服器來說是outbound,而pasv模式對於伺服器是inbound,這一點請特別注意,尤其是在使用防火牆的企業裡,比如使用微軟的isa server 2000發布乙個ftp伺服器,這一點非常關鍵,如果設定錯了,那麼客戶將無法連線。

最後,請注意在ftp客戶連線伺服器的整個過程中,控制通道是一直保持連線的,而資料傳輸通道是臨時建立的。

在本文中,朗月繁星把重點放到了ftp的連線模式,沒有涉及ftp的其他內容,比如ftp的檔案型別(type),格式控制(format control)以及傳輸方式(tran**ission mode)等。不過這些規範大家可能不需要花費過多的時間去了解,因為現在流行的ftp客戶端都可以自動的選擇正確的模式來處理,對於ftp伺服器端通常也都做了一些限制,如下

• 型別:ascii或影象。

• 格式控制:只允許非列印。

• 結構:只允許檔案結構。

• 傳輸方式:只允許流方式

FTP主動模式及被動模式

ftp主動模式及被動模式 ftp的特殊性 大多數的tcp服務是使用單個的連線,一般是客戶向伺服器的乙個周知埠發起連線,然後使用這個連線進行通訊。但是,ftp協議卻有所不同,它使用雙向的多個連線,而且使用的埠很難預計。一般,ftp連線包括 乙個控制連線 control connection 這個連線用...

FTP主動模式及被動模式

ftp的特殊性 大多數的tcp服務是使用單個的連線,一般是客戶向伺服器的乙個周知埠發起連線,然後使用這個連線進行通訊。但是,ftp協議卻有所不同,它使用雙向的多個連線,而且使用的埠很難預計。一般,ftp連線包括 乙個控制連線 control connection 這個連線用於傳遞客戶端的命令和伺服器...

mysql 主動 被動模式 ftp主動模式被動模式

在使用ftp時,如果客戶端機器和ftp伺服器雙方之間的所有埠都是開放的,那連線不存在問題。如果客戶端與伺服器之間有防火牆,如果沒配置好防火策略和採用合適的連線模式,會導致登入成功,但無法list列表的問題。要避免出現這樣的問題,首先要了解ftp的工作模式。1.ftp的port 主動模式 和pasv ...