自學 Linux 19—Linux 應用層網絡服務程序簡介—FTP 協議和服務

FTP 協議和服務

  FTP 協議英文全稱爲 File Transfer Protocol,簡稱 FTP,是一種從一個主機向另一個主機傳送文件的協議。FTP 協議的歷史可以追溯到 1971 年,不過至今仍然極爲流行,FTP 協議在 RFC959 中進行了詳細的說明。

1. FTP協議概述

  FTP 協議中客戶端與服務器端進行文件傳輸的交互方式如下圖(FTP 協議在本地和遠程服務器之間傳送文件)所示,客戶端包含用戶接口和客戶端接口,服務器端爲 FTP 服務器,客戶端和服務器端都與文件系統進行交互。

FTP 協議在本地和遠程服務器之間傳送文件

1. FTP 協議的步驟

  例如一個用戶想把遠程 FTP 服務器上的某個文件下載到本地來,需要經過如下幾個步驟。

  (1) 首先用戶通過 FTP 接口輸入命令,讓 FTP 客戶端接口連接遠方的 FTP 服務器主機。
  (2) 連接成功後,遠程的 FTP 服務器主機要求輸入合適的用戶名和密碼,在用戶名和密碼得到正確的驗證後,進入正常的 FTP 下載過程。
  (3) 與本地的文件系統相似,可以在遠程的 FTP 服務器上進行文件目錄的轉換,進入合適的目錄,進行相關的操作。
  (4) 對目標文件的下載,需要使用 FTP 協議特定的命令行格式,FTP 服務器進行解析後,與客戶端之間進行文件傳輸。
  (5) 文件傳輸成功後,客戶端關閉與服務器之間的 FTP 連接。

2. FTP 是雙端口服務器

  與上篇博客(點擊進入上篇博客)中介紹的 HTTP 協議相同,FTP 協議也建立在 TCP 協議之上,但是這兩個協議之間有很大的差別,最主要的差別是 FTP 協議使用兩個並行的 TCP 連接來傳送文件,一個是控制連接,另一個是數據連接。

  控制連接用於在客戶端和服務器端之間傳送控制信息,例如用戶名和密碼、改變目錄、上傳或者下載文件的命令等。數據連接用戶收發數據的連接信息如下圖(FTP 協議的雙 TCP 端口號連接)所示。由於 FTP 協議的控制信息是由一個單獨的 TCP 連接來控制,通常將控制信息稱爲 FTP 的帶外數據,即控制信息是不包含在 FTP 協議的數據連接之中的。

FTP 協議的雙 TCP 端口號連接

  當 FTP 的客戶端與遠程的 FTP 服務器端啓動 FTP 會話過程的時候,FTP 的客戶端首先連接 FTP 服務器的 21 端口。連接成功後,將登錄所用的用戶名和登錄密碼發送給服務器端,登錄成功後就可以進行命令交互了。

  經典的 FTP 協議客戶端將本地的數據端口告訴服務器端,以方便在進行文件上傳或者下載的時候服務器連接客戶端的數據端口。而最新的 FTP 協議允許客戶端連接 FTP 服務器的 20 端口來進行數據的收發。控制數據的交互通過控制連接來傳輸,而文件數據的傳輸則通過數據端口。數據連接在本次傳輸完成後,可能關閉數據連接,到下次的傳輸發起的時 候再次打開,因此數據傳輸是非持久的,如下圖(FTP 協議的通信過程解析)所示。

FTP 協議的通信過程解析

  在整個 FTP 的會話期間,FTP 服務器必須維護連接中的用戶狀態。也就是說,FTP 服務器必須把某個控制連接與某個用戶對應起來,對當前用戶的狀態進行跟蹤。這種對用戶狀態的維護限制了 FTP 的性能。

2. FTP 協議的工作模式

  FTP 協議的工作模式分爲主動模式和被動模式,二者的主要區別在於對數據端口的處理方式不同:主動模式在客戶端連接後,告訴服務器數據連接的端口;被動模式在客戶端連接後,進行數據傳輸的時候臨時連接 FTP 服務器的 20 端口,利用此端口進行數據的傳輸。

