根據(jù)是使用Port模式還是Passive模式,F(xiàn)TP使用不同的TCP端口號(hào),在詳細(xì)描述FTP前,我們來(lái)
簡(jiǎn)單討論一下TCP端口號(hào)的一些基本概念。TCP使用端口號(hào)來(lái)標(biāo)識(shí)所發(fā)送和接收的應(yīng)用,端口號(hào)
可以幫助TCP來(lái)分離字節(jié)流并且?guī)拖鄳?yīng)字節(jié)傳遞給正確的應(yīng)用程序。
TCP端口號(hào)可以是半永久的和暫時(shí)的。服務(wù)器端監(jiān)聽(tīng)在半永久的端口上來(lái)讓客
戶端訪問(wèn)。客戶
端使用暫時(shí)的端口在本地標(biāo)識(shí)一個(gè)對(duì)話,客戶端端口只在使用TCP服務(wù)時(shí)候才存在,而服務(wù)器
端口只要服務(wù)器在運(yùn)行就一直在監(jiān)聽(tīng)。
TCP端口可以歸為3類:
1、眾所周知的端口來(lái)標(biāo)識(shí)在TCP上運(yùn)行的標(biāo)準(zhǔn)服務(wù),包括FTP、HTTP、TELNET、SMTP等,這些
端口號(hào)碼范圍為0-1023;
2、注冊(cè)端口號(hào)用來(lái)標(biāo)識(shí)那些已經(jīng)向IANA(Internet Assigned Numbers Assigned Numbers
Authority)注冊(cè)的應(yīng)用,注冊(cè)端口號(hào)為1024-49151;
3、私有端口號(hào)是非注冊(cè)的并且可以動(dòng)態(tài)地分配給任何應(yīng)用,私有端口為49152-65535;
注冊(cè)的端口號(hào)本來(lái)打算只給注冊(cè)的應(yīng)用使用,可近年來(lái)端口號(hào)已經(jīng)陷入了到達(dá)極限的困境,你
可能會(huì)看到本來(lái)應(yīng)該是給注冊(cè)應(yīng)用使用的注冊(cè)端口被非注冊(cè)應(yīng)用用做暫時(shí)的端口。RFC1700詳
細(xì)標(biāo)注了眾所周知的和注冊(cè)的端口號(hào),然而不幸的是,這個(gè)RFC文檔自從1994年以來(lái)一直沒(méi)有
被更新,然后你仍可以從IANA得到一個(gè)及時(shí)更新的端口列表,詳細(xì)URL為:
http://www.iana.org/assignments/port-numbers
>>2.0<< FTP Port模式和FTP Passive模式
當(dāng)你對(duì)一個(gè)FTP問(wèn)題進(jìn)行排錯(cuò)時(shí)候,你首先要問(wèn)的一個(gè)問(wèn)題是使用的是port模式的還是passive
模式。因?yàn)檫@兩種行為迥異,所以這兩種模式引起的問(wèn)題也不同;在過(guò)去,客戶端缺省為acti
ve(port)模式;近來(lái),由于Port模式的安全問(wèn)題,許多客戶端的FTP應(yīng)用缺省為Passive模式。
>>2.1 FTP Port模式
Port模式的FTP步驟如下:
1、 客戶端發(fā)送一個(gè)TCP SYN(TCP同步)包給服務(wù)器段眾所周知的FTP控制端口21,客戶端
使用暫時(shí)的端口作為它的源端口;
2、 服務(wù)器端發(fā)送SYN ACK(同步確認(rèn))包給客戶端,源端口為21,目的端口為客戶端上使用
的暫時(shí)端口;
3、 客戶端發(fā)送一個(gè)ACK(確認(rèn))包;客戶端使用這個(gè)連接來(lái)發(fā)送FTP命令,服務(wù)器端使用這個(gè)
連接來(lái)發(fā)送FTP應(yīng)答;
4、 當(dāng)用戶請(qǐng)求一個(gè)列表(List)請(qǐng)求或者發(fā)起一個(gè)要求發(fā)送或者接受文件的請(qǐng)求,客戶端軟件使用
PORT命令,這個(gè)命令包含了一個(gè)暫時(shí)的端口,客戶端希望服務(wù)器在打開(kāi)一個(gè)數(shù)據(jù)連接時(shí)候使用
這個(gè)暫時(shí)端口;PORT命令也包含了一個(gè)IP地址,這個(gè)IP地址通常是客戶自己的IP地址,而且FT
P也支持第三方(third-party)模式,第三方模式是客戶端告訴服務(wù)器端打開(kāi)與另臺(tái)主機(jī)的連接;
5、 服務(wù)器端發(fā)送一個(gè)SYN包給客戶端的暫時(shí)端口,源端口為20,暫時(shí)端口為客戶端在PORT命令中
發(fā)送給服務(wù)器端的暫時(shí)端口號(hào);
6、 客戶端以源端口為暫時(shí)端口,目的端口為20發(fā)送一個(gè)SYN ACK包;
7、 服務(wù)器端發(fā)送一個(gè)ACK包;
8、 發(fā)送數(shù)據(jù)的主機(jī)以這個(gè)連接來(lái)發(fā)送數(shù)據(jù),數(shù)據(jù)以TCP段(注:segment,第4層的PDU)形式發(fā)送(
一些命令,如STOR表示客戶端要發(fā)送數(shù)據(jù),RETR表示服務(wù)器段發(fā)送數(shù)據(jù)),這些TCP段都需要
對(duì)方進(jìn)行ACK確認(rèn)(注:因?yàn)門(mén)CP協(xié)議是一個(gè)面向連接的協(xié)議)
9、 當(dāng)數(shù)據(jù)傳輸完成以后,發(fā)送數(shù)據(jù)的主機(jī)以一個(gè)FIN命令來(lái)結(jié)束數(shù)據(jù)連接,這個(gè)FIN命令需要另一
臺(tái)主機(jī)以ACK確認(rèn),另一臺(tái)主機(jī)也發(fā)送一個(gè)FIN命令,這個(gè)FIN命令同樣需要發(fā)送數(shù)據(jù)的主機(jī)以A
CK確認(rèn);
10、 客戶端能在控制連接上發(fā)送更多的命令,這可以打開(kāi)和關(guān)閉另外的數(shù)據(jù)連接;有時(shí)候客戶端結(jié)
束后,客戶端以FIN命令來(lái)關(guān)閉一個(gè)控制連接,服務(wù)器端以ACK包來(lái)確認(rèn)客戶端的FIN,服務(wù)器
同樣也發(fā)送它的FIN,客戶端用ACK來(lái)確認(rèn)。
下圖圖示了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 連接初始化,數(shù)據(jù)端口) |
| SYN |
| Port yyyy <---------------------- Port 20 |
| SYN+ACK |
| Port yyyy ----------------------> Port 20 |
| ACK |
| Port yyyy <---------------------- Port 20 |
| |
| |
| (數(shù)據(jù)操作: 數(shù)據(jù)傳輸) |
| Data + ACK |
| Port yyyy <---------------------> Port 20 |
| . |
| . |
| . |
| |
====================================================================/
FTP Port模式會(huì)給網(wǎng)絡(luò)管理人員在許多方面帶來(lái)很多問(wèn)題,首先,在PORT命令消息中的IP地址和端
口號(hào)的編碼不是直白地顯示。另外,應(yīng)用層的協(xié)議命令理論上不應(yīng)該包含網(wǎng)絡(luò)地址信息(注:
IP地址),因?yàn)檫@打破了協(xié)議層的原則并且可能導(dǎo)致協(xié)同性和安全性方面的問(wèn)題。
下圖是WildPackets EtherPeek協(xié)議分析儀解碼了PORT命令的地址參數(shù),地址參數(shù)后是端口號(hào),見(jiàn)PORT
192,168,10,232,6,127;6,127部分的第一個(gè)阿拉伯?dāng)?shù)字乘以256,然后加上第2個(gè)阿拉伯?dāng)?shù)字
就得到端口號(hào),所以客戶端指定了端口號(hào)為6*256+127=1663;
/====================================================================
| IP Header - Internet Protocol Datagram |
| Version: 4 |
| Header Length: 5 (20 bytes) |
| |
| ............... |
| |
| Time To Live: 128 |
| Protocol: 6 TCP - Transmission Control Protocol |
| Header Checksum: 0xAA36 |
| Source IP Address: 192.168.0.1 DEMO |
| Dest. IP Address: 192.168.0.3 VI |
| No IP Options |
| |
| TCP - Transport Control Protocol |
| Source Port: 2342 manage-exec |
| Destination Port: 21 ftp |
| Sequence Number: 2435440100 |
| Ack Number: 9822605 |
| Offset: 5 (20 bytes) |
| Reserved: