Issuu on Google+

TCP/IP 報告 Flie Transfer Protocol(FTP) 檔 案 傳 輸 通 訊 協 定

期別: 網工 82 期 學號:C1000340 學生: 蔡欣益 指導老師: 戴致禮 老師


什麼 FTP? Flie Transfer Protocol(FTP)檔案傳輸通訊協定是一種 TCP/IP 所提供的標準機制,將 一台電腦的檔案複製到另外一台電腦,雖然看起來是挺簡單可是卻有很多問題的 存在,譬如說兩個系統可能使用的檔案命名方法,兩個系統可能用不同的方法來 代表本文及資料,其資料結構可能也不同,FTP 必須讓這些差異相容。 FTP 使用兩種不同的方法,其中一是用在控制連線,另一個在資料連線。 FTP 目的在於提供檔案的共享、可靠和高效率的傳輸資料,FTP 有兩個公認的 Port 分別是 20 和 21 這兩個 Port Control connection Port 21 (控制連線) 這個 Port 主要是用來確認 Client 以及 Server 端之間的請求和回應 Data connection Port 20(資料連線) 如果 Client 和 Server 之間有檔案要傳輸就會使用這個 Port 測試環境 FTP Active Mode(主動模式) 通常 FTP Client 端會開啟一個隨機的 Port 來跟 Server 端的 21 Port 請求連線(該隨 機 Port 會大於 1024),當順利完成[三方交握]後,該連線就成功的連接起來了。 當兩端需要傳送資料的時候,Client 端會透過 Port Command 告訴 Server 端,Client 端可以用另一個 Port 與 Server 端的 20 Port 作資料的傳送 準備電腦兩台 FTP Server 端 IP 位置 192.168.1.3 使用軟體: FileZilla Server 0.9.33 英文版 FTP Client 端 IP 位置 192.168.1.12 使用軟體: 命令提示字元 並使用 Wireshark 抓取封包 首先先與 Server 端建立連線(圖 1):

(圖 1)


再利用 Wireshark 抓取封包(圖 2):

(圖 2) FTP Server 與 FTP Client 連線時會先建立三方交握(圖 3)

(圖 3) 並且此時 Client 端會產生一個隨機的大於(1024)Port 和 Server 端的 21 溝通(圖 4)

隨機的 Port

(圖 4) 如果此時連線建立的話,Serve 端會打開 Port 並且送出封包 [SYN ACK] Seq=0 Ack=1 的封包回傳給 Client 端。 Client 端收到時,也會回傳給 Server 端 Ack 封包且表示連線成立。 [ACK]Seq=1 Ack=1 的封包給 Server 端。


用圖片來顯示三方交握的情形(圖 5) 三方交握圖 Seq=0 Client 192.168.1.12

Seq=0,Ack=1

Server 192.168.1.3

A

Seq=1,Ack=1 A

(圖 5) 此時 Server 端會再回傳 Response:220 (Service ready fot new user)的回應給 Client 端說 Server 端已準備好提供服務(220 代碼在 FTP 裡面的敘述是準備好提供服務)

Client 端也會收到 Server 端回應的封包,並且回傳封包給 Server 端。(圖 6)

Client 端知道下一個要回 應的值是 Ack=43

(圖 6) 下一個封包的內容的 Ack 值應該是 43 如果不是 43 那麼封包可能遺失,應此 Client 此時會通知 Server 端說沒收到封包,請再重新一次三方交握。(圖 7)

Client 端知道下一個要回 應的值是 Ack=88 (圖 7)


因此下一個封包內容 Client 回應 Ack= 88 與封包的[Next sequence number:88]吻 合,這表示封包正確的收到了。(圖 8)

Client 端回應 Ack=88,代表封包已收到。

(圖 8) 使用者登入後並且輸入密碼,使用 Wireshark 所擷取的封包內容可以知道 FTP 是 使用明碼在做通訊,這樣有資料外洩的疑慮。(圖 9、圖 10)

(圖 9)

(圖 10) 輸入使用者的名稱後 Server 端會再回傳 Response:331(Password required for danny)的封包回應給 Client 端說 Server 端使用者名字沒問題,要求密碼(331 代碼是敘述使用者名字 ok,要求密碼)(圖 11)

Server 端回傳 331 的回應 表示使用 者帳號沒有問題,不過仍需要密碼。

(圖 11)


輸入使用者的密碼後 Server 端會再回傳 Response:230(Logged on)的封包回 應給 Client 端說 Server 端使用者以登入成功(230 代碼是敘述使用者登入 ok)(圖 12)

Server 回傳 230 表示 Client 端以順利登入

(圖 12) 登入成功後,利用 Dir 指令查詢 FTP Serve,使用 Wireshark 所擷取的封包內 容(圖 13、圖 14)

(圖 13)

