FTP協議報文詳解及FTP穿越NAT


目錄

 

1、拓撲圖

2、FTP協議簡介

3、FTP工作原理

3.1、主動連接(PORT)

3.2、被動連接(PASV)

3.3、FTP主動模式穿越SNAT原理

3.4、FTP被動模式穿越DNAT原理

4、問題思考

4.1、主動模式和被動模式是誰決定的

4.2、主動模式和被動模式是怎么協商出端口

4.3、設想中間防火牆怎么識別子連接並給子連接放行

4.4、思考NAT設備如何給子連接做地址轉換

4.5、下載兩個文件,會每個文件開一個數據連接么

4.6、列出目錄,服務器發送目錄列表,會使用數據連接傳輸么

5、FTPipv4和ipv6的區別


1、拓撲圖

 

2、FTP協議簡介

FTP 英文全稱:File Transfer Protocol,中文全稱:文件傳輸協議

提供交互式的訪問,對傳輸文件的格式和類型有分類,允許文件具有存取權限。適合異構網絡任意計算機的傳送。

3、FTP工作原理

FTP采用C/S架構,使用TCP可靠的傳輸服務。一個FTP服務器進程可同時為多個客戶進程提供服務,FTP服務器檢查有兩大部分組成:一個主進程,負責接收新的請求,另外有若干的從屬進程,負責處理單個請求,工作步驟如下:

  1. 建立TCP連接
  2. 打開熟知端口21(控制端口),使客戶進程能夠連接上
  3. 等待客戶進程發鏈接請求。
  4. 啟動從屬進程來處理客戶進程發來的請求。主進程與從進程並發執行,從屬進程對客戶進程的請求處理完畢后即終止。
  5. 回到等待狀態,繼續接收其他客戶進程的請求。

3.1、主動連接(PORT)

1、主動連接介紹

服務端通過制定端口號(20)主動與客戶端建立數據連接,並向客戶端發送數據。

以下報文是SNAT轉換后的報文,源IP(10.10.10.2)轉換成出接口IP地址(192.168.10.114)

2、報文拆分解釋

2.1、報文1-3:TCP建立三次握手,建立連接

 

2.2、報文4:服務端(21端口)向客戶端(49203端口)發送request報文。code字段表示新用戶服務就緒,arg字段為服務器名稱和服務器版本號

 

2.3、報文5:客戶端(49203端口)向服務端(21端口)發送request報文。command字段表示該報文里包含的是用戶名,arg字段為用戶名內容。

 

2.4、報文6:服務端(21端口)回復response報文,code值為331,表示用戶名可以,需要密碼

2.5、報文7:客戶端(49203端口)向服務端(21端口)發送request報文,command字段表示該報文里包含的是密碼,arg字段為密碼內容。

 

2.6、報文8:服務端(21端口)回復response報文,code值為230,表示用戶已登錄,請繼續操作

2.7、報文9:客戶端(49203端口)向服務端(21端口)發送SYST報文,表示返回服務器使用的操作系統。

2.8、報文10:服務端(21端口)回應系統類型,code字段為215,表示返回的是系統類型。arg字段為UNIX,表示系統類型是UNIX系統

2.9、包11:客戶端(49203端口)請求系統狀態

包12:服務端(21端口)回應系統狀態,code字段為211,arg字段為特征列表

2.10、包15:客戶端(49203端口)PWD獲取當前路徑

包16:服務端(21端口)返回當前路徑

包17:客戶端(49203端口)CWD更改目錄

包18:服務端(21端口)返回修改后的目錄

包19:客戶端(49203端口)PWD獲取當前路徑

包20:服務端(21端口)返回當前路徑

2.11、包21:客戶端(49203端口)請求使用ascii傳輸

包22:服務端(21端口)響應,同意使用ascii傳輸

 

2.12、包23:客戶端(49203端口)發起主動連接,向服務端發送建立子連接的IP和端口

包24:服務端(21端口)響應,同意使用客戶端發送的IP端口建立子連接

