1. 程式人生 > >檔案傳輸協議——FTP概述

檔案傳輸協議——FTP概述

FTP(FileTransfer Protocol)是在客戶端和伺服器之間傳輸檔案的標準網路協議。FTP協議建立在C-S模型之上,在客戶端和伺服器之間使用單獨的控制和資料連線。FTP使用者可通過明文登陸協議來認證,通常是以使用者名稱和密碼形式,不過在伺服器配置允許的情況下,也可以實現匿名連線。為了保護使用者名稱和密碼,以及對內容進行加密,FTP通常使用SSL/TLS來保證其安全性,即FTPS,有時也會用另一種不同技術的SSH檔案傳輸協議,即SFTP。

FTP最初的協議是由AbhayBhushan寫的,在1971年4月16日釋出為RFC 114。直到1980年,FTP一直都在TCP/IP的前身NCP上執行,後來該協議又先後被TCP/IP版本

RFC 765(1980.06)和RFC 959(1985.10)代替,RFC959也就是目前的FTP規範。之後,根據不同的需要,一些被提議的標準分別對RFC 959進行了修正,例如RFC 1579(1994.02)啟用了防火牆友好的FTP(被動模式passive mode,後面我們將會提及FTP的主動模式和被動模式),RFC 2228(1997.06)提出了FTP的安全擴充套件,RFC 2428(1998.09)增加了對IPv6的支援,並定義了一種新的被動模式。

1. 協議概覽

1.1 通訊與資料傳輸

FTP可以在主動(active mode)和被動模式(passive mode)上執行,不同的模式建立資料連線的方式有所不同。在兩種模式下,都是客戶端從一個隨機埠N向FTP伺服器的命令埠21建立TCP連線。

  • 主動模式:客戶端從埠M上偵聽伺服器發來的資料連線,它通過向伺服器傳送PORT M命令來通知伺服器它正在偵聽的埠號。然後伺服器從它的資料埠port 20上向客戶端(埠M)發起一條資料通道。(S -> C)
  • 被動模式:在客戶端被防火牆隔離而無法接收傳入的TCP連線時,可以採用FTP的被動模式。在這種模式下,客戶端首先通過控制連線(control connection)向伺服器傳送一個PASV命令,然後接收伺服器返回的伺服器IP地址和埠號,客戶端再在自己的任意埠上向接收到的伺服器IP地址和埠號建立資料連線。(C -> S)

伺服器的響應由控制連線(control connection)返回,由ASCII編碼的3個數字狀態碼外加一個可選的文字訊息組成。數字表示響應的程式碼,文字是對該響應程式碼的解釋。例如”200”或”200 OK”代表上一條命令成功執行(文章後面有對響應碼數字的解釋)。通過在控制連線(control connection)上傳送一箇中斷訊息可以終止正在資料連線(data connection)上進行的檔案傳輸。

在FTP網路上傳輸資料時,可以使用4種資料表示形式,分別是:

  • ASCII mode:用於文字。如果需要,資料在傳送前會由在主機上的字元表示轉換為8位元的ASCII碼形式,然後在接收主機端再轉換為接收主機的字元表示。因此,該模式不適用於包含純文字以外的資料的檔案傳輸。
  • Image mode (也稱Binary mode):傳送方逐位元組地傳送檔案,接收方則接收並存儲到達的位元組流。目前,Image模式已被推薦在所有FTP實現上支援。
  • EBCDIC mode:用於使用EBCDIC字符集的純文字在不同主機之間的傳輸。
  • Local mode:允許兩臺相同設定的計算機使用專有格式傳輸資料,而無需轉換為ASCII形式。

對於文字檔案,FTP提供了不同格式的控制和記錄結構選項,這些特性是為了方便包含Telnet或ASA的檔案傳輸而設計的。

FTP資料傳輸有三種可選的模式,分別是流模式(Stream mode)、塊模式(Block mode)和壓縮模式(Compressed mode):

  • Stream mode:資料作為連續的流傳送,FTP層不需要做任何處理,所有的處理都是通過TCP來完成的。該模式下不需要檔案結尾標誌(EOF),除非資料被劃分為records(一種資料結構)。
  • Block mode:FTP將資料劃分為幾個block(每個block包含block header,byte count以及data field),然後移交給TCP進行傳輸。
  • Compressed mode:資料通過簡單的壓縮演算法進行壓縮,通常使用遊程編碼。

