TCP/IP详解 卷1:协议 学习笔记 第十五章 TFTP:简单文件传送协议

2023-11-15

TFTP最初打算用于引导无盘系统(通常是工作站或X终端)。为保持简单和短小,TFTP使用UDP。它适合只读存储器。

开始工作时,TFTP的客户与服务器交换信息,客户发送一个读或写请求给服务器,在一个无盘系统进行引导的正常情况下,第一个请求是读请求(RRQ),以下是5种TFTP报文格式,其中操作码为1和2的报文使用相同格式:
在这里插入图片描述
TFTP报文的前两个字节表示操作码,对于读请求和写请求,文件名字段说明客户要读或写的位于服务器上的文件,这个字段后跟0字节作为结束。模式字段是一个ASCII码串netascii或octet(指八个比特为一组的单位),同样后跟0字节作为结束,netascii表示数据是以成行的ASCII码字符组成,以\r\n作为行结束符,这两个行结束字符会在这种格式和本地主机使用的行定界符之间进行转化,octet将数据看作8bit一组的字节流而不做任何解释。

每个数据分组(操作码为data的分组)包含一个块编号字段,客户读一个文件时,服务器就返回一个块编号为1的数据分组,客户会发送一个块编号为1的ACK,随后服务器发送块编号为2的数据分组,客户收到后发回编号为2的ACK,重复以上过程直到文件传送完,除了最后一个数据分组可含有不足512字节的数据,其他每个数据分组均含512字节数据,当客户收到一个不足512字节的数据分组,它就知道收到了最后一个数据分组。

写请求时,客户发送的WRQ会指明文件名和模式,如果该文件能被客户写,服务器就返回块编号为0的ACK包,客户收到后就将文件的头512字节以块编号为1发出,服务器则返回块编号为1的ACK。

以上类型的数据传输称为停止等待协议,它只用在一些简单的协议中,优点是实现简单而非高吞吐量。

当服务器不能处理读请求或写请求时,或出现文件传输过程中的读和写差错时,会导致传送差错报文,之后停止传输。差错编号给出一个数字的差错码,之后跟ASCII表示的差错报文字段,其中可能包含额外的操作系统说明的信息。

和很多UDP应用一样,TFTP没有检验和,它假定任何数据差错都将被UDP的检验和检测到。

TFTP的分组丢失可通过发送方的应用层超时与重传机制解决。

使用TFTP获取文件:
在这里插入图片描述
由于获取的文件有48行,因此48个Unix换行符被转化为48个CR/LF对(\r\n),因为默认使用netascii模式传送。
在这里插入图片描述
第一行是客户向服务器发送的读请求,由于目的UDP端口是TFTP的熟知端口,tcpdump将解释TFTP分组,并显示RRQ和文件名。19字节中包括2字节的操作码,7字节的文件名,1字节的0,8字节的netascii模式以及1字节的0。

第二行是服务器发回的数据,516字节包括2字节的操作码,2字节的数据块号和512字节的数据。第三行是对这个数据块的确认,它的4字节包括2字节的操作码和2字节的块编号。

第四行是服务器发回的第二份数据,其中的数据是450字节,这450字节和上次发回的512字节加起来正好是962字节的数据。

tcpdump仅在第一行解释了TFTP报文,而后面没有显示TFTP信息,这是因为服务器进程的端口在第一行和第二行发生了变化,TFTP需要客户向服务器的UDP熟知端口(69)发送第一个分组,之后服务器进程向服务器主机申请一个尚未使用的端口(上例是1077),服务器进程使用这个端口与客户进程进行数据交换,客户进程的端口号在上例中没有变化(1106)。服务器进程端口变化的原因在于不能占用熟知端口完成需要可能几十秒甚至数分钟的文件传输,需要在传输当前文件的过程中留出熟知端口供其他TFTP客户进程发送请求。

RIP服务器(Routing Information Protocol,路由信息协议)使用RIP服务器的熟知端口发回数据。如果TFTP也使用熟知端口进行数据传输,要么一个服务器进程在同一端口同时对多个客户进程进行多个文件的传输,要么在传输文件期间拒绝任何来自其他客户的请求,最简单的方式是让服务器进程在收到RRQ或WRQ后改用新端口。

