28 October 2010
FTP是一個特殊的protocol之一,

其他的protocol,如:http、pop3、....等等之類的,

都只需要1個connection、1個port。

但是FTP則不是,FTP需要2個connection、2個port。

一個是Command connection / port,用來傳遞client與FTP Server之間的command。(通常設在port 21)

另一個是Data connection / port,是用來傳遞資料的。(通常設在port 20)


一般的人都會認為關掉20、21port,FTP Server就會無法運作,

從某種角度來說,這樣的觀念是正確的,但是其實是錯誤的觀念!!

但這是在傳統式模式FTP的條件下,這樣的觀念才是正確的。

FTP主要分成兩種模式:
1.主動式(POST)
2.被動式(PASV)

傳統的FTP是採用主動式的模式進行連線,

底下為主動式FTP運作圖



1. client端會開啟一個大於1024port ( port x )對FTP Server的port 21進行connection

2. FTP Server會回應client端的connection,告知Client端收到連線了

3. FTP Server的port 20會主動和 Client端的port 1025(port x+1)進行連線(進行資料傳輸)


4. Client會回應Server端的連線。

看完步驟說明,大家會發現一個問題,

一開始client端會開啟兩個port,

port x (connection port)和port x+1 (data port)

在connection port沒有甚麼問題存在,

問題出在data port,

因為client端並不是自己建立一個connection,而是自行開啟一個port等待FTP Server連線進來

這很有可能被Client端的防火牆過濾掉



因此為了解決FTP連線到Client端被過濾掉的問題,所以發展出另一種連線模式

就是被動式模式

被動式模式不管是command  connection或是data connection都是由client端建立的

底下為運作圖



1. 首先,client端會開啟一個大於1024port ( port x )對FTP Server的port 21進行connection

2. FTP Server會回應client端的connection,並告知Client端,Server開啟了port 1200等待資料連線

3. Client端的port 1026會和FTP Server的port 1200進行資料連線

4. Server會回應Client端的連線。




使用了被動模式,解決了client端的問題,

可是相反的,也把這些問題帶給了server。





至於要用哪種模式,是由client端決定的,

client端會在command connection時發出POST或PASV的命令

但是server可以決定是否支援這些模式。





blog comments powered by Disqus