1、利用java实现TFTP协议 计算机网络课程设计利用JAVA实现TFTP协议学 号:姓 名:提交日期:成 绩:教师签字:东北大学秦皇岛分校电子信息系利用Java编程实现TFTP协议一、设计目的与要求:TFTP(Trivial File Transfer Protocol,简单文件传输协议)是TCP/IP协议族中的一个用来在客户机与服务器之间进行简单文件传输的协议,提供不复杂、开销不大的文件传输服务。TFTP承载在UDP上,提供不可靠的数据流传输服务,不提供存取授权与认证机制,使用超时重传方式来保证数据的到达。与FTP相比,TFTP的大小要小的多。现在最普遍使用的是第二版TFTP(TFTP Ve
2、rsion 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包中会有以下几段:本地媒介头,I
5、P头,数据报头,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)Transfer
6、 of file data4Data Acknowledge (ACK)Acknowledgement of file data5Error (ERR)Error indication由上表可知,TFTP协议有五种数据包,以下为它们的结构:1.RRQ/WRQ包:-| Opcode | Filename | 0 | Mode | 0 |-2 bytes string 1 byte string 1 byteRRQ和WRQ包(代码分别为1和2)的格式如上所示。文件名是NETASCII码字符,以0结束。 而MODE域包括了字符串netascii或octet,名称不分大小写。接收到NETASCII格式
7、数据的主机必须将数据转换为本地格式。OCTET模式用于传输文件,这种文件在源机上以8位格式存储。2. DATA包:-| Opcode | Block # | Data |-2 bytes 2 bytes n bytes数据在数据包中传输,其格式如上图所示。数据包的opcode为3,它还包括有一个数据块号和数据。数据块号域从1开始编码,每个数据块加1,这样接收方可以确定这个包是新数据还是已经接收过的数据。数据域从0字节到512字节。如果数据域是512字节则它不是最后一个包,如果小于512字节则表示这个包是最后一个包。如果最后一个包正好为512字节,则再发送一个0字节的包用于表示结束。3.ACK包
8、:-| Opcode | Block |-2 bytes 2 bytesACK包用于确认数据包已收到。ACK包的操作码为4,它的格式如上图所示。当接收方收到一个数据包后,会向发送方发送一个ACK包;而发送方则会在收到一个ACK包后继续发送下一个包。若发送发未能收到ACK包,则会使用超时机制,重新发送刚才的数据包。除了ACK和用于中断的包外,其它的包均需得到确认。发出新的数据包等于确认上次的包。WRQ和DATA包由ACK或ERROR数据包确认,而RRQ数据包由DATA或ERROR数据包确认。4.ERROR包-| Opcode | ErrorCode | ErrMsg | 0 |-2 bytes
9、2 bytes string 1 byte一个ERROR包的操作码是5,它的格式如上所示。此包可以被其它任何类型的包确认。错误码指定错误的类型。错误的值和错误的意义如下图所示。错误信息是供程序员使用的。错误码说明0未定义,请参阅错误信息(如果提示这种信息的话)1文件未找到2访问非法3磁盘满或超过分配的配额4非法的TFTP操作5未知的传输ID (端口号)6文件已经存在7没有此用户3、TFTP协议的工作流程图如下: 写文件:读文件:4、详细设计说明:1)系统整体树形图:2)本程序中的一些重要的函数:(a)客户端中用来发送和接受文件的函数: (b)服务器端中主要的处理函数:3)关键代码:5、程序运行
10、结果:1)运行服务器端程序,启动TFTP服务(如下图):2)运行客户端程序(如下图):6、测试:上传:下载:三、总结:通过本次程序设计,完成了用JAVA编程实现TFTP协议的基本功能的预期要求。我们大量地查阅了相关的资料,学习了TFTP协议的基本知识,了解了它的工作原理及应用。而后我们在实现TFTP协议功能的基础上,利用JAVA插件实现友好的用户界面,完成了数据包传输的直观显示。在此过程中,我们受益匪浅。利用这次程序设计,不仅更加深入地理解了计算机网络的相关知识,而且对网络编程以及客户机服务器模型也有了更深入的了解。在这次程序设计完成中我们深刻体会到集体的力量是多么强大,也充分挖掘了我们对陌生事物认识和学习的潜能。可视化的程序结果不仅美观,而且直接简化了发起传输时的操作,使之更具有操作性。当然,此程序还有很多可以改进的地方。比如,可采用多线程来模拟多个客户端同时访问服务器的情况,以检测传输的可靠性。
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1