文件傳輸協議

文件傳輸協議英文File Transfer Protocol,簡稱為FTP)是用于在網絡上進行文件傳輸的一套標準協議。它屬于網絡傳輸協議應用層

FTP是一個8位的客戶端-服務器協議,能操作任何類型的文件而不需要進一步處理,就像MIMEUnicode一樣。但是,FTP有著極高的延時,這意味著,從開始請求到第一次接收需求數據之間的時間,會非常長;并且不時的必須執行一些冗長的登陸進程。

?

概述

FTP服務一般運行在2021兩個端口。端口20用于在客戶端和服務器之間傳輸數據流,而端口21用于傳輸控制流,并且是命令通向ftp服務器的進口。當數據通過數據流傳輸時,控制流處于空閑狀態。而當控制流,空閑很長時間后,客戶端的防火墻,會將其會話置為超時,這樣當大量數據通過防火墻時,會產生一些問題。此時,雖然文件可以成功的傳輸,但因為控制會話,會被防火墻斷開;傳輸會產生一些錯誤。

FTP實現的目標:

  1. 促進文件的共享(計算機程序或數據)
  2. 鼓勵間接或者隱式的使用遠程計算機
  3. 向用戶屏蔽不同主機中各種文件存儲系統(File system)的細節
  4. 可靠和高效的傳輸數據

缺點:

  1. 密碼和文件內容都使用明文傳輸,可能產生不希望發生的竊聽。
  2. 因為必須開放一個隨機的端口以創建連接,當防火墻存在時,客戶端很難過濾處于主動模式下的FTP流量。這個問題,通過使用被動模式的FTP,得到了很大解決。
  3. 服務器可能會被告知連接一個第三方計算機的保留端口。
  4. 此方式在需要傳輸文件數量很多的小文件時,性能不好

FTP雖然可以被終端用戶直接使用,但是它是設計成被FTP客戶端程序所控制。

運行FTP服務的許多站點都開放匿名服務,在這種設置下,用戶不需要帳號就可以登錄服務器,默認情況下,匿名用戶的用戶名是:"anonymous"。這個帳號不需要密碼,雖然通常要求輸入用戶的郵件地址作為認證密碼,但這只是一些細節或者此郵件地址根本不被確定,而是依賴于FTP服務器的配置情況。

FTP具有很強的兼容性,可以在不同的操作系統之間通信,可以使用不同的字符集、不同的文件結構以及不同的文件格式。

FTP使用三種傳輸方式:

流方式:數據作為連續的字節流從FTP交付給TCP

塊方式:數據按塊從FTP交付給TCP

壓縮方式:將數據壓縮后進行傳送

?

主動和被動模式

FTP有兩種使用模式:主動和被動。主動模式要求客戶端和服務器端同時打開并且監聽一個端口以創建連接。在這種情況下,客戶端由于安裝了防火墻會產生一些問題。所以,創立了被動模式。被動模式只要求服務器端產生一個監聽相應端口的進程,這樣就可以繞過客戶端安裝了防火墻的問題。

一個主動模式的FTP連接創建要遵循以下步驟:

  1. 客戶端打開一個隨機的端口(端口號大于1024,在這里,我們稱它為x),同時一個FTP進程連接至服務器的21號命令端口。此時,該tcp連接的來源地端口為客戶端指定的隨機端口x,目的地端口(遠程端口)為服務器上的21號端口。
  2. 客戶端開始監聽端口(x+1),同時向服務器發送一個端口命令(通過服務器的21號命令端口),此命令告訴服務器客戶端正在監聽的端口號并且已準備好從此端口接收數據。這個端口就是我們所知的數據端口。
  3. 服務器打開20號源端口并且創建和客戶端數據端口的連接。此時,來源地的端口為20,遠程數據(目的地)端口為(x+1)。
  4. 客戶端通過本地的數據端口創建一個和服務器20號端口的連接,然后向服務器發送一個應答,告訴服務器它已經創建好了一個連接。

    ?

FTP和網頁瀏覽器

大多數最新的網頁瀏覽器和文件管理器都能和FTP服務器創建連接。這使得在FTP上通過一個接口就可以操控遠程文件,如同操控本地文件一樣。這個功能通過給定一個FTPURL實現,形如ftp://<服務器地址>(例如,ftp://ftp.gimp.org?)。是否提供密碼是可選擇的,如果有密碼,則形如ftp://<login>:<password>@<ftpserveraddress>。大部分網頁瀏覽器要求使用被動FTP模式,然而并不是所有的FTP服務器都支持被動模式。

?

架設FTP服務器

一、Windows Server 2008 R2

Windows Server 2008 R2 中自帶了FTP Server 7.5,可單獨下載安裝。