1. 主動模式

  主動模式又叫標準模式、PORT 模式。主動模式下 FTP 協議的客戶端和服務器端同時作爲 TCP 連接的客戶端和服務器端,FTP 客戶端建立數據連接的 TCP 服務器等待 FTP 服務器端的連接。一個主動模式的 FTP 連接建立遵循以下步驟。

  (1)FTP 客戶端連接 FTP 服務器端的 21 端口,建立控制連接。
  (2)FTP 客戶端在某個端口建立一個 TCP 服務器,進行偵聽等待服務器的數據連接請求。FTP 客戶端使用 PORT 命令告訴 FTP 服務器客戶端的命令連接偵聽端口。
  (3)FTP 服務器使用 20 號端口,與 FTP 客戶端的數據連接偵聽端口進行連接。
  (4) 傳送數據的時候通過 FTP 協議的客戶端與服務器端的端口進行通信。

2. 被動模式

  被動模式又稱爲 PASV 模式。被動模式下建立命令通道的方式與主動方式相同,但是命令通道建立成功後,FTP 客戶端不發送 port 命令,而是發送 pasv 命令。FTP 服務器接收到此命令後,在高端口上隨機選取一個端口並將端口號告訴客戶端,客戶端在這個端口上與服務器端進行數據的傳輸。

  由於防火牆可能對沒有開放的端口進行攔截,所以很多防火牆後的 FTP 服務器和客戶端不能正常地通過主動模式或者被動模式進行數據傳輸,造成 FTP 協議不能正常工作,這通常要採用模式的轉換,將主動模式和被動模式進行調整。

3. FTP 協議的傳輸方式

  FTP 協議有兩種傳輸方式:ASCII 傳輸模式二進制數據傳輸模式,二者的區別在於對傳輸數據是否進行了解釋

1. ASCII 傳輸方式

  如果在遠程機器上運行的不是 UNIX,當文件傳輸時 FTP 通常會自動地調整文件的內容以便於把文件解釋成另外那臺計算機存儲文本文件的格式。

  但是常常有這樣的情況,用戶正在傳輸的文件包含的不是文本文件,它們可能是程序、數據庫、字處理文件或者壓縮文件(儘管字處理文件包含的大部分是文本,其中也包含有指示頁尺寸、字庫等信息的非打印字符)。在複製任何非文本文件之前,用 binary 命令告訴 FTP 逐字複製,不要對這些文件進行處理,這也是下面要講的二進制傳輸。

2. 二進制傳輸模式

  在二進制傳輸中,數據中保存文件的位序,這樣原始的數據和複製的數據是逐位一一對應的,而對數據內容本身不進行判斷。

  例如,Linux 操作系統以二進制方式傳送可執行文件到 Windows 系統,在對方系統上,此文件不能執行。如果在ASCII 方式下傳輸二進制文件,必須對內容進行轉譯。這會使傳輸稍微變慢,也會損壞數據,使文件變得不能用(在大多數計算機上,ASCII 方式一般假設每一字符的第一有效位無意義,因爲 ASCII 字符組合不使用它。如果你傳輸二進制文件, 所有的位都是重要的)。如果你知道這兩臺機器是同樣的,則二進制方式對文本文件和數據文件都是有效的。

4. 一個簡單的 FTP 過程

  在主機 192.168.1.150 上使用 Xlight FTP 建立一個 FTP 服務器,站點上僅有一個 test.txt 文件。在 FTP 服務器上建立用戶名和密碼均爲 “ test ” 的用戶賬號。使用此賬號登錄 FTP 服務器下載 test.txt 文件的過程如下:

$ ftp 192.168.1.150	(登錄 FTP 服務器 192.168.1.150)
Connected to 192.168.1.150.
220 Xlight FTP 3.1 就緒...
User (192.168.1.150: (none)): test	(輸入用戶名 test)
331 需要密碼 test
Password:	(輸入密碼 test)
230 登錄成功
ftp> ls		(列出當前目錄的文件)
200 PORT 命令執行成功
150 正在打開文本模式數據連接爲 NLIST (10 比特).
test. txt	(文件 test.txt)
226 傳送完畢 (0.061 KB/s)
ftp: 收到 10 字節,用時 O.O1 Seconds 0.67 Kbytes/sec.
ftp> get test.txt	(下載文件 test.txt)
200 PORT 命令執行成功
150 正在打開二進制模式數據連接爲 test.txt (0 比特).
226 傳送完畢 (0.000 KB/s).
ftp> bye	(退出)
221 再見

5. 常用的 FTP 工具

  在 Linux 下常用的 FTP 客戶端有 FTP 命令行工具,可以方便地使用命令行進行 FTP 交互。在 Linux 操作系統下經常使用的還有一個圖形界面的 FTP 客戶端工具 gftp

  Linux 操作系統下的服務器端經常使用的有 vsftpwuftp,目前使用 vsftp 的人員佔多數,小夥伴可以査閱相關的資料配置自己的 FTP 站點。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章