zoukankan      html  css  js  c++  java
  • TFTP协议详解及TFTP穿越NAT

    目录

    1、环境拓扑配置

    2、TFTP协议学习

    2.1、协议概述

    2.2、TFTP报文类型

    2.3、TFTP端口号分配

    2.4、TFTP报文格式

    2.4.1、Read request报文格式

    2.4.2、Write requst报文格式

    2.4.3、Acknowledgement报文格式

    2.4.4、Data 报文格式

    2.4.5、Error 报文格式

    2.5、TFTP工作流程

    3、TFTP穿越NAT


    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地址不同。

  • 相关阅读:
    .Net Core 微服务学习一
    微服务学习一
    软件开发基本接口学习二
    浏览器根对象window之操作方法
    浏览器根对象window之caches
    Angular面试题三
    浏览器根对象window之performance
    Angular面试题二
    浏览器根对象window之screen
    浏览器根对象window之history
  • 原文地址:https://www.cnblogs.com/APeng2019/p/10719288.html
Copyright © 2011-2022 走看看