Issuu on Google+

TCP/IP 專題報告

FTP (File Transfer Protocol)

指導老師:戴致禮 老師 戴有煒 老師 班級; UC104 學號: C1000335 學生: 楊博閔


簡介 FTP(File Transfer Protocol)檔案傳輸通訊協定,FTP 是相當古老的傳輸協定,其 主要功能是在伺服器與用戶端之間進行檔案的傳輸。 FTP 與其他應用不同之處,在於 FTP 在兩台主機之間建立兩條連線,將命令與 資料分開傳送,使得 FTP 更有效率。 當檔案由一個系統傳到另一個的時候,會有檔案類型不同、檔案結構不同、檔 案命名方式不同等問題,這些問題會由 FTP 用簡單的方法解決。

運作方式 FTP 使用兩個 TCP 公認的 port,第 20port 用來做資料連線,第 21port 用來做為 控制連線。在 FTP 互動過程中,控制連線一直維持在連線狀態,而資料連線的 開啟與關閉狀態,是以每次檔案傳送為準。當每次開始傳輸檔案時,資料連線會 被開啟,檔案傳輸完成後資料連線就會被關閉。 FTP 的傳輸使用的是 TCP 的傳輸協定,而 TCP 的封包在建立連線前會先進行 三向交握(three-way handsharking)的動作。但是 FTP 會麻煩一點,原因在於 FTP 有 兩條連線,兩條連線都必須進行三向交握的動作。

三向交握(three-way handsharking) TCP 是一個連線導向的傳輸定,所以在彼此傳送資料前會經過一個連線『交握』 的動作,透過此交握的動作,達到彼此協商與交換資訊的目的,此動作稱之為『三 向交握』。 『三向交握』就是透過主動要求連線的『用戶端』,與被動要求連線的『伺服 端』,經過三次封包交換達成連線協議。 1.AÆB:SYN1 A 送出同步封包(SYN1) 2.BÆA:SYN2+ACK1 B 送出同步封包(SYN2),並利用 ACK1 回應步驟 1 的同步封包(SYN1) 3.AÆB:ACK2 A 利用 ACK2 回應步驟 2 的同步封包(SYN2)


Client 

Server 

SYN1 回應

SYN2,ACK1

回應

ACK2

傳輸檔案的類型 ASCII 檔案: 是傳送文字檔的預設格式,每個字元使用 NVT ASCII 的方式編碼。 EBCDIC 檔案: EBCDIC(Extended Binary Coded Decimal Interchange Code)是 IBM 在 1963-1964 年 間推出的字元編碼表。只要其中一方或雙方使用 EBCDIC 的方式編碼,檔案就可 以用 EBCDIC 編碼的方式傳送。 映像檔(Image file): 用來傳送二進制檔,檔案是以連續位元串流的方式傳送,不經過任何解釋或 編碼。

傳輸資料的結構 檔案結構: 沒有結構,為連續性的位元組資料串流。


記錄結構: 檔案被分成數個記錄,只能用在文字檔。 分頁結構: 檔案被分成數個分頁,每一頁都有一個頁數及頁標頭。每頁可以被儲存、隨 意存取或依序存取。

傳輸檔案的模式 串流模式: 預設模式。FTP 以位元組資料串流的方式將資料傳遞給 TCP,TCP 負責把資 料分成適當的 TCP 區段。如果資料只是簡單的位元組串流(檔案結構),則不需要 檔案結束字元,檔案結束字元可做為傳送者關閉資料連線之用。如果資料被分成 數個記錄(記錄結構),則每個記錄必須有一個記錄結束字元(End Of Record,EOR) ,而檔案之結束也要有一個檔案結束字元(End Of File,EOF)。 區塊模式: 資料可以由 FTP 以區塊方式傳遞給 TCP,在每個區塊前有一個 3 各位元組長 的標頭,第 1 個位元組稱為區塊敘述符號(block descriptor),第 2 及第 3 個位元組 定義區塊的大小,單位是位元組。 壓縮模式: 如果檔案很大,資料可先被壓縮。所使用的壓縮方式,通常為變動長度編碼 法(Run-Length Encoding,RLE),是把連續出現的相同資料單元取代為一項再加上 其出現的次數即可。

