利用java实现TFTP协议_第1页
利用java实现TFTP协议_第2页
利用java实现TFTP协议_第3页
利用java实现TFTP协议_第4页
已阅读5页,还剩10页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、利用java实现tftp协议 计算机网络课程设计利用java实现tftp协议学 号:姓 名:提交日期:成 绩:教师签字:东北大学秦皇岛分校电子信息系1利用java编程实现tftp协议一、 设计目的与要求:tftp(trivial file transfer protocol,简单文件传输协议)是tcp/ip协议族中的一个用来在客户机与服务器之间进行简单文件传输的协议,提供不复杂、开销不大的文件传输服务。tftp承载在udp上,提供不可靠的数据流传输服务,不提供存取授权与认证机制,使用超时重传方式来保证数据的到达。与ftp相比,tftp的大小要小的多。现在最普遍使用的是第二版tftp(tftp

2、version 2,rfc 1350)。本次设计要求利用java实现tftp协议的基本功能 。二、 设计过程:1、 tftp协议的原理:简单文件传输协议是一种用来传输文件的简单协议,运行在 udp (用户数据报协议)上。tftp 被设计为小而简单容易的运行,因此,它缺乏标准 ftp 协议的许多特征。tftp 只能从远程服务器上读、写文件(邮件)或者读、写文件传送给远程服务器。它不能列出目录并且当前不提供用户认证。当前 tftp 有 3 种传输模式: netascii 模式即 8 位 网络ascii码 ;octet,即八位组模式(替代了以前版本的二进制模式),如原始八位字节;邮件模式,这种模式现

3、在已经废止不用了。主机双方也可以自己定义其它模式。在 tftp 协议中,任何一个传输进程都以请求读或写文件开始,同时建立一个连接。如果服务器同意请求,则连接成功,文件就以固定的 512 字节块的长度进行传送。每个数据包都包含一个数据块,在发送下一个包之前,数据块必须得到确认响应包的确认。如果一个数据包的大小小于512字节,则表明传输结束。如果包在网络中丢失,接收端就会超时并重新发送其最后的包(可能是数据也可能是确认响应),这就导致丢失包的发送者重新发送丢失包。通信的双方都是数据的发出者与接收者,一方传输数据接收应答,另一方发出应答接收数据。发送者需要保留一个包在手头用于重新发送,由 lock

4、确认响应保证所有过去的包都已经收到。大部分的错误会导致连接中断,错误由一个错误的数据包引起。这个包不会被确认,也不会被重新发送,因此另一方无法接收到。如果错误包丢失,则使用超时机制。错误主要是由下面三种情况引起的:不能满足请求,收到的数据包内容错误,而这种错误不能由延时或重发解释,对需要资源的访问丢失(如硬盘满)。tftp只在一种情况下不中断连接,这种情况是源端口不正确,在这种情况下,指示错误的包会被发送到源机。这个协议限制很多,这是都是为了实现起来比较方便而进行的。2、 协议结构:因为tftp使用udp,而udp使用ip,ip还可以使用其它本地通信方法。因此一个tftp包中会有以下几段:本地

5、媒介头,ip头,数据报头,tftp头,剩下的就是tftp数据了。tftp在ip头中不指定任何数据,但是它使用udp中的源和目标端口以及包长度域。由tftp使用的包标记(tid)在这里被用做端口,因此tid必须介于0到65,535之间。基本 tftp 数据报结构:每个数据包都有一个opcode(2个字节),表示包的类型。包的类型有以下5种:opcodecommanddescription1read request (rrq)request to read a file2write request (wrq)request to write to a file3file data (dat)tra

6、nsfer of file data4data acknowledge (ack)acknowledgement of file data5error (err)error indication由上表可知,tftp协议有五种数据包,以下为它们的结构:wrq包:-| opcode | filename | 0 | mode | 0 |-2 bytes string 1 byte string 1 byterrq和wrq包(代码分别为1和2)的格式如上所示。文件名是netascii码字符,以0结束。 而mode域包括了字符串"netascii"或"octet"

