其他的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端會開啟一個大於1024的port ( 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端會開啟一個大於1024的port ( 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可以決定是否支援這些模式。