FTP的主动模式和被动模式工作原理
目錄
1、鏈路分類
2、控制鏈路
3、數(shù)據(jù)鏈路
3.1、被動模式(PASV)
3.2、主動模式(PORT)
3.3、兩種模式數(shù)據(jù)鏈路區(qū)別
4、FTP 相關(guān)命令
4.1、登錄
4.2、建立文件傳輸套接字通信
4.3、操作文件
4.4、目錄操作
4.5、模式與類型
4.6、參數(shù)信息
4.7、其他不常用的命令
4.8、FTP服務(wù)端的響應(yīng)碼
1、鏈路分類
? ? ? FTP是僅基于TCP的服務(wù),與眾不同的是FTP協(xié)議要用到兩個TCP連接,一個是控制鏈路,用來在客戶端與服務(wù)器之間傳遞命令的;另一個是數(shù)據(jù)鏈路,用來上傳或下載數(shù)據(jù)的??刂奇溌肥怯煽蛻舳讼蚍?wù)器端的 21 號端口建鏈,根據(jù)數(shù)據(jù)鏈路的建鏈方向以及所使用的端口號的不同分為主動模式和被動模式兩種。
2、控制鏈路
無論是被動模式還是主動模式都是需要客戶端用一個大于1024的端口主動先向服務(wù)器的 21號端口 建鏈形成控制鏈路,具體過程如下:
1、客戶端向服務(wù)器發(fā)起三次握手操作,完成TCP鏈路的建立
2、TCP建鏈完成,服務(wù)器向客戶端回復(fù)220 (220:對新用戶服務(wù)準(zhǔn)備好)
3、服務(wù)器向客戶端發(fā)送回應(yīng)530(530:需要客戶端發(fā)送用戶名和密碼)
4、客戶端發(fā)送用戶名,服務(wù)器收到用戶名并校驗成功后回復(fù)331(331:用戶名正確,需要口令)
5、客戶端發(fā)送密碼,服務(wù)收到密碼校驗成功后并回復(fù)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、數(shù)據(jù)鏈路
3.1、被動模式(PASV)
ftp默認(rèn)使用被動模式傳輸數(shù)據(jù),具體過程如下:
1、客戶端向服務(wù)器發(fā)送PASV指令,告訴服務(wù)器使用被動模式(控制鏈路)
2、服務(wù)器收到指令后,開啟一個監(jiān)聽端口 listen_port(大于1024),并將該端口信息回復(fù)客戶端
3、客戶端收到服務(wù)的監(jiān)聽端口 listen_port 信息后,立刻再起一個端口向listen_port進(jìn)行建鏈(數(shù)據(jù)鏈路)
4、數(shù)據(jù)鏈路建鏈完成后,數(shù)據(jù)信息走數(shù)據(jù)鏈路、控制指令信息走控制鏈路
模型如下:
? ? ? ? ? ??
抓包信息如下:
client命令執(zhí)行結(jié)果:
//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、客戶端本地開啟一個監(jiān)聽端口listen_port,后向服務(wù)器發(fā)送PROT指令,并將端口信息帶給服務(wù)器
2、服務(wù)收到PROT指令,立刻用本地20號端口向客戶端的 listen_port 進(jìn)行建鏈(數(shù)據(jù)鏈路)
3、數(shù)據(jù)鏈路建鏈完成后,數(shù)據(jù)信息走數(shù)據(jù)鏈路、控制指令信息走控制鏈路。
? ? ? ? ??
抓包信息如下:
client命令執(zhí)行結(jié)果:
//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、兩種模式數(shù)據(jù)鏈路區(qū)別
4、FTP 相關(guān)命令
(每執(zhí)行一次命令后,服務(wù)端會給與回復(fù))
4.1、登錄
| USER 賬號\r\n | 登錄賬號 |
| PASS 密碼\r\n | 登錄密碼 |
| REIN\r\n | 想重新登錄,連接不會關(guān)閉,下一條命令USER可重新連接 |
| QUIT\r\n | 退出 |
4.2、建立文件傳輸套接字通信
| PASV\r\n | 被動模式,服務(wù)端會回復(fù)一個IP地址和端口,然后你再連接.(一般使用被動模式) |
| PORT 表示IP端口的特殊格式\r\n | 主動模式,讓服務(wù)端主動來連接你的文件監(jiān)聽套接字 |
4.3、操作文件
| STOR 文件名\r\n | 上傳文件 |
| APPE 文件名\r\n | 上傳文件,如果文件名已存在,把數(shù)據(jù)插入尾部 |
| DELE 文件名\r\n | 刪除指定文件 |
| REST 字節(jié)個數(shù)\r\n | 跳過字節(jié)數(shù),短點續(xù)傳,下載文件前使用,使RETR命令僅下載偏移后的部分 |
| RETR 文件名\r\n | 下載文件 |
| ABOR\r\n | 放棄傳輸一個文件,將關(guān)閉文件套接字通信 |
4.4、目錄操作
| CWD 目錄名\r\n | 改變當(dāng)前目錄到指定目錄 |
| CDUP\r\n | 返回上一次目錄,當(dāng)?shù)礁夸洉r,不變 |
| LIST\r\n | 顯示當(dāng)前目錄下的文件,包括長度,文件類型(如目錄)與權(quán)限(表示類型:drwxr-xr-x) |
| LIST 目錄名\r\n | 顯示指定目錄下的文件,包括長度,文件類型(如目錄)與權(quán)限(表示類型:drwxr-xr-x) |
| MKD 目錄名\r\n | 創(chuàng)建一個目錄 |
| PWD\r\n | 顯示當(dāng)前目錄的路徑 |
| RMD 目錄名\r\n | 刪除目錄 |
| RNFR 文件或目錄名\r\n | 將某文件或目錄重命名,接下來要使用RNTO指定新名稱 |
| RNTO 文件或目錄名\r\n | 重命名為.... |
| NLST\r\n | 僅顯示當(dāng)前目錄下的文件,以\r\n表示下一個 |
| NLST 目錄\r\n | 僅顯示指定目錄下的文件,以\r\n表示下一個 |
4.5、模式與類型
| TYPE 字符\r\n | 選擇傳輸類型 A為文本模式 I為二進(jìn)制模式 E為EBCDIC N為Nonprint非打印模式 T為Telnet格式控制符 |
4.6、參數(shù)信息
?
| SYST\r\n | 獲取服務(wù)端系統(tǒng)信息(NT或Unix) |
| STAT 文件或文件夾\r\n | 獲取相關(guān)信息 |
4.7、其他不常用的命令
| ACCT 用戶帳號\r\n | 發(fā)送PASS命令并接收到332代碼之后才應(yīng)發(fā)送 |
| SMNT 另一個文件數(shù)據(jù)系統(tǒng)的路徑\r\n | 允許用戶裝配另一個文件系統(tǒng)的數(shù)據(jù)結(jié)構(gòu)而無需改變登錄 |
| MODE 字符\r\n | 指定傳輸類型:默認(rèn)為流模式(S為流)(B為塊)(C為經(jīng)過壓縮) |
| STRU 字符\r\n | 指定結(jié)構(gòu)類型:F為文件結(jié)構(gòu)(默認(rèn)值,就是流式傳輸) |
| ALLO 邏輯字節(jié)數(shù)\r\n | 上傳文件前,使用此命令申請內(nèi)存(本人還沒見到需要的,都是直接上傳) |
| NOOP | 測試通信 |
| HELP | 幫助,會列出有效命令 |
4.8、FTP服務(wù)端的響應(yīng)碼
| 150 | 文件狀態(tài)良好,打開數(shù)據(jù)連接 |
| 200 | 命令成功 |
| 212 | 目錄狀態(tài) |
| 213 | 文件狀態(tài) |
| 110 | 重新啟動標(biāo)記應(yīng)答 |
| 500 | 格式錯誤,命令不可識別 |
| 501 | 參數(shù)語法錯誤 |
| 502 | 命令未實現(xiàn) |
| 120 | 在X分鐘內(nèi)準(zhǔn)備好 |
| 125 | 連接打開準(zhǔn)備傳送 |
| 214 | 幫助信息,信息僅對人類用戶有用 |
| 215 | 名字系統(tǒng)類型 |
| 220 | 對新用戶服務(wù)準(zhǔn)備好 |
| 221 | 服務(wù)關(guān)閉控制連接,可以退出登錄 |
| 202 | 命令未實現(xiàn) |
| 211 | 系統(tǒng)狀態(tài)或系統(tǒng)幫助響應(yīng) |
| 225 | 數(shù)據(jù)連接打開,無傳輸正在進(jìn)行 |
| 226 | 關(guān)閉數(shù)據(jù)連接,請求的文件操作成功 |
| 227 | 進(jìn)入被動模式 |
| 230 | 用戶登錄 |
| 331 | 用戶名正確,需要口令 |
| 332 | 登錄時需要帳戶信息 |
| 350 | 請求的文件操作需要進(jìn)一步命令 |
| 421 | 連接用戶過多 |
| 425 | 不能打開數(shù)據(jù)連接 |
| 426 | 關(guān)閉連接,中止傳輸 |
| 450 | 請求的文件操作未執(zhí)行 |
| 451 | 中止請求的操作:有本地錯誤 |
| 452 | 未執(zhí)行請求的操作:系統(tǒng)存儲空間不足 |
| 250 | 請求的文件操作完成 |
| 257 | 創(chuàng)建"PATHNAME" |
| 503 | 命令順序錯誤 |
| 504 | 此參數(shù)下的命令功能未實現(xiàn) |
| 530 | 賬號或密碼錯誤 |
| 532 | 存儲文件需要帳戶信息 |
| 550 | 未執(zhí)行請求的操作 |
| 551 | 請求操作中止:頁類型未知 |
| 552 | 請求的文件操作中止,存儲分配溢出 |
| 553 | 未執(zhí)行請求的操作:文件名不合法 |
參考文獻(xiàn):
https://blog.csdn.net/jingzi123456789/article/details/83409572
https://blog.csdn.net/Aaron133/article/details/78508211
?
總結(jié)
以上是生活随笔為你收集整理的FTP的主动模式和被动模式工作原理的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Latex排版文字
- 下一篇: 关于友善之臂出的Nanopi R2S盒子