FTP 連線模式 主動模式(Active mode): 1.建立控制連線:用戶端會隨機取一個大於 1024 的 port A 來與伺服器端的第 21port 達成連線,達成連線後,用戶端就可以用這個連線來對 FTP 伺服器下指令。 2.用戶端準備開始傳送資料,再隨機啟用另一個 port B,並透過第 21port 的控制 連線,告知 FTP 伺服器,使用 Active Mode 來傳輸資料,以及用戶端啟用 port B 做為資料連線傳輸用,然後等待 FTP 伺服器的連線。 3.FTP 伺服器經由第 21 port 得知用戶端的需求後,會主動由第 20 port 向用戶端的 port B 建立連線。此時 FTP 伺服器與用戶端之間,共會建立兩條連線,提供指令 傳送與資料傳輸用。Port 21 的資料連線只在有資料傳輸的行為時才會建立。


Client 

Server  建立連線

Port A 8888

port 21 Active

port B 9999

Port A 8888

port 21

Port B 9999

port 20

被動模式(passive mode): 1.建立控制連線:用戶端會隨機取一個大於 1024 的 port AA 來與伺服器端的第 21 port 達成連線,達成連線後,用戶端就可以用這個連線來對 FTP 伺服器下指令。 2.用戶端透過第 21 port 的控制連線,對 FTP 伺服器發出 PASV 被動式連線要求 (Passive Mode)來傳輸資料,並等待 FTP 伺服器的回應。 3.此時 FTP 伺服器會啟動一個 port PASV 開始監聽,這個 port PASV 可以是隨機 的,也可以自訂某一個範圍的 port。然後 FTP 伺服器會透過第 21 port,告知用戶 端已經啟動 port PASV,並等待用戶端的連線。 4.接著用戶端會隨機取用一個大於 1024 的 port BB 來對 FTP 伺服器的 port PASV 做連線。 Client 

Server  建立連線

Port AA 6666

port 21 提出 PASV 的要求

Port AA 6666

port 21 告知 port PASV 已啟動

Port AA 6666

port 21

Port BB 7777

port PASV

防火牆(Firewall)與 NAT(Network Address Translation )


大部份的 LAN 都會使用防火牆(Firewall)與 NAT(Network Address Translation), 防火牆為了保護用戶端,會過濾或阻擋某些服務或應用程式從外面傳入的封包。 而 NAT 會在用戶電腦連線到外部網路時,擔任居中媒介的工作,將用戶端的電 腦 IP,由 private 轉為 public。

Client 

Firewall  建立連線

Server  建立連線

Port A

port 21 告知 Server Active mode

Port A

Port B

port B 可接收資料

port 21

等不到連線

port 20

1.建立控制連線:用戶端會隨機取一個大於 1024 的 port A 來與伺服器端的第 21port 達成連線,達成連線後,用戶端就可以用這個連線來對 FTP 伺服器下指令。 因為此連線是由內向外,且 NAT 會記錄此連線的資訊,所以建立連線不會有問 題。 2. 用戶端先將 port B 啟用,並透過控制連線告知 FTP Server,並等待 FTP Server 的連線。 3.FTP Server 在收到訊息後,會由 port 20 主動對 port B 建立連線。但是因為用戶 端在連線到外部網路的時候,經由 NAT 做了轉址的動作,因此 FTP Server 收到 的來源 IP 跟其他相關資訊並非用戶端的,而是 Firewall 的 IP 與資訊。所以 FTP Server 會對 Firewall 建立連線,但是 Firewall 並未對 FTP Server 提出連線的請求, 也因此 FTP Server 就被 Firewall 給擋在外部了。處於內部的用戶端也就一直無法 與 FTP Server 建立連線。所以有些時候用戶端會發現可以連接 FTP 伺服器,卻無 法從 FTP 伺服器下載檔案,這是因為封包被防火牆所阻或因為經過 NAT 的轉址 後,FTP Server 找不到用戶端。將預設的 Active mode 改成 passive mode,就可解 決 NAT 轉址後,FTP Server 找不到用戶端的問題。因為 passive mode 是由用戶端 主動對 FTP Server 做連線。當用戶端由內部連線到外部網路時,雖然 NAT 還是 會做轉址的動作,但是也同時會將轉址前後的 IP 做記錄,當 FTP Server 的封包 回傳時,NAT 即可由記錄中找到相對應的 IP 位址,因為此傳入內部的封包,是 回覆內部用戶端的要求,所以防火牆也不會做阻擋的動作。


