利用java实现TFTP协议

上传人:鲁** 文档编号:472692366 上传时间:2023-05-06 格式:DOCX 页数:16 大小:409.96KB
返回 下载 相关 举报
利用java实现TFTP协议_第1页
第1页 / 共16页
利用java实现TFTP协议_第2页
第2页 / 共16页
利用java实现TFTP协议_第3页
第3页 / 共16页
利用java实现TFTP协议_第4页
第4页 / 共16页
利用java实现TFTP协议_第5页
第5页 / 共16页
点击查看更多>>
资源描述

《利用java实现TFTP协议》由会员分享,可在线阅读,更多相关《利用java实现TFTP协议(16页珍藏版)》请在金锄头文库上搜索。

1、利用java实现TFTP协议-CAL-FENGHAI.Network Information Technology Company.2020YEAR束止w*秦皇岛分校NorthEastern University At QinIHuangDao计算机网络课程设计利用JAVA实现TFTP协议学号:姓名:提交日期:成绩:教师签字:东北大学秦皇岛分校电子信息系利用Java编程实现TFTP协议一、设计目的与要求:TFTP (Trivial File Transfer Protocol,简单文件传输协议)是TCP/IP协议族中的 一个用来在客户机与服务器之间进行简单文件传输的协议,提供不复杂、开销不大的

2、文件 传输服务TFTP承载在UDP 上,提供不可靠的数据流传输服务,不提供存取授权与认证机 制,使用超时重传方式来保证数据的到达。与FTP相比,TFTP的大小要小的多。现在最普 遍使用的是第二版TFTP(TFTP Version 2,RFC 1350)。本次设计要求利用JAVA实现TFTP协议的基本功能。二、设计过程:1、TFTP协议的原理:简单文件传输协议是一种用来传输文件的简单协议,运行在 UDP (用户数据报协 议)上。TFTP被设计为小而简单容易的运行,因此,它缺乏标准FTP协议的许多特征。 TFTP只能从远程服务器上读、写文件(邮件)或者读、写文件传送给远程服务器。它不 能列出目录并

3、且当前不提供用户认证。当前TFTP有3种传输模式:netASCII模式即8位 网络ASCII码;octet,即 八位组模式(替代了以前版本的二进制模式),如原始八位字节;邮件模式,这种模式现 在已经废止不用了。主机双方也可以自己定义其它模式。在TFTP协议中,任何一个传输进程都以请求读或写文件开始,同时建立一个连接。 如果服务器同意请求,则连接成功,文件就以固定的512字节块的长度进行传送。每个 数据包都包含一个数据块,在发送下一个包之前,数据块必须得到确认响应包的确认。如 果一个数据包的大小小于512字节,则表明传输结束。如果包在网络中丢失,接收端就会 超时并重新发送其最后的包(可能是数据也

4、可能是确认响应),这就导致丢失包的发送者 重新发送丢失包。通信的双方都是数据的发出者与接收者,一方传输数据接收应答,另一 方发出应答接收数据。发送者需要保留一个包在手头用于重新发送,由LOCK确认响应保 证所有过去的包都已经收到。大部分的错误会导致连接中断,错误由一个错误的数据包引 起。这个包不会被确认,也不会被重新发送,因此另一方无法接收到。如果错误包丢失, 则使用超时机制。错误主要是由下面三种情况引起的:不能满足请求,收到的数据包内容 错误,而这种错误不能由延时或重发解释,对需要资源的访问丢失(如硬盘满)TFTP只 在一种情况下不中断连接,这种情况是源端口不正确,在这种情况下,指示错误的包

5、会被 发送到源机。这个协议限制很多,这是都是为了实现起来比较方便而进行的。2、协议结构:因为TFTP使用UDP,而UDP使用IP,IP还可以使用其它本地通信方法。因此一个 TFTP包中会有以下几段:本地媒介头,IP头,数据报头,TFTP头,剩下的就是TFTP数据 了 TFTP在IP头中不指定任何数据,但是它使用UDP中的源和目标端口以及包长度域。 由TFTP使用的包标记(TID)在这里被用做端口,因此TID必须介于0到65,535之间。基本TFTP数据报结构:每个数据包都有一个opcode(2个字节),表示包的类型。包的类型有以下5种:OpcodeCommandDescription1Read

6、 Request (RRQ)Request to read a file2Write Request (WRQ)Request to write to a file3File Data (DAT)Transfer 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 str

