TFTP協議詳解及TFTP穿越NAT

目錄服務器

一、環境拓撲配置學習

二、TFTP協議學習操作系統

2.一、協議概述3d

2.二、TFTP報文類型code

2.三、TFTP端口號分配blog

2.四、TFTP報文格式ip

2.4.一、Read request報文格式工作流

2.4.二、Write requst報文格式it

2.4.三、Acknowledgement報文格式io

2.4.四、Data 報文格式

2.4.五、Error 報文格式

2.五、TFTP工做流程

三、TFTP穿越NAT


一、環境拓撲配置

二、TFTP協議學習


2.一、協議概述


TFTP英文全稱:Trivial File Transfer Protocol,中文全稱:簡單文件傳輸協議。提供不復雜、開銷不大的文件傳輸服務。端口號爲69。基於UDP協議。


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.三、TFTP端口號分配


TFTP客戶端發送read request和write request報文的時候,目的端口是69。而Data、Acknowledgement、Error不使用69端口,它們使用的是隨機端口1024~5000。
不一樣的操做系統有不一樣的端口號規定Linux使用32768~61000、Windows 使用1025~5000


2.四、TFTP報文格式


2.4.一、Read request報文格式


客戶端使用端口65462向服務端69端口發送讀文件的請求

Read requst(1):表示這個一個讀取文件的請求
Source file:表示源文件是 1.txt
Type:表示傳輸類型爲8字節
Tsize:表示文件大小爲0


2.4.二、Write requst報文格式


客戶端使用端口65462向服務端69端口發送寫文件的請求

Write requst(2):表示這個一個寫文件的請求
DESTINATION file:表示目標文件是 1.txt
Type:表示傳輸類型爲8字節


2.4.三、Acknowledgement報文格式


服務端使用端口58780向客戶端65461端口發送write requst報文的響應包

Acknowledgement(4) 表示這是一個響應報文
DESTINATION file:1.txt 表示目標文件是 1.txt
Block:0 表示塊代碼爲0


2.4.四、Data 報文格式


客戶端使用65461端口向服務端58780端口發送數據。

Data packet(3) 表示這是一個TFTP傳輸的數據
DESTINATION file:1.txt 表示目標文件是 1.txt
Block:1 表示塊代碼爲1
Length:270 表示數據長度是270


2.4.五、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.五、TFTP工做流程


一、服務端在端口爲69的UDP上等待客戶端發出寫文件請求包
二、客戶端經過UDP發送符合TFTP請求格式的Write requst包給服務端。從UDP包角度看,該UDP包的源端口由客戶端隨意選擇,而目標端口則是服務端的69。

三、服務端收到客戶端的這個請求包後,需發送Acknowledgement給客戶端。對於寫請求包,服務端發送的ACK包block爲0。

四、客戶端發送DATA數據給服務端

五、服務端接收數據並寫文件,而後發送Acknowledgement給客戶端,服務端發送的ACK包block爲1

六、當客戶端發送的DATA數據長度小於512字節時,服務端認爲此次Write requst請求完成。


三、TFTP穿越NAT


整體轉換報文瀏覽

包29:客戶端向服務端發送write request報文,發送寫文件的請求。
SIP:10.10.10.二、Sport:65461;DIP:192.168.10.11五、Dport:69

包30:通過防火牆設備SNAT轉換後的write request報文,轉換源IP和源端口,生成連接跟蹤表。
Sip:192.168.10.11四、Sport:10847;Dip:192.168.10.11五、Dport:69

包31:服務端收到write request報文後,發送ack響應報文。
Sip:192.168.10.11五、Sport:58780;Dip:192.168.10.11四、Dport:10847

包32:通過防火牆設備後,防火牆查找連接跟蹤表,找到對應表象,把訪問192.168.10.114的IP轉換爲10.10.10.2,把目的端口10847轉換成65461

包33:客戶端收到服務端的響應後,向服務端發送上傳的數據
SIP:10.10.10.二、Sport:65461;DIP:192.168.10.11五、Dport:58780

包34:防火牆收到客戶端發送的報文後,匹配NAT策略,將data報文的源IP和源端口轉換爲192.168.10.114和10847

包35:服務器收到data報文後,儲存客戶端發送的數據,而後發送ack響應報文。
Sip:192.168.10.11五、Sport:58780;Dip:192.168.10.11四、Dport:10847

包36:通過防火牆設備後,防火牆查找連接跟蹤表,找到對應表象,把訪問192.168.10.114的IP轉換爲10.10.10.2,把目的端口10847轉換成65461

DNAT的交互通過抓包發現和SNAT的交互報文相同,報文格式沒有改變,只是改變的IP地址不一樣。

相關文章
相關標籤/搜索