主動模式下FTP的詳細工做過程

文中有不對或者有不清楚的地方,請你們告訴我,謝謝!
 
主動模式下FTP的詳細工做過程
 
PORT FTP是經常使用的FTP工做方式,當客戶端的鏈接請求到來時,FTP服務器會利用默認的21端口與客戶端創建鏈接,該鏈接屬於命令通道,利用該通道來下達控制指令;接下來服務器便會在20端口接受客戶端的數據傳輸鏈接請求,並創建數據傳輸通道,開始傳輸數據,數據傳輸完畢後,便會關閉該次的數據鏈接,接着又會在20端口等待接受新的數據鏈接。因而可知,基於端口的工做方式,服務器的數據端口始終使用20,創建FTP控制鏈接則使用標準的21端口。根據須要,能夠在配置文件中從新設置所使用的端口。
 
本示例客戶端IP是192.168.120.168,服務器IP是192.168.120.240,在客戶端上經過命令行鏈接FTP服務器,並輸入ls、pwd命令,而後退出(見圖一)。經過抓包工具來查看用戶從鏈接FTP服務器到退出FTP服務器通過的全部過程。
 
38
圖一:示例
 
PORT FTP的詳細工做過程:
1. 由於FTP使用的是TCP協議,因此客戶端在經過ftp 192.168.120.240鏈接服務器時,首先會經歷TCP的三次握手(見圖2、圖3、圖四)來創建控制通道。客戶端使用任意的端口N(N>1024)來鏈接FTP服務器默認的21端口。
2. 在TCP三次握手結束後,服務器端正式響應客戶端的控制鏈接請求,控制通道創建(見圖五)。
3. 客戶端向服務器發送含有ACK的數據段來確認控制鏈接創建。
4. 客戶端向服務器發送用戶名(見圖六)。
5. 服務器向客戶端發送含有ACK的數據段來確認用戶名。
6. 服務器向客戶端詢問密碼(見圖七)。
7. 客戶端向服務器發送含有ACK的數據段來確認會發送密碼。
8. 客戶端向服務器發送密碼,密碼爲明文(見圖八)。
9. 服務器向客戶端發送含有ACK的數據段來確認密碼收到。
10. 服務器向客戶端發送登錄成功的信息(見圖九)。
11. 客戶端向服務器發送含有ACK的數據段來確認收到登錄成功的信息。
12. 客戶端向服務器發送PORT N+1指令,N+1是客戶端想要的數據傳輸端口號(見圖十)。port 192,168,120,168,200,100;192,168,120,168是客戶端本身的IP地址;200,100部分的第一個阿拉伯數字乘以256,而後加上第2個阿拉伯數字就獲得數據傳輸端口號,因此客戶端指定的數據傳輸端口號爲200*256+100=51300。
13. 服務器向客戶端發送含有ACK的數據段來確認收到PORT N+1指令。
14. 服務器響應PORT指令成功,贊成客戶端使用PORT N+1爲數據傳輸端口(見圖十一)。
15. 客戶端向服務器發送ls指令(見圖十二)。
16. 服務器響應客戶端的數據鏈接。服務器使用標準的數據端口20主動向客戶端的N+1端口發起鏈接。由於FTP是TCP協議,而且FTP的控制鏈接和數據鏈接是分開的,因此FTP的每次數據鏈接都要通過TCP的三次握手來完成(見圖十3、圖十4、圖十五)。
17. 由於ls命令能夠顯示文件,也能夠顯示目錄,因此在三次握手完成後,服務器有一個響應列出目錄的過程(見圖十6、圖十七)。
18. 服務器肯定完成客戶端ls指令後,服務器向客戶端發送含有FIN和ACK的數據段請求斷開本次數據鏈接(見圖十八)。這是第一次斷開本次數據鏈接。
19. 客戶端向服務器發送含有ACK的數據段來應答服務器的斷接請求(見圖十九)。這是第二次斷開本次數據鏈接。這樣就完成了服務器到客戶端的數據鏈接的半關閉。
20. 服務器告之客戶端ls指令已完成(見圖二十)。
21. 客戶端向服務器發送含有ACK的數據段來確認收到服務器的信息。
22. 客戶端向服務器發送含有FIN和ACK的數據段,請求斷開到服務器之間的本次數據鏈接(見圖二十一)。這是第三次斷開本次數據鏈接。
23. 服務器向客戶端發送含有ACK的數據段來確認客戶端的斷接請求(見圖二十二)。這樣本次數據鏈接徹底斷開,即第四次斷開本次數據鏈接。
24. 客戶端向服務器發送pwd指令(見圖二十三)。
25. 服務器向客戶端迴應pwd指令的結果(見圖二十四)。
26. 客戶端向服務器發送含有ACK的數據段來確認收到服務器發送的結果。
27. 客戶端向服務器發送quit指令(見圖二十五)。
28. 服務器向客戶端迴應quit指令的結果(見圖二十六)。
29. 服務器向客戶端發送含有FIN和ACK的數據段,請求斷開控制鏈接(見圖二十七)。這是第一次斷開控制鏈接。
30. 客戶端向服務器發送含有ACK的數據段來應答服務器的斷接請求(見圖二十八)。這是第二次斷開控制鏈接。
31. 客戶端向服務器發送含有FIN和ACK的數據段,請求斷開到服務器之間的控制鏈接(見圖二十九)。這是第三次斷開控制鏈接。
32. 服務器向客戶端發送含有ACK的數據段,來確認客戶端的斷接請求(見圖三十)。這樣本次FTP控制鏈接徹底斷開。
 
