FTP的含義:
FTP是英文File Transfer Protocol的縮寫,意思是檔案傳輸通訊協定,主要功能是完成從一個系統到另一個系統完整的檔案拷貝。它和HTTP一樣都是Internet上廣泛使用的協議。FTP協議要用到兩個TCP串連,一個是命令鏈路,用來在FTP用戶端與伺服器之間傳遞命令;另一個是資料鏈路,用來上傳或下載資料。
===========第一種理解=======
FTP協議有兩種工作方式:PORT方式和PASV方式,中文意思為主動式和被動式。
PORT(主動)方式的串連過程是:用戶端向伺服器的FTP連接埠(預設是21)發送串連請求,伺服器接受串連,建立一條命令鏈路。當需要傳送資料時,用戶端在命令鏈路上用PORT命令告訴伺服器:“我開啟了XXXX連接埠,你過來串連我”。於是伺服器從20連接埠向用戶端的XXXX連接埠發送串連請求,建立一條資料鏈路來傳送資料。
PASV(被動)方式的串連過程是:用戶端向伺服器的FTP連接埠(預設是21)發送串連請求,伺服器接受串連,建立一條命令鏈路。當需要傳送資料時,伺服器在命令鏈路上用PASV命令告訴用戶端:“我開啟了XXXX連接埠,你過來串連我”。於是用戶端向伺服器的XXXX連接埠發送串連請求,建立一條資料鏈路來傳送資料。
===========第二種理解======
FTP會話時包含了兩個通道,一個叫控制通道,一個叫資料通道。
控制通道:控制通道是和FTP伺服器進行溝通的通道,串連FTP,發送FTP指令都是通過控制通道來完成的。
資料通道:資料通道是和FTP伺服器進行檔案傳輸或者列表的通道。
FTP協議中,控制串連均有用戶端發起,而資料連線有兩種工作方式:PORT方式和PASV方式
-
PORT模式(主動方式)
-
FTP 用戶端首先和FTP Server的TCP 21連接埠建立串連,通過這個通道發送命令,用戶端需要接收資料的時候在這個通道上發送PORT命令。 PORT命令包含了用戶端用什麼連接埠(一個大於1024的連接埠)接收資料。在傳送資料的時候,伺服器端通過自己的TCP 20連接埠發送資料。 FTP server必須和用戶端建立一個新的串連用來傳送資料。
-
PASV模式(被動方式)
-
在建立控制通道的時候和PORT模式類似,當用戶端通過這個通道發送PASV 命令的時候,FTP server開啟一個大於1024的隨機連接埠並且通知用戶端在這個連接埠上傳送資料的請求,然後FTP server 將通過這個連接埠進行資料的傳送,這個時候FTP server不再需要建立一個新的和用戶端之間的串連傳送資料。
PORT模式建立資料轉送通道是由伺服器端發起的,伺服器使用20連接埠串連用戶端的某一個大於1024的連接埠;在PASV模式中,資料轉送的通道的建立是由FTP用戶端發起的,他使用一個大於1024的連接埠串連伺服器的1024以上的某一個連接埠。
如果從C/S模型這個角度來說,PORT對於伺服器來說是OUTBOUND,而PASV模式對於伺服器是INBOUND。
FTP運行原理
FTP的工作原理與其他許多網路公用程式一樣,也是基於客戶—伺服器模式。互連網檔案傳輸通訊協定(File Transfer Protocol ,ftp) 標準是在R F C 9 5 9說明的。該協議定義了一個在遠端電腦系統和本機電腦系統之間傳輸檔案的標準。一般來說,要傳輸檔案的使用者需先經過認證以後才能登入f t p伺服器,訪問在遠程伺服器的檔案。大多數的f t p伺服器往往提供一個anonymoust的公用帳戶來允許沒有f t p伺服器帳戶的使用者可以訪問該f t p伺服器。一個f t p會話通常包括五個軟體元素的互動,1。就模型而言,從1973年以來並沒有什麼變化。
下表是互動元素列表
在一個ft p會話中,會存在兩個獨立的網路連接,一個是由兩端的P I使用的,另一個是由兩端的DTP使用的。PI之間的串連一般被稱做控制串連(control connection),D T P之間的串連被稱做資料連線(data connection)。通常情況下,ftp伺服器監聽連接埠號碼2 1來等待控制串連建立請求,當客戶串連請求到達,會在客戶和ftp伺服器之間建立一個控制串連。而資料連線連接埠號碼的選擇依賴於控制串連上的命令,通常是客戶發送一個控制訊息來指定客戶需要建立一個資料連線來傳輸f t p資料(如下載/上傳一個檔案,顯示目前的目錄的內容等等,都需要建立資料連線來傳輸資料),在該訊息中,指定了客戶監聽並等待串連的連接埠號碼,而伺服器從控制串連收到該命令,向用戶端發起一個串連請求到訊息中指定的連接埠號碼,用戶端收到該請求以後就會建立一個資料連線。串連建立以後,伺服器或客戶就會主動通過該串連發送資料(可能是要傳輸的檔案,也可能是使用者在命令列上發出的ls命令的輸出)。
一個完整的FTP檔案傳輸需要建立兩種類型的串連,一種為檔案傳輸下命令,稱為控制串連,另一種實現真正的檔案傳輸,稱為資料連線。
1) 控制串連
用戶端希望與FTP伺服器建立上傳下載的資料轉送時,它首先向伺服器的TCP 21連接埠發起一個建立串連的請求,FTP伺服器接受來自用戶端的請求,完成串連的建立過程,這樣的串連就稱為FTP控制串連。
2) 資料連線
FTP控制串連建立之後,即可開始傳輸檔案,傳輸檔案的串連稱為FTP資料連線。FTP資料連線就是FTP傳輸資料的過程,它有兩種傳輸模式:主動傳輸模式(Active)和被動傳輸模式(PASSIVE)。見圖2。
主動傳輸模式
當FTP的控制串連建立,客戶提出目錄列表、傳輸檔案時,用戶端發出PORT命令與伺服器進行協商,FTP伺服器使用一個標準連接埠20作為伺服器端的資料連線連接埠(ftp-data),與客戶建立資料連線。連接埠20隻用於串連源地址是伺服器端的情況,並且連接埠20沒有監聽進程來監聽客戶請求。在主動傳輸模式下,FTP的資料連線和控制串連方向相反,由伺服器向用戶端發起一個用於資料轉送的串連。用戶端的串連連接埠由伺服器端和用戶端通過協商確定。主動傳輸模式下,FTP伺服器使用20連接埠與用戶端的暫時連接埠進行串連,並傳輸資料,用戶端只是處於接收狀態。
被動傳輸模式
當FTP的控制串連建立,客戶提出目錄列表、傳輸檔案時,用戶端發送PASV命令使伺服器處於被動傳輸模式,FTP伺服器等待客戶與其聯絡。FTP伺服器在非20連接埠的其它資料轉送連接埠上監聽客戶請求。 在被動傳輸模式下,FTP的資料連線和控制串連方向一致,由用戶端向伺服器發起一個用於資料轉送的串連。用戶端的串連連接埠是發起該資料連線請求時使用的連接埠。當FTP客戶在防火牆之外訪問FTP伺服器時,需要使用被動傳輸模式。被動傳輸模式下,FTP伺服器開啟一個暫態連接埠等待用戶端對其進行串連,並傳輸資料,伺服器並不參與資料的主動傳輸,只是被動接受。
FTP命令詳解
FTP命令是Internet使用者使用最頻繁的命令之一,不論是在DOS還是UNIX作業系統下使用FTP,都會遇到大量的FTP內部命令。熟悉並靈活應用FTP的內部命令,可以大大方便使用者,並收到事半功倍之效。
FTP的命令列格式為:ftp -v -d -i -n -g [主機名稱],其中
-v顯示遠程伺服器的所有響應資訊;
-n限制ftp的自動登入,即不使用;
.n etrc檔案;
-d使用調試方式;
-g取消通用檔案名。
ftp使用的內部命令如下(中括弧表示可選項):
1.![cmd[args]]:在本地機中執行互動shell,exit回到ftp環境,如:!ls*.zip.
2.$ macro-ame[args]:執行宏定義macro-name.
3.account[password]:提供登入遠程系統成功後訪問系統資源所需的補充口令。
4.append local-file[remote-file]:將本地檔案追加到遠程系統主機,若未指定遠程系統檔案名稱,則使用本地檔案名稱。
5.ascii:使用ascii類型傳輸方式。
6.bell:每個命令執行完畢後電腦響鈴一次。
7.bin:使用二進位檔案傳輸方式。
8.bye:退出ftp會話過程。
9.case:在使用mget時,將遠程主機檔案名稱中的大寫轉為小寫字母。
10.cd remote-dir:進入遠程主機目錄。
11.cdup:進入遠程主機目錄的父目錄。
12.chmod mode file-name:將遠程主機檔案file-name的存取方式設定為mode,如:chmod 777 a.out。
13.close:中斷與遠程伺服器的ftp會話(與open對應)。
14.cr:使用asscii方式傳輸檔案時,將斷行符號換行轉換為回行。
15.delete remote-file:刪除遠程主機檔案。
16.debug[debug-value]:設定調試方式,顯示發送至遠程主機的每條命令,如:deb up 3,若設為0,表示取消debug。
17.dir[remote-dir][local-file]:顯示遠程主機目錄,並將結果存入本地檔案local-file。
18.disconnection:同close。
19.form format:將檔案傳輸方式設定為format,預設為file方式。
20.get remote-file[local-file]:將遠程主機的檔案remote-file傳至本地硬碟的local-file。
21.glob:設定mdelete,mget,mput的檔案名稱擴充,預設時不擴充檔案名稱,同命令列的-g參數。
22.hash:每傳輸1024位元組,顯示一個hash符號(#)。
23.help[cmd]:顯示ftp內部命令cmd的協助資訊,如:help get。
24.idle[seconds]:將遠程伺服器的休眠計時器設為[seconds]秒。
25.image:設定二進位傳輸方式(同binary)。
26.lcd[dir]:將本地工作目錄切換至dir。
27.ls[remote-dir][local-file]:顯示遠程目錄remote-dir,並存入本地檔案local-file。
28.macdef macro-name:定義一個宏,遇到macdef下的空行時,宏定義結束。
29.mdelete[remote-file]:刪除遠程主機檔案。
30.mdir remote-files local-file:與dir類似,但可指定多個遠程檔案,如:mdir *.o.*.zipoutfile
31.mget remote-files:傳輸多個遠程檔案。
32.mkdir dir-name:在遠程主機中建一目錄。
33.mls remote-file local-file:同nlist,但可指定多個檔案名稱。
34.mode[modename]:將檔案傳輸方式設定為modename,預設為stream方式。
35.modtime file-name:顯示遠程主機檔案的最後修改時間。
36.mput local-file:將多個檔案傳輸至遠程主機。
37.newer file-name:如果遠程機中file-name的修改時間比本地硬碟同名檔案的時間更近,則重傳該檔案。
38.nlist[remote-dir][local-file]:顯示遠程主機目錄的檔案清單,並存入本地硬碟的local-file。
39.nmap[inpattern outpattern]:設定檔案名稱映射機制,使得檔案傳輸時,檔案中的某些字元相互轉換,如:nmap $1.$2.$3[$1,$2].[$2,$3],則傳輸檔案a1.a2.a3時,檔案名稱變為a1,a2。該命令特別適用於遠程主機為非UNIX機的情況。
40.ntrans[inchars[outchars]]:設定檔案名稱字元的翻譯機制,如ntrans 1R,則檔案名稱LLL將變為RRR。
41.open host[port]:建立指定ftp伺服器串連,可指定串連連接埠。
42.passive:進入被動傳輸方式。
43.prompt:設定多個檔案傳輸時的互動提示。
44.proxy ftp-cmd:在次要控制串連中,執行一條ftp命令,該命令允許串連兩個ftp伺服器,以在兩個伺服器間傳輸檔案。第一條ftp命令必須為open,以首先建立兩個伺服器間的串連。
45.put local-file[remote-file]:將本地檔案local-file傳送至遠程主機。
46.pwd:顯示遠程主機的當前工作目錄。
47.quit:同bye,退出ftp會話。
48.quote arg1,arg2...:將參數逐字發至遠程ftp伺服器,如:quote syst.
49.recv remote-file[local-file]:同get。
50.reget remote-file[local-file]:類似於get,但若local-file存在,則從上次傳輸中斷處續傳。
51.rhelp[cmd-name]:請求獲得遠程主機的協助。
52.rstatus[file-name]:若未指定檔案名稱,則顯示遠程主機的狀態,否則顯示檔案狀態。
53.rename[from][to]:更改遠程主機檔案名稱。
54.reset:清除回答隊列。
55.restart marker:從指定的標誌marker處,重新開始get或put,如:restart 130。
56.rmdir dir-name:刪除遠程主機目錄。
57.runique:設定檔案名稱唯一性儲存,若檔案存在,則在原檔案後加尾碼..1,.2等。
58.send local-file[remote-file]:同put。
59.sendport:設定PORT命令的使用。
60.site arg1,arg2...:將參數作為SITE命令逐字發送至遠程ftp主機。
61.size file-name:顯示遠程主機檔案大小,如:site idle 7200。
62.status:顯示當前ftp狀態。
63.struct[struct-name]:將檔案傳輸結構設定為struct-name,預設時使用stream結構。
64.sunique:將遠程主機檔案名稱儲存設定為唯一(與runique對應)。
65.system:顯示遠程主機的作業系統類型。
66.tenex:將檔案傳輸類型設定為TENEX機的所需的類型。
67.tick:設定傳輸時的位元組計數器。
68.trace:設定包跟蹤。
69.type[type-name]:設定檔案傳輸類型為type-name,預設為ascii,如:type binary,設定二進位傳輸方式。
70.umask[newmask]:將遠程伺服器的預設umask設定為newmask,如:umask 3。
71.user user-name[password][account]:向遠程主機表明自己的身份,需要口令時,必須輸入口令,如:user anonymous my@email。
72.verbose:同命令列的-v參數,即設定詳盡報告方式,ftp伺服器的所有響應都將顯示給使用者,預設為on.
73.?[cmd]:同help。