1. FTP協議 數據庫
什麼是FTP呢?FTP 是 TCP/IP 協議組中的協議之一,是英文File Transfer Protocol的縮寫。 服務器
該協議是Internet文件傳送的基礎,它由一系列規格說明文檔組成,目標是提升文件的共享性,提供非直接使用遠程計算機,使存儲介質對用戶透明和可靠高效地傳送數據。簡單的說,FTP就是完成兩臺計算機之間的拷貝,從遠程計算機拷貝文件至本身的計算機上,稱之爲「下載 (download)」文件。若將文件從本身計算機中拷貝至遠程計算機上,則稱之爲「上載(upload)」文件。在TCP/IP協議中,FTP標準命令TCP端口號爲21,Port方式數據端口爲20。 網絡
2. FTP服務器和客戶端 操作系統
同大多數Internet服務同樣,FTP也是一個客戶/服務器系統。用戶經過一個客戶機程序鏈接至在遠程計算機上運行的服務器程序。依照 FTP 協議提供服務,進行文件傳送的計算機就是 FTP 服務器,而鏈接FTP服務器,遵循FTP協議與服務器傳送文件的電腦就是FTP客戶端。用戶要連上 FTP 服務器,就要用到 FPT 的客戶端軟件,一般 Windows自帶「ftp」命令,這是一個命令行的 FTP 客戶程序,另外經常使用的 FTP 客戶程序還有 CuteFTP、Ws_FTP、Flashfxp、LeapFTP、流星雨-貓眼等。 命令行
3. FTP用戶受權 線程
(1)用戶受權 設計
要連上 FTP 服務器(即「登錄」),必需要有該 FTP 服務器受權的賬號,也就是說你只有在有了一個用戶標識和一個口令後才能登錄FTP服務器,享受FTP服務器提供的服務。 server
(2)FTP地址格式 進程
FTP地址以下: ftp://用戶名:密碼@FTP服務器IP或域名:FTP命令端口/路徑/文件名 ci
上面的參數除FTP服務器IP或域名爲必要項外,其餘都不是必須的。如如下地址都是有效FTP地址:
ftp://foolish.6600.org
ftp://list:list@foolish.6600.org
ftp://list:list@foolish.6600.org:2003
ftp://list:list@foolish.6600.org:2003/soft/list.txt
(3)匿名FTP
互連網中有很大一部分 FTP 服務器被稱爲「匿名」(Anonymous)FTP 服務器。這類服務器的目的是向公衆提供文件拷貝服務,不要求用戶事先在該服務器進行登記註冊,也不用取得FTP服務器的受權。Anonymous(匿名文件傳輸)可以使用戶與遠程主機創建鏈接並以匿名身份從遠程主機上拷貝文件,而沒必要是該遠程主機的註冊用戶。用戶使用特殊的用戶名「anonymous」登錄FTP服務,就可訪問遠程主機上公開的文件。許多系統要求用戶將Emai1地址做爲口令,以便更好地對訪問進行跟綜。匿名FTP一直是Internet上獲取信息資源的最主要方式,在Internet成千上萬的匿名FTP主機中存儲着無以計數的文件,這些文件包含了各類各樣的信息,數據和軟件。人們只要知道特定信息資源的主機地址,就能夠用匿名FTP登陸獲取所需的信息資料。雖然目前使用WWW環境已取代匿名FTP成爲最主要的信息查詢方式,可是匿名FTP還是 Internet上傳輸分發軟件的一種基本方法。如red hat 、autodesk等公司的匿名站點。
4. FTP的傳輸模式
FTP協議的任務是從一臺計算機將文件傳送到另外一臺計算機,它與這兩臺計算機所處的位置、聯接的方式、甚至是是否使用相同的操做系統無關。假設兩臺計算機經過ftp協議對話,而且能訪問Internet,你能夠用ftp命令來傳輸文件。每種操做系統使用上有某一些細微差異,可是每種協議基本的命令結構是相同的。
FTP的傳輸有兩種方式:ASCII傳輸模式和二進制數據傳輸模式。
1.ASCII傳輸方式:假定用戶正在拷貝的文件包含的簡單ASCII碼文本,若是在遠程機器上運行的不是UNIX,當文件傳輸時ftp一般會自動地調整文件的內容以便於把文件解釋成另外那臺計算機存儲文本文件的格式。可是經常有這樣的狀況,用戶正在傳輸的文件包含的不是文本文件,它們多是程序,數據庫,字處理文件或者壓縮文件(儘管字處理文件包含的大部分是文本,其中也包含有指示頁尺寸,字庫等信息的非打印符)。在拷貝任何非文本文件以前,用binary 命令告訴ftp逐字拷貝,不要對這些文件進行處理,這也是下面要講的二進制傳輸。
2.二進制傳輸模式:在二進制傳輸中,保存文件的位序,以便原始和拷貝的是逐位一一對應的。即便目的地機器上包含位序列的文件是沒意義的。例如,macintosh以二進制方式傳送可執行文件到Windows系統,在對方系統上,此文件不能執行。若是你在ASCII方式下傳輸二進制文件,即便不須要也仍會轉譯。這會使傳輸稍微變慢 ,也會損壞數據,使文件變得不能用。(在大多數計算機上,ASCII方式通常假設每一字符的第一有效位無心義,由於ASCII字符組合不使用它。若是你傳輸二進制文件,全部的位都是重要的。)若是你知道這兩臺機器是一樣的,則二進制方式對文本文件和數據文件都是有效的。
5. 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必須和客戶端創建一個新的鏈接用來傳送數據。
Passive模式在創建控制通道的時候和Standard模式相似,但創建鏈接後發送的不是Port命令,而是Pasv命令。FTP服務器收到Pasv命令後,隨機打開一個高端端口(端口號大於1024)而且通知客戶端在這個端口上傳送數據的請求,客戶端鏈接FTP服務器此端口,而後FTP服務器將經過這個端口進行數據的傳送,這個時候FTP server再也不須要創建一個新的和客戶端之間的鏈接。
不少防火牆在設置的時候都是不容許接受外部發起的鏈接的,因此許多位於防火牆後或內網的FTP服務器不支持PASV模式,由於客戶端沒法穿過防火牆打開FTP服務器的高端端口;而許多內網的客戶端不能用PORT模式登錄FTP服務器,由於從服務器的TCP 20沒法和內部網絡的客戶端創建一個新的鏈接,形成沒法工做。
6.FXP
FXP說簡單點就是一個FTP客戶端控制兩個FTP服務器,在兩個FTP服務器之間傳送文件。FXP的全稱爲File Exchange Protocol――文件交換協議,能夠認爲FXP自己其實就是FTP的一個子集,由於FXP方式實際上就是利用了FTP服務器的Proxy命令,不過它的前提條件是FTP服務器要支持PASV,且支持FXP方式。FXP傳送時,文件並不下載至本地,本地只是發送控制命令,故FXP傳送時的速度只與兩個FTP服務器之間的網絡速度有關,而與本地速度無關。因FXP方式本地只發送命令,故在開始傳送後,只要本地不發送中止的命令,就算是本地關機了,FXP仍在傳送,直至一個文件傳送完成或文件傳送出錯後,FTP服務器等待本地發送命令時,纔會因不能接收到命令而終止FXP傳送。
由於上述的緣由,FXP傳送出錯時,本地的用戶進程還留在FTP服務器中,並無退出,如此時再次鏈接FTP服務器,可能會因用戶線程超過容許,FTP服務器提示客戶已登錄並拒絕客戶端的鏈接,直至服務器中的傀儡進程因超時或其餘緣由被FTP服務器殺死後,才能再次鏈接FTP服務器。
成功FXP有兩個必要條件:①兩個FTP服務器均支持FXP;②兩個FTP服務器均支持PASV方式。但並非說知足這兩個條件的FTP服務器均經本地操做成功FXP,這還與本地與FTP服務器的網絡情況有關。故有時會出現一樣兩個FTP,別人能夠FXP,而你不能夠的狀況。
7. TFTP
TFTP(Trivial File Transfer Protocol)小文件傳輸協議
它是一個網絡應用程序,它比FTP簡單也比FTP功能少。它在不須要用戶權限或目錄可見的狀況下使用,它使用UDP協議而不是TCP協議。
TFTP是一個傳輸文件的簡單協議,它基於UDP協議而實現,可是咱們也不能肯定有些TFTP協議是基於其它傳輸協議完成的。此協議設計的時候是進行小文件傳輸的,所以它不具有一般的FTP的許多功能,它只能從文件服務器上得到或寫入文件,不能列出目錄,不進行認證,它傳輸8位數據。傳輸中有三種模式:netascii,這是8位的ASCII碼形式,另外一種是octet,這是8位源數據類型;最後一種mail已經再也不支持,它將返回的數據直接返回給用戶而不是保存爲文件。
任何傳輸起自一個讀取或寫入文件的請求,這個請求也是鏈接請求。若是服務器批准此請求,則服務器打開鏈接,數據以定長512字節傳輸。每一個數據包包括一塊數據,服務器發出下一個數據包之前必須獲得客戶對上一個數據包的確認。若是一個數據包的大小小於512字節,則表示傳輸結構。若是數據包在傳輸過程當中丟失,發出方會在超時後從新傳輸最後一個未被確認的數據包。通訊的雙方都是數據的發出者與接收者,一方傳輸數據接收應答,另外一方發出應答接收數據。大部分的錯誤會致使鏈接中斷,錯誤由一個錯誤的數據包引發。這個包不會被確認,也不會被從新發送,所以另外一方沒法接收到。若是錯誤包丟失,則使用超時機制。錯誤主要是由下面三種狀況引發的:不能知足請求,收到的數據包內容錯誤,而這種錯誤不能由延時或重發解釋,對須要資源的訪問丟失(如硬盤滿)。TFTP只在一種狀況下不中斷鏈接,這種狀況是源端口不正確,在這種狀況下,指示錯誤的包會被髮送到源機。這個協議限制不少,這是都是爲了實現起來比較方便而進行的。
初始鏈接時候須要發出WRQ(請求寫入遠程系統)或RRQ(請求讀取遠程系統),收到一個肯定應答,一個肯定能夠寫出的包或應該讀取的第一塊數據。一般確認包包括要確認的包的包號,每一個數據包都與一個塊號相對應,塊號從1開始並且是連續的。所以對於寫入請求的肯定是一個比較特殊的狀況,所以它的包的包號是0。若是收到的包是一個錯誤的包,則這個請求被拒絕。建立鏈接時,通訊雙方隨機選擇一個TID,所以是隨機選擇的,所以兩次選擇同一個ID的可能性就很小了。每一個包包括兩個TID,發送者ID和接收者ID。這些ID用於在UDP通訊時選擇端口,請求主機選擇ID的方法上面已經說過了,在第一次請求的時候它會將請求發到TID 69,也就是服務器的69端口上。應答時,服務器使用一個選擇好的TID做爲源TID,並用上一個包中的TID做爲目的ID進行發送。這兩個被選擇的ID在隨後的通訊中會被一直使用。