經過查看本次示例(主動FTP)的詳細過程,咱們能夠獲得如下幾點結果:
1. 服務器的控制鏈接端口爲21,數據傳輸端口爲20。端口能夠在配置文件中修改。
2. 客戶端的控制鏈接端口爲N(N>1024),數據傳輸端口在第一次進行數據傳輸時爲N+1,在第二次數據傳輸時爲N+2,依次類推。(這點在本示例中未體現)
3. 數據傳輸鏈接創建後,服務器主動用20端口去鏈接客戶端的N+x端口。
4. 在一次FTP鏈接的過程當中,只有一次控制鏈接,卻能夠有屢次數據傳輸鏈接。(屢次數據傳輸鏈接在本示例中未體現)
5. 無論是控制鏈接仍是數據傳輸鏈接,在每次從創建到完成都須要通過3次鏈接和4次斷開的過程。(這符合TCP協議的要求)
6. FTP指令分爲控制指令(如pwd、mkdir、rm、cd等)和數據請求指令(如ls、dir等)。
 
本文檔使用的圖例:
1
圖二:創建控制鏈接之TCP第一次握手
 
2
圖三:創建控制鏈接之TCP第二次握手
 
3
圖四:創建控制鏈接之TCP第三次握手
 
4
圖五:服務器響應客戶端的控制鏈接請求
 
6
圖六:客戶端發送用戶名
 
8
圖七:服務器向客戶端詢問密碼
 
10
圖八:客戶端發送密碼,密碼爲明文
 
12
圖九:服務器響應客戶端登錄成功
 
14
圖十:客戶端發送PORT N+1指令
 
16
圖十一:服務器響應PORT N+1指令成功
 
17
圖十二:客戶端向服務器發送ls指令
 
18
圖十三:服務器響應客戶端的ls指令進行TCP第一次握手
 
19
圖十四:服務器響應客戶端的ls指令進行TCP第二次握手
 
20
圖十五:服務器響應客戶端的ls指令進行TCP第三次握手
 
21
圖十六:服務器響應客戶端的ls指令來顯示目錄
 
22
圖十七:服務器確認列出目錄
 
23
圖十八:服務器請求斷開本次數據鏈接(TCP四次斷開之第一次)
 
24
圖十九:客戶端確認(TCP四次斷開之第二次,服務器到客戶端的本次數據鏈接完成半關閉)
 
25
圖二十:服務器告之客戶端ls指令已完成
 
27
圖二十一:客戶端請求斷開到服務器的本次數據鏈接(TCP四次斷開之第三次)
 
28
圖二十二:服務器確認客戶端的請求,徹底斷開本次數據鏈接(TCP四次斷開之第四次)
 
29
圖二十三:客戶端向服務器發送pwd指令
 
30
圖二十四:服務器向客戶端迴應pwd指令的結果
 
32
圖二十五:客戶端向服務器發送quit指令
 
33
圖二十六:服務器向客戶端迴應已退出
 
34
圖二十七:FTP控制鏈接之第一次斷開
 
35
圖二十八:FTP控制鏈接之第二次斷開
 
36
圖二十九:FTP控制鏈接之第三次斷開
 
37 
圖三十:FTP控制鏈接之第四次斷開
 
39
圖三十一:本次示例的完整過程
 
本文檔完整的圖例,請見附件。
相關文章
相關標籤/搜索