博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
TFTP简单文件传送协议
阅读量:5253 次
发布时间:2019-06-14

本文共 1696 字,大约阅读时间需要 5 分钟。

T F T P ( Trivial File Transfer Protocol)即简单文件传送协议,最初打算用于引导无盘系统

(通常是工作站或X终端)。和将在介绍的使用T C P的文件传送协议(F T P)不同,为了
保持简单和短小,T F T P将使用U D P。T F T P的代码(和它所需要的 U D P、I P和设备驱动程序)
都能适合只读存储器。
本篇文章对T F T P只作一般介绍,因为在引导程序协议( Bootstrap Protocol)中还会遇
到T F T P。当从网络上引导 s u n主机时,也曾遇到过 T F T P,s u n主机通过R A R P获
得它的I P地址后,将发出一个T F T P请求。

 

 协议

在开始工作时,T F T P的客户与服务器交换信息,客户发送一个读请求或写请求给服务器。
在一个无盘系统进行系统引导的正常情况下,第一个请求是读请求( R R Q)。图1 5 - 1显示了5
种T F T P报文格式(操作码为1和2的报文使用相同的格式)。
T F T P报文的头两个字节表示操作码。对于读请求和写请求( W R Q),文件名字段说明客
户要读或写的位于服务器上的文件。这个文件字段以 0字节作为结束是一个A S C I I码串n e t a s c i i或o c t e t(可大小写任意组合),同样以0字节结束。n e t a s c i i
表示数据是以成行的A S C I I码字符组成,以两个字节 — 回车字符后跟换行字符(称为C R / L F)
作为行结束符。这两个行结束字符在这种格式和本地主机使用的行定界符之间进行转化。
o c t e t则将数据看作8 bit一组的字节流而不作任何解释。
每个数据分组包含一个块编号字段,它以后要在确认分组中使用。以读一个文件作为例
子,T F T P客户需要发送一个读请求说明要读的文件名和文件模式 ( m o d e )。如果这个文件能被
这个客户读取,T F T P服务器就返回一个块编号为 1的数据分组。T F T P客户又发送一个块编号
为1的A C K。T F T P服务器随后发送块编号为2的数据。T F T P客户发回块编号为2的A C K。重复
这个过程直到这个文件传送完。除了最后一个数据分组可含有不足 5 1 2字节的数据,其他每个
数据分组均含有5 1 2字节的数据。当T F T P客户收到一个不足5 1 2字节的数据分组,就知道它收
到最后一个数据分组。
在写请求的情况下,TFTP 客户发送W R Q指明文件名和模式。如果该文件能被 该客户写,
TFTP 服务器就返回块编号为 0的A C K包。该客户就将文件的头 5 1 2字节以块编号为1发出。服
务器则返回块编号为1的A C K。
这种类型的数据传输称为停止等待协议。它只用在一些简单的协议如 T F T P中。在2 0 . 3节
中将看到T C P提供了不同形式的确认,能提供更高的系统吞吐量。 T F T P的优点在于实现的简
单而不是高的系统吞吐量。。模

最后一种T F T P报文类型是差错报文,它的操作码为 5。它用于服务器不能处理读请求或

写请求的情况。在文件传输过程中的读和写差错也会导致传送这种报文,接着停止传输。差
错编号字段给出一个数字的差错码,跟着是一个 A S C I I表示的差错报文字段,可能包含额外的
操作系统说明的信息。
既然T F T P使用不可靠的U D P,T F T P就必须处理分组丢失和分组重复。分组丢失可通过发
送方的超时与重传机制解决(注意存在一种称为“魔术新手综合症 ( s o r c e r e r’s apprentice
s y n d r o m e )”的潜在问题,如果双方都超时与重传,就可能出现这个问题。和许多U D P应用程序一样,T F T P报文中没有检验和,
它假定任何数据差错都将被U D P的检验和检测到

转载于:https://www.cnblogs.com/momenglin/p/11261436.html

你可能感兴趣的文章
ServerSocket和Socket通信
查看>>
css & input type & search icon
查看>>
jQuery插件开发详细教程
查看>>
Crontab 在linux中的非常有用的Schedule Jobs
查看>>
ProxySQL Scheduler
查看>>
源代码的下载和编译读后感
查看>>
Kafka学习笔记
查看>>
Octotree Chrome安装与使用方法
查看>>
用CALayer实现下载进度条控件
查看>>
Windows 环境下基于 Redis 的 Celery 任务调度模块的实现
查看>>
趣谈Java变量的可见性问题
查看>>
C# 强制关闭当前程序进程(完全Kill掉不留痕迹)
查看>>
ssm框架之将数据库的数据导入导出为excel文件
查看>>
语音识别中的MFCC的提取原理和MATLAB实现
查看>>
验证组件FluentValidation的使用示例
查看>>
0320-学习进度条
查看>>
解决windows系统的oracle数据库不能启动ora-00119和ora-00130的问题
查看>>
ip相关问题解答
查看>>
MetaWeblog API Test
查看>>
反弹SHELL
查看>>