FTP 7.5 for IIS 7.x (x86)

FTP 7.5 for IIS 7.x (x64)

FTP 7.5 新特性:原文地址

IIS 7.x集成(IIS 7.0IIS 7.5):FTP 7.5已經作為IIS 7.x的一部分被安裝,便于集中管理、維護。

對互聯網標準更好、更安全的支持:支持SSL上的FTPIPv6UTF8

共享宿主改進:可以將FTP架設在已經存在的站點,多個FTP使用同一IP

改進的日志與功能性支持:提供更加詳細的日志記錄。

可擴展性增強:可以編寫自定義的用戶驗證機制。

?

下面在VirtualBox虛擬機中架設FTP服務器。宿主機IP:192.168.0.100,虛擬機IP:192.168.0.101,虛擬網卡采用橋連模式。

1.1、打開Server Manager,在角色中點擊【添加角色】:

?

1.2、選中【Web Server(IIS)】,點擊【下一步】:

?

1.3、點擊【下一步】:

?

1.4、在開發服務器上,建議全部選中,在生產服務器上,則酌情選擇,點擊【下一步】:

?

1.5、點擊【安裝】:

?

1.6、安裝成功后關閉向導:

?

1.7、開始à運行,輸入:inetmgr,打開IIS 管理器:

?

1.8、可以看到FTP 7.5包含的選項:

?

1.9、新建一個FTP站點:

?

1.10、輸入名稱和物理路徑,點擊【下一步】:

?

1.11、IP不限制,默認端口21,不需要SSL證書,點擊【下一步】:

?

1.12、設置權限,點擊【完成】:

?

1.13、在瀏覽器中輸入FTP服務器地址,若無法訪問請檢查宿主機與虛擬機的防火墻設置:

?

1.14、使用命令行訪問FTP

最常用的命令有:

ls 列出遠程機的當前目錄

cd 在遠程機上改變工作目錄

lcd 在本地機上改變工作目錄

ascii 設置文件傳輸方式為ASCII模式

binary 設置文件傳輸方式為二進制模式

close 終止當前的ftp會話

hash 每次傳輸完數據緩沖區中的數據后就顯示一個#號

get(mget) 從遠程機傳送指定文件到本地機

put(mput) 從本地機傳送指定文件到遠程機

open 連接遠程ftp站點

quit 斷開與遠程機的連接并退出ftp

? 顯示本地幫助信息

?

輸入ftp 主機名/IP登錄:

?

由于設置為允許匿名訪問,故可以用匿名賬戶登錄(用戶名:anonymous,密碼任意):

?

查看所有目錄和文件:

?

下載一個文件到本地:

?

輸入bye退出登錄:

?

1.15、使用FTP客戶端連接FTP服務器

我使用的FileZilla:

?

可以在WireShark中抓到數據包:

?

二、Ubuntu 11.04

Linux下有很多FTP軟件,這里以Ubuntu下面的Pure-FTPd為例來搭建一下Linux中的FTP Server。

Pure-FTPd是一個基于BSD協議授權的開源FTP Server,官方主頁:http://www.pureftpd.org,功能全面,具體功能可以查看文檔。

安裝Pure-FTPd

?

由于Ubuntu源里的包太老了,故我選擇直接下載源代碼編譯安裝。在http://download.pureftpd.org/pub/pure-ftpd/releases/下載最新穩定版,我下載的是pure-ftpd-1.0.32.tar.gz

?

?

?

解壓縮:tar zxvf pure-ftpd-1.0.32.tar.gz

?

?

cd 壓縮后的目錄

?

?

./configure

?

?

make

?

?

sudo make install

?

?

?

啟動FTP Server:

?

?

sudo /usr/local/sbin/pure-ftpd &

?


?

連接測試:

?

?

ftp localhost

?

				

?

查看當前目錄下的目錄和文件:

?

				

?

在Windows中用命令行連接:

?

?

Pure-FTPd有很多命令及參數配置,具體用法請參閱官方文檔。

?


?

小結:

?

?

FTP作為十分常用的文件傳輸協議,在企業中有著廣泛的引用,各平臺下也提供了大量的Server、Client。在使用中除了關注傳輸速度之外,傳輸安全性也是必須考慮的。

?

?

以下引用維基百科中的常用FTP Server、Client,根據需要選用:

?

?

FTP服務器列表

維基百科,自由的百科全書

以下是FTP服務器的列表。

[編輯]圖形界面

  • Bullet Proof FTP Server?[1]
  • CesarFTP?[2]
  • Cerberus FTP Server?[3]
  • Gene6 FTP Server?[4]
  • GuildFTPd?[5]
  • PureFTPd?[6]
  • RaidenFTPD?[7]
  • Serv-U FTP Server?[8]
  • War FTP Daemon?[9]