TFTP中并不提供用户名和口令,由于它是设计用于系统引导进程,它不可能提供用户名和口令。因此许多人获取UNIX口令文件的复制,然后用来猜测用户口令,为防止这种类型访问,目前大多TFTP服务器提供一个选项来限制只能访问特定目录下的文件(UNIX系统中通常是/tftpboot),这个目录中只包含无盘系统进行系统引导时所需的文件。

UNIX系统下的TFTP服务器通常将它的用户ID和组ID设置为不是任何真正用户的值,这样只能访问有其他用户读或写属性权限的文件。

送往广播地址的TFTP请求应该被忽略,但并不是所有实现和API都对接收一个UDP数据报的进程提供该数据报的目的地址,因此很多TFTP服务器没有严格遵守这个限制。

当TFTP的块号到达65535时,会发生什么RFC并没有提到,具体实现应该能传送最大为33553920(65535*512)字节的文件,但很多实现在文件长度超过16776704(32767*512)字节时会失败,因为它们将块数目错误地表示为一个有符号的16位整数,而非一个无符号数。

TFTP每次在客户与服务器间传送数据的大小最大是512字节,因此TFTP的最大吞吐量就是512字节除以客户与服务器之间的往返时间。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

TCP/IP详解 卷1:协议 学习笔记 第十五章 TFTP:简单文件传送协议 的相关文章

  • AIDL通信过程中设置死亡代理

    概述 在进行进程间通信的过程中 如何服务端进程由于某种原因异常终止 我们的远程调用就会失败 影响我们的功能 那么怎么样能够知道服务端进程是否终止了呢 那就是给Binder设置死亡代理 下面看看如何设置 Override public voi
  • 小学二三年级入门信奥赛,如何从Scratch进入C++的学习

    小学生几年级适宜开始学习C 这是讨论的比较热烈 也是比较热门的话题 小学生适宜几年级开始学C 小学生适宜几年级开始学C CSDN博客 simple happiness 信息学规划 北京二年级学生图形化过二级想往信奥靠拢如何准备 信息学规划
  • 阿里云2核4G服务器优惠价格30元3个月?小心坑

    2024年阿里云2核4G服务器优惠价格30元3个月 活动 https t aliyun com U bLynLC 配置为云服务器ECS经济型e实例ecs e c1m2 large 3M固定带宽 系统盘为40GB ESSD Entry 活动打
  • 在阿里云ECS云服务器上部署和使用开源的应用程序容器引擎Docker

    Docker 是一个开源的应用程序容器引擎 具有可移植性 可扩展性 高安全性和可管理性等优势 它允许开发人员将应用程序和依赖项打包到可移植容器中 从而在 Linux 机器上高效构建 部署和管理应用程序 阿里云提供Docker镜像仓库 用于快
  • 第二节课内容学习

    监听远程端口 并映射到本地 先配置ssh的公私钥非对称加密 假设远程开放的端口为33090 在本地计算机终端执行 ssh CNg L 6006 127 0 0 1 6006 root ssh intern ai org cn p 33090
  • 网络安全从入门到精通(超详细)学习路线

    首先看一下学网络安全有什么好处 1 可以学习计算机方面的知识 在正式学习网络安全之前是一定要学习计算机基础知识的 只要把网络安全认真的学透了 那么计算机基础知识是没有任何问题的 操作系统 网络架构 网站容器 数据库 前端后端等等 可以说不想
  • 如何使用内网穿透实现iStoreOS软路由公网远程访问局域网电脑桌面

    文章目录 简介 一 配置远程桌面公网地址 二 家中使用永久固定地址 访问公司电脑 具体操作方法是 简介 软路由 是PC的硬件加上路由系统来实现路由器
  • 如何查看崩溃日志

    目录 描述 思路 查看ipa包崩溃日志 简单查看手机崩溃信息几种方式 方式1 手机设置查看崩溃日志 方式2 Xocde工具 方式3 第三方软件克魔助手 环境配置 实时日志 奔溃日志分析 方式四 控制台资源库 线上崩溃日志 线上监听crash
  • pandas用法整理

    处理表格数据的时候经常用到pandas 每次用的时候都要去查函数 每次记不住 每次都查 哈哈哈 自己整理一下 码住 一 Pandas的数据类型 进行数据分析时 如何正确使用数据类型 这非常重要 在pandas中的数据类型和python原生数
  • 改善python程序的91建议记录

    使用else子句简化循环 异常处理 案例1 执行sql异常时处理 def save db obj try save attr1 db execute a sql stmt obj attr1 save attr2 db execute an
  • DreadHunger恐惧饥荒海上狼人杀服务器搭建架设教程windows系统

    DreadHunger 恐惧饥荒海上狼人杀服务器搭建架设教程windows系统 大家好我是艾西 在11月底我有发文 DreadHunger 恐惧饥荒海上狼人杀官方停服的消息 当时在官方的公告模版中公布了在2024年一月一日会将服务端公开让喜
  • 【OpenCV学习笔记02】- 图像入门

    内容 这里介绍了图像处理的入门操作 你将学习如何读取图像 如何显示图像以及如何将其保存回去 你将学习以下功能 cv imread cv imshow cv imwrite 简单使用OpenCV 读取图像 使用 cv imread 函数读取图
  • nohup - 后台执行

    nohup no hang up 语法 nohup Command Arg 使用示例 nohup python a py 日志将被保留在 当前文件夹下的 nohup out 将日志放到文件 不输出到终端 echo hello gt 1 tx
  • 如何解读服务器的配置和架构?

    在当今数字化时代 服务器作为企业或组织的重要基础设施 其配置和架构对于保障业务的稳定运行至关重要 如何解读服务器的配置和架构 成为了一个备受关注的话题 本文将围绕服务器配置和架构的解读进行深入探讨 帮助读者更好地理解服务器的性能 扩展性和安
  • 使用Hypothesis生成测试数据

    Hypothesis是Python的一个高级测试库 它允许编写 测试用例 时参数化 然后生成使测试失败的简单易懂的测试数据 可以用更少的工作在代码中发现更多的bug 安装 pip install hypothesis 如何设计 测试数据 通
  • 【CTF必看】从零开始的CTF学习路线(超详细),让你从小白进阶成大神!

    最近很多朋友在后台私信我 问应该怎么入门CTF 个人认为入门CTF之前大家应该先了解到底 什么是CTF 而你 学CTF的目的又到底是什么 其次便是最好具备相应的编程能力 若是完全不具备这些能力极有可能直接被劝退 毕竟比赛的时候动不动写个脚本
  • 38条Web测试经验分享

    1 页面链接检查 每一个链接是否都有对应的页面 并且页面之间切换正确 可以使用一些工具 如LinkBotPro File AIDCS HTML Link Validater Xenu等工具 LinkBotPro不支持中文 中文字符显示为乱码
  • Jmeter 性能-并发量计算

    并发概念 指网站在同一时间访问的人数 人数越大瞬间带宽要求更高 服务器并发量分为 业务并发用户数 最大并发访问数 系统用户数 同时在线用户数 估算业务并发量的公式 C nL T C C 3 C的平方根 说明 C是平均的业务并发用户数 n是l
  • 如何使用Imagewheel搭建一个简单的的私人图床无公网ip也能访问

    文章目录 1 前言 2 Imagewheel网站搭建 2 1 Imagewheel下载和安装 2 2 Imagewheel网页测试 2 3 cpolar的安装和注册 3 本地网页发布 3 1 Cpolar临时数据隧道
  • 【GRNN-RBFNN-ILC算法】【轨迹跟踪】基于神经网络的迭代学习控制用于未知SISO非线性系统的轨迹跟踪(Matlab代码实现)

    欢迎来到本博客 博主优势 博客内容尽量做到思维缜密 逻辑清晰 为了方便读者 座右铭 行百里者 半于九十 本文目录如下 目录 1 概述 2 运行结果 2 1 第1部分 2 2 第2部分

随机推荐