(圖 14) 由於 Client 端是使用主動模式來與伺服器連線,所以可以看到是由 Client 端對 Server 發送 Port 的通訊定義指令。 192.168.1.12 是 Client 端的 IP ,後面的 4.53 則是 (256 x4)+54= 1077 所以等等 Client 端要用 1077Port 與 Server 端的 20 Port 來做資料的傳輸。 接下來 Server 回傳 200 告知 Client 端 表示 Port 的指令 OK 可以使用主動模 式來連接。

(圖 15)


接著 Client 發送 LIST 指令 要求 Server 給予檔案列表,Server 收到後則回傳 150 表示資料連接已經打開,開始傳送資料。(150 代碼敘述檔案狀態 ok,資 料連線即將開放) (圖 16) 再由 Server 檔案傳輸用的 20 Port 與 Client 端 1077 Port 來做傳輸檔案前的 三方交握連線。(紅框內)

(圖 16) 列出 Server 的檔案(圖 17)

(圖 17)


接下來 Server 則回傳 226 表示傳輸 OK(圖 18)

(圖 18) 接下 Client 端下 Quit 指令後,Server 回傳 221 結束服務的封包,並做最後一 次的三方交握。(圖 19)

(圖 19)


測試環境 FTP(被動模式) Client 端一樣是使用隨機的 Port(該隨機 Port 也會大於 1024) 來與 Serve 端的 21Port 來做連線控制,但是在要準備資料傳輸時 Client 端會發出 PASV 的參 數,請求 Server 端指定 Client 端要用 Server 的什麼 Port 溝通,而不是與原 本的 20 Port 作資料連結。 兩台電腦 FTP Server 端 IP 位置 192.168.1.3 使用軟體: FileZilla Server 0.9.33 英文版 FTP Client 端 IP 位置 192.168.1.12 使用軟體: FileZilla_3.3.4.1_win3,並使用 Wireshark 抓取封包 首先必須在 Client 端的 FTP 站台做基本設定(圖 20) 檔案站台管理員傳輸設定傳輸模式改成被動模式

(圖 20)


一般設定填入主機的 IP、登入形式、使用者及密碼後準備開始連線。(圖 21)

(圖 21) 被動模式 FTP 傳輸檔案時也是一樣要經過三方交握來連接,唯一比較不同的 是在 Client 端要與 Server 建立檔案連線時,會發出 PASV 的參數,請求 Server 端指定 Client 端要用 Server 的什麼 Port 溝通,而不是與原本的 20 Port 作資 料連結。 (軟體在連線後,會主動和 FTP Server 要求目錄)

連線後會向 FTP 要求目錄

圖 22


Clinet 端在連線建立後,會向 Server 端要求目錄前會發出一個 PASV 的指令, 並且請求 Server 端用 Client 所指定的 Port 與 Server 端連線。(圖 23)

(圖 23) 當 Server 端收到 PASV 的指令後,會回傳 227(Entering Passive Mode)的指令, 表示 Clinet 端傳輸資料時要和 1042Port 來作聯繫。(圖 24) (227 代碼表示進入被動模式,伺服端傳送其 IP 及 Port)

(256*4)+18=1042