[編輯]文字界面

  • AnomicFTPD?[10]
  • BSD ftpd
  • glFTPd?[11]
  • ProFTPd
  • vsftpd?[12]
  • wu-ftpd?[13]

?

FTP客戶端列表

維基百科,自由的百科全書

以下是FTP客戶端的列表。

[編輯]圖形界面

  • AnyClient?[1]
  • Core FTP?[2]
  • CrossFTP?[3]
  • CuteFTP
  • DeluxeFTP
  • FileZilla
  • FlashFXP
  • FTP Surfer?[4]
  • FTPRush?[5]
  • gFTP
  • OneButton FTP?[6]
  • SmartFTP?[7]
  • Total Commander
  • WISE-FTP
  • WS FTP?[8]
  • 8uftp?[9]

[編輯]文字界面

  • lftp
  • NcFTP
  • tnftp?[10]
  • Wget(只能下傳)

[編輯]只支持SFTP/SCP

  • Sftp for win32?[11]
  • WinSCP?[12]

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/255441.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/255441.shtml
英文地址,請注明出處:http://en.pswp.cn/news/255441.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

36.LEN() 函數

LEN() 函數 LEN 函數返回文本字段中值的長度。 SQL LEN() 語法 SELECT LEN(column_name) FROM table_name SQL LEN() 實例 我們擁有下面這個 "Persons" 表&#xff1a; IdLastNameFirstNameAddressCity1AdamsJohnOxford StreetLondon2BushGeorgeFifth AvenueNew York…

【python學習】——為exe軟件創建快捷方式;實現軟件自啟動

目錄 1、為exe創建快捷方式 2、實現軟件自啟動 3、完整代碼 4、結果展示 1、為exe創建快捷方式 利用winshell庫的CreateShortCut函數進行創建 【python學習】——獲取桌面路徑&#xff0c;獲取系統盤符&#xff0c;獲取電腦用戶名&#xff0c;獲取軟件自啟動存放目錄_有情懷…

dedecms如何調用當前欄目的子欄目及子欄目文章

前面ytkah談到了 dedecms調用當前欄目的子欄目怎么操作&#xff0c;有的朋友會問如果再增加一個調用子欄目文章的需求&#xff0c;即調用當前欄目的子欄目及子欄目文章&#xff0c;這個有辦法實現嗎&#xff1f;這時就要涉及到另外兩個標簽的調用了&#xff0c;dede:channelart…

控制面板項 .cpl 文件說明

控制面板項 .cpl 文件說明appwiz.cpl 程序和功能、卸載或更改程序bthprops.cpl 藍牙控制面板desk.cpl 屏幕分辨率Firewall.cpl WINDOWS防火墻hdwwiz.cpl 設備管理器igfxcpl.cpl 英特爾圖形和…

vxWorks下常用的幾種延時方法

在應用編程的時候&#xff0c;通常會碰到需要一個任務在特定的延時之后執行一個指定的動作&#xff0c;如等待外設以確保數據可靠&#xff0c;控制揚聲器發聲時間以及串口通信超時重發等。這就需要利用定時器機制來計量特定長度的時間段。 vxWorks作為實時嵌入式系統&#xff0…

【pyqt5學習】——窗口最小化至托盤、取消任務欄圖標

目錄 1、最小化至托盤 1&#xff09;重寫系統托盤類&#xff0c;設置托盤圖標等屬性 2&#xff09;將具體的窗口放入托盤 2、取消任務欄界面圖標 3、問題匯總 1&#xff09;退出后托盤圖標還是存在&#xff0c;沒有消失 2&#xff09;最小化后左下角會出現 窗口 3&#…

標準庫類型String,Vector

string對象中每個字符的處理&#xff1a; 要用到 for(聲明:表達式) 語句 比如簡單的打印string str中每一個字符 --- string str("hello world!!!"); for(auto c: str)cout<<c<<endl; (ps:這里auto 的意思是讓編譯器自己來決定c變量的類型) --- 再舉一…

React 是怎樣煉成的

本文主要講述 React 的誕生過程和優化思路。 內容整理自 2014 年的 OSCON - React Architecture by vjeux&#xff0c;雖然從今天&#xff08;2018&#xff09;來看可能會有點歷史感&#xff0c;但仍然值得學習了解。以史為鑒&#xff0c;從中也可以管窺 Facebook 優秀的工程管…

HOJ 1640 Mobile Phone