2.13、包26-28:FTP子連接三次握手建立TCP連接。

2.14、包:30-32:服務端(20端口)向客戶端(49204端口)發送數據。

2.15、包33-37:數據傳輸完成,TCP斷開連接

2.16、包60-63:控制連接已斷開,TCP四次揮手斷開TCP連接

3.2、被動連接(PASV)

1、被動連接介紹

服務端采用客戶端建議使用被動模式,開啟數據傳輸端口的監聽,被動等待客戶端的連接然后向客戶端發送數據。

以下報文是SNAT轉換后的報文,源IP(10.10.10.2)轉換成出接口IP地址(192.168.10.114)

2、報文拆分解釋

2.1、TCP三次握手建立TCP連接

2.2、報文4:服務端(21端口)向客戶端(49206端口)。code字段表示新用戶服務就緒,arg字段為服務器名稱和服務器版本號

2.3、報文5:客戶端(49206端口)向服務端(21端口)發送request報文。command字段表示該報文里包含的是用戶名,arg字段為用戶名內容。

2.4、報文6:服務端(21端口)回復response報文,code值為331,表示用戶名可以,需要密碼

2.5、報文7:客戶端(49206端口)向服務端(21端口)發送request報文,command字段表示該報文里包含的是密碼,arg字段為密碼內容。

2.6、報文8:服務端(21端口)回復response報文,code值為230,表示用戶已登錄,請繼續操作

2.7、報文9:客戶端(49206端口)向服務端(21端口)發送SYST報文,表示返回服務器使用的操作系統。

2.8、報文10:服務端(21端口)回應系統類型,code字段為215,表示返回的是系統類型。arg字段為UNIX,表示系統類型是UNIX系統

2.9、包11:客戶端(49206端口)請求系統狀態

包12:服務端(21端口)回應系統狀態,code字段為211,arg字段為特征列表

2.10、包15:客戶端(49206端口)PWD獲取當前路徑

包16:服務端(21端口)返回當前路徑

包17:客戶端(49206端口)CWD更改目錄

包18:服務端(21端口)返回修改后的目錄

包19:客戶端(49206端口)PWD獲取當前路徑

包20:服務端(21端口)返回當前路徑

2.12、包23:客戶端(49206端口)向服務端請求建立被動連接

包24:服務端(21端口)響應,同意建立被動連接,並且向客戶端發送服務端的IP和監聽端口

2.13、包26-28:FTP子連接三次握手建立TCP連接。

2.14、包:32-33:服務端(20端口)向客戶端(49207端口)發送數據。

2.15、包34-36:數據傳輸完成,TCP斷開連接

2.16、包59-62:控制連接已斷開,TCP四次揮手斷開TCP連接

3.3、FTP主動模式穿越SNAT原理

主動模式穿越SNAT主要用於FTP服務端在公網,客戶端需要通過SNAT轉換訪問服務端。

1、FTP客戶端通過防火牆的SNAT訪問FTP服務端時使用主動模式。

2、當客戶端發送PORT報文到服務端時,報文內的active ip address字段為10.10.10.2,active port字段為49217

3、當穿越SNAT的時候,SNAT會把active ip address字段和active port字段改為轉換后的IP和端口

4、服務端收到經過SNAT后的PORT報文后,會給192.168.10.114發送響應報文。

5、響應報文經過鏈接跟蹤表,轉發給客戶端。

3.4、FTP被動模式穿越DNAT原理

被動模式穿越DNAT主要用於FTP服務端在私網,客戶端需要通過DNAT轉換后訪問服務端。

1、FTP客戶端訪問防火牆的10.10.10.1,進行DNAT轉換,轉換目的IP為192.168.10.114

2、當客戶端發送PASV報文到服務端后,服務端返回自己的監聽IP和端口,passive ip address字段是192.168.10.115,passive port字段是62443

3、當穿越DNAT的時候,DNAT會把passive ip address字段和passive port字段改為轉換后的IP和端口

