轉:http://liang29731611.iteye.com/blog/1585135
首先FTP協定是建立在TCP協定基礎上的,是以client與server的每次互動都要經過三次握手(「TCP Three-Way Handshake)
通過兩張圖進行解釋
1、主動模式(也叫做PORT模式、standard模式,需要利用伺服器的21端口進行資料傳輸)
說明:client端利用>1024的任意端口發起于server的21端口建立連接配接,建立“指令聯系通道”,如果要發生資料傳輸,通過21告知server資料聯系通道端口(也是一個>1024的端口例如1333),并進行listen,server利用20端口向client的1333端口發起連接配接,并建立“資料聯系通道”。
“資料聯系通道”是由server主動建立的(步驟6),是以叫做“祖東模式”。
局限性:client端在防火牆或IP分享伺服器後面是,其“指令聯系通道”可以順利建立,但“資料聯系通道”無法順利建立。
2、被動模式
說明:建立“指令聯系通道”的方式和主動模式基本一樣,也是連接配接server的21端口。但是如果需要傳輸資料,client會送出PASV指令,告訴server要利用被動模式建立“資料聯系通道”,然後server會打開一個>1024端口,并開始listen,并把這個端口好通過“指令聯系通道”告知client,client再打開一個>1024的端口,與server建立“資料連接配接通道”。
“資料連接配接通道”是由server被動建立的,是以稱作“被動模式”。
3、VSFTP關于主動模式被動模式的配置
pasv_enable=YES //開啟被動模式,預設是YES
pasv_min_port=3000
pasv_max_port=4000 //設定建立“資料聯系通道”的端口範圍,指定是為了利于server端防火牆設定
pasv_promiscuous=YES(預設是N,設定為Y時,将關閉PASV模式的安全檢查,該檢查確定資料連接配接和控制連接配接是來自同一個IP位址,小心打開此選項,此選項唯一合理的用法是存在于由安全隧道方案構成的組織中)
4、FTP指令行連接配接設定主動和被動模式
windows的ftp指令預設是使用的主動方式連接配接FTP serer。
linux預設是PASV模式,并通過passive on | off 來進行切換
5、實際中遇到的一個問題
關于pasv_promiscuous=YES。
沒有設定此項時用戶端連接配接伺服器正常,但是執行“list”等指令時報
425 Security: Bad IP connecting
說明“資料聯系通道”建立時發現與“指令聯系通道”的IP不同,倒是連接配接诶失敗。
14:15:27.563 [main] INFO c.b.c.util.ftp.EventListenerImpl - 傳回結果: 220 (vsFTPd 2.0.5)
14:15:27.564 [main] INFO c.b.c.util.ftp.EventListenerImpl - 發送指令: ---> USER ws
14:15:27.566 [main] INFO c.b.c.util.ftp.EventListenerImpl - 傳回結果: 331 Please specify the password.
14:15:27.566 [main] INFO c.b.c.util.ftp.EventListenerImpl - 發送指令: ---> PASS ********
14:15:27.570 [main] INFO c.b.c.util.ftp.EventListenerImpl - 傳回結果: 230 Login successful.
14:15:27.570 [main] INFO c.b.c.util.ftp.EventListenerImpl - 發送指令: ---> TYPE I
14:15:27.571 [main] INFO c.b.c.util.ftp.EventListenerImpl - 傳回結果: 200 Switching to Binary mode.
14:15:27.571 [main] INFO c.b.c.util.ftp.EventListenerImpl - 發送指令: ---> TYPE I
14:15:27.571 [main] INFO c.b.c.util.ftp.EventListenerImpl - 傳回結果: 200 Switching to Binary mode.
14:15:27.578 [main] INFO c.b.c.util.ftp.EventListenerImpl - 發送指令: ---> SYST
14:15:27.578 [main] INFO c.b.c.util.ftp.EventListenerImpl - 傳回結果: 215 UNIX Type: L8
14:15:27.583 [main] INFO c.b.c.util.ftp.EventListenerImpl - 發送指令: ---> PWD
14:15:27.583 [main] INFO c.b.c.util.ftp.EventListenerImpl - 傳回結果: 257 "/"
14:15:27.583 [main] INFO c.b.c.util.ftp.EventListenerImpl - 發送指令: ---> PASV
14:15:27.584 [main] INFO c.b.c.util.ftp.EventListenerImpl - 傳回結果: 227 Entering Passive Mode (200,200,200,8,119,147)
14:15:27.586 [main] INFO c.b.c.util.ftp.EventListenerImpl - 發送指令: ---> LIST
14:15:27.587 [main] INFO c.b.c.util.ftp.EventListenerImpl - 傳回結果: 425 Security: Bad IP connecting.