【求助】問一個FTP port的問題..困擾已久..



贊助商連結


頁 : [1] 2

hellfallout
2005-11-02, 04:00 AM
FTP運作是以TCP21為command channel
及TCP20為data channel。
-----------------------------------------------------
在同網域內(都是172.17.17.0/24內的電腦)
我架server於A電腦
client為B電腦
今天我在B電腦用IE,用主動模式連過去...netstat -n下的狀況顯示為
Local Address Foreign Address
A:21 .............. B:3975
A:21 .............. B:3976
-----------------------------------------------------ok~到這都沒問題
當我開始用B電腦抓檔案下來時...

netstat -n下的狀況顯示為
Local Address Foreign Address
A:21 .............. B:3975
A:21 .............. B:3976
A:3416............. B:4000 <-------?
----------------------------------------------------

不是TCP20為data channel嗎?為何會是3416port呢?
為何我試下載檔案~都從沒看過20 port出現過呢?
(我用主動模式喔..)
thx~~

贊助商連結


lenbo
2005-11-02, 07:46 AM
主動模式?被動模式?

hpo14
2005-11-02, 10:53 AM
今天我在B電腦用IE,用主動模式連過去...netstat -n下的狀況顯示為
為何我試下載檔案~都從沒看過20 port出現過呢?
(我用主動模式喔..)

樓主打的

lenbo
2005-11-02, 11:52 AM
FTP的交談流程,小弟是沒深入研究過…
不過這類走TCP的協定,應該都是大同小異!
port:20只是負責在那裡daemon而已…
當client與server做完hand shaking後,就會把原本的port:20轉到其他沒有用的port
因為HTTP走port:80的流程是醬子…
所以,小弟認為FTP主動模式下,應該也是八九不離十的做法

hellfallout
2005-11-02, 08:31 PM
FTP的交談流程,小弟是沒深入研究過…
不過這類走TCP的協定,應該都是大同小異!
port:20只是負責在那裡daemon而已…
當client與server做完hand shaking後,就會把原本的port:20轉到其他沒有用的port
因為HTTP走port:80的流程是醬子…
所以,小弟認為FTP主動模式下,應該也是八九不離十的做法
--------------------------------------------------------------------------
謝謝
...你意思是說HTTP最後也會從80 port轉到其他沒有用的port?
我用不同的fpt client、ftp server等去測~~
都沒出現20 port~~所以很好奇怎麼都和書寫的不同~~

nopy
2005-11-02, 10:31 PM
--------------------------------------------------------------------------
謝謝
...你意思是說HTTP最後也會從80 port轉到其他沒有用的port?
我用不同的fpt client、ftp server等去測~~
都沒出現20 port~~所以很好奇怎麼都和書寫的不同~~

樓上那位講錯了!

正常來講,HTTP 在伺服器端不會用其他的 TCP PORT,只會用 Port 80,
在用戶端才有可能用其他的 PORT

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

lenbo
2005-11-02, 10:37 PM
謝謝
...你意思是說HTTP最後也會從80 port轉到其他沒有用的port?
我用不同的fpt client、ftp server等去測~~
都沒出現20 port~~所以很好奇怎麼都和書寫的不同~~

嗯…這麼說好了!
如果HTTP是死硬只用port:80,那你這個HTTP server在同一時間內
就只能服務一個使用者而已了…

你可以試試看,上傳檔案到FTP server上去
應該就可以測到port:20了;)

ps:小弟應該沒把以前老師教的都還給老師了吧?!

nopy
2005-11-02, 11:00 PM
嗯…這麼說好了!
如果HTTP是死硬只用port:80,那你這個HTTP server在同一時間內
就只能服務一個使用者而已了…

你可以試試看,上傳檔案到FTP server上去
應該就可以測到port:20了;)

ps:小弟應該沒把以前老師教的都還給老師了吧?!

這位兄弟,你的觀念錯了喔!

請回去翻看看 Richard Stevens 的 UNIX Network Programming 這本書,
區別每個連線的是五個數值(5-tuple),包含

