一、Ftp
FTP 是File Transfer Protocol(文件傳輸協議)的英文簡稱,而中文簡稱為“文傳協議”。用於Internet上的控制文件的雙向傳輸。同時,它也是一個應用程序(Application)。基於不同的操作系統有不同的FTP應用程序,而所有這些應用程序都遵守同一種協議以傳輸文件。在FTP的使用當中,用戶經常遇到兩個概念:”下載”(Download)和”上傳”(Upload)。”下載”文件就是從遠程主機拷貝文件至自己的計算機上;”上傳”文件就是將文件從自己的計算機中拷貝至遠程主機上。用Internet語言來說,用戶可通過客戶機程序向(從)遠程主機上傳(下載)文件。
與大多數Internet服務一樣,FTP也是一個客戶機/服務器系統。用戶通過一個支持FTP協議的客戶機程序,連接到在遠程主機上的FTP服務器程序。用戶通過客戶機程序向服務器程序發出命令,服務器程序執行用戶所發出的命令,並將執行的結果返回到客戶機。比如說,用戶發出一條命令,要求服務器向用戶傳送某一個文件的一份拷貝,服務器會響應這條命令,將指定文件送至用戶的機器上。客戶機程序代表用戶接收到這個文件,將其存放在用戶目錄中。
1、支持的模式
FTP支持兩種模式:Standard (PORT方式,主動方式),Passive (PASV,被動方式)。這里都是相對於FTP服務器而言的
當使用FTP服務的時候,我們都知道默認是21號端口,其實還有一個20號端口。FTP使用兩個TCP連接,21號端口負責控制連接,全部你發往FTP服務器的命令和FTP服務器反饋的指令都是通過FTP服務器上的21port傳送的。20號端口負責數據連接,數據鏈路主要是用來傳送數據的,比方client上傳、下載內容,以及列文件夾顯示的內容等。這樣才不會混亂,使FTP可以更好的為我們服務。FTP協議的工作方式可以分為主動方式和被動方式兩種,主動是指FTP客戶端發送PORT命令連接FTP服務器,被動是FTP客戶端發送PASV命令連接FTP服務器。主動模式(Port)和被動模式(Pasv)。事實上這兩種連接模式主要是針對數據鏈路進行的,和控制鏈路無關。
主動方式:在通過21號端口連接好控制通道后,客戶端發送給服務器PORT命令,PORT命令包含了客戶端用什么端口接收數據,就是給FTP服務器說咱們倆通信你可以和我的這個端口進行,於是FTP服務器端通過自己的TCP 20端口連接至客戶端的指定端口傳送數據,發送數據需要創建一個新的連接。
被動方式:在通過21號端口連接好控制通道后,客戶端發送給服務器PASV命令,就是給服務器說咱們倆通信的端口號你選擇,然后服務器隨機選擇一個端口(端口號大於1024小於65535),FTP客戶端連接至此端口,進行通信。不需要創建一個新的連接。
從上面的解釋中我們能夠看到,兩種模式基本的不同是數據連接建立的不同。對於Port模式,是client在本地打開一個port等FTP服務器去連接建立數據連接,而Pasv模式就是server打開一個port等待client去建立一個數據連接。
很多防火牆在設置的時候都是不允許接受外部發起的連接的,所以許多位於防火牆后或內網的FTP服務器不支持PASV模式,因為客戶端無法穿過防火牆打開FTP服務器的高端端口;而許多內網的客戶端不能用PORT模式登陸FTP服務器,因為從服務器的TCP 20無法和內部網絡的客戶端建立一個新的連接,造成無法工作。
2、傳輸方式
FTP的傳輸有兩種方式:ASCII、二進制。
ASCII傳輸方式
假定用戶正在拷貝的文件包含的簡單ASCII碼文本,如果在遠程機器上運行的不是UNIX,當文件傳輸時ftp通常會自動地調整文件的內容以便於把文件解釋成另外那台計算機存儲文本文件的格式。
但是常常有這樣的情況,用戶正在傳輸的文件包含的不是文本文件,它們可能是程序,數據庫,字處理文件或者壓縮文件。在拷貝任何非文本文件之前,用binary 命令告訴ftp逐字拷貝。
二進制傳輸模式
在二進制傳輸中,保存文件的位序,以便原始和拷貝的是逐位一一對應的。即使目的地機器上包含位序列的文件是沒意義的。例如,macintosh以二進制方式傳送可執行文件到Windows系統,在對方系統上,此文件不能執行。
如在ASCII方式下傳輸二進制文件,即使不需要也仍會轉譯。這會損壞數據。(ASCII方式一般假設每一字符的第一有效位無意義,因為ASCII字符組合不使用它。如果傳輸二進制文件,所有的位都是重要的。)
二、FTPS (一種多傳輸協議)
一種多傳輸協議,相當於加密版的FTP。默認端口號是21。當你在FTP服務器上收發文件的時候,你面臨兩個風險。第一個風險是在上載文件的時候為文件加密。第二個風險是,這些文件在你等待接收方下載的時候將停留在FTP服務器上,這時你如何保證這些文件的安全。你的第二個選擇(創建一個支持SSL的FTP服務器)能夠讓你的主機使用一個FTPS連接上載這些文件。這包括使用一個在FTP協議下面的SSL層加密控制和數據通道。一種替代FTPS的協議是安全文件傳輸協議(SFTP)。這個協議使用SSH文件傳輸協議加密從客戶機到服務器的FTP連接。SSL(Secure Sockets Layer 安全套接層),及其繼任者傳輸層安全(Transport Layer Security,TLS)是為網絡通信提供安全及數據完整性的一種安全協議。TLS與SSL在傳輸層對網絡連接進行加密。
FTPS是在安全套接層使用標准的FTP協議和指令的一種增強型FTP協議,為FTP協議和數據通道增加了SSL安全功能。FTPS也稱作“FTP-SSL”和“FTP-over-SSL”。SSL是一個在客戶機和具有SSL功能的服務器之間的安全連接中對數據進行加密和解密的協議。
和sftp連接方法類似,在windows中可以使用FileZilla等傳輸軟件來連接FTPS進行上傳,下載文件,建立,刪除目錄等操作,在FileZilla連接時,有顯式和隱式TLS/SSL連接之分,連接時也有指紋提示。
SSL/TLS協議在傳輸層(TCP/IP)之上、但是在應用層之下工作的。因此,它可以很容易在諸如HTTP,Telnet,POP3,IMAP4,SMTP和FTP等應用層協議上實現。SSL安全擴展至少有兩種不同的初始化方法:顯式安全和隱式安全。
顯示安全:為了建立SSL連接,顯式安全要求FTP客戶端在和FTP服務器建立連接后發送一個特定的命令給FTP服務器。客戶端使用服務器的缺省端口。
隱式安全: 當FTP客戶端連接到FTP服務器時,隱式安全將會自動和SSL連接一起開始運行。在隱式安全中服務器定義了一個特定的端口(TCP端口990)讓客戶端來和其建立安全連接。
三、SFTP(安全文件傳送協議)
sftp是Secure File Transfer Protocol的縮寫,安全文件傳送協議。可以為傳輸文件提供一種安全的加密方法。sftp 與 ftp 有着幾乎一樣的語法和功能。SFTP 為 SSH的一部分,是一種傳輸檔案至 Blogger 伺服器的安全方式。其實在SSH軟件包中,已經包含了一個叫作SFTP(Secure File Transfer Protocol)的安全文件傳輸子系統,SFTP本身沒有單獨的守護進程,它必須使用sshd守護進程(端口號默認是22)來完成相應的連接操作,所以從某種意義上來說,SFTP並不像一個服務器程序,而更像是一個客戶端程序。SFTP同樣是使用加密傳輸認證信息和傳輸的數據,所以,使用SFTP是非常安全的。但是,由於這種傳輸方式使用了加密/解密技術,所以傳輸效率比普通的FTP要低得多,如果您對網絡安全性要求更高時,可以使用SFTP代替FTP。
四、SFTP 和FTPS的區別
SFTP 和FTPS都是提供安全的鏈接,協議非常相似。
一個是借助ssl協議加密,一個時借助ssh加密。
ssl是為http/smtp等加密設計的,SSL證書是HTTP明文協議升級HTTPS加密協議的重要渠道,是網絡安全傳輸的加密到通道。ssh是為telnet/ftp等加密、建立傳輸通道而設計的。
其實ssh建立傳輸通道就是為了加密和傳輸,而且這個通道是可以用來遠程登錄。如果只說它們的功能,通俗的講,ssh就像鋪管子,ssl就像打包裹,鋪管子和打包裹都會使數據安全,都是一個制作密鑰的過程,而因為ssh是一個管子所以它很適合ftp的安全傳輸。
簡單的講:sftp協議是ssh中的一條獨立的協議,利用sftp服務器就可以傳輸數據。而ftps是ftp-over-ssl的意思,即ftp借助ssl協議加密傳輸,不但要用ftp服務器還要用ssl協議加密。(如果是ftp-over-ssh,就是完全不同於sftp的傳輸方式了,就是利用ftp服務器和ssh協議加密傳輸數據。 )
這兩種協議是不同的。sftp是ssh內含的協議,僅僅要sshdserver啟動了,它就可用,它本身不須要ftpserver啟動。ftp over SSH2則象一個二傳手。