ftp服務器的一些基本理論和兩個常見問題


 

  文件傳輸協議FTP(File Transfer Protocol)是因特網中使用最廣泛的文件傳輸協議。FTP使用交互式的訪問,允許客戶指定文件的類型和格式(如指明是否使用ASCII碼),並允許文件具有存取權限(如訪問文件的用戶必須經過授權,並輸入有效的口令)。

  文件傳輸協議有基於TCP的FTP和基於UDP的簡單文件傳輸協議TFTP,它們都是文件共享協議中的一大類,即復制整個文件,其特點是:若要存取一個文件,就必須先獲得一個本地的文件副本。如果要修改文件,只能對文件的副本進行修改,然后再將修改后的文件傳回到原節點。FTP協議的任務是從一台計算機將文件傳送到另一台計算機,它與這兩台計算機所處的位置、聯接的方式、甚至是是否使用相同的操作系統無關。假設兩台計算機通過ftp協議對話,並且能訪問Internet, 你可以用ftp命令來傳輸文件。每種操作系統使用上有某一些細微差別,但是每種協議基本的命令結構是相同的。

ftp原理圖:

  FTP使用客戶端-服務器模型,一個FTP服務器進程可以為多個客戶進程提供服務。FTP服務器有兩大部分組成:一個主進程,負責接受新的請求;還有若干從屬進程,負責處理單個請求。主進程工作步驟

  • 打開熟知端口(21),使客戶進程能夠連接上
  • 等待客戶進程發送連接請求
  • 啟動從屬進程處理客戶進程發送的連接請求,從屬進程處理完請求后結束,從屬進程在運行期間可能根據需要可創建其他一些子進程
  • 回到等待狀態,繼續接受其他客戶進程發起的請求,主進程與從屬進程的處理是並發進行的

  FTP控制連接在整個會話期間都保持打開,只用來發送連接/傳送請求。當客戶進程向服務器發送連接請求時,尋找連接服務器進程的熟知端口21,同時還要告訴服務器進程自己的另一個端口號碼,用於建立數據傳送連接。接着,服務器進程用自己傳送數據的熟知端口20與客戶進程所提供的端口號碼建立數據傳送連接,FTP使用了2個不同的端口號,所以數據連接和控制連接不會混亂。

FTP的工作模式

  FTP有兩種工作模式,分別是主動模式(PORT)和被動模式(PASV)兩種模式,這兩種模式是按照FTP服務器的“角度”來說的,更通俗一點說就是:在傳輸數據時,如果是服務器主動連接客戶端,那就是主動模式;如果是客戶端主動連接服務器,那就是被動模式。關於主動模式和被動模式更具體的講解請點擊:http://www.today-wx.com/share/38.html

問題:

FTP的兩種工作模式的區別

  FTP支持兩種模式,一種方式叫做Standard (也就是 PORT方式,主動方式),一種是 Passive (也就是PASV,被動方式)。 Standard模式 FTP的客戶端發送 PORT 命令到FTP服務器。Passive模式FTP的客戶端發送 PASV命令到 FTP Server。

  下面介紹一個這兩種方式的工作原理:

  Port模式FTP 客戶端首先和FTP服務器的TCP 21端口建立連接,通過這個通道發送命令,客戶端需要接收數據的時候在這個通道上發送PORT命令。 PORT命令包含了客戶端用什么端口接收數據。在傳送數據的時候,服務器端通過自己的TCP 20端口連接至客戶端的指定端口發送數據。 FTP server必須和客戶端建立一個新的連接用來傳送數據。(可以看到在這種方式下是客戶端和服務器建立控制連接,服務器向客戶端建立數據連接,其中,客戶端的控制連接和數據連接的端口號是大於1024的兩個端口號(臨時端口),而FTP服務器的數據端口為20,控制端口為21)

  Passive模式在建立控制通道的時候和Standard模式類似,但建立連接后發送的不是Port命令,而是Pasv命令。FTP服務器收到Pasv命令后,隨機打開一個臨時端口(也叫自由端口,端口號大於1023小於65535)並且通知客戶端在這個端口上傳送數據的請求,客戶端連接FTP服務器此端口,然后FTP服務器將通過這個端口進行數據的傳送,這個時候FTP server不再需要建立一個新的和客戶端之間的連接。(可以看到這種情況下的連接都是由客戶端向服務器發起的,與下面所說的“為了解決服務器發起到客戶的連接的問題,人們開發了一種不同的FTP連接方式。這就是所謂的被動方式”相對應,而服務器端的數據端口是臨時端口,而不是常規的20)

  很多防火牆在設置的時候都是不允許接受外部發起的連接的,所以許多位於防火牆后或內網的FTP服務器不支持PASV模式,因為客戶端無法穿過防火牆打開FTP服務器的高端端口;而許多內網的客戶端不能用PORT模式登陸FTP服務器,因為從服務器的TCP 20無法和內部網絡的客戶端建立一個新的連接,造成無法工作。

  主動模式要求客戶端和服務器端同時打開並且監聽一個端口以建立連接。在這種情況下,客戶端由於安裝了防火牆會產生一些問題。所以,創立了被動模式。被動模式只要求服務器端產生一個監聽相應端口的進程,這樣就可以繞過客戶端安裝了防火牆的問題。

  在被動方式FTP中,命令連接和數據連接都由客戶端發起,這樣就可以解決從服務器到客戶端的數據端口的入方向連接被防火牆過濾掉的問題。

  參考:http://blog.csdn.net/u010154760/article/details/45458219

如何知道ftp傳送一個文件結束?

 這個問題比較經典,前面說過,通用傳輸方式是流方式,並且文件的結尾是以關閉數據連接為標志,這意味着對每一個文件傳輸或目錄列表來說都要建立一個全新的數據連接。其一般過程如下:

  1. 正由於是客戶發出命令要求建立數據連接,所以數據連接是在客戶的控制下建立的。
  2. 客戶通常在客戶端主機上為所在數據連接端選擇一個臨時端口號。客戶從該端口發布一個被動的打開。
  3. 客戶使用PORT命令從控制連接上把端口號發向服務器。(主動模式)
  4. 服務器在控制連接上接收端口號,並向客戶端主機上的端口發布一個主動的打開。服務器的數據連接端一直使用端口 2 0。

  服務器總是執行數據連接的主動打開。通常服務器也執行數據連接的主動關閉,除非當客戶向服務器發送流形式的文件時,需要客戶來關閉連接(它給服務器一個文件結束的通知)。

FTP 959協議下載地址:https://pan.baidu.com/s/1pJ4ncHP

參考:http://www.cnblogs.com/xiaohh/p/4789813.html

     http://www.cnblogs.com/luoxn28/p/5585458.html

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM