網址:http://www.xiaojb.com/archives/it/ftp.shtml
根據是使用port模式還是passive模式,ftp使用不同的tcp端口號,在詳細描述ftp前,我們來簡單討論一下tcp端口號的一些基本概念。tcp使用端口號來標識所發送和接收的應用,端口號可以幫助tcp來分離字節流并且幫相應字節傳遞給正確的應用程序。
tcp端口號可以是半永久的和暫時的。服務器端監聽在半永久的端口上來讓客戶端訪問。客戶端使用暫時的端口在本地標識一個對話,客戶端端口只在使用tcp服務時候才存在,而服務器端口只要服務器在運行就一直在監聽。
tcp端口可以歸為3類:
1、眾所周知的端口來標識在tcp上運行的標準服務,包括ftp、http、elnet、smtp等,這些端口號碼范圍為0-1023;
2、注冊端口號用來標識那些已經向iana(internet assigned numbers assigned numbers authority)注冊的應用,注冊端口號為1024-49151;
3、私有端口號是非注冊的并且可以動態地分配給任何應用,私有端口為49152-65535;注冊的端口號本來打算只給注冊的應用使用,
ftp port模式和ftp passive模式
當你對一個ftp問題進行排錯時候,你首先要問的一個問題是使用的是port模式的還是passive模式。因為這兩種行為迥異,所以這兩種模式引起的問題也不同;在過去,客戶端缺省為active(port)模式;近來,由于port模式的安全問題,許多客戶端的ftp應用缺省為passive模式。
2.1 ftp port模式
port模式的ftp步驟如下:
1、 客戶端發送一個tcp syn(tcp同步)包給服務器段眾所周知的ftp控制端口21,客戶端使用暫時的端口作為它的源端口;
2、 服務器端發送syn ack(同步確認)包給客戶端,源端口為21,目的端口為客戶端上使用的暫時端口;
3、 客戶端發送一個ack(確認)包;客戶端使用這個連接來發送ftp命令,服務器端使用這個連接來發送ftp應答;
4、 當用戶請求一個列表(list)請求或者發起一個要求發送或者接受文件的請求,客戶端軟件使用port命令,這個命令包含了一個暫時的端口,客戶端希望服務器在打開一個數據連接時候使用這個暫時端口;port命令也包含了一個ip地址,這個ip地址通常是客戶自己的ip地址,而且ftp也支持第三方(third-party)模式,第三方模式是客戶端告訴服務器端打開與另臺主機的連接;
5、 服務器端發送一個syn包給客戶端的暫時端口,源端口為20,暫時端口為客戶端在port命令中發送給服務器端的暫時端口號;
6、 客戶端以源端口為暫時端口,目的端口為20發送一個syn ack包;
7、 服務器端發送一個ack包;
8、 發送數據的主機以這個連接來發送數據,數據以tcp段(注:segment,第4層的pdu)形式發送(一些命令,如stor表示客戶端要發送數據,retr表示服務器段發送數據),這些tcp段都需要對方進行ack確認(注:因為tcp協議是一個面向連接的協議)
9、 當數據傳輸完成以后,發送數據的主機以一個fin命令來結束數據連接,這個fin命令需要另一臺主機以ack確認,另一臺主機也發送一個fin命令,這個fin命令同樣需要發送數據的主機以ack確認;
10、 客戶端能在控制連接上發送更多的命令,這可以打開和關閉另外的數據連接;有時候客戶端結束后,客戶端以fin命令來關閉一個控制連接,服務器端以ack包來確認客戶端的fin,服務器同樣也發送它的fin,客戶端用ack來確認。
下圖圖示了ftp port模式前幾步步驟:
/====================================================================\
| |
| [ ftp client ] [ ftp server ] |
| |
| (tcp:21 連接初始化,控制端口) |
| syn |
| port xxxx ———————-> port 21 [tcp] |
| syn+ack |
| port xxxx <———————- port 21 |
| ack |
| port xxxx ———————-> port 21 |
| |
| (控制操作: 用戶列目錄或傳輸文件) |
| |
| port, ip, port yyyy |
| port xxxx <———————- port 21 |
| port seccussful |
| port xxxx <———————- port 21 |
| list, retr or stor |
| port xxxx ———————-> port 21 |
| |
| |
| (tcp:20 連接初始化,數據端口) |
| syn |
| port yyyy <———————- port 20 |
| syn+ack |
| port yyyy ———————-> port 20 |
| ack |
| port yyyy <———————- port 20 |
| |
| |
| (數據操作: 數據傳輸) |
| data + ack |
| port yyyy <———————> port 20 |
| . |
| . |
| . |
| |
\====================================================================/
june 29th, 2007 at 23:43
| (控制操作: 用戶列目錄或傳輸文件) |
| |
| port, ip, port yyyy |
| port xxxx port 21 |
| |
第一個我覺得方向錯了,不知道說的對不對?
leave a replyname (required)
mail (will not be published) (required)
website
spam protection: sum of 6 + 8 ?