4、客戶端收到轉換后的響應報文后,和轉換后的響應報文進行建立數據連接

 

4、問題思考

4.1、主動模式和被動模式是誰決定的

主動模式和被動模式是由客戶端決定的,客戶端請求建立數據連接時,發送PVSA報文,服務端就會建立被動連接;當客戶端發送PORT報文時,服務端就會建立主動連接。

4.2、主動模式和被動模式是怎么協商出端口

主動模式協商端口

1、客戶端使用任意一個的非熟知權端口N(N>1024)與服務端建立FTP控制連接,然后客戶端開始監聽N+1端口。客戶端向服務端21端口發送PORT報文,PORT報文里包含客戶端監聽的IP和N+1端口。

2、服務端收到客戶端的PORT報文后,使用客戶端發送的IP和N+1端口與客戶端建立數據連接。

被動模式協商端口

  1. 客戶端開啟FTP連接時,會打開兩個任意的非熟知端口(N > 1024和N+1)。N端口連接服務器的21端口。
  2. 客戶端發送PVSA報文給服務端
  3. 服務器會開啟一個任意的非熟知端口(P > 1024),並發送響應報文給客戶端響應報文包含服務端IP和端口號P。
  4. 客戶端發起從本地端口N+1到服務器的端口P建立數據連接。

4.3、設想中間防火牆怎么識別子連接並給子連接放行

被動模式:

  1. 客戶端開啟FTP連接時,會打開兩個任意的非熟知端口(N > 1024和N+1)。N端口連接服務器的21端口。
  2. 客戶端發送PVSA報文給服務端。
  3. 服務器會開啟一個任意的非熟知端口(P > 1024),並發送響應報文給客戶端,響應報文包含服務端子連接IP和端口P。
  4. 防火牆收到服務端的響應后,獲取響應報文中子連接的IP和端口P。
  5. 客戶端發起從本地端口N+1到服務器的子連接IP、端口P建立數據連接。
  6. 防火牆收到客戶端發送的報文目的IP是子連接IP后,允許轉發,並轉發給服務器。

4.4、思考NAT設備如何給子連接做地址轉換

主動模式:

  1. 客戶端使用任意一個的非熟知端口N(N>1024)與服務端建立FTP控制連接
  2. 客戶端監聽N+1端口。
  3. 客戶端向服務端21端口發送PORT報文建立子連接,PORT報文里包含客戶端監聽的IP和N+1端口。
  4. NAT設備獲取PORT報文內的客戶端IP和N+1端口
  5. NAT設備修改PORT報文內的客戶端IP和N+1端口為自己的IP和端口,生成動態NAT
  6. 服務端收到客戶端的PORT報文后,使用NAT轉換后的IP和端口與客戶端建立數據連接。
  7. NAT設備收到后,訪問轉換后的IP和端口,根據動態NAT轉換為客戶端子連接的IP和N+1端口,發送給客戶端。

4.5、下載兩個文件,會每個文件開一個數據連接么

FTP同時下載兩個文件,FTP會為每個文件打開一個數據連接。


1、下載文件test.txt,開啟一條數據連接

2、下載文件test1.txt,開啟另一條數據連接

4.6、列出目錄,服務器發送目錄列表,會使用數據連接傳輸么

會使用數據連接發送目錄列表,當數據連接建立完成后,服務器會向客戶端發送當前路徑和目錄列表內容。

5、FTPipv4和ipv6的區別

控制連接請求(被動模式)

IPv4使用PASV建立控制連接。PASV報文response報文的code字段為227(進入被動模式),arg字段為監聽IP和端口。

IPv6使用EPSV建立控制連接。EPSV報文response報文的code字段為229(進入被動模式),arg字段為監聽端口

控制連接請求(主動模式)

IPv4使用PORT建立控制連接。請求時攜帶監聽的IPv4地址和端口。PART報文response報文返回200

IPv6使用EPRT建立控制連接。請求時攜帶監聽的IPv6地址和端口。EPRT報文response報文返回200

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM