FTP的主动模式和被动模式工作原理
目錄
1、鏈路分類
2、控制鏈路
3、數據鏈路
3.1、被動模式(PASV)
3.2、主動模式(PORT)
3.3、兩種模式數據鏈路區別
4、FTP 相關命令
4.1、登錄
4.2、建立文件傳輸套接字通信
4.3、操作文件
4.4、目錄操作
4.5、模式與類型
4.6、參數信息
4.7、其他不常用的命令
4.8、FTP服務端的響應碼
1、鏈路分類
? ? ? FTP是僅基于TCP的服務,與眾不同的是FTP協議要用到兩個TCP連接,一個是控制鏈路,用來在客戶端與服務器之間傳遞命令的;另一個是數據鏈路,用來上傳或下載數據的。控制鏈路是由客戶端向服務器端的 21 號端口建鏈,根據數據鏈路的建鏈方向以及所使用的端口號的不同分為主動模式和被動模式兩種。
2、控制鏈路
無論是被動模式還是主動模式都是需要客戶端用一個大于1024的端口主動先向服務器的 21號端口 建鏈形成控制鏈路,具體過程如下:
1、客戶端向服務器發起三次握手操作,完成TCP鏈路的建立
2、TCP建鏈完成,服務器向客戶端回復220 (220:對新用戶服務準備好)
3、服務器向客戶端發送回應530(530:需要客戶端發送用戶名和密碼)
4、客戶端發送用戶名,服務器收到用戶名并校驗成功后回復331(331:用戶名正確,需要口令)
5、客戶端發送密碼,服務收到密碼校驗成功后并回復230(230:用戶登錄成功)
client:10.43.42.199、server:10.43.85.223,報文如下
//client [root@localhost ~]# netstat -anp | grep 10.43.85.223 tcp 0 0 10.43.42.199:52055 10.43.85.223:21 ESTABLISHED 19848/ftp3、數據鏈路
3.1、被動模式(PASV)
ftp默認使用被動模式傳輸數據,具體過程如下:
1、客戶端向服務器發送PASV指令,告訴服務器使用被動模式(控制鏈路)
2、服務器收到指令后,開啟一個監聽端口 listen_port(大于1024),并將該端口信息回復客戶端
3、客戶端收到服務的監聽端口 listen_port 信息后,立刻再起一個端口向listen_port進行建鏈(數據鏈路)
4、數據鏈路建鏈完成后,數據信息走數據鏈路、控制指令信息走控制鏈路
模型如下:
? ? ? ? ? ??
抓包信息如下:
client命令執行結果:
//clientftp> get test1 local: test1 remote: test1 227 Entering Passive Mode (10,43,85,223,25,164). 150 Opening BINARY mode data connection for test1 (70776816 bytes). 226 Transfer complete. 70776816 bytes received in 6.1 seconds (1.1e+04 Kbytes/s) ....[roott@localhost ~]# netstat -anp | grep 10.43.85.223 tcp 0 0 10.43.42.199:44613 10.43.85.223:6564 ESTABLISHED 19848/ftp tcp 0 0 10.43.42.199:52055 10.43.85.223:21 ESTABLISHED 19848/ftp3.2、主動模式(PORT)
1、客戶端本地開啟一個監聽端口listen_port,后向服務器發送PROT指令,并將端口信息帶給服務器
2、服務收到PROT指令,立刻用本地20號端口向客戶端的 listen_port 進行建鏈(數據鏈路)
3、數據鏈路建鏈完成后,數據信息走數據鏈路、控制指令信息走控制鏈路。
? ? ? ? ??
抓包信息如下:
client命令執行結果:
//clientftp> passive Passive mode off. ftp> get test2 local: test2 remote: test2 200 PORT command successful. Consider using PASV. 150 Opening BINARY mode data connection for test2 (86743786 bytes). 226 Transfer complete. 86743786 bytes received in 7.5 seconds (1.1e+04 Kbytes/s) ftp> quit[roott@localhost ~]# netstat -anp | grep 10.43.85.223 tcp 0 0 10.43.42.199:59250 10.43.85.223:20 ESTABLISHED 19848/ftp tcp 0 0 10.43.42.199:52055 10.43.85.223:21 ESTABLISHED 19848/ftp [roott@localhost ~]# netstat -anp | grep 10.43.85.223 tcp 0 0 10.43.42.199:59250 10.43.85.223:20 ESTABLISHED 19848/ftp tcp 0 0 10.43.42.199:52055 10.43.85.223:21 ESTABLISHED 19848/ftp [roott@localhost4 ~]# netstat -anp | grep 10.43.85.2233.3、兩種模式數據鏈路區別
4、FTP 相關命令
(每執行一次命令后,服務端會給與回復)
4.1、登錄
| USER 賬號\r\n | 登錄賬號 |
| PASS 密碼\r\n | 登錄密碼 |
| REIN\r\n | 想重新登錄,連接不會關閉,下一條命令USER可重新連接 |
| QUIT\r\n | 退出 |
4.2、建立文件傳輸套接字通信
| PASV\r\n | 被動模式,服務端會回復一個IP地址和端口,然后你再連接.(一般使用被動模式) |
| PORT 表示IP端口的特殊格式\r\n | 主動模式,讓服務端主動來連接你的文件監聽套接字 |
4.3、操作文件
| STOR 文件名\r\n | 上傳文件 |
| APPE 文件名\r\n | 上傳文件,如果文件名已存在,把數據插入尾部 |
| DELE 文件名\r\n | 刪除指定文件 |
| REST 字節個數\r\n | 跳過字節數,短點續傳,下載文件前使用,使RETR命令僅下載偏移后的部分 |
| RETR 文件名\r\n | 下載文件 |
| ABOR\r\n | 放棄傳輸一個文件,將關閉文件套接字通信 |
4.4、目錄操作
| CWD 目錄名\r\n | 改變當前目錄到指定目錄 |
| CDUP\r\n | 返回上一次目錄,當到根目錄時,不變 |
| LIST\r\n | 顯示當前目錄下的文件,包括長度,文件類型(如目錄)與權限(表示類型:drwxr-xr-x) |
| LIST 目錄名\r\n | 顯示指定目錄下的文件,包括長度,文件類型(如目錄)與權限(表示類型:drwxr-xr-x) |
| MKD 目錄名\r\n | 創建一個目錄 |
| PWD\r\n | 顯示當前目錄的路徑 |
| RMD 目錄名\r\n | 刪除目錄 |
| RNFR 文件或目錄名\r\n | 將某文件或目錄重命名,接下來要使用RNTO指定新名稱 |
| RNTO 文件或目錄名\r\n | 重命名為.... |
| NLST\r\n | 僅顯示當前目錄下的文件,以\r\n表示下一個 |
| NLST 目錄\r\n | 僅顯示指定目錄下的文件,以\r\n表示下一個 |
4.5、模式與類型
| TYPE 字符\r\n | 選擇傳輸類型 A為文本模式 I為二進制模式 E為EBCDIC N為Nonprint非打印模式 T為Telnet格式控制符 |
4.6、參數信息
?
| SYST\r\n | 獲取服務端系統信息(NT或Unix) |
| STAT 文件或文件夾\r\n | 獲取相關信息 |
4.7、其他不常用的命令
| ACCT 用戶帳號\r\n | 發送PASS命令并接收到332代碼之后才應發送 |
| SMNT 另一個文件數據系統的路徑\r\n | 允許用戶裝配另一個文件系統的數據結構而無需改變登錄 |
| MODE 字符\r\n | 指定傳輸類型:默認為流模式(S為流)(B為塊)(C為經過壓縮) |
| STRU 字符\r\n | 指定結構類型:F為文件結構(默認值,就是流式傳輸) |
| ALLO 邏輯字節數\r\n | 上傳文件前,使用此命令申請內存(本人還沒見到需要的,都是直接上傳) |
| NOOP | 測試通信 |
| HELP | 幫助,會列出有效命令 |
4.8、FTP服務端的響應碼
| 150 | 文件狀態良好,打開數據連接 |
| 200 | 命令成功 |
| 212 | 目錄狀態 |
| 213 | 文件狀態 |
| 110 | 重新啟動標記應答 |
| 500 | 格式錯誤,命令不可識別 |
| 501 | 參數語法錯誤 |
| 502 | 命令未實現 |
| 120 | 在X分鐘內準備好 |
| 125 | 連接打開準備傳送 |
| 214 | 幫助信息,信息僅對人類用戶有用 |
| 215 | 名字系統類型 |
| 220 | 對新用戶服務準備好 |
| 221 | 服務關閉控制連接,可以退出登錄 |
| 202 | 命令未實現 |
| 211 | 系統狀態或系統幫助響應 |
| 225 | 數據連接打開,無傳輸正在進行 |
| 226 | 關閉數據連接,請求的文件操作成功 |
| 227 | 進入被動模式 |
| 230 | 用戶登錄 |
| 331 | 用戶名正確,需要口令 |
| 332 | 登錄時需要帳戶信息 |
| 350 | 請求的文件操作需要進一步命令 |
| 421 | 連接用戶過多 |
| 425 | 不能打開數據連接 |
| 426 | 關閉連接,中止傳輸 |
| 450 | 請求的文件操作未執行 |
| 451 | 中止請求的操作:有本地錯誤 |
| 452 | 未執行請求的操作:系統存儲空間不足 |
| 250 | 請求的文件操作完成 |
| 257 | 創建"PATHNAME" |
| 503 | 命令順序錯誤 |
| 504 | 此參數下的命令功能未實現 |
| 530 | 賬號或密碼錯誤 |
| 532 | 存儲文件需要帳戶信息 |
| 550 | 未執行請求的操作 |
| 551 | 請求操作中止:頁類型未知 |
| 552 | 請求的文件操作中止,存儲分配溢出 |
| 553 | 未執行請求的操作:文件名不合法 |
參考文獻:
https://blog.csdn.net/jingzi123456789/article/details/83409572
https://blog.csdn.net/Aaron133/article/details/78508211
?
總結
以上是生活随笔為你收集整理的FTP的主动模式和被动模式工作原理的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Latex排版文字
- 下一篇: 关于友善之臂出的Nanopi R2S盒子