FTP的主動和被動模式

在沒有NAT的環境下,FTP主動和被動模式都可以成功,
在NAT的環境下,FTP只能用被動模式才可以成功,這是為什麼呢?

FTP主動模式會使用到兩個PORT,21 Port是命令使用,20 Port是傳輸資料使用,壞就壞在20 Port伺服器會主動去連用戶端,在NAT的環境下,如果路由器看到一個主動連線的封包就會丟掉了,當然永遠建不成連線。

用戶端開Port給伺服器連 , 所以 193,183就是 256*193 + 183 = 49591 。

然後伺服器會用他的20 Port主動跟用戶端 49591 Port建立連線,這也是為什麼傳輸資料會用到20 Port,但是是伺服器的 20 Port。

因為在NAT的環境下當然建不成連線。

FTP的被動模式不管是命令或是傳送資料都是用戶端主動連線的,所以都可以成功。

伺服器端會告訴用戶端我會開哪個Port , 所以 216,248就是 256*216 + 244 = 55540 。

最後由用戶端主動發一個連到伺服器的55540 Port,這個三方交握建好之後,伺服器就會用這個Port傳遞資料給用戶端。
結論:
在沒有NAT的環境下,主動模式和被動模式都可以使用,但是有NAT的環境下,就需要用被動模式,不然三方交握失敗無法建立連線傳輸資料。
(主動模式)
命令使用 用戶端 伺服器
1024以上的隨機 Port -----------------------> 21 Port
傳輸使用 1024以上用戶端開Port <---------------------- 20 Port
(NAT模式下失敗)
(被動模式)
命令使用 用戶端 伺服器
1024以上的隨機 Port -----------------------> 21 Port
傳輸使用 1024以上的隨機 Port+1 ----------------------> 1024以上伺服器開Port
(NAT模式下成功)
很棒的分享!從您這邊學習不少。謝謝!
回覆刪除不用客氣啦!
刪除