1. 程式人生 > >Python的網絡編程[1] -> FTP -> FTP 的基本理論

Python的網絡編程[1] -> FTP -> FTP 的基本理論

microsoft ftp客戶端 只需要 兩張 分享 基本理論 star username pass

FTP協議 / FTP Protocol


FTP全稱為File Transfer Protocol(文件傳輸協議),常用於Internet上控制文件的雙向傳輸,常用的操作有上傳和下載。基於TCP/IP,基於RFC959通信協議。

0 FTP理論 / FTP Theory

詳細的理論可以參考這裏。

1 FTP結構 / FTP Structure

FTP如同其他的很多通訊協議,FTP通訊協議也采用客戶機 / 服務器(Client / Server)架構。用戶可以通過各種不同的FTP客戶端程序,借助FTP協議,來連接FTP服務器,以上傳或者下載文件。

2 FTP通訊端口 / FTP Communication Port

FTP的服務器與客戶端之間的文件傳輸,需要通過端口來進行,FTP協議的端口包括:

TCP端口21:

主要用於指令傳輸,所有客戶端發往FTP服務器的命令和服務器的反饋指令都是通過該端口進行傳輸。

TCP端口20:

主要用於數據傳輸(主動模式),例如客戶端上傳下載內容,以及查看目錄顯示內容等。

3 FTP連接模式 / FTP Communication Mode

FTP的主動模式和被動模式,兩者的區別,用兩張圖來表示:

3.1 主動模式PORT

技術分享圖片

主動模式工作過程:

1. 客戶端以隨機非特權高位端口N (>1024),對server端21端口發起連接,並且之後所有控制命令均通過這條鏈路傳送;

2. 當需要進行數據傳輸時,客戶端開始監聽N+1端口,並發送port N+1的命令到FTP服務器;

3. 服務端會主動以20端口連接到客戶端的N+1端口。

總結流程如下:

客戶端向服務器的FTP端口(默認是21)發送連接請求,服務器接受連接,建立一條命令鏈路。當需要傳送數據時,客戶端在命令鏈路上用PORT命令告訴服務器:“我打開了***X端口,你過來連接我”。於是服務器從20端口向客戶端的***X端口發送連接請求,建立一條數據鏈路來傳送數據

主動模式的優點:

服務端配置簡單,利於服務器安全管理,服務器只需要開放21端口

主動模式的缺點:

如果客戶端開啟了防火墻,或客戶端處於內網(NAT網關之後), 那麽服務器對客戶端端口發起的連接可能會失敗

3.2 被動模式PASV

技術分享圖片

被動模式工作過程:

1. 客戶端打開隨機非特權端口N和N+1,並以端口N連接服務端的21端口(提交PASV命令);

2. 服務端開啟一個非特權端口M為被動端口,並返回給客戶端;

3. 客戶端以N+1的端口主動連接服務端的被動端口M,從而建立連接傳輸數據。

總結流程如下:

客戶端向服務器的FTP端口(默認是21)發送連接請求,服務器接受連接,建立一條命令鏈路。當需要傳送數據時,服務器在命令鏈路上用PASV命令告訴客戶端:“我打開了***X端口,你過來連接我”。於是客戶端向服務器的***X端口發送連接請求,建立一條數據鏈路來傳送數據。

被動模式缺點:

服務器配置管理稍顯復雜,不利於安全,服務器需要開放隨機高位端口以便客戶端可以連接,因此大多數FTP服務軟件都可以手動配置被動端口的範圍

被動模式的優點:

對客戶端網絡環境沒有要求,而對服務端有。

被動模式客戶端Log

技術分享圖片
*resp* 220 Welcome to my FTP server.  
*cmd* USER Admin  
*resp* 331 Username ok, send password.  
*cmd* PASS ******  
*resp* 230 Admin login successful  
*welcome* 220 Welcome to my FTP server.  
*cmd* TYPE I  
*resp* 200 Type set to: Binary.  
*cmd* PASV  
*resp* 227 Entering passive mode (127,0,0,10,8,74).  
*cmd* RETR testFile.py  
*resp* 125 Data connection already open. Transfer starting.  
*resp* 226 Transfer complete.  
*cmd* TYPE I  
*resp* 200 Type set to: Binary.  
*cmd* PASV  
*resp* 227 Entering passive mode (127,0,0,10,8,105).  
*cmd* RETR testFile.docx  
*resp* 125 Data connection already open. Transfer starting.  
*resp* 226 Transfer complete. 
*cmd* QUIT
*resp* 221 Goodbye, admin.
View Code

Note:

  1. *resp*為ServeràClient, *cmd*為ClientàServer
  2. TYPE I 為二進制方式傳輸
  3. ‘227 Entering passive mode (127,0,0,10,8,74).‘表示返回了服務器IP和服務器開啟的臨時端口,臨時端口算法為,8*256+74=2122。

參考鏈接


http://blog.csdn.net/sever2012/article/details/7074426

http://blog.csdn.net/cuker919/article/details/6403925

Python的網絡編程[1] -> FTP -> FTP 的基本理論