ftp不同於一般的服務,該服務需要同時開啟兩個端口,一個端口是命令通道,另一個端口為資料傳輸通道。根據資料傳輸通道建立的不同,分為了主動模式和被動模式。這裡,詳細的講述下主動模式的工作流程,以及碰到問題如何解決。
主動模式流程
命令通道的建立。客戶端會隨機取出一個大於1024的連接埠與伺服器端的21連接埠建立連接,當連接建立好的以後,客戶端就可以透過該連接來對ftp服務執行指令,例如查詢檔案名稱、上傳檔案、下載檔案等命令都是透過該通道來執行的。
通知服務端使用主動模式。 21連接埠只是用來進行命令的執行,對於真正需要檔案的傳輸則需要另起連接埠來操作。客戶端會隨機再開啟一個端口用於文件傳輸,然後通過21端口告知ftp伺服器兩個信息,客戶端用戶文件傳輸的端口,採用主動模式進行文件傳輸。
ftp伺服器主動向客戶端建立連線。當ftp服務端知道了兩個資訊後,會主動的透過20埠與客戶端建立連線。該連線建立好之後,檔案就可以透過該連線進行傳輸。
主動模式可能遇到的問題
在主動模式下連接不了ftp伺服器,可能有以下幾種情況:
服務端連接埠未啟動
服務端防火牆
用戶端所在區域網路有nat轉換
主動模式下,一般開啟的連接埠為21(指令通道)、20(檔案傳輸通道)。兩個連接埠缺一不可。另外防火牆也需要放行這兩個連接埠。針對客戶端主機,可以透過telnet測試這兩個連接埠是否開放。
對於連接埠及防火牆的問題比較容易解決,而NAT轉換問題就很難解決了。我們再來看nat轉換是如何導致問題的出現的,對於命令通道的建立因為是由客戶端發起的,所以該通道可以成功建立。但是當服務端主動向客戶端建立資料通道時,因為服務端知道的是NAT的IP,並不是客戶端的IP。因此服務端會以20埠向NAT的其中一個連接埠(例如1042埠)發送主動連線的請求。但是NAT並沒有開啟那個端口,所以主動連接建立失敗。那麼,如何解決這個問題呢?使用被動模式即可。
被動式模式流程
命令通道的建立。這個階段和主動模式一樣。
客戶端發出PASV的連結請求。客戶端透過命令通道,向服務端發送PASV被動模式的請求,並等待服務端的回應。
服務端啟動資料端口,並告知客戶端。當服務端收到客戶端的PASV請求後,那麼就會啟動一個連接埠用作資料傳輸。這個連接埠可以是隨機的(1024~65535)、也可以指定。然後,透過命令通道告知客戶端。
客戶端啟動資料端口,與服務端建立連線。客戶端收到了服務端的訊息,知道了服務端用於資料傳輸的端口,這個時候客戶端就會隨機開啟一個大於1024的端口,然後透過這個端口與服務端建立連接。
更多相關技術文章,請造訪linux系統教學欄位!
以上是ftp主動模式與被動模式-為什麼連接不上FTP伺服器的詳細內容。更多資訊請關注PHP中文網其他相關文章!