4月 02, 2011

FTP 協定介紹

FTP 的連線模式分兩種:主動模式(Active mode) 與 被動模式(Passive mode)

[主動模式] Client 這邊開個 port 之後 Server 要主動連過來

Client 與 Server 連線後,Client 會主動利用 PORT 這個指令來告訴
Server ,未來 Data Channel 請你連線到我這個 port 這邊

指令: PORT 69,171,224,13,17,35 (17*256+35=4387)
回應: 200 Port command successful.

在這邊,Client 告訴 Server:
將來若是你有資料(像是檔案列表)要送給我,那麼就送 port: 17*256 + 35 這邊。所以 Server 會主動利用 Server 主機的 Port 20 發出連線到 FTP Client 的主機

C:4386 ----myPort:17*256+35----> S:21
C:4387 <--真正有 Data 要送來---- S:20

[被動模式] 因為 Client 在防火牆內,所以 Server 只能被動等他連過來

如果 Client 在防火牆或者 NAT 下面,那麼Server 的主動連線就會被擋掉
此時就要採用 Passive 被動連線方式:麻煩 Server 額外開一個 port 之後我會連過去

指令: PASV
回應: 227 Entering Passive Mode (173,221,21,38,32,89)

C:X ----你開個 Port 給我,之後會連過去 ----> S:21
C:X <---我會開個 port 在 32*256+89等你 ----- S:21
C:Y ----主動送出 SYN 連線請求--------------> S:8281


note:
(1) 不要再被 port 20 與 21 搞混了,這兩個 port 是 Server 在主動模式用的
(2) 如果是在被動模式下,除了 Server port 21 是確定的之外其他的 port 都是動態指定,並沒有固定要在哪個位置

沒有留言:

張貼留言