7、ing 1 byteRRQ和WRQ包(代码分别为1和2)的格式如上所示。文件名是NETASCII码字 符,以0结束。而MODE域包括了字符串”netascii或octet”,名称不分大小写。接收到 NETASCII格式数据的主机必须将数据转换为本地格式。OCTET模式用于传输文件,这种 文件在源机上以8位格式存储。2. DATA 包:| Opcode | Block # | Data |2 bytes 2 bytes n bytes数据在数据包中传输,其格式如上图所示。数据包的opcode为3,它还包括有一个数 据块号和数据。数据块号域从1开始编码,每个数据块加1,这样接收方可以确定这个包 是

8、新数据还是已经接收过的数据。数据域从0字节到512字节。如果数据域是512字节则 它不是最后一个包,如果小于512字节则表示这个包是最后一个包。如果最后一个包正好 为512字节,则再发送一个0字节的包用于表示结束。3. ACK 包:| Opcode | Block |2 bytes 2 bytesACK包用于确认数据包已收到ACK包的操作码为4,它的格式如上图所示。当接收方收 到一个数据包后,会向发送方发送一个ACK包;而发送方则会在收到一个ACK包后继续 发送下一个包。若发送发未能收到ACK包,则会使用超时机制,重新发送刚才的数据 包。除了 ACK和用于中断的包外,其它的包均需得到确认。发出

9、新的数据包等于确认上 次的包。WRQ和 DATA包由ACK或ERROR数据包确认,而RRQ数据包由DATA或 ERROR数据包确认。4. ERROR 包| Opcode | ErrorCode | ErrMsg | 0 |2 bytes 2 bytes string 1 byte一个ERROR包的操作码是5,它的格式如上所示。此包可以被其它任何类型的包确认。错误码指定错误的类型。错误的值和错误的意义如下图所示。错误信息是供程序员使用的。错误码 说明未定义,请参阅错误信息(如果提示这种信息 的话)1 文件未找到2 访问非法3 磁盘满或超过分配的配额4 非法的TFTP操作5 未知的传输ID (端口

10、号)6 文件已经存在7 没有此用户3、TFTP协议的工作流程图如下:写文件:分析接收到数据的操作码nn读文件:接收到数据 的操作码nF下移 512byte1Fblock 号+11y r读文件结束1r:Pack as e Explorer 浏 |:;田十”:目b -zr u.y.F.PL lint-泊:-ri0 出(ndcf auli package)田Tftp_Client. jaus0 庄 cdjl. desicner & JRE SysteiL Library J avaSE-1. 6 Referenced Librariesg IS MEIA-IDFi org顼 cQji_iions=n

11、Et=. 0. jaru.y.FJPSirr就澄SI:CH !Er (def auli pa.ckagc) E-jjJ 匚 11 ent Thread. J3U3 屈GUL球q -匚j PmHRE十 苴 IFF Sys- ah .i hr?r- 一.-n叩=i M乓-1 - F1 $MEU IDF隹心arg白 矽 oi- eclipse, swt fefH abaut_flLbs-8& JRE 3ysten Librarj con. sun. java, jdk, vin.32.xS6_. 6, IL 01-31 Si RefcrcncDd Libraries;萌1 sbaut u hlnL

12、漫 sic.sip,IM swt-debug. j:ar2)本程序中的一些重要的函数:(a)客户端中用来发送和接受文件的函数:seadFilereceiverilepublic void me=iidFiJ e(Bti:ing filenamEf int irjode,-iipS匚旦 mm input, InetJkd.drees hostf inL porr)throws TOE丈切口pjjblic int irmcuiveFi J b liEtriiig Eilename, inc nod.2f Chit口u-S 二工己am cutput, Ine tAddre es he st / in

13、t pore) throws 工OEkb 二:Lctl(b)服务器端中主要的处理函数:服务牡它,用于琴待,眼名话审psilollQ uold runt) (用于扯理写请求private void wrq ( throws lOExcepticnprivate vo id rrq ( throws IOExceptjlcn 可干妄雀暗误包proteated void sendErrPackeL (mt errcole, Seri ng msg (检查是否有重杳文件.工.谖可n大百.匠可饵“private boolesin. testNcne (Stiing inaiae |i f口用于发送睇认包private void sendiick(sh.ort block) (J打用王重传数据包private void resend () J3)关键代码:piiblio void run.() try (ds kt = new DatagramSocket ; /系统会分配给他个空闲的端口 catch. (SocketExcepcion ex) / 没有可用端口return;if (opcode = WRQ) if (!testMame(new String(fname) sendErrPack

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 学术论文 > 其它学术论文

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号