FTP協(xié)議是在互聯(lián)網(wǎng)早期階段使用的文件傳輸協(xié)議劫狠,現(xiàn)在使用逐漸減少倍宾,所以需要簡單了解一下钙皮。
1 FTP(File Transfer Protocol)協(xié)議
??文件傳送協(xié)議FTP只提供文件傳送的一些基本服務(wù)嘶摊,它使用TCP可靠的傳輸服務(wù)仅胞。FTP主要功能是減少或消除在不同操作系統(tǒng)(硬、軟件體系都可以不同)之間的文件傳輸能力饺藤。
??FTP是基于客戶服務(wù)器方式包斑。用戶通過一個(gè)客戶機(jī)程序連接至在遠(yuǎn)程計(jì)算機(jī)上運(yùn)行的服務(wù)器程序。
依照FTP協(xié)議提供服務(wù)涕俗,進(jìn)行文件傳送的計(jì)算機(jī)就是FTP服務(wù)器罗丰。
連接FTP服務(wù)器,遵循FTP協(xié)議與服務(wù)器傳送文件的計(jì)算機(jī)就是FTP客戶端再姑。
??FTP服務(wù)器進(jìn)程由兩大部分組成:一個(gè)主進(jìn)程萌抵,負(fù)責(zé)接收新的請求;另外有若干個(gè)從屬進(jìn)程元镀,負(fù)責(zé)處理單個(gè)請求绍填。
??主進(jìn)程的工作步驟如下:
(1) 打開熟知端口(端口號為21),使客戶進(jìn)程能夠連接上栖疑。常用的熟知端口號(系統(tǒng)端口號)在傳輸層協(xié)議概述介紹過讨永。
(2) 等待客戶進(jìn)程發(fā)出連接請求。
(3) 啟動(dòng)從屬進(jìn)程處理客戶進(jìn)程發(fā)來的請求遇革。從屬進(jìn)程的請求處理完畢后即終止卿闹,但從屬進(jìn)程在運(yùn)行期間根據(jù)需要還可能創(chuàng)建其他一些子進(jìn)程。
(4) 回到等待狀態(tài)萝快,繼續(xù)接受其他客戶進(jìn)程發(fā)來的請求锻霎。主進(jìn)程與從屬進(jìn)程的處理是并行進(jìn)行的。
??下圖表示了FTP的工作情況揪漩,圖中的圓柱表示系統(tǒng)中運(yùn)行的進(jìn)程量窘。
??在進(jìn)行文件傳輸時(shí),F(xiàn)TP的客戶和服務(wù)器之間要建立兩個(gè)并行的TCP連接:
??(1) 控制連接:以客戶服務(wù)器方式建立連接氢拥。服務(wù)器以被動(dòng)方式打開熟知的端口號21蚌铜,等待客戶的連接∧酆#客戶則以主動(dòng)方式打開TCP端口21冬殃,來建立連接∪郑控制連接在整個(gè)會(huì)話期間始終保持打開狀態(tài)等待客戶與服務(wù)器之間的通信审葬。該連接用于將命令從客戶傳給服務(wù)器并傳回服務(wù)器的應(yīng)答。如用戶標(biāo)識、口令涣觉、改變遠(yuǎn)程目錄的命令等痴荐。
??(2) 數(shù)據(jù)連接:用于傳輸文件。服務(wù)器端控制進(jìn)程在接收到FTP客戶發(fā)來的文件傳輸請求后官册,就創(chuàng)建數(shù)據(jù)傳送進(jìn)程和數(shù)據(jù)連接生兆,用于連接客戶端和服務(wù)器端的數(shù)據(jù)傳送進(jìn)程。在傳輸完畢后關(guān)閉數(shù)據(jù)傳送連接膝宁,并結(jié)束運(yùn)行鸦难。由于FTP使用了一個(gè)分離的控制連接,因此FTP的控制信息是帶外(out of band)傳送的员淫。
??FTP協(xié)議使用兩個(gè)獨(dú)立的連接的好處是使協(xié)議更加簡單和更容易實(shí)現(xiàn)合蔽,同時(shí)在傳輸文件時(shí)可以利用控制連接對文件的傳輸進(jìn)行控制。如客戶可以在文件傳輸?shù)倪^程中發(fā)送"請求終止傳輸"介返。
2 FTP的兩種工作方式
??FTP支持兩種工作模式:PASV(被動(dòng)模式)和PORT(主動(dòng)模式)
??(1) PORT模式
??Port模式FTP 客戶端首先和FTP服務(wù)器的TCP 21端口建立連接拴事,通過這個(gè)通道發(fā)送命令,客戶端需要接收數(shù)據(jù)的時(shí)候在這個(gè)通道上發(fā)送PORT命令圣蝎。 PORT命令包含了客戶端用什么端口接收數(shù)據(jù)刃宵。在傳送數(shù)據(jù)的時(shí)候,服務(wù)器端通過自己的TCP 20端口連接至客戶端的指定端口發(fā)送數(shù)據(jù)捅彻。 FTP server必須和客戶端建立一個(gè)新的連接用來傳送數(shù)據(jù)。
??(2) PASV模式
??Passive模式在建立控制通道的時(shí)候和PORT模式類似鞍陨,但建立連接后發(fā)送的不是Port命令步淹,而是Pasv命令。FTP服務(wù)器收到Pasv命令后诚撵,隨機(jī)打開一個(gè)臨時(shí)端口(也叫自由端口缭裆,端口號大于1023小于65535)并且通知客戶端在這個(gè)端口上傳送數(shù)據(jù)的請求,客戶端連接FTP服務(wù)器此端口寿烟,然后FTP服務(wù)器將通過這個(gè)端口進(jìn)行數(shù)據(jù)的傳送澈驼,這個(gè)時(shí)候FTP server不再需要建立一個(gè)新的和客戶端之間的連接。
更多的信息可以參考這篇博客:FTP文件傳輸協(xié)議兩種模式-主動(dòng)模式和被動(dòng)模式筛武。
??由于FTP使用了兩個(gè)不同的端口號缝其,所以數(shù)據(jù)連接和控制連接就不會(huì)混亂。
3 FTP的命令和回答
??FTP命令由4個(gè)大寫字母ASCII字符組成徘六,有些還具有可選參數(shù)内边,常見的命令如下(斜體為可選參數(shù)):
??(1) USER username:用于向服務(wù)器傳送的用戶標(biāo)識。
??(2) PASS password:用于向服務(wù)器發(fā)送用戶口令待锈。
??(3) LIST:用于請求服務(wù)器回送當(dāng)前遠(yuǎn)程目錄中的所有文件列表漠其。該文件列表是經(jīng)一個(gè)數(shù)據(jù)連接傳送的,而不是在控制TCP連接上。
??(4) RETR filename:用于從遠(yuǎn)程主機(jī)當(dāng)前目錄檢索(即get)文件和屎。該命令引起遠(yuǎn)程主機(jī)發(fā)起一個(gè)數(shù)據(jù)連接拴驮,并經(jīng)該數(shù)據(jù)連接發(fā)送所請求的文件。
??(5) SORT filename:用于在遠(yuǎn)程主機(jī)的當(dāng)前目錄上存放(即put)文件柴信。
??(6) PORT n1,n2,n3,n4,n5,n6:客戶端的IP地址(n1.n2.n3.n4)和端口(n5×256 + n6)套啤。
例如,PORT 140,252,13,34,4,150颠印,其前4個(gè)數(shù)就是客戶的點(diǎn)分十進(jìn)制IP地址纲岭,即140.252.13.34。后兩位指明16bit端口號线罕,(4,150)所表示二進(jìn)制為(00000100 10010110)——> 4 × 256 + 150 = 1174
??貫穿控制連接止潮,在用戶發(fā)出命令和FTP發(fā)送的命令之間通常是一一對應(yīng)關(guān)系。每個(gè)命令都對應(yīng)一個(gè)從服務(wù)器向客戶的回答钞楼±ⅲ回答是一個(gè)3位數(shù)字,后跟一個(gè)可選信息询件。常見的回答如下:
??(1) 331:Username OK燃乍,Password required(用戶名OK,需要口令)宛琅。
??(2) 125:Data connection already open刻蟹;transfer starting(數(shù)據(jù)連接已打開,開始傳送)嘿辟。
??(3) 425:Can't open data connection(無法打開數(shù)據(jù)連接)舆瘪。
??(4) 452:Error writing file(寫文件差錯(cuò))。
4 匿名FTP
??使用FTP時(shí)必須首先登錄红伦,在遠(yuǎn)程主機(jī)上獲得相應(yīng)的權(quán)限以后英古,方可上傳或下載文件。也就是說昙读,要想同哪一臺計(jì)算機(jī)傳送文件召调,就必須具有哪一臺計(jì)算機(jī)的適當(dāng)授權(quán)。換言之蛮浑,除非有用戶ID和口令唠叛,否則便無法傳送文件。這種情況違背了Internet的開放性沮稚,Internet上的FTP主機(jī)何止千萬玻墅,不可能要求每個(gè)用戶在每一臺主機(jī)上都擁有帳號。匿名FTP就是為解決這個(gè)問題而產(chǎn)生的壮虫。
??互聯(lián)網(wǎng)中有很大一部分FTP服務(wù)器被稱為“匿名”(Anonymous)FTP服務(wù)器澳厢。這類服務(wù)器的目的是向公眾提供文件拷貝服務(wù)!
器环础,不要求用戶事先在該服務(wù)器進(jìn)行登錄注冊,也不用取得FTP服務(wù)器的授權(quán)剩拢。
??Anonymous(匿名文件傳輸)能夠使用戶與遠(yuǎn)程主機(jī)建立連接并以匿名身份從遠(yuǎn)程主機(jī)拷貝文件线得,而不必是該遠(yuǎn)程主機(jī)的注冊用戶。用戶使用特殊的用戶名“anonymous”登錄FTP服務(wù)徐伐,就可以訪問遠(yuǎn)程主機(jī)上公開的文件贯钩。
5 TFTP
??簡單文件傳送協(xié)議TFTP(Trivial File Transfer Protocol),它是一個(gè)很小且很容易實(shí)現(xiàn)的文件傳送協(xié)議办素。TFTP也使用客戶服務(wù)器方式角雷,但是它使用UDP數(shù)據(jù)報(bào)。
??TFTP的優(yōu)點(diǎn):
??(1) 適用于UDP環(huán)境性穿。例如當(dāng)需要將程序或文件同時(shí)向許多機(jī)器下載時(shí)就往往使用TFTP勺三。
??(2) TFTP代碼所占的內(nèi)存比較小。