ftp主動模式與被動模式交互過程分析

1.相關介紹

1.1主動模式和被動模式

主動模式:服務端通過指定的數據傳輸端口(默認20),主動連接客戶端提交的端口,向客戶端發送數據。

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

一言以蔽之,服務端主動連接客戶端就是主動模式,服務端被動等待客戶端連接(客戶端主動連接服務端)就是被動模式。

ftp有主動模式被動模式而ssh等其他協議沒有這種說法的根源是:ftp要使用別的端口來傳輸數據。

1.2本文環境

192.168.220.128--centos 6.5,作爲服務端,通過yum安裝的vsftpd,使用默認配置

192.168.220.130--windows 7,作爲客戶端。

windows cmd中的ftp只支持主動模式我們以之來演示主動模式的交互過程,一般的ftp客戶端都優先採用被動模式這裏我們以FileZilla Client來演示被動模式的交互過程。

 

2.主被動交互過程數據包分析

2.1主動模式交互過程分析

在cmd中登錄後,執行ls -l,以下是ls -l執行的交互數據包

 

4--客戶端(52667) 請求服務端(21)連接本機192.168.220.128:52670

5--服務端(21)向客戶端(52667)表示可以,不過下次最好用被動模式

6--客戶端(52667)請求服務端(21)執行:ls -l

7--握手包1,服務端默認數據連接端口(20),主動連接客戶端給過來的端口(52670)

8--握手包2,客戶端(52670)向服務端(20)表示同意連接

9--握手包3,服務端(20)確認與客戶端(52670)建立連接

10--服務端(21)向客戶端(52667)表示以下是命令執行返回結果

11--返回結果數據包1

12--返回結果數據包2

13--揮手包1,服務端(20)向客戶端(52670)表示數據已完成傳輸

14--揮手包2,客戶端(52670)回覆服務端(20)己方也準備處理完成

15--服務端(21)向客戶端(52667)表示數據已傳輸完成

16--客戶端(52667)向服務端(21)表示好的

17--揮手包3,客戶端(52670)向服務端(20)表示可斷開連接

18--揮手包4,客服端(20)向客戶端(52670)確認斷開連接

 

2.2被動模式交互過程分析

在FileZilla Client中登錄後,點擊列出根目錄,以下是點擊列出根目錄後的交互數據包

21--客戶端(52550)請求服務端執行:cd /

22--服務端(21)回覆客戶端:250 Directory successfully changed.

23--客戶端(52550)請求服務端執行:pwd

24--服務端(21)回覆客戶端:257 "/"

25--客戶端(52550)請求下一操作使用被動模式

26--服務端(21)同意採取被動模式,並返回自己將要監聽的地址192.168.220.128:64758

27--客戶端(52550)請求執行:ls

28--握手包1,客戶端52552請求連接64758

29--握手包2,服務端64758回覆同意連接請求

30--握手包3,客戶端52552回覆服務端64758確認建立數據傳輸鏈路連接

31--服務端表示將要發回命令執行結果

35--返回結果數據包1(64758端口到52552端口)

36--返回結果數據包2(64758端口到52552端口)

37--揮手包1,服務端(64758)表示自己數據已完全傳輸

38--揮手包2,客戶端(52552)表示自己數據也將完成傳輸

39--服務端(21)向客戶端(52550)表示執行結果已完全返回

40--客戶端(52550)向服務端(21)表示好的

41--揮手包3,客戶端(52552)向服務端(64758)表示可斷開數據傳輸鏈路

42--揮手包4,服務端(64758)回覆客戶(52552)端確認斷開

 

3.關於NAT下的ftp等幾個問題的討論

3.1在被動模式中,服務端數據傳輸的端口由客戶端指定嗎

答案是否定的。在一些資料中可以看到客戶端決定服務端端口的說法,但在2.2交互過程中我們已可以清楚地看到,客戶端只是決定使用被動模式,服務端應允後就傳回了自己監聽的端口。

3.2nat環境下ftp存在問題的根本原因是什麼

在實踐中我們會發現,網絡nat環境下不論是主動模式還是被動模式,當執行ls等需要建立數據傳輸鏈路的文件時,都會出現超時報錯(ftp:connect: Connection timed out.)。

根本的原因是ftp傳輸數據要使用別的端口,直接的原因是要麼是客戶端在應用層中指出自己的ip:port(主動模式)要麼是服務端在應用層中指出自己的ip:port

在主動模式中,服務端主動連接客戶端的ip:port,所以(從原理上講)只要將服務端的數據傳輸端口(默認20)也做映射使該端口也能訪問客戶端網絡即可。(但實際遇到的情況中,即便做了映射也還是不行,暫未明其原因)

在被動模式中,服務端指出自己的ip:port,比如我們這裏假設服務端真實ip爲10.10.220.128,映射ip爲192.168,.220.128,服務端將要監聽的地址10.10.220.128:64758,發給客戶端(192。168.220.130),客戶端(192.168.220.130)就向10.10.220.128:64758發起連接請求。但實際上客戶端只有到達其映射地址(192.168.220.128)的路由,並沒有直接到10.10.220.128的路由,所以連接請求必然是沒有迴應的。

3.3爲什麼我們可以ftp服務器

衆所周知,上網時個人一般都只能分配到一個私網地址,從這角度來說我們要ftp到服務器,使用主動模式肯定會出問題,但在實際操作中可以看到一般都可以成功ftp。推測可能是nat設備攔載了ftp指定ip:port的數據包,將其修改爲了映射出去的ip:port。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章