有些FTP軟體還實現了一種基於DEFLATE的壓縮模式,有時也稱為“模式Z”,該模式在一個因特網草案中有描述,但尚未標準化。

1.2 Login

FTP使用普通的使用者名稱和密碼機制來授權訪問。使用者名稱使用USER命令傳送至伺服器,密碼則使用PASS命令傳送。該序列在傳輸線路上是不加密的,因此容易受到網路嗅探的攻擊。如果客戶端提供的資訊被伺服器接受,伺服器會向客戶端傳送一個問候語,然後會話開始。如果伺服器支援,客戶端也可在不提供認證的情況下登陸FTP,但伺服器對此類會話只提供受限的訪問。

1.3 Anonymous FTP

提供FTP服務的主機也可能提供匿名FTP訪問,使用者只需要在login時輸入一個‘anonymous’賬戶。雖然使用者通常被要求傳送他們的email地址代替password,實際上並不會對提供的email地址進行驗證。許多以提供軟體升級為目的的主機通常會允許匿名登陸。

1.4 NAT與防火牆穿越

一般情況下,在FTP客戶端傳送PORT命令之後,伺服器向客戶端發起連線來實現資料傳輸,但這在NAT和防火牆存在的情況下是有問題的,因為從因特網連線到他們內部的主機是不被允許的。對於NAT,還有一個更麻煩的問題就是,在PORT命令中的IP地址和埠號都是指NAT內部主機的IP地址和埠號,而不是NAT的公共IP地址和埠。

補充一點NAT的概念。NAT即Network Address Translation(網路地址轉換)的縮寫。當在專有網路內部的一些主機本來已經分配到了本地的IP地址(僅在本專用網路內部使用的專用地址),但又想和因特網上的主機通訊時,可使用NAT方法。這種方法需要在專用網路連線到網際網路的路由器上安裝NAT軟體,即NAT路由器,它至少有一個有效的外部全球IP地址(公共IP)。這樣,所有本地地址的主機在和因特網通訊時,都要在NAT路由器上將其轉換成公共IP地址。通過這種使用少量的公有IP地址代表較多的私有IP地址的方式,也有助於減緩可用的IP地址空間的枯竭。

目前有兩種方法來解決以上提到的問題。第一就是,使用FTP的被動模式,即傳送PASV命令,使連線從客戶端向伺服器發起,而不是從伺服器向客戶端發起,這種方法是目前的FTP客戶端廣泛採用的。另一種方法是,NAT通過使用應用程式級閘道器去修改PORT命令的值。

1.5 與HTTP的不同之處

HTTP本質上解決了FTP傳輸許多小而短的網路內容不方便的問題。

FTP通過一個有狀態的控制連線(control connection)來維護當前的工作目錄和其他flags,而資料傳輸需要另起一路連線(data connection)來實現。在被動模式下,data connection是由客戶端向伺服器發起的,而在預設的主動模式下,data connection則是由伺服器向客戶端發起。在主動模式下的這種明顯的角色轉換,以及所有傳輸都使用隨機埠號,使得FTP在穿越防火牆和NAT時非常困難。相反,HTTP是無狀態協議,並且控制和資料都被複用在一個從客戶端到伺服器的單一連線上,使用熟知埠,使得HTTP能夠很容易穿透NAT閘道器和防火牆。

由於傳送命令並等待接收響應的所需的往返時間,使得建立FTP連線的速度很慢,因此,一貫的處理是,建立起一條控制連線後即保持該連線的開放狀態,該控制連線可用於多個檔案的傳輸控制,而不是在多個檔案之間反覆地關閉並重建會話。相比之下,HTTP在最初的實現中,每當傳輸完一個檔案(或其他資料)後,都會關閉連線,雖然後來HTTP也支援了重用一個TCP連線實現多次傳輸的功能,但其基本的概念模型仍然是獨立的請求而非會話。

當FTP在資料連線上傳輸資料時,控制連線處於空閒狀態,如果傳輸時間過長,防火牆或NAT會認為控制連線已斷開而停止跟蹤,從而使得檔案下載中斷。而HTTP連線僅在多個請求之間處於空閒態,因此在超時後將該連線斷開是正常的,也是合理的。

2. Web瀏覽器支援

大多通用瀏覽器都能檢索FTP伺服器上的檔案,雖然他們可能不支援FTP的擴充套件協議如FTPS。用Web訪問給定的FTP URL時顯示的遠端伺服器上內容與其他的網站內容很相似。例如,在火狐瀏覽器上執行的一個全功能FTP客戶端稱為FireFTP。

