logo资料库

利用java实现TFTP协议.doc

第1页 / 共15页
第2页 / 共15页
第3页 / 共15页
第4页 / 共15页
第5页 / 共15页
第6页 / 共15页
第7页 / 共15页
第8页 / 共15页
资料共15页,剩余部分请下载后查看
计算机网络课程设计 利用 JAVA 实现 TFTP 协议 学 号: 姓 名: 提交日期: 成 绩: 教师签字: 东北大学秦皇岛分校电子信息系
计算机网络课程设计——利用 JAVA 实现 TFTP 协议 利用 Java 编程实现 TFTP 协议 一、 设计目的与要求: TFTP(Trivial File Transfer Protocol,简单文件传输协议)是 TCP/IP 协议族中的一 个用来在客户机与服务器之间进行简单文件传输的协议,提供不复杂、开销不大的文件传输 服务。TFTP 承载在 UDP 上,提供不可靠的数据流传输服务,不提供存取授权与认证机制,使 用超时重传方式来保证数据的到达。与 FTP 相比,TFTP 的大小要小的多。现在最普遍使用的 是第二版 TFTP(TFTP Version 2,RFC 1350)。 本次设计要求利用 JAVA 实现 TFTP 协议的基本功能 。 二、 设计过程: 1、TFTP 协议的原理: 简单文件传输协议是一种用来传输文件的简单协议,运行在 UDP (用户数据报协议)上。 TFTP 被设计为小而简单容易的运行,因此,它缺乏标准 FTP 协议的许多特征。TFTP 只能从 远程服务器上读、写文件(邮件)或者读、写文件传送给远程服务器。它不能列出目录并且 当前不提供用户认证。 当前 TFTP 有 3 种传输模式: netASCII 模式即 8 位 网络 ASCII 码 ;octet,即八位 组模式(替代了以前版本的二进制模式),如原始八位字节;邮件模式,这种模式现在已经 废止不用了。主机双方也可以自己定义其它模式。 在 TFTP 协议中,任何一个传输进程都以请求读或写文件开始,同时建立一个连接。如 果服务器同意请求,则连接成功,文件就以固定的 512 字节块的长度进行传送。每个数据包 都包含一个数据块,在发送下一个包之前,数据块必须得到确认响应包的确认。如果一个数 据包的大小小于 512 字节,则表明传输结束。如果包在网络中丢失,接收端就会超时并重新 发送其最后的包(可能是数据也可能是确认响应),这就导致丢失包的发送者重新发送丢失 包。通信的双方都是数据的发出者与接收者,一方传输数据接收应答,另一方发出应答接收 数据。发送者需要保留一个包在手头用于重新发送,由 LOCK 确认响应保证所有过去的包都 已经收到。大部分的错误会导致连接中断,错误由一个错误的数据包引起。这个包不会被确 认,也不会被重新发送,因此另一方无法接收到。如果错误包丢失,则使用超时机制。错误 主要是由下面三种情况引起的:不能满足请求,收到的数据包内容错误,而这种错误不能由 东北大学秦皇岛分校电子信息系 第 1页
计算机网络课程设计——利用 JAVA 实现 TFTP 协议 延时或重发解释,对需要资源的访问丢失(如硬盘满)。TFTP 只在一种情况下不中断连接, 这种情况是源端口不正确,在这种情况下,指示错误的包会被发送到源机。这个协议限制很 多,这是都是为了实现起来比较方便而进行的。 2、协议结构: 因为 TFTP 使用 UDP,而 UDP 使用 IP,IP 还可以使用其它本地通信方法。因此一个 TFTP 包中会有以下几段:本地媒介头,IP 头,数据报头,TFTP 头,剩下的就是 TFTP 数据了。TFTP 在 IP 头中不指定任何数据,但是它使用 UDP 中的源和目标端口以及包长度域。由 TFTP 使用 的包标记(TID)在这里被用做端口,因此 TID 必须介于 0 到 65,535 之间。 基本 TFTP 数据报结构: 每个数据包都有一个 opcode(2 个字节),表示包的类型。包的类型有以下 5 种: Opcode Command Description 1 2 3 4 5 Read Request (RRQ) Request to read a file Write Request (WRQ) Request to write to a file File Data (DAT) Transfer of file data Data (ACK) Acknowledge Acknowledgement of file data Error (ERR) Error indication 由上表可知,TFTP 协议有五种数据包,以下为它们的结构: 1.RRQ/WRQ 包: -------------------------------------------------------------- | Opcode | Filename | 0 | Mode | 0 | --------------------------------------------------------------- 2 bytes string 1 byte string 1 byte RRQ 和 WRQ 包(代码分别为 1 和 2)的格式如上所示。文件名是 NETASCII 码字符,以 0 结束。 而 MODE 域包括了字符串"netascii"或"octet",名称不分大小写。接收到 NETASCII 格式数据的主机必须将数据转换为本地格式。OCTET 模式用于传输文件,这种文件在源机上 以 8 位格式存储。 东北大学秦皇岛分校电子信息系 第 2页
计算机网络课程设计——利用 JAVA 实现 TFTP 协议 2. DATA 包: ----------------------------------- | Opcode | Block # | Data | ----------------------------------- 2 bytes 2 bytes n bytes 数据在数据包中传输,其格式如上图所示。数据包的 opcode 为 3,它还包括有一个数据 块号和数据。数据块号域从 1 开始编码,每个数据块加 1,这样接收方可以确定这个包是新 数据还是已经接收过的数据。数据域从 0 字节到 512 字节。如果数据域是 512 字节则它不是 最后一个包,如果小于 512 字节则表示这个包是最后一个包。如果最后一个包正好为 512 字 节,则再发送一个 0 字节的包用于表示结束。 3.ACK 包: ----------------------- | Opcode | Block | ----------------------- 2 bytes 2 bytes ACK 包用于确认数据包已收到。ACK 包的操作码为 4,它的格式如上图所示。当接收方收到 一个数据包后,会向发送方发送一个 ACK 包;而发送方则会在收到一个 ACK 包后继续发送 下一个包。若发送发未能收到 ACK 包,则会使用超时机制,重新发送刚才的数据包。除了 ACK 和用于中断的包外,其它的包均需得到确认。发出新的数据包等于确认上次的包。WRQ 和 DATA 包由 ACK 或 ERROR 数据包确认,而 RRQ 数据包由 DATA 或 ERROR 数据包确认。 4.ERROR 包 ----------------------------------------------- | Opcode | ErrorCode | ErrMsg | 0 | ----------------------------------------------- 2 bytes 2 bytes string 1 byte 一个 ERROR 包的操作码是 5,它的格式如上所示。此包可以被其它任何类型的包确认。错误 码指定错误的类型。 东北大学秦皇岛分校电子信息系 第 3页
计算机网络课程设计——利用 JAVA 实现 TFTP 协议 错误的值和错误的意义如下图所示。错误信息是供程序员使用的。 错误码 说明 0 1 2 3 4 5 6 7 未定义,请参阅错误信息(如果提示这种信息的 话) 文件未找到 访问非法 磁盘满或超过分配的配额 非法的 TFTP 操作 未知的传输 ID (端口号) 文件已经存在 没有此用户 3、TFTP 协议的工作流程图如下: 开始 启动 TFTP 服务器 监听 69 端口,初始化缓冲区 1 是 否 有 请 求? y 接收请求,并分析收到的数据的操 WRQ RRQ 操作码为 RRQ 还是 WRQ? 写文件(对客户端 来说就是上传) 读文件(对客户 端来说是下载) 东北大学秦皇岛分校电子信息系 第 4页
计算机网络课程设计——利用 JAVA 实现 TFTP 协议 写文件: 1 y 出错信息 分析 buffer 得到客户端 要上传的文件名及 mode 判断文件是否 存在? n 发送 0 号 ACK 等待接受 2 重发 ACK y 超时? n 分析接收到数 据的操作码 操作码为 DAT? 读取数据块 block 号是否是期待的 (即最近发送的 ACK 号 +1 与数据块号一致)? y 读取数据 n 重发 ACK 东北大学秦皇岛分校电子信息系 第 5页
计算机网络课程设计——利用 JAVA 实现 TFTP 协议 读取数据 ACK 号++ 接收到的数据块号 =1? y y y 上传结束 跳出上传模 1 建立文件 将读取的数 据写入文件 发送 ACK 刚写入文件 的数据块长 度<512? n 2 n 将读取的数 据写入文件 发送 ACK 刚写入文件 的数据块长 度<512? n 2 东北大学秦皇岛分校电子信息系 第 6页
计算机网络课程设计——利用 JAVA 实现 TFTP 协议 读文件: n 错误信息 3 接收到数据 的操作码 操作码为 ACK? n 重发数据包 分析 buffer 得到 客户端要上传的 文件名及 mode 4 y n 判断文件是否 存在? 读取 512byte 数据打包发 等待 ACK 计算剩余文件长 y n<512? 读取 n byte 数 据打包发送 等待 ACK n y y 超时? 错误信息 超时? y 1 n 重发数据包 接收到的 ACK 是否 正确? y n 下移 512byte n n 接收的 ACK 是否正确? y 读文件结束 重发数据包 3 block 号+1 1 3 4 东北大学秦皇岛分校电子信息系 第 7页
分享到:
收藏