FTP主动和被动模式区别?
【前言】
? ?要弄清FTP主動和被動模式區別,首先需要弄清端口。本質上ftp協議是TCP/IP的上層協議,即應用層協議,也就是說如果要實現一個ftp軟件或工具,還是用socket去實現,因此需要弄清socket和端口是基礎。注意以下幾點:
? ? 1.socket分為客戶端和服務端,通常情況下服務端需要進行bind綁定端口操作,而客戶端不需要操心本地端口的操作,客戶端只需要在connect的時候傳入服務端的IP和端口參數。其實在socket連接的過程中,雙方都需要打開一個端口,只不過客戶端的端口由系統自己產生,自己關閉。因為客戶端關心的是服務端的端口,而不需要關心本地的端口。很多人誤以為客戶端不需要端口。
? ? ?2.ftp協議中會建立兩條通道:一條是命令通道,進行命令傳送,例如:客戶端向服務端請求列表;另外一條是數據通道,就是在文件上傳下載時使用。
FTP主動和被動模式
? ?ftp的主被動模式指的是在于數據通道的區別,也就是說在傳輸文件時才會有區分。通常說的ftp的21端口指的是命令通道,是服務端監聽的21端口。而數據通道是文件傳輸前建立連接,傳輸完畢則關閉連接。下面具體介紹傳輸文件的時候主被動工作過程。
主動模式:
? ? ? ? ?建立連接,獲取目錄及列表 ,這個過程主被動沒什么區別。下面是從客戶端打印的連接過程:
響應: 220 Connected to 192.168.2.77 ready... 命令: USER admin 響應: 331 Password required for admin. 命令: PASS ***** 響應: 230 User admin logged in. 狀態: 連接成功 命令: OPTS UTF8 OFF 響應: 500 'OPTS': command not understood. 狀態: 正在取得目錄列表... 命令: PWD 響應: 257 "/E:/test/" is current directory. 狀態: 成功取得目錄列表? ? ?下載文件時(主動模式)過程:
響應: 220 Connected to 192.168.2.77 ready... 命令: USER admin 響應: 331 Password required for admin. 命令: PASS ***** 響應: 230 User admin logged in. 狀態: 連接成功 狀態: 開始下載 /E:/test/100.txt 命令: CWD /E:/test/ 響應: 250 CWD command successful. "/E:/test/" is current directory. 命令: PWD 響應: 257 "/E:/test/" is current directory. 命令: TYPE I 響應: 200 Type set to I. 命令: PORT 192,168,2,77,59,188 響應: 200 Port command successful. 命令: RETR 100.txt 響應: 150 Opening data connection for 100.txt. 響應: 226 Transfer complete. 狀態: 下載成功從上面的一行命令: ?PORT 192,168,2,77,59,188意思是:PORT是告訴服務端是主動模式建立數據通道;192,168,2,77是客戶端IP,;59,188是客戶端隨機產生的端口,其中端口號計算為? 端口號 = 59 x 256 + 188;這個端口是在客戶端監聽,客戶端告訴服務端這個端口號,讓服務端來連,建立連接后傳輸文件。過一段時間后,會打印-----狀態: ?已經從服務器斷開,下次傳文件的時候重新來一遍。
?被動模式:
? ? ? ? ?連接命令通道沒什么區別,數據傳輸時就不同了,過程如下:
響應: 220 Connected to 192.168.2.77 ready... 命令: USER admin 響應: 331 Password required for admin. 命令: PASS ***** 響應: 230 User admin logged in. 狀態: 連接成功 命令: OPTS UTF8 OFF 響應: 500 'OPTS': command not understood. 狀態: 正在取得目錄列表... 命令: PWD 響應: 257 "/E:/test/" is current directory. 狀態: 成功取得目錄列表 狀態: 正在連接 192.168.2.77 ... 狀態: 已經連接到 192.168.2.77:0。正在等待歡迎信息... 響應: 220 Connected to 192.168.2.77 ready... 命令: USER admin 響應: 331 Password required for admin. 命令: PASS ***** 響應: 230 User admin logged in. 狀態: 連接成功 狀態: 開始下載 /E:/test/100.txt 命令: CWD /E:/test/ 響應: 250 CWD command successful. "/E:/test/" is current directory. 命令: PWD 響應: 257 "/E:/test/" is current directory. 命令: TYPE I 響應: 200 Type set to I. 命令: PASV 響應: 227 Entering Passive Mode (192,168,2,77,62,17). 命令: RETR 100.txt 響應: 150 Opening data connection for 100.txt. 響應: 226 Transfer complete. 狀態: 下載成功? ? 被動模式傳輸文件的時候有一行命令 :? PASV? ?意思是告訴服務端是被動模式,然后服務端會隨機產生一個端口發給客戶端,這時是服務端監聽,客戶端去連接,然后傳文件。
總結:
? 以上介紹了主被動模式的過程,但網上有很多文章里羅列了很多端口,還有20端口等,最后再總結一下:
? 一個socket連接,比如服務端監聽的是21端口,客戶端也需要一個端口打開和外面連接(為什么客戶端需要端口?客戶端可服務端都是設備,對外連接都需要打開一扇門,不打開怎么連接;只不過服務端指定了端口,并且綁定了該端口,客戶端才能找到對應的去連)。所以,主動模式下,數據通道是服務端指定了20端口和客戶端監聽的那個隨機端口對應的,也就是說ftp服務端在傳文件的情況下,作為客戶端,打開了20端口,連接ftp客戶端監聽的隨機端口,這樣建立了數據通道。主動模式下其實是服務端監聽了21端口,而客戶端監聽了數據通道隨機端口;在被動模式下就是服務端監聽了21端口,也監聽了數據通道隨機端口。
最后說一句,FTP雖然是古老的東西,建立連接需要很多命令,下載上傳文件也需要很多次命令,但在工作學習中ftp仍然是不可或缺的工具。
?
【參考】
? ? ? ? ? ? ? 1.https://blog.csdn.net/qq_37851194/article/details/77622272
? ? ? ? ? ? ? 2.https://blog.csdn.net/code09/article/details/3975223
? ? ? ? ? ? ? 3.https://blog.csdn.net/zhangyuan12805/article/details/71425385
? ? ? ? ? ? ? 4.https://blog.csdn.net/yxyhack/article/details/1826256
總結
以上是生活随笔為你收集整理的FTP主动和被动模式区别?的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: python 音频数据归一化
- 下一篇: 滤波器设计中的频率归一化问题