目錄
1、環境拓撲配置
2、TFTP協議學習
2.1、協議概述
TFTP英文全稱:Trivial File Transfer Protocol,中文全稱:簡單文件傳輸協議。提供不復雜、開銷不大的文件傳輸服務。端口號為69。基於UDP協議。
2.2、TFTP報文類型
TFTP共定義了五種類型的包,類型的區分由包數據前兩個字節的Opcode字段區分,分別是:
- 讀文件請求包:Read request,簡寫為RRQ,對應Opcode字段值為1
- 寫文件請求包:Write requst,簡寫為WRQ,對應Opcode字段值為2
- 文件數據包:Data,簡寫為DATA,對應Opcode字段值為3
- 回應包:Acknowledgement,簡寫為ACK,對應Opcode字段值為4
- 錯誤信息包:Error,簡寫為ERROR,對應Opcode字段值為5
2.3、TFTP端口號分配
TFTP客戶端發送read request和write request報文的時候,目的端口是69。而Data、Acknowledgement、Error不使用69端口,它們使用的是隨機端口1024~5000。
不同的操作系統有不同的端口號規定Linux使用32768~61000、Windows 使用1025~5000
2.4、TFTP報文格式
2.4.1、Read request報文格式
客戶端使用端口65462向服務端69端口發送讀文件的請求
Read requst(1):表示這個一個讀取文件的請求
Source file:表示源文件是 1.txt
Type:表示傳輸類型為8字節
Tsize:表示文件大小為0
2.4.2、Write requst報文格式
客戶端使用端口65462向服務端69端口發送寫文件的請求
Write requst(2):表示這個一個寫文件的請求
DESTINATION file:表示目標文件是 1.txt
Type:表示傳輸類型為8字節
2.4.3、Acknowledgement報文格式
服務端使用端口58780向客戶端65461端口發送write requst報文的響應包
Acknowledgement(4) 表示這是一個響應報文
DESTINATION file:1.txt 表示目標文件是 1.txt
Block:0 表示塊代碼為0
2.4.4、Data 報文格式
客戶端使用65461端口向服務端58780端口發送數據。
Data packet(3) 表示這是一個TFTP傳輸的數據
DESTINATION file:1.txt 表示目標文件是 1.txt
Block:1 表示塊代碼為1
Length:270 表示數據長度是270
2.4.5、Error 報文格式
服務端使用58783端口向客戶端的65463端口發送error消息
Error code(5) 表示這個是一個報文內包含錯誤信息
DESTINATION file:1.txt 表示目標文件是 1.txt
Error code:access violation(2) 表示錯誤類型,訪問錯誤
error message 詳細錯誤內容
Error code值:
- 0 Not defined, see error message(if any)
- 1 File not found
- 2 Access violation
- 3 Disk full or allocation exceeded
- 4 Illegal TFTP operation
- 5 Unknown transfer ID
- 6 File already exists
- 7 No such user
2.5、TFTP工作流程
1、服務端在端口為69的UDP上等待客戶端發出寫文件請求包
2、客戶端通過UDP發送符合TFTP請求格式的Write requst包給服務端。從UDP包角度看,該UDP包的源端口由客戶端隨意選擇,而目標端口則是服務端的69。
3、服務端收到客戶端的這個請求包后,需發送Acknowledgement給客戶端。對於寫請求包,服務端發送的ACK包block為0。
4、客戶端發送DATA數據給服務端
5、服務端接收數據並寫文件,然后發送Acknowledgement給客戶端,服務端發送的ACK包block為1
6、當客戶端發送的DATA數據長度小於512字節時,服務端認為這次Write requst請求完成。
3、TFTP穿越NAT
總體轉換報文瀏覽
包29:客戶端向服務端發送write request報文,發送寫文件的請求。
SIP:10.10.10.2、Sport:65461;DIP:192.168.10.115、Dport:69
包30:經過防火牆設備SNAT轉換后的write request報文,轉換源IP和源端口,生成鏈接跟蹤表。
Sip:192.168.10.114、Sport:10847;Dip:192.168.10.115、Dport:69
包31:服務端收到write request報文后,發送ack響應報文。
Sip:192.168.10.115、Sport:58780;Dip:192.168.10.114、Dport:10847
包32:經過防火牆設備后,防火牆查找鏈接跟蹤表,找到對應表象,把訪問192.168.10.114的IP轉換為10.10.10.2,把目的端口10847轉換成65461
包33:客戶端收到服務端的響應后,向服務端發送上傳的數據
SIP:10.10.10.2、Sport:65461;DIP:192.168.10.115、Dport:58780
包34:防火牆收到客戶端發送的報文后,匹配NAT策略,將data報文的源IP和源端口轉換為192.168.10.114和10847
包35:服務器收到data報文后,儲存客戶端發送的數據,然后發送ack響應報文。
Sip:192.168.10.115、Sport:58780;Dip:192.168.10.114、Dport:10847
包36:經過防火牆設備后,防火牆查找鏈接跟蹤表,找到對應表象,把訪問192.168.10.114的IP轉換為10.10.10.2,把目的端口10847轉換成65461
DNAT的交互經過抓包發現和SNAT的交互報文相同,報文格式沒有改變,只是改變的IP地址不同。