題意&#xff1a;有一個n*n的矩陣&#xff0c;op1時&#xff0c;在(x,y)增加值z&#xff0c;op2時&#xff0c;求以(x1,y1)和(x2,y2)構成的矩陣的和。 思路&#xff1a;二維線段樹。 代碼&#xff1a; 1 #include<stdio.h>2 #include<string.h>3 const int N1111;4…

vxWorks多任務編程初探-上

進程&#xff08;Process&#xff09;是具有一定獨立功能的程序關于某個數據集合上的一次運行活動&#xff0c;是系統進行資源分配和調度的一個獨立單位。程序只是一組指令的有序集合&#xff0c;它本身沒有任何運行的含義&#xff0c;只是一個靜態實體。而進程則不同&#xff…

【pyqt5學習】——重寫窗口右上角關閉事件closeEvent()

目錄 1、法一&#xff1a;設置中文按鈕 2、法二&#xff1a;不設置中文按鈕 pyqt5 關閉按鈕顯示提示信息_Marvin_Xavier的博客-CSDN博客_pyqt 關閉按鈕https://blog.csdn.net/marwenx/article/details/107226531 1、法一&#xff1a;設置中文按鈕 def closeEvent(self, even…

感動要哭 擼了一個半小時的重載預算符高精

擼了一個半小時代碼&#xff0c;沒玩守望&#xff08;垃圾游戲毀我青春五個金牌都帶不起隊友&#xff09;最后編譯出312個錯誤。嚇我&#xff0c;然而改了幾個地方就直接過了直接過了直接過了&#xff0c;目前還是不明白ostream&#xff0c;istream的用處&#xff0c;上網才搞定…

LVDS DP等顯示器接口簡介

LVDS 產品傳輸速率從幾百Mbps到2Gbps。它是電流驅動的&#xff0c;他通過在接收端放置一個負載而得到的電壓&#xff0c;當電流正向流動&#xff0c;接收端輸出為1&#xff0c;反之為0&#xff0c;它的擺幅250mV-450mV. lvds 即低壓差分信號傳輸&#xff0c;是一種滿足高性能傳…

http協議相關內容

二、HTTP協議1、協議&#xff1a;共同遵守的規則。2、網絡協議有&#xff1a;TCP&#xff08;有三次握手機制&#xff09;/IP&#xff1a;傳輸控制協議/地址協議&#xff0c;SMTP&#xff1a;簡單郵件傳輸協議&#xff0c;FTP&#xff1a;文件傳輸協議&#xff0c;http&#xf…

使用XmlTextReader 讀取XML

XmlTextReader 限于只向前的讀取 XmlTextReader 的技術類似于讀取其他任何文件 首先打開文件&#xff0c;然后從文件中讀取信息,最后關閉文件. 每次從文件中讀取信息時&#xff0c;他在文件中的位置都會前移.到達文件結尾的時候就什么都不讀了。 1 創建XmlTextReader對象 …

C#中ComboBox動態綁定賦值

http://www.crifan.com/csharp_combobox_data_dynamic_binding/ C#中&#xff0c;已有一個List&#xff0c;想要動態的&#xff0c;綁定到ComboBox中。 【解決過程】 1.參考&#xff1a; c# winform comboBox動態綁定數據 去試試代碼&#xff1a; cmbSubCategory.DataSource g…

【pyqt5學習】——日歷控件calendarWidget設置單元格格式(前景、背景)、日歷控件屬性編輯

目錄 0、導入庫 1、返回日歷選中的日期 2、更改日歷控件周幾&#xff08;比如一個月屬于周一的日期&#xff09;的所有格子屬性 3、更改日歷控件單個格子&#xff08;指定日期&#xff09;屬性 4、日歷格子屬性 5、信號——clicked() 6、成果展示 0、導入庫 from PyQt5.Q…

linux內核數據結構之鏈表

1、前言 最近寫代碼需用到鏈表結構&#xff0c;正好公共庫有關于鏈表的。第一眼看時&#xff0c;覺得有點新鮮&#xff0c;和我之前見到的鏈表結構不一樣&#xff0c;只有前驅和后繼指針&#xff0c;而沒有數據域。后來看代碼注釋發現該代碼來自linux內核&#xff0c;在linux源…

為什么使用 XML

為什么使用 XML&#xff1f; Web 使我們能夠與任何地方的任何人通訊。廣泛接受的標準&#xff08;這對完全使用 Web 的潛力是至關重要的&#xff09;允許 Web 在多種交互操作的技術層上通訊。一個重要層是可視化顯示和用戶界面&#xff0c;例如 HTML、GIF 和 JScript(TM) 之類的…

bzoj1084: [SCOI2005]最大子矩陣

dp。轉移方程在代碼里。。轉載于:https://www.cnblogs.com/invoid/p/5451202.html