TCP 的連線中在 Client 及 Server 端各會有一個 Port Number,
在 Client 端一般是隨機指定的,而 Server 端則看服務而定,一般不會變動
FTP 的通訊協定比較複雜一點,詳細資料可以參考 http://rfc.giga.net.tw/rfc959
我這邊簡單解釋一下:
FTP 通訊協定在伺服器端可能會使用到 TCP Port 20 及 TCP Port 21 (這可以改的)
TCP Port 21 主要用來傳送命令,TCP Port 20 則用來傳送檔案/資料
如果你的 FTP Server 不是跑在 Port 21,
那麼 Data Port 一般會跑在 command port 減 1 的位置
FTP 有兩種運作模式,一個是 active (主動) 一個是 passive (被動)
這裡的主動與被動的定義是相對於伺服器的角色而言的
而 Port 20 只會用在主動模式下
在主動模式狀況下
Client 首先連接到 FTP Server 的 TCP Port 21,
告訴 FTP Server 他要抓一個檔案,然後這時候 Client 要送出一個訊息,
告訴伺服器他會在那個 TCP Port (隨機指定)等著接收這個檔案,
然後伺服器會經由自己的 Port 20 主動建立一條連線到 Client 端的這個 Port 上面,
藉由此連線把檔案傳送給 Client 端
在被動模式狀況下
Client 首先連接到 FTP Server 的 TCP Port 21,並指明要採用 Passive 模式,
接著告訴 FTP Server 他要抓一個檔案,
這時候伺服器會送出一個訊息,告訴 Client 說已經把檔案準備好放在某個 TCP Port (隨機指定) 上面,
由 Client 端自行建立一條連線到 Server 的這個 TCP Port 來把檔案傳送回去
綜合以上所述,如果你的服務是跑在 TCP port 21,且使用主動模式,
那麼照道理來講,伺服器端連接出去送資料應該要使用 Port 20 才對
你要不要說明一下伺服器端的環境,
然後看看能不能把 Client 端的連線過程記錄貼上來看看
(例如 CuteFTP 連線時會有個小視窗看到一堆命令)
有一個可能是因為伺服器的設定問題導致的
這邊有一份文件詳細說明 FTP data-port 的運作模式,很值得你參考 (英文的)
http://slacksite.com/other/ftp.html
轉貼自: http://www.pczone.com.tw/vbb3/thread/47/117740/
2011年1月17日 星期一
訂閱:
張貼留言 (Atom)
沒有留言:
張貼留言