歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
您现在的位置: Linux教程網 >> UnixLinux >  >> Unix知識 >> 關於Unix

Ftp的兩種工作模式

FTP(File Transfer Protocol)的縮寫,即文件傳輸協議。其是TCP/IP協議族中的一種具體應用,它工作在OSI模型的第七層,即應用層上,其使用TCP協議傳輸,即FTP傳輸的所有文件都是通過“三次握手”實現,也就是說當客戶端與 服務器 端之間的數據包傳輸,一旦出 FTP(File Transfer Protocol)的縮寫,即文件傳輸協議。其是TCP/IP協議族中的一種具體應用,它工作在OSI模型的第七層,即應用層上,其使用TCP協議傳輸,即FTP傳輸的所有文件都是通過“三次握手”實現,也就是說當客戶端與服務器端之間的數據包傳輸,一旦出現丟包現象,會重新傳輸,以保證數據的可靠。 FTP協議要使用兩個TCP連接傳送數據,一個是命令連接,用來在FTP客戶端與服務器之間傳遞命令;另一個是數據連接,用來上傳或下載數據。這就直接導致FTP需要2個端口,一個端口用於控制連接,即21端口,發送指令給服務器以及等待服務器響應;另一個端口是數據傳輸端口,端口號為20,是用來建立數據傳輸通道。FTP的連接模式有兩種,PORT(主動模式)和PASV(被動模式), 主動模式的連接過程是:客戶端動態的選擇一個端口(這個端口號一定是1024以上的,因為1024以前的端口都已經預先被定義好)向服務器端的FTP端口(默認是21)發送連接請求,服務器接受連接,建立一個命令連接。當需要傳送數據時或者列出服務器的文件列表時(通常使用ls或dir命令),客戶端通過命令連接告訴服務器(使用PORT命令):“我已經打開了XX端口,請你過來連接”。於是服務器使用20端口向客戶端的XX端口發送連接請求,建立一條數據連接來傳送數據。 被動模式:客戶端首先使用與主動連接模式相同的方法與服務器建立命令連接。當需要傳送數據時,客戶端通過命令連接告訴服務器(使用PASV命令)“我要連接你的XX端口,請問是否空閒”,如果恰好該端口空閒,服務器會告訴客戶端:“你請求的端口空閒,可以建立連接(ACK確認信息)”,否則服務器會說“該端口已經占用,請換個端口(UNACK信息)”。如果客戶端得到的是空閒的提示,就會利用該端口建立連接,否則就換個端口重新嘗試,這也就是所謂的連接建立的協商過程. PORT模式建立數據傳輸通道是由服務器端發起的,服務器使用20端口連接客戶端的某一個大於1024的端口;在PASV模式中,數據傳輸的通道的建立是由FTP客戶端發起的,他使用一個大於1024的端口連接服務器的1024以上的某一個端口。如果從C/S模型這個角度來說,PORT對於服務器來說是OUTBOUND,而PASV模式對於服務器是INBOUND.

