第38章 TFTP简单文件传输基础知识
本章节为大家讲解TFTP(Trivial File Transfer Protocol,简单文件传输协议)的基础知识,方便后面章节的实战操作。
(本章的知识点主要整理自网络)
38.1 初学者重要提示
38.2 TFTP基础知识参考资料
38.3 TFTP基础知识点
38.4 总结
38.1 初学者重要提示
- TFTP简单文件传输协议在实际项目中有比较重要的实用价值,需要初学者对TFTP的基础知识也有个认识。
38.2 TFTP基础知识参考资料
大家可以从以下地址获得TFTP基础知识参考资料:
对于初学者来说,学习上面三个参考资料就够了。如果大家有网络方面的书籍,比如《TCP/IP详解》,也可以直接看书籍中这方面的内容。
38.3 TFTP基础知识点
(这里的知识点整理自上面的参考资料地址)
教程这里也对TFTP的基础知识做个介绍,方便大家先有个大概的认识。
38.3.1 TFTP简要说明
TFTP(Trivial File Transfer Protocol,简单文件传输协议)是TCP/IP协议族中用来在客户机与服务器之间进行简单文件传输的协议,提供不复杂、开销不大的文件传输服务,端口号为69。
TFTP是一个传输文件的简单协议,它基于UDP协议实现。此协议设计的时候是进行小文件传输的。因此它不具备FTP的许多功能,它只能从文件服务器上获得或写入文件,不能列出目录,不支持认证,它传输8位数据。传输中有三种模式:
- netascii,这是8位的ASCII码形式。
- octet,这是8位源数据类型。
- mail,已经不再支持,它将返回的数据直接返回给用户而不是保存为文件。
38.3.2 TFTP通信机制简介
TFTP通信由一个读取或写入文件的请求发起,这个请求也是连接请求。如果服务器批准此请求,则服务器打开连接,数据以定长512字节传输。每个数据包包括一块数据,服务器发出下一个数据包以前必须得到客户对上一个数据包的确认。如果一个数据包的大小小于512字节,则表示传输结束。如果数据包在传输过程中丢失,发出方会在超时后重新传输最后一个未被确认的数据包。通信的双方都是数据的发出者与接收者,一方传输数据接收应答,另一方发出应答接收数据。大部分的错误会导致连接中断,错误由一个错误的数据包引起。这个包不会被确认,也不会被重新发送,因此另一方无法接收到。如果错误包丢失,则使用超时机制。
错误主要是由下面三种情况引起的:
- 不能满足请求。
- 收到的数据包内容错误,而这种错误不能由延时或重发解决。
- 对需要资源的访问丢失(如硬盘满)。
TFTP只在一种情况下不中断连接,这种情况是源端口不正确,在这种情况下,指示错误的包会被发送到源机。这个协议限制很多,这些都是为了实现起来方便而进行的。
38.3.3 TFTP特点
因为TFTP使用UDP,而UDP使用IP,IP可以还使用其它本地通信方法。因此一个TFTP包中会有以下几段:本地媒介头,IP头,数据报头,TFTP头,剩下的就是TFTP数据了。TFTP在IP头中不指定任何数据,但是它使用UDP中的源和目标端口以及包长度域。由TFTP使用的包标记(TID)在这里被用做端口,因此TID必须介于0到65535之间。TFTP头中包括两个字节的操作码,这个码指出了包的类型,大体上的TFTP包格式如下:
TFTP的局限:
- TFTP不具备FTP的许多功能,它只能从文件服务器上获得或写入文件,没有列出目录的功能,也不能对用户进行身份鉴别,它传输8位数据。
- 因为小型文件传输协议使用UDP协议,就必须自己支持传输和会话的控制。
- 由于小型文件传输协议缺少安全性,在开放式因特网上传输非常危险,所以一般仅用于私人本地网络。目前TFTP常用于PXE无盘启动、网络设备的设置等。
TFTP的优点:
- TFTP可用于UDP环境,比如同时向许多机器下载程序或者文件时就往往需要使用到TFTP协议。
- TFTP代码所占的内存较小,这对于较小的计算机或者某些特殊用途的设备来说是很重要的,这些设备不需要硬盘,只需要固化了TFTP、UDP和IP的小容量只读存储器即可。当电源接通后,设备执行只读存储器中的代码,在网络上广播一个TFTP请求。网络上的TFTP服务器就发送响应,其中包括可执行二进制程序。设备收到此文件后将其放入内存,然后开始运行程序。这种方式增加了灵活性,也减少了开销。
38.3.4 TFTP简单执行流程
下面是简单的执行流程,更详细的可以看wiki百科英文版上的说明:地址链接(这个是超链接)。
- 初始化主机A发送一个读请求(RRQ)或写请求(WRQ)包给主机B,包含了文件名和传输模式。
- B向A发一个ACK包应答,同时也通知了A其余送往B包应该发送的端口号。
- 源主机向目的主机发送编过号的数据包,除了最后一个都应该包含一个全尺寸的数据块。目的主机用编号的ACK包应答所有的数据包。
- 最终的数据包必须包含少于最大尺寸的数据块以表明这是最后一个包。如果被传输文件正好是尺寸块的整数倍,源主机最后送的数据包就是0字节的。
38.3.5 FTP和TFTP的区别
TFTP协议的优势:
尽管与FTP相比TFTP的功能要弱得多,但是TFTP具有两个优点:
- TFTP能够用于那些有UDP而无TCP的环境。
- TFTP代码所占的内存要比FTP小。
尽管这两个优点对于普通计算机来说并不重要,但是对于那些不具备磁盘来存储系统软件的自举硬件设备来说TFTP特别有用。
TFTP协议与FTP协议的相同点:
TFTP协议的作用和我们经常使用的FTP大致相同,都是用于文件传输,可以实现网络中两台计算机之间的文件上传与下载。可以将TFTP协议看作是FTP协议的简化版本。
TFTP协议与FTP协议的不同点:
- TFTP协议不需要验证客户端的权限,FTP需要进行客户端验证。
- TFTP协议一般多用于局域网以及远程UNIX计算机中,而常见的FTP协议则多用于互联网中。
- TFTP客户与服务器间的通信使用TCP,而TFTP客户与服务器间的通信使用的是UDP。
- TFTP只支持文件传输。也就是说,TFTP不支持交互,而且没有一个庞大的命令集。最为重要的是,TFTP不允许用户列出目录内容或者与服务器协商来决定哪些是可得到的文件。
38.4 总结
本章节就为大家讲解这么多,更多TFTP的相关知识需要大家查阅相关书籍进行学习,或者网上搜索相关资料进行学习。
【RL-TCPnet网络教程】第38章 TFTP简单文件传输基础知识的更多相关文章
-
tftp简单文件传输协议搭建
TFTP 简单文件传输协议 安装 sudo apt-get install tftp tftpd openbsd-inetd 需要tftp tftpd openbsd-ine ...
-
【RL-TCPnet网络教程】第16章 UDP用户数据报协议基础知识
第16章 UDP用户数据报协议基础知识 本章节为大家讲解UDP(User Datagram Protocol,用户数据报协议),需要大家对UDP有个基础的认识,方便后面章节UDP实战操作. ...
-
【RL-TCPnet网络教程】第33章	 SMTP简单邮件传输协议基础知识
第33章 SMTP简单邮件传输协议基础知识 本章节为大家讲解SMTP(Simple Mail Transfer Protocol,简单邮件传输协议)的基础知识,方便后面章节的实战操作. (本 ...
-
【STM32H7教程】第32章 STM32H7的TIM定时器基础知识和HAL库API
完整教程下载地址:http://www.armbbs.cn/forum.php?mod=viewthread&tid=86980 第32章 STM32H7的TIM定时器基础知识和H ...
-
【STM32H7教程】第29章 STM32H7的USART串口基础知识和HAL库API
完整教程下载地址:http://www.armbbs.cn/forum.php?mod=viewthread&tid=86980 第29章 STM32H7的USART串口基础知识和 ...
-
【STM32H7教程】第47章 STM32H7的FMC总线基础知识和HAL库API
完整教程下载地址:http://www.armbbs.cn/forum.php?mod=viewthread&tid=86980 第47章 STM32H7的FMC总线基础知识和HA ...
-
TFTP服务[精简版]:简单文件传输协议
简单文件传输协议(Trivial File Transfer Protocol,TFTP)是一种基于 UDP 协议在客户端 和服务器之间进行简单文件传输的协议.顾名思义,它提供不复杂.开销不大的文件传 ...
-
TFTP(Trivial File Transfer Protocol,简单文件传输协议)
TFTP(Trivial File Transfer Protocol,简单文件传输协议),是 TCP/IP 协议族中用来在客户机和服务器之间进行简单文件传输的协议,开销很小.这时候有人可能会纳闷,既 ...
-
【安富莱TCPnet网络教程】HTTP通信实例
第41章 HTTP超文本传输协议基础知识 本章节为大家讲解HTTP(HyperText Transfer Protocol,超文本传输协议),从本章节开始,正式进入嵌入式Web的设计和学习. ...
随机推荐
-
IOAPIC重定位中断处理函数思路整理
因为小可并非硬件编程出身,汇编基础又比较差...所以刚开始理解利用IOAPIC重定位技术的时候相当困难. 何为IOAPIC? 首先,必须认识到它是一个硬件,可编程的硬件.我理解的它在整个流程中的作用如 ...
-
CSS中的绝对定位与相对定位
层级关系为:<div ----------- position:relative; 不是最近的祖先定位元素,不是参照物<div----------没有设置为定位元素,不是参照物<di ...
-
dedecms代码研究四
partview php文件之前,我们像掉进沼泽一样,看到无尽的变量,数组元素,莫名其面的东西摆在我们面前.今天,我们继续艰难前行,想办法走出partview类的泥潭.上一篇,我们胡乱分析了partv ...
-
使用fragment兼容低版本的写法
[1]定义fragment继承V4包中的Fragment [2]定义的activity要继承v4包中的FragmentActivity [3]通过这个方法getSupportFragme ...
-
房间计费系统改造E-R图纸设计
简单的学习过程: 这几天忙得太混乱了,用了近一个星期才设计好.我在这段时间遇到的困难,就积极找师哥师姐指点迷津,如今多少总算是有些拿得出手的成果. 学习成果: Entity Relations ...
-
Java几种建立实例的方法
1.new something obj=new something(); 2.clone 根据现有的对象实例来建立里一个新对象实例. 只限于实现了java.lang.Cloneable接口的类.否 ...
-
JavaScript(第八天)【时间与日期】
ECMAScript提供了Date类型来处理时间和日期.Date类型内置一系列获取和设置日期时间信息的方法. 一.Date类型 ECMAScript中的Date类型是在早期Java中java.util ...
-
C#之UDP通信
简介 C#中的udp通信关键类:Udpclient,它位于命名空间System.Net.Sockets中,发送接收都是UdpClient类, 命名空间 using System.Net.Sockets ...
-
windows系统中给qt工程添加第三方库
· TEMPLATE = app CONFIG += console c++11 CONFIG -= app_bundle CONFIG -= qt SOURCES += main.cpp LIBS ...
-
【BZOJ4887】[TJOI2017]可乐(矩阵快速幂)
[BZOJ4887][TJOI2017]可乐(矩阵快速幂) 题面 BZOJ 洛谷 题解 模板题??? #include<iostream> #include<cstdio> # ...