FTP的PASV傳輸模式也叫被動傳輸模式。
眾所周知,標準FTP傳輸需要兩個TCP/IP連接,有一個命令連接,用于FTP客戶端與FTP服務器端之間傳遞命令和執行結果的信息。還有一個是數據連接,在執行上傳文件或下載文件的操作用于傳輸文件的數據。
命令連接的端口是固定的,連接是持續的,一般是21號端口。而數據連接的端口是隨機的,是臨時產生的,而且連接是隨連隨斷的。
rfc959的標準協議文檔里的一個簡易的例圖,展現了這個構架。
-------------
|/---------|
|| User || --------
||Interface|<--->| User |
|----^----/| --------
---------- | | |
|/------| FTP Commands |/----V----|
||Server|<---------------->| User ||
|| PI || FTP Replies || PI ||
|--^---/| |----^----/|
| | | | | |
-------- |/--V---| Data |/----V----| --------
| File |<--->|Server|<---------------->| User |<--->| File |
|System| || DTP || Connection || DTP || |System|
-------- |------/| |---------/| --------
---------- -------------
Server-FTP USER-FTP
基于客戶端主動發起數據端口,還是服務器端主動發起數據端口的不同,定義了FTP的兩種傳輸模式,PORT和PASV。
PORT模式,是客戶端通過PORT命令告訴服務器端要使用的數據端口號,然后在客戶端主動建立起這個端口的TCP/IP監聽。在進行文件傳輸的操作時,服務器來連接客戶端的這個數據端口,進行數據傳輸。
PASV模式,是客戶端通過PASV命令來告訴服務器端,想使用PASV方式傳輸數據。服務器收到命令之后,主動在服務器端建立一個數據端口的TCP/IP監聽,并把這個數據端口號返回客戶端。在進行文件傳輸的操作時,客戶端去連接服務器端的這個數據端口,進行數據傳輸。
為了更進一步的了解PASV傳輸模式,我在命令行下模擬了FTP的TCP/IP連接。
在實驗中,我使用的是IIS里面自帶的FTP服務器(任何一款FTP服務器軟件都可以,只要是支持PASV模式)。
模擬FTP連接時,我用的是 telnet loalhost 21這樣的方法來進行模擬TCP/IP連接。
1. 在ftp服務器根目錄(一般是C:Inetpubftproot),創建一個叫test.txt的文件,隨便往里面寫點東西。