繼續實驗:‘兩權分立’的FTP工作模式工作環境:ADSL---(219.154.214.150)NAT(10.41.221.2)-----PC(10.41.221.6/FTP SERVER)1、映射21端口到PC,PC安裝FTP服務serv-u,用serv-u是因為他可以方便的設置FTP的兩種工作模式。外網發起連接為例。PORT方式 能連接,不能列目錄PASV方式 能連接,不能列目錄分析:FTP 支持兩種模式。這兩種模式被稱為“標准”(或 PORT,或“主動”)和“被動”(或 PASV)。“標准”模式 FTP 客戶端會向 FTP 服務器發送PORT 命令。“被動”模式客戶端會向 FTP 服務器發送PASV 命令。這些命令是在建立 FTP 會話時通過 FTP 命令通道進行發送的。2種模式 FTP 客戶端都要建立一個到 FTP 服務器上 TCP 端口 21 的連接。客戶選擇大於1024的端口發起連接,此連接會建立 FTP 命令通道。不能列目錄是因為FTP使用不同的通道來傳遞數據,這也是FTP不同於HTTP服務的地方,HTTP需要一條通道就可以 了2、再映射20端口到PC,serv-u默認的方式就是PORT方式。PORT方式 能連接、也能列目錄、能下載文件PASV方式 能連接、不能列目錄下載文件分析:PORT方式:當 FTP 客戶端需要接收數據(如文件夾列表或者文件)時,客戶端就會通過FTP 命令通道發送PORT 命令。此PORT 命令包含了 FTP 客戶端在哪個端口(比如3328)上接收數據的相關信息。接下來,PC從 TCP 端口 20發起到3328用戶端口的連接 ,而這是一個新的連接,也許客戶端防火牆會攔截。可以看出是服務器用20端口“主動”連接客戶指定的端口,所以PORT方式也叫主動方式。該模式下有2個特點:1 客戶是動態的端口,而服務器使用的是固定端口20,而且是服務器發起主動新連接。2 在FTP客戶連接服務器的整個過程中,控制信道是一直保持連接的,而數據傳輸通道是臨時建立的。PASV方式不能到達是因為PASV要求服務器用動態的端口來連接,而這個端口一般在1024-5000之間,而且是用戶發起連接,雖然PC開了此端口等待連接,但是NAT並沒有映射這麼多端口,所以通訊中斷。3 關閉20端口映射,再映射10001-10004到PCPORT方式 能連接、不能列目錄、不能下載文件PASV方式 能連接、 不能列目錄 、不能下載文件serv-u很帥,在設置(高級)選項中設置10001-10004,然後啟動被動模式,這樣就可以建立連接了。分析:以前也做過這個實驗,發現有個理解不全面的的地方,原因是他直接在可以見面的2台計算機上做的實驗,而我把他們用NAT分開來做,更能看出問題。問題出在所謂的“協商過程”,原文是這樣的:“發送PASV指令,在這個指令中,用戶告訴服務器自己要連接服務器的某一個端口,如果這個服務器上的這個端口是空閒的可用的,那麼服務器會返回ACK的確認信息,之後數據傳輸通道被建立並返回用戶所要的信息(根據用戶發送的指令,如ls、dir、get等);如果服務器的這個端口被另一個資源所使用,那麼服務器返回UNACK的信息,那麼這時,FTP客戶會再次發送PASV命令,這也就是所謂的連接建立的協商過程”其實我抓到的報文是這樣的:1 serv-u在設置PASV方式是可以指定端口,而且端口被立即啟動到監聽狀態,比如我設置是10001-10004,可以用有關軟件“看到”這些端口已經被置為監聽。2 當客戶端通過該命令通道發送PASV 命令時,FTP 服務器會打開一個短暫的端口,並通知 FTP 客戶端從該端口請求數據傳輸,而不是協商解決。FTP 服務器通過將該短暫端口用作,數據傳輸的源端口來對該請求作出響應。顯然,這個連接是由用戶發起的,過也叫被動方式。3 在FTP客戶連接服務器的整個過程中,控制信道是一直保持連接的,而數據傳輸通道是臨時建立的。4 端口在1024-5000之間,不要大於5000,為什麼呀,我也不知道,因為我設置5000以上就不能建立TCP連接,實際是這樣理論我也不知道。我沒有用其它軟件做FTP服務器,不能確定是否有協商過程,如果FTP這麼弱智,那要協商到什麼時候,不如直接告訴客戶不就行了。缺點是端口有限,如果多個用戶同時連接,這幾個端口是不夠的。4 解決PASV模式不能傳數據的問題的辦法:不能傳數據的問題出在:服務器向客戶端傳送了IP。當FTP客戶端登錄進入服務器的時候,PASV模式服務器會向客戶端傳送本機的IP地址和數據端口,當服務器放在內網中的時候,服務器會向客戶端返回內網的IP,這當然是不能完成連接的,需要讓服務器返回外網的地址。serv-u真的很帥,就是serv-u本身具有返回外網地址這樣的功能,方法是先選中新建FTP服務器的屬性,在domain標簽裡選擇“enable dynamic dns”,此時會出現第二個標簽,叫“dynamic dns”,然後到tz0.com申請動態域名,申請後會得到一個key,在此標簽中填入此key即可。最後一步,是到新建服務器的settings屬性中,選擇advanced標簽,選中“allow passive mode data transfer”,旁邊的IP地址框留空。這個框對於撥號用戶不用填,只有出口使用固定地址才需要填。總結:采用什麼方式是由用戶決定的,而主動和被動之說是相對服務器而言。在FTP客戶連接服務器的整個過程中,控制信道是一直保持連接的,而數據傳輸通道是臨時建立的。主動方式下是服務器以20端口發起連接,而被動方式下服務器告訴客戶一個動態端口,由客戶發起連接。如果你使用FTP客戶端程序是只能登錄不能傳數據,不妨換一種工作模式,當然需要服務器支持。關於防火牆對外網用戶而言,你的防火牆如果不接受主動連接,麻煩大了:標准模式 FTP 客戶端無法在此環境中運行,因為 FTP 服務器必須向 FTP 客戶端發出新的連接請求。對服務器而言,防火牆管理員可能不希望使用 PASV FTP 服務器,因為 FTP 服務器可以打開任何短暫端口號,如果防火牆配置允許未經請求的連接完全訪問所有的短暫端口,則可能會是不安全的。小技巧,IE默認使用主動方式發起連接,要想使用被動方式,需要設置IE-工具-Inte.net 選項-高級在浏覽下面,單擊“為 FTP 站點啟用文件夾視圖”復選框,將其清除。單擊“使用被動 FTP(為防火牆和 DSL 調制解調器兼容性)”復選框,將其選中。單擊確定。如果選中了“為 FTP 站點啟用文件夾視圖”復選框,Internet Explorer 的表現就會像“標准”模式 FTP 客戶端一樣,即使您還選中了“使用被動 FTP”復選框也是如此。如果您清除了“為FTP 站點啟用文件夾視圖”復選框,然後選中“使用被動 FTP”復選框,Internet Explorer 的表現就會像“被動”模式 FTP 客戶端一樣。

Copyright © Linux教程網 All Rights Reserved