Client 

Firewall 

Server 

建立連線

Port A

port 21 提出 PASV 要求

Port A

port 21 告知 PASV port 已啟動

Port A

port 21 主動連線

記錄對應 IP

Port B

port PASV 送達

比對記錄 IP,回覆要求

實作:擷取與分析封包 使用軟體: FileZilla Server FileZilla Client Wireshark HySnapDX 環境設定: FTP Server:2008 FTP Client:XP 目的: 使用封包擷取軟體 Wireshark,實際擷取在 FTP Server 與 FTP Client 之間運行 的封包,並分析研究封包所夾帶的資料,在不同情形下有何差異,傳輸協定在理 論與實務上是否有差異。

封包分析 Active mode


1.完成各項環境的設定與測試軟體的設定。 2.開啟 Wireshark,並開始擷取封包。 3.在 Dos 模式下,輸入指令 ftp 192.168.8.21 連結到 FTP Server。 4.輸入使用者與密碼進入 FTP Server。 5.輸入"dir"指令,查詢 FTP Server 的資料夾目錄。

1. 將 Wireshark 停止擷取封包。 2. 篩選出與 FTP 有關的封包。 3. 控制連線以 port 21 建立後 FTP Server 傳送 220(準備好提供服務),的回應給


4. 5. 6. 7. 8. 9.

Client。 Client 傳送 user 指令。 Server 回應代號 331(使用者名字 ok,並要求密碼)。 Client 送出 pass 指令。 Server 回應代號 230(使用者登錄 ok)。 Client 送出 list 訊息。 Server 回應代號 150(檔案狀態 ok,資料連線即將開啟)。

編號 13 的封包 1.Source IP: 192.168.8.21 為 FTP Server 的 IP,表示此封包從 FTP Server 而來。 2.Destination IP: 192.168.8.22 為 FTP Client 的 IP 表示封包的目的地是 Client。 3.Source port: ftp(21) 表示 Server 開啟的是第 21 port。 4.Destination port: (1086) 表示 Client 隨機開啟一個在 1024 之上的 port。 5.Sequence Number(序號): 是為了達到彼此雙方同步的一個號碼,代表『位元組串流』中的編號。 6.Acknowledgment Number(確認號碼): 確認訊息的號碼,與前面的序號有關,也就是記錄下一次對方傳送過來的序號


號碼,或是接受資料端告知傳送端,在此編號之前的所有『位元組串流』皆已收 到。 7.Flags(控制位元旗標): 最主要包括 6 個不同功能的位元,只要該位元被設定為 1,表示封包內有包括 該訊息,反之則沒有。 (1)URG:緊急 當 URG 被設定為 1,表示此封包為緊急封包,當對方收到此種類型的封包, 將不必經過正常的排隊程序,而是立即處理。如:傳送端送出 Ctrl+C 的中斷訊 息,當此訊息到達目的端後,目的端將會以最快的速度處理此命令。 (2)ACK:確認回應 當 ACK 被設為 1 時,表示這封包代表是一個回應確認的訊息。 (3)PSH:推送 有些特殊情形,雖然緩衝區的資料未填滿,應用程式就要將緩衝區的資料送出 時,就要將 PSH 設成 1,即可將資料馬上送出。 (4)RST:重設 通常在彼此雙方發生不預期的錯誤時,會由發生錯誤的一方設定 RST 為 1,告 知對方連線已被重設。 (5)SYN:同步 當 SYN 被設為 1 時,表示這封包代表一個同步的訊息。 (6)FIN:完成 當傳送端將資料傳送完畢後,便會送出完成的訊息給對方,此時就會將 FIN 設 定為 1,表示此封包為告知對方已傳送完畢。


