導讀:在實際項目開發中最常使用的文件傳輸的方式有ftp和sftp兩種,但是這兩個傳輸方式各有什么特點呢?本文接下來將討論SFTP、FTP的區別
一、FTP協議
FTP是TCP/IP協議組中的協議之一,TP協議由兩個部分組成
- FTP服務器(用來存儲文件)
- FTP客戶端(用戶可以使用FTP客戶端通過FTP協議訪問位于FTP服務器上的資源)
默認情況下FTP協議使用TCP端口中的20和21這兩個端口。21端口用于傳輸控制信息,而是否使用20作為傳輸數據的端口與FTP使用的傳輸模式有關,如果采用被動模式則具體使用哪個端口要服務器端和客戶端協商決定。FTP傳輸模式分為以下兩種:
- 主動模式(Port)
- 被動模式(Passive)
主動模式
FTP客戶端首先和FTP服務器的TCP21端口建立連接,通過這個通道發送命令,客戶端需要接收數據的時候在這個通道上發送PORT命令。 PORT命令包含了客戶端用什么端口接收數據。在傳送數據的時候,服務器端通過自己的TCP 20端口連接至客戶端的指定端口發送數據。
被動模式
在建立控制通道與主動模式相似,但建立連接后是Pasv命令。FTP服務器收到Pasv命令后便隨機打開一個高端端口(端口號大于1024)并且通知客戶端在這個端口上傳送數據的請求,客戶端連接FTP服務器此端口,通過三次握手建立通道,然后FTP服務器將通過這個端口進行數據的傳送。
注意:很多防火墻在設置的時候都是不允許接受外部發起的連接的,所以許多位于防火墻后或內網的FTP服務器不支持PASV模式,因為客戶端無法穿過防火墻打開FTP服務器的高端端口;而許多內網的客戶端不能用PORT模式登陸FTP服務器,因為從服務器的TCP 20無法和內部網絡的客戶端建立一個新的連接,造成無法工作。
二、SFTP協議
SFTP是SSH File Transfer Protocol的縮寫,安全文件傳送協議。SFTP與FTP有著幾乎一樣的語法和功能。SFTP為SSH的其中一部分,是一種傳輸檔案至 Blogger 伺服器的安全方式。其實在SSH軟件包中,已經包含了一個叫作SFTP的安全文件信息傳輸子系統,SFTP本身沒有單獨的守護進程,它必須使用sshd守護進程(端口號默認是22)來完成相應的連接和答復操作,所以從某種意義上來說,SFTP并不像一個服務器程序,而更像是一個客戶端程序。
三、兩者的主要區別
- 鏈接方式:FTP使用TCP端口21上的控制連接建立連接。而,SFTP是在客戶端和服務器之間通過SSH協議(TCP端口22)建立的安全連接來傳輸文件。
- 安全性:SFTP使用加密傳輸認證信息和傳輸的數據,所以使用SFTP相對于FTP是非常安全。
- 效率:SFTP這種傳輸方式使用了加密解密技術,所以傳輸效率比普通的FTP要低得多。