http://slacksite.com/other/ftp.html
FTP 的主動(dòng)模式( active )和被動(dòng)模式( passive )
FTP 是一種檔傳輸協(xié)定 (File Transfer Protocol),它的連線模式有兩種﹕
主動(dòng)模式( active )和被動(dòng)模式( passive )。以下說明 FTP 的連線是怎樣建立的﹕
在 active 模式下 (一般預(yù)設(shè)的模式)﹕
1. FTP client 開啟一個(gè)隨機(jī)選擇的TCP port 呼叫 FTP server 的 port 21請(qǐng)求連線。當(dāng)順
利完成 Three-Way Handshake 之後,連線就成功建立,但這僅是命令通道的建立
。
2.當(dāng)兩端需要傳送資料的時(shí)候,client 透過命令通道用一個(gè) port command 告訴 server
,client可以用另一個(gè)TCP port 做數(shù)據(jù)通道。
3.然後 server 用 port 20 和剛才 client 所告知的 TCP port 建立數(shù)據(jù)連線。請(qǐng)注意:連
線方向這是從 server 到 client 的,TCP 封包會(huì)有一個(gè) SYN flag。
4.然後 client 會(huì)返回一個(gè)帶 ACK flag的確認(rèn)封包﹐並完成另一次的 Three-Way
Handshake 手續(xù)。這時(shí)候,數(shù)據(jù)通道才能成功建立。
5.開始數(shù)據(jù)傳送。
在 passive 模式下
1.FTP client 開啟一個(gè)隨機(jī)選擇的TCP port 呼叫 FTP server 的 port 21請(qǐng)求連線,並完
成命令通道的建立。
2.當(dāng)兩端需要傳送資料的時(shí)候,client 透過命令通道送一個(gè) PASV command 給
server,要求進(jìn)入 passive 傳輸模式。
3.然後 server 像上述的正常模式之第 2 步驟那樣,挑一個(gè)TCP port ,並用命令通道
告訴 client。
4.然後 client 用另一個(gè)TCP port 呼叫剛才 server 告知的 TCP port 來建立數(shù)據(jù)通道。此
時(shí)封包帶 SYN flag。
5.server 確認(rèn)後回應(yīng)一個(gè) ACK 封包。並完成所有交握手續(xù)?成功建立數(shù)據(jù)通道。
6.開始數(shù)據(jù)傳送。
在實(shí)際使用上, active mode 用來登入一些開設(shè)在主機(jī)上及沒有安裝防火牆的 FTP server,或是開設(shè)於 client side 的 FTP server!
Passive mode (簡稱 PASV)用來登入一些架設(shè)於防火牆保護(hù)下而又是開設(shè)於主機(jī)上的 FTP server!
如果您覺得太深?yuàn)W而弄不清楚, 那就先用預(yù)設(shè)的 active mode 登入, 失敗改用 passive mode 登入就是了。
PS: 並不是每套 FTP 軟體都支援 passive mode 登入
http://forum.icst.org.tw/phpBB2/viewtopic.php?t=79
原PO那邊有不少的討論文章,想要多了解的人務(wù)必點(diǎn)選。