FTP URL的形式為:ftp://[user[:password]@]host[:port]/url-path,方括號內的部分可選。例如,ftp://public.ftp-servers.example.com/mydirectory/myfile.txt 表示伺服器public.ftp-servers.example.com上目錄mydirectory 下的檔案myfile.txt 。ftp://user001:[email protected]/mydirectory/myfile.txt 則在上面的基礎上添加了訪問該FTP地址的使用者名稱和密碼。預設情況下,大多web瀏覽器都使用PASV模式,方便終端使用者穿越防火牆。

3. 安全

FTP沒有被設計為一個安全協議,存在許多安全方面的弱點。在1999年5月,RFC 2577的作者列出了以下的安全漏洞:

  • 暴力破解 (Brute force attack)
  • FTP跳轉攻擊 (FTP bounce attack)
  • 資料包捕獲 (Packet capture)
  • 埠竊取 (Port stealing,猜測下一個開啟的埠並竊取合法連線)
  • IP欺騙攻擊 (Spoofing attack)
  • 使用者名稱列舉 (Username enumeration)

FTP不對其傳輸內容加密;所有的傳輸都是明文的,使用者名稱、密碼、命令和資料可以被在網際網路上進行資料包捕獲(網路嗅探)的任何人讀取。這個問題普遍存在於在加密機制(如TLS、SSL等)被創造出來之前設計的網路協議,如SMTP、Telnet、POP和IMAP。常用的解決方案包括:

  • 使用非安全協議的安全版本,如用FTPS代替FTP、TelnetS代替Telnet;
  • 使用另外的能夠處理同樣工作的更安全的協議,如SSH檔案傳輸協議(SSH File Transfer Protocol)或安全複製協議(Secure Copy Protocol);
  • 使用安全隧道,如Secure Shell (SSH)或虛擬專用網路(VPN)。

3.1 FTP over SSH

FTP over SSH是在Secure Shell隧道連線上傳輸正常FTP會話的一種做法。由於FTP使用多個TCP連線,在SSH隧道上傳輸是相當困難的。許多SSH客戶端試圖在控制通道上建立隧道,但這樣僅能保護該控制通道;當資料傳輸時,兩端的FTP軟體為資料通道建立新的連線,因而資料連線上沒有機密性和完整性保護。另外一種更安全的實現方式是,SSH客戶端軟體有足夠的FTP協議知識,以監測並重寫FTP控制通道訊息,並自動為資料通道建立新的分組轉發。支援該模式的軟體包有:SSH通訊安全軟體套件Tectia ConnectSecure (Win/Linux/Unix)。

4. 派生協議

4.1 FTPS

FTPS有顯式和隱式兩種。顯示FTPS (Explicit FTPS)為FTP標準的擴充套件,允許客戶端請求會話加密。該功能通過傳送“AUTH TLS”命令實現。伺服器提供兩種選項,可允許或拒絕未請求TLS的連線。該擴充套件協議定義在RFC 4217中。隱式FTPS (Implicit FTPS)是一個過時的FTP標準,需要使用SSL或TLS連線,並且指定區別於普通FTP的埠,預設的控制連線埠號為990,資料連線埠號為989。

4.2 SSH檔案傳輸協議 (SSH File Transfer Protocol)

SSH檔案傳輸協議(SFTP)有一個與FTP類似的使用者命令集,但使用SSH協議來傳輸檔案。與FTP不同,SFTP對命令和資料都做加密,防止密碼和敏感資訊在網路上的公開傳輸。SFTP軟體與FTP軟體之間不支援互操作。

4.3 普通檔案傳輸協議 (Trivial File Transfer Protocol)

普通檔案傳輸協議(TFTP)是一個簡單的、鎖步(lock-step)FTP,允許客戶端從遠端主機下載或向遠端主機上傳檔案。由於實現簡單,其最初的用途之一,是用作早期區域網內部傳輸檔案的方式。與魯棒性更強的檔案傳輸協議(如FTP)對比,TFTP缺乏安全性以及其他高階功能。TFTP在1981年被首次標準化,當前的協議規範見RFC 1350

4.4 簡單檔案傳輸協議 (Simple File Transfer Protocol)