編號 111 的封包 1.Request:port 192.168.8.22,19,138 Port 指令表示用戶端 FTP 選 port,192.168.8.22 為用戶端的 IP,19,38 則為用戶 端所選的 port,計算方式為:256*19+138=5002。 2.Request command:port 表示收到用戶端所傳送的 command:port,表示要採用 Active mode。 3.Active IP Address:192.168.8.22 表示 FTP Server 主動連線的 IP Address。 4.Active port:5002 表示主動連線傳輸的 port 為 port 5002。


比較編號 13、21、22 三個封包 13

21

22

Sequence Number

88

1

149

Next Sequence Number

149

12

181

1

149

12

Acknowledgment Number

由以上三個封包的部份資料比對可知,封包實際上所夾帶的資料與理論是相同 的,且在傳輸過程中並無封包被遺漏。

Passive mode


在 Client 端安裝 FileZilla Client 的軟體,安裝完成後直接開啟程式,檢查其設定, 預設的傳輸模式即為 Passive Mode,因此不需要再做任何設定。直接開啟 Wireshark 擷取封包與由 FTP Client 連線進入 FTP Server。

由 Client 對 Server 提出使用 passive mode 的要求,所以 Server 會收到 PASV 的指 令,由 FTP Server 選擇 port。

接著 FTP Server 會傳送訊息到 Client,代號 227,表示進入被動模式,伺服器傳送 其 IP 與 PORT。 Entering Passive Mode(192.168.8.21,192,35): PORT 的計算方式為 256*192+35=49187。


當用戶端收到伺服器端送來的連線 IP 與資料傳送 Port,就會主動連線到 FTP Server 下載檔案。

OSI 七層 雖然 FTP 傳輸是被歸類在第四層的傳輸層,但事實上 OSI 七層對 FTP 而言, 每一層都有其必要性的存在。 Physical:不管那一種傳輸協定都一定會需要傳輸的介質。 Datalink:其中一個重要的功能-定址(MAC),全世界的網卡都有一個屬於自己的 MAC,在傳輸時才不會因為對象混淆,造成傳輸的錯誤。 Network:本層相當重要的功能是路由(Routing),Routing 會替傳送資料找到最佳 路徑或正確的路徑,也就是尋徑的功能。 Transport:編定序號、流量控制、可靠性與效率性對傳輸協定都是相當重要的, 因為其牽涉到資料傳輸的速度、安全性與正確性。 Session:單工、半雙工、全雙工及建立連線與結束連線,都是傳輸模式中會用到 的。 Presentation:對資訊的編碼與轉碼、壓縮與解壓縮、加密與解密,牽涉到傳輸資 料正確與否 Application:是一般使用者接觸到應用程式的重要介面,所有的人都致力於增加 介面的便利性,使用介面越友善的話,使用的人數就越多。 綜觀 OSI 七層,每一層與 FTP 的傳輸都有密不可分的關系。因為從 FTP 傳輸協 定開始運作,封包所夾帶的資料,與每一層都有關係,雖然 FTP 是架構在傳輸 層,但封包的封裝與解封裝還是會經過每一層。

參考書目: TCP/IP 網路通訊協定 博碩文化 陳祥輝 著 TCP/IP 通訊協定 第三版 全華出版 陳中和 王振傑 譯 參考網站: 鳥哥的 Linux 私房菜 http://linux.vbird.org/


TCP/IP HW