ftp傳輸有兩種工作模式,active mode和passive mode(主動模式和被動模式),簡單描述連線過程如下:
主動模式的連線過程是:客戶端向伺服器的ftp埠(預設是21)傳送連線請求,伺服器接受連線,建立一條命令鏈路。當需要傳送資料時, 客戶端在命令鏈路上用port命令告訴伺服器:“我開啟了***埠,你過來連線我”。於是伺服器從20埠向客戶端的***埠傳送連線請求,建立一條資料鏈路來傳送資料。
被動模式的連線過程是:客戶端向伺服器的ftp埠(預設是21)傳送連線請求,伺服器接受連線,建立一條命令鏈路。當需要傳送資料時, 伺服器在命令鏈路上用pasv命令告訴客戶端:“我開啟了***埠,你過來連線我”。於是客戶端向伺服器的***埠傳送連線請求,建立一條資料鏈路來傳送資料。
瞭解模式的目的,是為了瞭解埠。使用 ftp 傳輸時,至少會使用到兩個 port 來建立連線通道:
主動模式 ( active mode )
ftp client 跟 ftp server 聯機後,會主動利用 port 指令提出 data channel 聯機的要求,如下: 12
指令:port 10,18,53,171,17,114
迴應:200 port command successful.
這裡的 port 指令是由 ftp client 送出的,當需要建立 data channel 時,ftp server 會主動利用 server 主機的 port 20 發出聯機到 ftp client 的主機,而 port 指令後的引數說明如下:
後兩個數字是 ftp client 接受聯機的埠號,埠號的計算方式是 (第五個數字 * 256 + 第六個數字),以此範例來說,ftp client 接受的聯機埠號是 17 * 256 + 114 = 4,466
由此可知,如果 ftp client 處於 nat 的環境下的話,ftp server 幾乎無法正常的聯機到 ftp client 的主機,所以現在大部分的聯機模式幾乎都建議使用者使用被動模式(passive mode)。
被動模式 ( passive mode )
ftp client 跟 ftp server 聯機後,會主動利用 pasv 指令提出 data channel 聯機的要求,如下:12
指令:pasv
迴應:227 entering passive mode(59,37,124,43,158,251)
你可以看到由 ftp client 送出的 pasv 指令並沒有送出其他的引數,而是在 ftp server 響應的時候出現了(59,37,124,43,158,251) 字串,當需要建立 data channel 時,這時就會由 ftp client 主動連至 ftp server 動態開放的 port 供 ftp client 連線,其中 (59,37,124,43,158,251) 的說明如下:
後兩個數字是 ftp server 接受聯機的埠號,埠號的計算方式是 (第五個數字 * 256 + 第六個數字),以此範例來說,ftp server 可接受的聯機埠號是 158 * 256 + 251 = 40,699
由此可知,使用被動模式(passive mode)對 ftp server 的系統管理員來說,可掌控的部分是比較多的,因為 ftp server 無法決定使用者是否可使用主動模式聯機,但若改使用被動模式聯機的話,就幾乎能讓所有人正常的使用。
FTP的主動模式和被動模式
最近做一個專案用到ftp和其它系統進行檔案傳輸,結果在ftp網路連線的問題上花了很多時間,由於太久沒搞多ftp,忘記了ftp不單單開放21埠,客戶端採用不同連線模式對網路有不同。在此重溫一下ftp的主動模式和被動模式的相關知識。 在使用ftp時,如果客戶端機器和ftp伺服器雙方之間的所有埠都是開...
FTP的主動模式和被動模式
最近做一個專案用到ftp和其它系統進行檔案傳輸,結果在ftp網路連線的問題上花了很多時間,由於太久沒搞多ftp,忘記了ftp不單單開放21埠,客戶端採用不同連線模式對網路有不同。在此重溫一下ftp的主動模式和被動模式的相關知識。 在使用ftp時,如果客戶端機器和ftp伺服器雙方之間的所有埠都是開...
FTP協議的兩種工作模式簡單解析!
感謝貢獻者,簡單易懂。 ftp協議有兩種工作方式 port方式和pasv方式,中文意思為主動式和被動式。 port 主動 方式的連線過程是 伺服器開放一個埠,通知客戶端連線,服務端接受連線,建立一條命令鏈路。 當需要傳送資料時,客戶端在命令鏈路上用 port命令告訴伺服器 我開啟了一個1024 的...