簡單檔案傳輸協議(SFTP)作為一個TFTP和FTP之間複雜互操作的非安全檔案傳輸協議被提出,其定義見RFC 913。該協議從未被網際網路廣泛接受,並且已成為歷史。該協議執行在埠115上,有一個包含11個命令的命令集,並支援3種資料傳輸:ASCII模式、二進位制模式(binary)和連續模式(continuous)。對於字長為8位元倍數的系統,對binary和continuous兩種模式的操作是相同的。該協議也支援使用使用者名稱和密碼的登陸,層次化的資料夾與檔案管理(包括重新命名、刪除、上傳、下載、覆蓋下載、附加下載)。

5. FTP 命令和響應碼

FTP伺服器返回的響應碼由三個數字“xyz”組成。第一個數字表示三種可能的響應之一——成功、失敗、指示錯誤或不完整:

  • 2yz — 成功;
  • 4yz / 5yz — 失敗;
  • 1yz / 3yz — 錯誤或不完整。

第二個數字定義了錯誤的類別:

  • x0z — Syntax,語法錯誤;
  • x1z — Information,對請求的答覆資訊;
  • x2z — Connections,對控制連線和資料連線的答覆;
  • x3z — Authentication and accounting,對賬戶鑑權和登陸過程的答覆;
  • x4z — Not defined,未定義;
  • x5z — File system,來自伺服器檔案系統中狀態碼。

第三個數字用來為第二個數字定義的幾類狀態提供進一步細化。

6. 常用FTP伺服器

常用的開源FTP伺服器如下:

  • FileZilla Server (Windows)
  • Pure-FTPd (Unix)
  • VsFTPd (Unix)
  • ProFTPd (Unix)

相關推薦

VB程式設計師的FTP程式設計指南1.1-檔案傳輸協議FTP概述

專 題:檔案傳輸協議FTP概述主 講:qianqian FTP簡介 直到1994年,當WWW掌管Internet時,檔案傳輸協議(FTP)是和e-mail一樣最廣泛應用的Internet客戶程式。它被用於作為訪問Internet主機檔案的一個遠端外殼。使用ftp可以連線到一個

檔案傳輸協議——FTP概述

FTP(FileTransfer Protocol)是在客戶端和伺服器之間傳輸檔案的標準網路協議。FTP協議建立在C-S模型之上,在客戶端和伺服器之間使用單獨的控制和資料連線。FTP使用者可通過明文登陸協議來認證,通常是以使用者名稱和密碼形式,不過在伺服器配置允許的情況下,也

第9章 應用層(5)_檔案傳輸協議FTP

6. 檔案傳輸協議FTP 6.1 FTP主動和被動模式 (1)FTP協議   ①與其他協議不同,FTP協議在客戶端訪問FTP伺服器時需要建立兩個TCP連線。一個用來傳輸FTP命令,一個用來傳輸資料。   ②在FTP伺服器上需要開放兩個埠,一個命令埠(或稱為控制埠)和一個數據埠。通常命

檔案傳輸協議FTP與TCP/IP協議之間有什麼關係

TCP/IP協議是目前網路所採用的一種框架協議,包括五層: 應用層,傳輸層,網路層,鏈路層,物理層。 FTP協議是TCP/IP協議的一部分,嚴格意義上來說是應用層協議 FTP是一種應用程式 基於

檔案傳輸協議FTP與TCP/IP協議之間的關係

TCP/IP協議是目前網路所採用的一種框架協議,包括五層: 應用層:http協議,ftp協議等。 傳輸層:TCP或者UDP協議等,負責資料傳輸的可靠性和完整性。 網路層:IP協議等,解決區域網和區域網之間的通訊。 鏈路層:乙太網協議等,解決區域網通訊。 物理

檔案傳輸協議 - Sftp和ftp 區別

Sftp和ftp 區別 - qq_41750040的部落格 - CSDN部落格https://blog.csdn.net/qq_41750040/article/details/80249507 FTP(檔案傳輸協議)工作原理   目前在網路上,如果你想把檔案和其他人共享。最方

FTP檔案傳輸協議詳解

       FTP 是File Transfer Protocol(檔案傳輸協議)的英文簡稱,而中文簡稱為“文傳協議”。用於Internet上的控制檔案的雙向傳輸。同時,它也是一個應用程式(Application)。基於不同的作業系統有不同的FTP應用程式,而所有這些應用

教你寫一個ftp協議檔案傳輸協議

一、FTP協議簡介 FTP 是File Transfer Protocol(檔案傳輸協議)的英文簡稱,而中文簡稱為“文傳協議”。用於Internet上的控制檔案的雙向傳輸。同時,它也是一個應用程式(Application)。基於不同的作業系統有不同的FTP應用

FTP檔案傳輸協議兩種模式-主動模式和被動模式

