FTP文件傳輸協議淺述
相信沒有比FTP文件傳輸協議更為基礎的協議了。那么對于這種協議,想必大家也多少有所接觸。那么很多服務器和站點的建設都將用到它,如果你還不清楚它的細節,那就來看看文章吧。
1. FTP文件傳輸協議概述
FTP是文件傳輸協議(File Transfer Protocol )的簡稱。FTP是TCP IP的一種具體應用,它工作在OSI模型的第七層,TCP模型的第四層上,即應用層,使用TCP傳輸而不是UDP,FTP連接是可靠的,而且是面向連接,為數據的傳輸提供了可靠的保證。
FTP工作模式與客戶/服務器模式相似。與大多數的其他TCP應用不相同的是,FTP在客戶與服務器之間使用兩個TCP連接――控制連接和數據連接,控制連接在客戶與服務器交互的整個過程中一直存在,而數據連接只在有文件或目錄傳輸的時候才被創建,用完了后就被關閉了。控制連接用于發送指令給服務器以及等待服務器響應;數據連接是用來建立數據傳輸通道的。
2.FTP文件傳輸協議的Port模式
根據是使用Port模式還是Passive模式,FTP使用不同的TCP端口號。
FTP Port模式
Port模式的FTP文件傳輸協議步驟如下:
1、 客戶端發送一個TCPSYN(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、 FTP文件傳輸協議中規定,客戶端結束后,客戶端以FIN命令來關閉一個控制連接,服務器端以ACK包來確認客戶端的FIN,服務器同樣也發送它的FIN,客戶端用ACK來確認。