標籤:style blog http color 使用 strong
說明:本文僅供學習交流,轉載請標明出處,歡迎轉載!
FTP協議(檔案傳輸通訊協定)建立在TCP協議的基礎之上,用來從一個主機把檔案複製到另外一個主機。在FTP客戶機與伺服器之間,採用來了兩條TCP串連,這兩條串連分別是控制串連和資料連線。在控制串連過程中,FTP伺服器使用的連接埠號碼為21,在資料連線過程中,FTP服務使用的連接埠號碼為20,而客戶機在整個過程中使用的連接埠號碼都是臨時連接埠號碼,這兩個臨時連接埠號碼可以相同,也可以不同,當然在絕大多數情況下,這兩個臨時連接埠號碼都是不同的。在整個從串連的發起到資料轉送的整個過程中,控制串連一直都開啟著,而資料連線則在資料開始傳送時開啟,資料傳送完畢後關閉。
控制串連
控制串連的開啟與關閉過程如下:
1.伺服器在熟知連接埠21發出被動開啟命令,等待客戶;
2.客戶使用臨時連接埠發出主動開啟;
3.當客戶不再使用該控制串連時,主動關閉該控制串連。
所以整個控制串連過程中,客戶始終是控制串連的發起者和終止者。
要實現以上控制串連上的通訊,客戶需要向FTP伺服器發送命令,而FTP伺服器向客戶發送對這些命令的響應來共同完成。在發送命令的過程中,由於客戶機與FTP伺服器的系統可能不同,為瞭解決這一可能存在的問題,客戶機在向伺服器發送命令的過程中,使用NVT ASCII字元發送(相當於一個編碼的過程),而在伺服器的接收程式則將NVT ASCII字元轉換為伺服器主機系統所能識別的格式(相當於一個解碼的過程)。在以上通訊過程中,每一條命令或響應都是一個短行,每一行的行結束標誌為CR(斷行符號)+LF(換行),即\r\n。現在我們已經知道命令是從客戶向伺服器發送的,而響應則是從伺服器向客戶機發送。下面我們介紹下命令的種類和響應的種類:
命令的種類。總體而言,客戶向伺服器發送的命令包括:登入命令、檔案管理命令、資料類型命令、資料結構命令、連接埠選擇命令、資料讀寫命令等。這些命令可以告訴由客戶機告訴FTP伺服器:
(1)登入命令。登入的使用者名稱和密碼。
(2)檔案管理命令。如何管理遠端電腦的檔案系統,如顯示遠程目錄和檔案,重新命名遠程目錄和檔案以及建立和刪除目錄或檔案,這個跟linux系統中的檔案相關的命令相似,如對應linux系統中cd,rm,rmdir, touch,mkdir, pwd等。
(3)資料類型命令。讓客戶自訂檔案傳送的檔案類型(如ASCII碼檔案類型,EBCDIC檔案類型、二進位檔案類型)、格式控制(僅對ASCII格式和EBCDIC有效,包括非列印、遠程登入格式控制)、傳輸方式(位元組流方式、塊方式、壓縮方式)。
(4)資料結構命令。告訴伺服器應該採用的是那種資料結構:位元組流檔案、記錄式檔案、頁式檔案。
(4)連接埠選擇命令。客戶通過該命令,告訴FTP伺服器,你下次傳送資料給我的時候,應該把資料發送到我的哪個連接埠上。
(5)檔案讀寫命令。告訴伺服器現在是讀檔案還是寫檔案。
響應。客戶發送的每一個命令至少對於一個響應,FTP伺服器發出的響應由兩個部分主持:數字(3位)+說明文本。其中說明文本用於解釋數位含義(這樣,用戶端就不用實際這些數位含義了,因為有後面的文本幫忙嘛!)。
資料連線
資料連線主要有三個目的:
(1)客戶向伺服器發送一個檔案。(叫作寫檔案或隱藏檔)
(2)伺服器向客戶發送一個檔案。(叫作讀檔案)
(3)伺服器向客戶傳送檔案或目錄列表。(列出檔案名稱)
資料連線的開啟與關閉一般過程如下:
1.客戶在控制串連的過程中,通過發送port命令,將客戶的IP地址和將在資料連線階段使用的用戶端的臨時連接埠號碼發送給伺服器的控制連接埠號碼21後,用戶端的資料連線臨時連接埠號碼處於被動開啟的狀態。
2.伺服器通過資料連線連接埠號碼20,利用用戶端給出的臨時連接埠號碼向用戶端主動開啟命令,於是便開啟了此資料連線,與用戶端進行資料交換。
3.當伺服器不再與客戶機進行資料交換後,伺服器便主動關閉同用戶端的資料連線。
從以上可以看出,在整個資料連線的過程中,伺服器端是資料連線的發起者和終止者,畢竟只有他自己才知道還有沒有資料要發送給用戶端嘛。
通常情況下,上面的控制串連和資料連線如所示:
特殊情況1:客戶為並沒有用port命令將其資料連線的連接埠號碼發送給FTP伺服器端,此時如果想要實現客戶與伺服器之間的資料連線,由於該連接埠已經被客戶用於控制串連,要是再使用該連接埠,客戶必須確定SO_REUSEADDR選項,如所示:
特殊情況2:伺服器對資料連線做主動關閉後處於2MSL等待狀態,若此時客戶在之前的控制串連上發送另外一個命令資料請求,並分配一個新的用戶端的臨時連接埠號碼做被動開啟,由於此時伺服器正好處於2MSL等待狀態,連接埠號碼20還不能真正使用,此時,伺服器必須確定SO_REUSEADDR選項,如所示:
匿名FTP
通常情況下,要使用FTP,使用者就需要在遠程伺服器上有帳號和密碼,但是有些網站有很多可供公用的檔案,如果要訪問這些檔案,使用者就不需要有帳號和密碼。匿名FTP的帳號為anonymous,密碼可以是設定為自己的郵箱地址或者guest之類的。
總結
1.FTP協議對應的運輸層協議為TCP。
2.FTP協議的資料連線和控制串連是分開的,而Telenet協議的資料連線和控制串連公用一條串連。
3.控制串連主動的發起者和終止者都是FTP用戶端,而資料連線的主動發起者和終止這都是FTP伺服器端。
4.資料連線和控制串連對應的IP資料報中的Tos(服務類型)欄位不一樣。控制串連為ox10,表示採用“最小時延”,而資料連線為ox08,表示採用“最大輸送量”。
參考資料
[1]《TCP/IP詳解 卷1:協議》
[2]《TCP/IP 協議族 第4版》