the protocol (TCP or UDP)
local host's ip
local host's port number
remote host's ip
remote host's port number

只要上面任一個數值不一樣,就是不同的 connection (連線)
因此雖然 server 端的 port 相同 (HTTP: 80),
但是由於 client 端的 port number 不同,所以會是可以同時存在的連線

至於伺服器端能不能同時服務多個用戶,這個與 Port number 無關,
充其量只是伺服器端的 Process fork 或 Multi-Thread 的程式處理技巧

不相信的話,去找一台 HTTP Server 看看不就得了...
伺服器端對於每個 connection 都是使用 Port 80 的喔

如果你寫過網路程式,伺服器 accept() 後會得到一個新的 socket id 沒有錯,
不過這是新的 socket id,不是 port number


哈哈.. 我好像在上 Network Programming 的課程...

lenbo
2005-11-02, 11:59 PM
嗯…說實話,我自己也快忘光了…

印象中,老師是說像是server開個port:33來daemon
所以client就會去連server的port:33,並要求建立connection
而server就會去叫socket開個port跑腿給client

印象中是醬子啦…年代已久,也不敢說是正確地…
改天有空再來翻翻書…

hellfallout
2005-11-03, 05:46 AM
以下是我用CuteFTP Pro 6.0主動模式去存取ftp server顯現的訊息
client:172.17.17.25
server:172.17.17.23
-----------------------------------------------------------------------
*** CuteFTP Pro 6.0 - build Mar 25 2004 ***

STATUS:> Getting listing ""...
STATUS:> Connecting to FTP server 172.17.17.23:21 (ip = 172.17.17.23)...
STATUS:> Socket connected. Waiting for welcome message...
220 CesarFTP 0.99e Server Welcome !
STATUS:> Connected. Authenticating...
COMMAND:> USER aaa
331 User login OK, waiting for password
COMMAND:> PASS *****
230 User password OK, CesarFTP server ready
STATUS:> Login successful.
COMMAND:> PWD
257 "/"
STATUS:> Home directory: /
COMMAND:> FEAT
500 Syntax error or unknown command
STATUS:> This site doesn't support the 'features' command.
COMMAND:> REST 100
350 Restarting at 100, send RETR or STOR command to start transfer
STATUS:> This site can resume broken downloads.
COMMAND:> REST 0
350 Restarting at 0, send RETR or STOR command to start transfer
COMMAND:> PORT 172,17,17,25,4,109
200 command successfully executed
COMMAND:> LIST
150 Data connection created for directory listing
226 Transfer successfully achieved
STATUS:> Directory listing completed.
COMMAND:> TYPE I
200 Type successfully set
COMMAND:> PWD
257 "/"
NOTE:> New transfer created for \"ghost\" <12>
STATUS:> Transferring directory "/ghost"...
STATUS:> Applying Folder Overwrite rule: prompting.
COMMAND:> TYPE A
200 Type successfully set
COMMAND:> CWD /ghost
250 Directory change OK
STATUS:> PWD skipped. Current folder: "/ghost".
COMMAND:> PORT 172,17,17,25,4,120
200 command successfully executed
COMMAND:> LIST
150 Data connection created for directory listing
226 Transfer successfully achieved
STATUS:> Transferring file "/ghost/gh051006.gho"...
STATUS:> Removing local file "C:\Documents and Settings\ghost\gh051006.gho".
COMMAND:> TYPE I
200 Type successfully set
COMMAND:> PORT 172,17,17,25,4,122
200 command successfully executed
COMMAND:> RETR gh051006.gho
150 Data connection created for /ghost/gh051006.gho retrieving

--------------------------------------------------------------------
以下是client端 netstat -n的狀況
--------------------------------------------------------------------
TCP 172.17.17.25:1132 172.17.17.23:21 ESTABLISHED
TCP 172.17.17.25:1145 172.17.17.23:21 ESTABLISHED
TCP 172.17.17.25:1146 172.17.17.23:1095 ESTABLISHED
TCP 172.17.17.25:1147 172.17.17.23:1096 ESTABLISHED
--------------------------------------------------------------------------
麻煩看一下囉~~