1.1主動模式和被動模式
主動模式:服務端通過指定的資料傳輸埠(預設20),主動連線客戶端提交的埠,向客戶端傳送資料。
被動模式:服務端採用客戶端建議使用被動模式,開啟資料傳輸埠的監聽,被動等待客戶端的連線然後向客戶端傳送資料。
一言以蔽之,服務端主動連線客戶端就是主動模式,服務端被動等待客戶端連線(客戶端主動連線服務端)就是被動模式。
ftp有主動模式被動模式而ssh等其他協議沒有這種說法的根源是:ftp要使用別的埠來傳輸資料。
1.2本文環境
192.168.220.128--centos 6.5,作為服務端,通過yum安裝的vsftpd,使用預設配置
192.168.220.130--windows 7,作為客戶端。
windows cmd中的ftp只支援主動模式我們以之來演示主動模式的互動過程,一般的ftp客戶端都優先採用被動模式這裡我們以filezilla client來演示被動模式的互動過程。
2.1主動模式互動過程分析
在cmd中登入後,執行ls -l,以下是ls -l執行的互動資料報
4--客戶端(52667) 請求服務端(21)連線本機192.168.220.128:52670
5--服務端(21)向客戶端(52667)表示可以,不過下次最好用被動模式
6--客戶端(52667)請求服務端(21)執行:ls -l
7--握手包1,服務端預設資料連線埠(20),主動連線客戶端給過來的埠(52670)
8--握手包2,客戶端(52670)向服務端(20)表示同意連線
9--握手包3,服務端(20)確認與客戶端(52670)建立連線
10--服務端(21)向客戶端(52667)表示以下是命令執行返回結果
11--返回結果資料報1
12--返回結果資料報2
13--揮手包1,服務端(20)向客戶端(52670)表示資料已完成傳輸
14--揮手包2,客戶端(52670)回覆服務端(20)己方也準備處理完成
15--服務端(21)向客戶端(52667)表示資料已傳輸完成
16--客戶端(52667)向服務端(21)表示好的
17--揮手包3,客戶端(52670)向服務端(20)表示可斷開連線
18--揮手包4,客服端(20)向客戶端(52670)確認斷開連線
2.2被動模式互動過程分析
在filezilla client中登入後,點選列出根目錄,以下是點選列出根目錄後的互動資料報
請求服務端執行:cd /
戶端(52550)請求下一操作使用被動模式
26--服務端(21)同意採取被動模式,並返回自己將要監聽的位址192.168.220.128:64758
27--客戶端(52550)請求執行:ls
28--握手包1,客戶端52552請求連線64758
29--握手包2,服務端64758回覆同意連線請求
30--握手包3,客戶端52552回覆服務端64758確認建立資料傳輸鏈路連線
31--服務端表示將要發回命令執行結果
35--返回結果資料報1(64758埠到52552埠)
36--返回結果資料報2(64758埠到52552埠)
37--揮手包1,服務端(64758)表示自己資料已完全傳輸
38--揮手包2,客戶端(52552)表示自己資料也將完成傳輸
39--服務端(21)向客戶端(52550)表示執行結果已完全返回
40--客戶端(52550)向服務端(21)表示好的
41--揮手包3,客戶端(52552)向服務端(64758)表示可斷開資料傳輸鏈路
42--揮手包4,服務端(64758)回覆客戶(52552)端確認斷開
3.1在被動模式中,服務端資料傳輸的埠由客戶端指定嗎
答案是否定的。在一些資料中可以看到客戶端決定服務端埠的說法,但在2.2互動過程中我們已可以清楚地看到,客戶端只是決定使用被動模式,服務端應允後就傳回了自己監聽的埠。
3.2nat環境下ftp存在問題的根本原因是什麼
在實踐中我們會發現,網路nat環境下不論是主動模式還是被動模式,當執行ls等需要建立資料傳輸鏈路的檔案時,都會出現超時報錯(ftp:connect: connection timed out.)。
根本的原因是ftp傳輸資料要使用別的埠,直接的原因是要麼是客戶端在應用層中指出自己的ip:port(主動模式)要麼是服務端在應用層中指出自己的ip:port
在主動模式中,服務端主動連線客戶端的ip:port,所以(從原理上講)只要將服務端的資料傳輸埠(預設20)也做對映使該埠也能訪問客戶端網路即可。(但實際遇到的情況中,即便做了對映也還是不行,暫未明其原因)
在被動模式中,服務端指出自己的ip:port,比如我們這裡假設服務端真實ip為10.10.220.128,對映ip為192.168,.220.128,服務端將要監聽的位址10.10.220.128:64758,發給客戶端(192。168.220.130),客戶端(192.168.220.130)就向10.10.220.128:64758發起連線請求。但實際上客戶端只有到達其對映位址(192.168.220.128)的路由,並沒有直接到10.10.220.128的路由,所以連線請求必然是沒有回應的。
3.3為什麼我們可以ftp伺服器
眾所周知,上網時個人一般都只能分配到乙個私網位址,從這角度來說我們要ftp到伺服器,使用主動模式肯定會出問題,但在實際操作中可以看到一般都可以成功ftp。推測可能是nat裝置攔載了ftp指定ip:port的資料報,將其修改為了對映出去的ip:port。
FTP主動模式與被動模式
ftp最權威的參考見rfc 959,有興趣的朋友可以仔細閱讀 ftp使用2個tcp埠,首先是建立乙個命令埠 控制埠 然後再產生乙個資料埠。主動模式使用tcp 21和20兩個埠。被動模式會工作在大於1024隨機埠。1 主動模式 port模式 客戶端從乙個任意的非特權埠n n 1024 連線到ftp伺服...
FTP主動模式與被動模式
一般來說,客戶端有乙個 socket 用來連線 ftp 伺服器的相關埠,它負責 ftp 命令的傳送和接收返回的響應資訊。一些操作如 登入 改變目錄 刪除檔案 依靠這個連線傳送命令就可完成。伺服器的命令埠號一般是21。如果使用主動模式,通常客戶端會傳送乙個埠號給伺服器端,並在這個埠監聽。伺服器需要連線...
FTP主動與被動模式
首先要知道ftp只支援tcp協議,不支援udp協調的。ftp主動模式與被動模式 主動模式 port 客戶端向服務端的ftp埠 預設是21 傳送請求,服務端ftp守護程序 執行緒收到請求後,建立一條命令鏈結。當需要傳輸資料時,客戶端通過這個命令鏈結傳送命令給服務端port命令,告訴服務端 我建立了乙個...