TCP/IP協議中,FTP標準命令TCP埠號為21,Port方式資料埠為20。FTP協議的任務是從一臺計算機將檔案傳送到另一臺計算機,它與這兩臺計算機所處的位置、聯接的方式、甚至是是否使用相同的作業系統無關。假設兩臺計算機通過ftp協議對話,並且能訪問Internet, 你可以用ftp命令來傳輸檔案。每種作

Linux下基於vsftpd的FTP檔案傳輸協議詳解(附完整流程命令)

理論概述 基本概念 FTP 是File Transfer Protocol(檔案傳輸協議)的英文簡稱,而中文簡稱為“文傳協議”。用於Internet上的控制檔案的雙向傳輸。同時,它也是一個應用程式(Application)。基於不同的作業系統有不同的FTP應

linux系統的ftp檔案傳輸協議

簡介:FTP 是File Transfer Protocol(檔案傳輸協議)的英文簡稱,而中文簡稱為“文傳協議”。用於Internet上的控制檔案的雙向傳輸。同時,它也是一個應用程式(Application)。基於不同的作業系統有不同的FTP應用程式,而所有這些應用程式都遵守

第9章 應用層(5)_文件傳輸協議FTP

public 被動模式 更多 保留 允許 服務器端 磁盤 stat 命令 6. 文件傳輸協議FTP 6.1 FTP主動和被動模式 (1)FTP協議   ①與其他協議不同,FTP協議在客戶端訪問FTP服務器時需要建立兩個TCP連接。一個用來傳輸FTP命令,一個用來傳輸數據。

文件傳輸協議FTP、SFTP和SCP

tle 發出 自帶 multi lai ans iptables 資料 aid 網絡通信協議分層 應用層: HTTP(Hypertext Transfer Protocol 超文本傳輸協議,顯示網頁) DNS(Domain Name System) FTP(Fi

TFTP服務[精簡版]:簡單檔案傳輸協議

      簡單檔案傳輸協議(Trivial File Transfer Protocol,TFTP)是一種基於 UDP 協議在客戶端 和伺服器之間進行簡單檔案傳輸的協議。顧名思義,它提供不復雜、開銷不大的檔案傳輸服 務(可將其當作 FTP 協議的簡化版本)。    TFTP 的命令功能不如 FTP 服務

用Python實現一個簡單的檔案傳輸協議

寫個東西並非無聊或者練手,而是厭煩了每次都得重頭寫。我已經不是第一次碰到下面的情況:遠端到一臺可以連線內網的機器,結果發現其環境極為惡劣,沒有scp。最誇張的一次,我見過一臺機器連man都沒裝。所幸裝了ssh可以讓我遠端。但沒有scp怎麼傳檔案呢?ftp?試了幾個命令,沒有

基於TCP的TFTP(Trivial File Transfer Protocol,簡單檔案傳輸協議) 的c程式設計實現

我們或許都聽到過,TFTP(Trivial File Transfer Protocol,簡單檔案傳輸協議)是TCP/IP協議族中的一個用來在客戶機與伺服器之間進行簡單檔案傳輸的協議,提供不復雜、開銷不大的檔案傳輸服務。 本文就簡單的敘述下tftp的小檔案傳輸功能以及客戶端

FTP文件傳輸協議之vsftpd服務

linux 配置 vsftpd 一、FTP服務概述 FTP(File Transfer Protocol,文件傳輸協議)是典型的C/S結構的應用層協議,需要由服務端軟件、客戶端軟件共同實現文件傳輸功能 FTP服務器默認使用TCP協議的20、21端口與客戶端實現通信。20端口用於建立數據連接

文件傳輸協議FTP、TFTP)

FTP TFTP FTP<1>FTP協議是互聯網上廣泛使用的文件傳輸協議。<2>客戶端/服務器模式基於TCP(Transmission Control Protocol 傳輸控制協議,面向連接的、可靠的、基於字節流的傳輸層通信協議)<3>FTP采用雙TCP連接方式

WinSCP - Free SFTP, SCP and FTP client for Windows - 檔案傳輸

WinSCP - Free SFTP, SCP and FTP client for Windows - 檔案傳輸 https://winscp.net/eng/index.php WinSCP 5.13 File protocol: SFTP Host name (主機名)

檔案傳輸 FTP

import hashlibimport socket ,os,timeserver = socket.socket()server.bind(('0.0.0.0',9999) )server.listen()while True: conn, addr = server.accept() pri