7、;,名称不分大小写。接收到netascii格式数据的主机必须将数据转换为本地格式。octet模式用于传输文件,这种文件在源机上以8位格式存储。2. data包:-| opcode | block # | data |-2 bytes 2 bytes n bytes数据在数据包中传输,其格式如上图所示。数据包的opcode为3,它还包括有一个数据块号和数据。数据块号域从1开始编码,每个数据块加1,这样接收方可以确定这个包是新数据还是已经接收过的数据。数据域从0字节到512字节。如果数据域是512字节则它不是最后一个包,如果小于512字节则表示这个包是最后一个包。如果最后一个包正好为512字节,则

8、再发送一个0字节的包用于表示结束。包:-| opcode | block |-2 bytes 2 bytesack包用于确认数据包已收到。ack包的操作码为4,它的格式如上图所示。当接收方收到一个数据包后,会向发送方发送一个ack包;而发送方则会在收到一个ack包后继续发送下一个包。若发送发未能收到ack包,则会使用超时机制,重新发送刚才的数据包。除了ack和用于中断的包外,其它的包均需得到确认。发出新的数据包等于确认上次的包。wrq和data包由ack或error数据包确认,而rrq数据包由data或error数据包确认。包-| opcode | errorcode | errmsg | 0

9、 |-2 bytes 2 bytes string 1 byte一个error包的操作码是5,它的格式如上所示。此包可以被其它任何类型的包确认。错误码指定错误的类型。错误的值和错误的意义如下图所示。错误信息是供程序员使用的。错误码说明0未定义,请参阅错误信息(如果提示这种信息的话)1文件未找到2访问非法3磁盘满或超过分配的配额4非法的tftp操作5未知的传输id (端口号)6文件已经存在7没有此用户3、tftp协议的工作流程图如下:启动tftp服务器监听69端口,初始化缓冲区是否有请求?开始接收请求,并分析收到的数据的操作码y操作码为rrq还是wrq?写文件(对客户端来说就是上传)读文件(对客

10、户端来说是下载)wrqrrq1 写文件:出错信息发送0号ack等待接受分析buffer得到客户端要上传的文件名及mode判断文件是否存在?超时?分析接收到数据的操作码操作码为dat?重发ack读取数据块号block号是否是期待的(即最近发送的ack号+1与数据块号一致)重发ack读取数据21ynynny读取数据ack号+接收到的数据块号=1?建立文件将读取的数据写入文件发送ack将读取的数据写入文件发送ack上传结束三刚写入文件的数据块长度<512?刚写入文件的数据块长度<512?跳出上传模块三122ynyynn读文件:判断文件是否存在?错误信息计算剩余文件长度n读取512byte

11、数据打包发送n<512?分析buffer得到客户端要上传的文件名及mode等待ack超时?错误信息操作码为ack?接收到数据的操作码重发数据包接收到的ack是否正确?重发数据包下移512byteblock号+1等待ack读取n byte数据打包发送超时?接收的ack是否正确?重发数据包读文件结束1133344ynynyynnnyynynn4、详细设计说明:1) 系统整体树形图:2) 本程序中的一些重要的函数:(a)客户端中用来发送和接受文件的函数: (b)服务器端中主要的处理函数:3) 关键代码:5、程序运行结果:1) 运行服务器端程序,启动tftp服务(如下图):2)运行客户端程序(如下图):6、测试:Ø 上传:Ø 下载:三、 总结:通过本次程序设计,完成了用java编程实现tftp协议的基本功能的预期要求。我们大量地查阅了相关的资料,学习了tftp协议的基本知识,了解了它的工作原理及应用。而后我们在实现tftp协议功能的基础上,利用java插件实现友好的用户界面,完成了数据包传输的直观显示。在此过程中,我们受益匪浅。利用这次程序设计,不仅更加深入地理解了计算机网络的相关知识,而且对网络

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论