(圖 24) 接下來 Clinet 端會發送出 MLSD(List)的命令,請求 Server 端傳送檔案。(圖 25) (PS:大家應該會絕對的很奇怪為啥是 MLSD 而不是 LIST 的指令吧!!從 google 上搜 索得知 MLSD 是新的 FTP Server 提供的 MLSD 命令通過 FTP Client 端發送 MLSD 命令,Server 收集檔案訊息,如文件建立時間,修改時間,文件大小及文件所有 用,详细且可讀格式的目錄列表。由于 MLSD 目錄列表包含 UTC 格式的文件修 改時間,因此这對於 FTP Client 端非常有用,當需要同步目錄时,它可轉換遠程 文件的時間標記到你的本地時間。同时,MLST 命令也被用於得單一遠程文件的 時間標記。) 引用網站(http://www.cnblogs.com/donot4get/archive/2009/12/08/1619137.html)


(圖 25) 再由 Server 檔案傳輸用的 1042Port 與 Client 端 1120 Port 來做傳輸檔案前的三 方交握連線。(圖 26)

由此可以看出 進入檔案傳輸的時候,本來 Client 端是要與 Server 的 20 Port 來進行溝通與傳輸, 但因為這次是使用被動模式,所以 Server 是改用隨機產生的 Port 來給 Client 溝通與傳輸用

(圖 26) 被動模式三方交握的情形(圖 27) Port:1119

PASV 227(Entering Passive Mode)

Client 端 192.168.1.12

Port:21 Server 端

192.168.1.3.4.18

Port:1119

192.168.1.3

MLSD(List) Port:21

Port:1120

Seq=0

Seq=0,Ack=1 Port:1120

Port:1042

A Ack=1 Port:1042 (圖 27)


此時為什麼被動模式 FTP Client 端的 Port 會自動+1 呢? 被動模式 FTP,在 Passive Mode FTP 下,FTP client 一開始和 Active Mode FTP 一樣,打開二個 port (N > 1024 及 N+1),使用第一個 port 連接至 FTP server 的 port 21,並送出命令 Port 讓 server 連至 N port 再送出 PASV 命 令給 server,這樣會造成 server 使用 一個大於 1024 的 port 連接至 client 並送出命令 Port N ( N >1024 ) 給 client,這樣 client 就會使用 N + 1 並開始 傳輸資料。 引用網站 (http://brianchang168.blogspot.com/2009/01/ftpactive-ftp-passive-ftp.html) 主動模式 FTP 與被動式 FTP 主動模式下的 FTP Client 對 Server 發出請求: 「嗨,我的 xx Port 正等著你傳送 資料呢,Sever 聽到這個請求,就會建立一個連接,指向這個 Port,並且開始傳 送資料。這就回到了我們的問題,如果發出請求的 Client 在防火牆的後面,而 這個防火牆禁止外部 IP 建立連接,那麼當然 Server(在外部)不能建立與 Client 的連接。 被動模式 FTP Client 向 Server 發出 Passive 命令,Server 回答說: 「資料在 xx Port 等你,自己來拿。」而這回則由 Client 建立指向 Server 的連接,從而取得資料。 這就避免了防火牆的限制。問題在於使用 Active Mode FTP 時主控權在 FTP client,FTP client 並不是真正的連至 FTP server 的 data port (TCP port 20), 它只是告訴 FTP server 它準備在那個 port 接收資料及 port+1 傳送 ACK,並 期望 FTP server 可以主動連接至 FTP client 所期望的 port,這在使用防火牆 的環境中就會造成問題。 從工作原理上看得出來主動模式 FTP 是 Client 端對 Server 端發出請求後,Server 端收到後開始建立一個連接,Client 端從這拿到資料而被動模式 FTP 是 Client 端主動向 Server 端發出 PASV 的命令,Client 端自己建立連接 Server 端,取得 資料,而最大不同點在於 FTP 工作方式的不同,資料連結 Port 並不總是 20。 這 就是主動與被動 FTP 的最大差異點。 引用網站: http://brianchang168.blogspot.com/2009/01/ftpactive-ftp-passive-ftp.html http://jiahej.javaeye.com/blog/179295


FTP 在 OSI 七層上的運用 Physical Layer 作用:負責處理設備傳來的訊號,我們可以從封包看見傳送資料流動。

位元訊號與位元串

Data Link Layer 作用: (1)將 Physical Layer 傳來的資料組成訊框,並加上來源 MAC 目的 MAC (2)將資料送往實體媒介 (3)傳送中會進行偵錯復原

訊框

目的 MAC 來源 MAC


Network Layer 作用: (1)規劃最好的傳輸途徑 (2)將封包加上網路位址 (3)這層開始就是封包 封包到達目的地會和 Routing table 作比對,接這透過子網遮罩和網路編號比 對,若有相同送往此 Gatway。

只封包在網路上存活的時間每經過一個 Router 就會減少一秒直到 0 為止,若到 0 則會被丟棄。

Transport Layer 作用: (1)確認傳輸上沒有問題 (2)組成封包與切割封包 (3)連接傳輸導向 (4)傳輸單位:Segment 將封包組成一個 Segment 並附上應用層 Port 的碼,提供偵錯和流量控制的功能

封包資料為 0

TCP 流量控制

組成封包提供位元串流功能


Application Layer 使用者、應用程式與網路之間溝通的介面

FTP 上的資料

結論: 我們可以得知 FTP 是很久的協定,當然很多問題就會產生如防火牆的問題,資 安問題等等….雖然說現在 FTP 的網站應該比較少了,但是它的功用還是很受好 評,就如同老師說的一項產物的誕生一定是那個年代及需要解決的問題,所以 FTP 出現就解決了從一台電腦的檔案複製到另外一台電腦,雖然看起來是挺簡單 可是卻有很多問題的存在,譬如說兩個系統可能使用的檔案命名方法,兩個系統 可能用不同的方法來代表本文及資料,其資料結構可能也不同的問題。 現在科技的進步,網路環境也變得很複雜資料外洩情形層出不窮,接觸到 Wireshark 這套軟體後,了解到原來每個封包都有其內容所在,也知道原來自己 平常用的網路上有那麼多的資料在流動,而不是網站所看的一切,應該要更加小 心謹慎使用。 引用資料 TCP/IP 第三版通訊協定 作者:Behrouz A. Forouzan Sophia Chung Fegan 譯者:陳中和 王振傑 TCP/IP 講義 戴致理老師撰 電腦網路概論 陳衍華老師撰 引用網站 http://jiahej.javaeye.com/blog/179295

(JavaEye 網站)

http://zh.wikipedia.org/zh-tw/%E6%96%87%E4%BB%B6%E4%BC%A0%E8%BE%93%E 5%8D%8F%E8%AE%AE (維基百科網站) http://brianchang168.blogspot.com/2009/01/ftpactive-ftp-passive-ftp.html http://www.cnblogs.com/donot4get/archive/2009/12/08/1619137.html http://140.115.236.9/xms/content/show.php?id=31235 (LIFE 網)


TCP/IP FTP