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