目錄
1、拓撲圖
2、FTP協議簡介
FTP 英文全稱:File Transfer Protocol,中文全稱:文件傳輸協議
提供交互式的訪問,對傳輸文件的格式和類型有分類,允許文件具有存取權限。適合異構網絡任意計算機的傳送。
3、FTP工作原理
FTP采用C/S架構,使用TCP可靠的傳輸服務。一個FTP服務器進程可同時為多個客戶進程提供服務,FTP服務器檢查有兩大部分組成:一個主進程,負責接收新的請求,另外有若干的從屬進程,負責處理單個請求,工作步驟如下:
- 建立TCP連接
- 打開熟知端口21(控制端口),使客戶進程能夠連接上
- 等待客戶進程發鏈接請求。
- 啟動從屬進程來處理客戶進程發來的請求。主進程與從進程並發執行,從屬進程對客戶進程的請求處理完畢后即終止。
- 回到等待狀態,繼續接收其他客戶進程的請求。
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端口與客戶端建立數據連接。
被動模式協商端口
- 客戶端開啟FTP連接時,會打開兩個任意的非熟知端口(N > 1024和N+1)。N端口連接服務器的21端口。
- 客戶端發送PVSA報文給服務端
- 服務器會開啟一個任意的非熟知端口(P > 1024),並發送響應報文給客戶端響應報文包含服務端IP和端口號P。
- 客戶端發起從本地端口N+1到服務器的端口P建立數據連接。
4.3、設想中間防火牆怎么識別子連接並給子連接放行
被動模式:
- 客戶端開啟FTP連接時,會打開兩個任意的非熟知端口(N > 1024和N+1)。N端口連接服務器的21端口。
- 客戶端發送PVSA報文給服務端。
- 服務器會開啟一個任意的非熟知端口(P > 1024),並發送響應報文給客戶端,響應報文包含服務端子連接IP和端口P。
- 防火牆收到服務端的響應后,獲取響應報文中子連接的IP和端口P。
- 客戶端發起從本地端口N+1到服務器的子連接IP、端口P建立數據連接。
- 防火牆收到客戶端發送的報文目的IP是子連接IP后,允許轉發,並轉發給服務器。
4.4、思考NAT設備如何給子連接做地址轉換
主動模式:
- 客戶端使用任意一個的非熟知端口N(N>1024)與服務端建立FTP控制連接
- 客戶端監聽N+1端口。
- 客戶端向服務端21端口發送PORT報文建立子連接,PORT報文里包含客戶端監聽的IP和N+1端口。
- NAT設備獲取PORT報文內的客戶端IP和N+1端口
- NAT設備修改PORT報文內的客戶端IP和N+1端口為自己的IP和端口,生成動態NAT
- 服務端收到客戶端的PORT報文后,使用NAT轉換后的IP和端口與客戶端建立數據連接。
- 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