1538以太网实现tftp服务器实验_第1页
1538以太网实现tftp服务器实验_第2页
1538以太网实现tftp服务器实验_第3页
1538以太网实现tftp服务器实验_第4页
1538以太网实现tftp服务器实验_第5页
已阅读5页,还剩18页未读, 继续免费阅读

下载本文档

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

文档简介

1、以太网实现TFTP服务器实验10/100 以太网媒体器(MAC)是基于 ARM Cortex-M3 的 STM32 互列(Connectivity Line)微器的特色亮点之一。STM32 神舟 IV 号开发板使用的即是 LQFP100封装的 STM32 互列微器 STM32F107VC。STM32 神舟 IV 号开发板支持 10M/100M自适应,全双工半双工自适应。她的优异性能可以满足需要灵活的工业标准连接功能的性需求。陆续神舟 IV 号开发板太网硬件平台的建立原理和,以及基于神舟 IV号开发板太网硬件平台实现网络能等常见的应用实例。登录 Telnet 功能、TFTP 文件传输功能和 HT

2、TP 网页功TFTP(Trivial File Transfer Protocol, 中文名叫简单文件传输协议)是 TCP/IP 协议族中的一个用来在客户机与服务器之间进行简单文件传输的协议,提供不复杂、开销不大的文件传输服务。TFTP 使用的端为 UDP 的 69(注意:TFTP 不一定非要在 UDP 上实现),因此它可以穿越许多。不过它也有缺点,比如传送不可靠、没有验证等。虽然如此,它还是非常适合传送小型文件的。注意 TFTP 和FTP 协议有区别,本实验为 TFTP 实验。【FTP(File Transfer Protocol 文件传输协议)是用于在互联网中传输文件的协议。FTP 服务器

3、程序一般工作在 20 和 21 两个端口, 端口 21 用于在客户端和服务器之间传输口 20 用于传输 FTP 数据流】流数据流,而端那么就让我们通过神舟 IV 号开发板太网硬件平台认识一下 TFTP 协议,实现一个通过TFTP神舟 IV 号开发板上的 SD 卡文件的实例。z意义与作用系统是继 IT 网络技术之后,又一个新的技术发展方向。由于系统具有体积小、性能强、功耗低、可靠性高以及面向行业应用的突出特征,目前己经广泛地应用于军事国防、消费、网络通信、工业等各个领域。随着计算机技术与通信技术的发展,系统的研究与开发也有着越来越重要的实际意义。而 ARM 是业界领先的 32 位嵌入式 RISC

4、 处理器技术提供商,占领了大约 75的市场。它可为一个完整系统的开发提供全面的技术支持,技术具有性能高、成本低和能耗省的特点。ARM 的微处理器正迅速地成为便携式通信标准。、手持计算、多媒体数字消费和解决方案市场中 MSC 批量生产的有了 STM32 神舟 IV 号开发板以太网硬件平台,以及已经移植们可以很轻松的实现各种网络应用。TCP/IP 协议栈,我TFTP 是一个传输文件的简单协议,它基于 UDP 协议而实现。TFTP 全称为 Trivial FileTransfer Protocol, 中文名叫简单文件传输协议大家可以从它的名称上看出,它适合传送“简单”的文件。与 FTP 不同的是,它

5、使用的是 UDP 的 69 端口,因此它可以穿越许多。此协议设计的时候是进行小文件传输的。因此它不具备通常的 FTP 的许多功能,它只能从文件服务器上获得或写入文件,不能列出目录,不进行认证,它传输 8 位数据。传输中有三种模式:netascii,这是 8 位的 ASCII 码形式,另一种是 octet,这是 8 位源数据类型;最后一种 mail 已经不再支持,它将返回的数据直接返回给用户而不是保存为文件。z实验原理注:本实验的以太网硬件原理与前面“以太网实现Telnet登录实验”对应章节完全相同,此处不再重复,请参考“以太网实现Telnet登录实验”对应章节。TFTP 协议简介TFTP(Tr

6、ivial File Transfer Protocol, 中文名叫简单文件传输协议)是 TCP/IP 协议族中的一个用来在客户机与服务器之间进行简单文件传输的协议,提供不复杂、开销不大的文件传输服务。TFTP 使用的端点,比如传送不可靠、没有为 UDP 的 69,因此它可以穿越许多。不过它也有缺验证等。此协议设计的时候是进行小文件传输的。因此它不具备通常的 FTP 的许多功能,它只能从文件服务器上获得或写入文件,不能列出目录,不进行认证,它传输 8 位数据。与其它协议的任何传输起自一个或写入文件的请求,这个请求也是连接请求。如果服务器批准此请求,则服务器打开连接,数据以定长 512 字节传输

7、。每个数据包一块数据,服务器发出下一个数据包以前必须得到客户对上一个数据包的确认。如果一个数据包的大小小于 512字节,则表示传输结束。如果数据包在传输过程中丢失,发出方会在超时后重新传输最后一个未被确认的数据包。通信的双是数据的发出者与接收者,一方传输数据接收应答,另出应答接收数据。大部分的错误会导致连接中断,错误由一个错误的数据包引起。这个包被确认,也被重新发送,因此另一方无法接收到。如果错误包丢失,则使用超时机制。错误主要是由下面三种情况引起的:不能满足请求,收到的数据包内容错误,而这种错误不能由延时或重发解释,对需要资源的丢失(如硬盘满)。TFTP 只在一种情况下不中断连接,这种情况是

8、源端口不正确,在这种情,指示错误的被发送到源机。这个协议限制很多,这是都是为了实现起来比较方便而进行的。因为 TFTP 使用 UDP,而 UDP 使用 IP,IP 可以还使用其它本地通信(为以太网)。因此一个 TFTP 包中会有以下几段:本地媒介头,IP 头,数据报头,TFTP 头,剩下的就是 TFTP 数据了。TFTP 在 IP 头中不指定任何数据,但是它使用 UDP 中的源和目标端口以及包长度域。由 TFTP 使用的包标记(TID)在这里被用做端口,因此 TID 必须介于 0到 65,535 之间。对它的初始化我们在后面讨论。TFTP 头中指出了包的类型下面我们看看大体上的 TFTP 包格

9、式。两上字节的操作码,这个码初始连接初始连接时候需要发出 WRQ(Write request 请求写入系统)或 RRQ(request请求通常确认包系统),收到一个确定应答,一个确定可以写出的应该的第一块数据。要确认的包的,每个数据包都与一个块号相对应,读请求块号从 1 开始而且是连续的。因此对于写入请求的确定是一个比较特殊的情况,因此它的包的是 0。如果收到的一个错误的包,则这个请求被拒绝。创建连接时,通信双方随机选择一个TID,因此是随机选择的,因此两次选择同一个 ID 的可能性就很小了。每个包两个 TID,发送者 ID 和接收者 ID。这些 ID 用于在 UDP 通信时选择端口,请求主机

10、选择 ID 的上面已经说过了,在第一次请求的时候它会将请求发到 TID 69,也就是服务器的 69 端口上。应答时,服务器使用一个选择TID 作为源 TID,并用上一个包中的 TID 作为目的 ID 进行发送。这两个被选择的 ID 在随后的通信中会被一直使用。下例是一个写入的例子,其中WRQ,ACK 和 DATA 代表写入请求,确认和数据。1. 主机 A 向主机 B 发出WRQ,其中端口为 692.B 机向 A 机发出 ACK,块号为 0,B 和A 的 TID此时连接建立,第一个数据包以序列号 1 从主机开始发出。以后两台主机要保证以开始时确定的 TID 进行通信。如果源 ID 与原来确定的

11、ID 不一样,这个被认识为发送到了错误的地址而被抛弃。错误的被发送到正确端口的,但是包本身有错误。设想发送出一个请求,这个请求在网络的那个中被成两个包,接收方先后接收到两个包。接收方会认为为这是两个的请求,会返回两个应答。当这两个应答其中之一被接收到时,连接已经建立。第二个应答再到达时,这个导致第一个建立的连接失败。被抛弃,而因为接收到第二个应答包而TFTP 包| Local Medium | Internet | Datagram | TFTP Opcode |TFTP 支持五种类型的包,分别如下:opcode operation1 .request (RRQ)2 .Write reques

12、t (WRQ)3 .Data (DATA)4 .Acknowledgment (ACK)5 .Error (ERROR)包头中了这个指定的操作码。RRQ/WRQ 包如下:2 bytesstring1 bytestring1 byte| Opcode |Filename| 0 |Mode| 0 |RRQ 和 WRQ 包(代码分别为 1 和 2)的格式如上所示。文件名是 NETASCII 码字符,以 0 结束。 而 MODE 域了字符串"netascii","octet"或"mail",名称不分大小写。接收到 NETASCII 格式数据的

13、主机必须将数据转换为本地格式。OCTET 模式用于传输文件,这种文件在源机上以 8 位格式。假设每个机器都一个 8 位的格式,这样的假设是最一般的。比如 DEC-20,这是一种 36 位机,我们可以假设它是 4 个 8 位外加另外 4 位而。如果机器收到 OCTET 格式文件,返回时必须与原来文件完全一样。在使用 MAIL 模式时,用户可以在 FILE 处使用接收人地址,这个地址可以是用户名或用户名主机的形式,如果主机使用邮件传输此文件。如果使用 MAIL 类型,包必须以 WRQ是后一种形式,开始,否则它与 NETASCII 完全一样。我们的讨论建立在发送方和接收,但是双方可以以不同的模式进行

14、传输。例如一个机器可以是一台在相同模式的情服务器,这样一台服务器需要将 NETASCII 格式转换为的格式。另外,我们可以设想 DEC-20 这种机器,它使用 36 位字长,用户这边可以使用特殊的机制一次36 位,而服务器却可以仍然使用8 位格式。在这两种情,我们看到了两台机器使用不同格式的情况。可以在两台主机间定义其它的传输方式,但是定义要为其指定名称或定义它的模式。,因为这种传输方式不为人知,而且也没威机构DATA 包如下:2 bytes2 bytesn bytesOpcode | Block # |Data |DATA 包数据在数据包中传输,其格式如上图所示。数据包的 OP 码为 3,它

15、还有一个数据块号和数据。数据块号域从 1 开始编码,每个数据块加 1,这样接收方可以确定这个数据还是已经接收过的数据。数据域从 0 字节到 512 字节。如果数据域是 512 字节则它不是最后一个包,如果小于 512 字节则表示这个最后一个包。除了 ACK 和用于中断的,其它的得到确认。发出新的数据包等于确认上次的包。WRQ 和 DATA 包由ACK 或 ERROR 数据包确认,而 RRQ 数据包由 DATA 或 ERROR 数据包确认。下图即是一个 ACK 包,操作码为 4。其中的为要确认的数据包的。ACK 包如下:2 bytes2 bytes| Opcode | Block # |WRQ

16、数据包被 ACK 数据包确认,WRQ 数据包的为 0。ERROR 包如下:2 bytes2 bytesstring1 byte| Opcode | ErrorCode |ErrMsg| 0 |一个 ERROR 包,它的操作码是 5,它的格式如上所示。此包可以被其它任何类型的包确认。错误码指定错误的类型。错误的值和错误的意义在附录中。错误的。是供程序员使用正常终止传输的结束由 DATA 数据标记,其0-511 个字符。这个包可以被其它数据包确认。接收方在发出对最后数据包的确认后可以断开连接,当然,适当的等待是比较,如果最后的确定包丢失可以再次传输。如果发出确认后仍然收到最后数据包,可以确定最后的

17、确认丢失。发送最后一个 DATA 包的主机必须等待对此包的确认或超时。如果响应是 ACK,传输完成。如果发送方超时并备重新发送并且接收方有问题或网络有问题时,发送也正常结束。当然实现时也可以是非正常结束,但无论如何连接被关闭。早终结如果请求不能被满足,或者在传输中发生错误,需要发送 ERROR 包。这仅是一种传输友方式,这种包被确认也被重新传输,因此这种包可能永远被接收到。因此需要用超时来侦测错误。其它:读文件的初始连接1. 主机 A 发RRQ 到 A,源=A 的 ID 和目的=692. 主机 B 发送 DATA,其中=1,这个包被传送到 A,源=B 的 ID,目的=A 的 ID错误码 Val

18、ue Meaning0未定义,请参阅错误(如果提示这种的话)1文件未找到23磁盘满或超过分配的4的 TFTP 操作5未知的传输 ID6文件已经7没有类似的用户安全问题因为 TFTP 没有安全机制,因此安全问题应该多加考虑。通常 TFTP数据而不上传数据。本实验我们实现的 TFTP数据也上传数据。那么就让我们通过神舟 IV 号开发板太网硬件平台认识一下 TFTP 协议,实现一个通过 TFTP号开发板上的 SD 卡文件的实例。神舟 IVz硬件设计神舟IV号开发板的处理器STM32F107内部以太网模块与外部PHY采用RMII接口的连接图如下所示:采用RMII接口比MII接口可以节约近一半管脚资源。

19、以太网 PHYDM9161A 工作在 RMII 模式时需要外部提供 50M 时钟输入,神舟IV 号开发板上可以通过位号为 U9 的 50M 有源晶振来提供,也可以由 STM32F107 的 PA8 pin (MCO)管教输出提供。默认使用 STM32F107 的 PA8 pin (MCO)为 DM9161A 提供 50M时钟输入。图表 1 STM32F107 以太网 RMII 连接图神舟 IV 号开发板采用高性价比的 DM9161A 作为 10M/100M 以太网 PHY,采用RMII 接口与连接,标准 RJ45 接口,支持平行交叉网线自适应。其原理图如所示。图表 2 以太网接口原理图DM91

20、61A 是一款在系统中应用的极为普遍的以太网 PHY。DM9161A 符合IEEE802.3.10BASE-T/100BASE-TX 协议,符合 ANSIX3T12TP-PMD1995 标准,集成10BASE-T,100BASE-TX 收发器,支持 MII/RMII 接口,支持中继模式和节点模式转换,支持和半工模式转换,含可触发中断的 MII/RMII 管理接口,支持低功耗模式,采用 0.35 纳米 COMS 工艺,3.3V 供电, 48-pin PQFP 小封装(1×1cm)。z设计本章节我们主要成一个通过 TFTP 协议在 STM32 神舟 IV 号开发板以太网硬件平台上实现 T

21、FTP 协议,完神舟 IV 号开发板上的 SD 卡文件的实例。所以我们部分也主要讲解如何在 UDP 端口 69 端口实现 TFTP 协议的函数。其它如串口、指示灯、EEPROM和 RTC 等相关知识请参考前面对应的章节。部分我们分为四部分来讲解,第一部分 Lwip 协议栈相关知识。第二部分主要网络数据包在处理中的流向。第三部分网络以及系统的初始化。第四部分实现TFTP 协议的应用程序。第一部分Lwip协议栈相关知识。Lwip协议栈相关知识设计的涉及Lwip协议的实现以及底层TCPIP相关知识和API应用 程序接口部分等,相关知识请参考附件TCP/IP 协议栈LwIP的设计与实现。该附件描述了L

22、wIP的设计与实现。描述了在协议栈实现中以及像内存与缓冲管理这样的子系统中使用的算法和数据结构。本文还LwIP的参考手册以及使用LwIP的代码例子。第二部分主要网络数据包的流向。本实验程序处理网络数据包的大体流向是:在收到网络数据包时产生网络中断,在网络中断中处理函数 ETH_IRQHandler(位于“stm32f10x_it.c”文件中)中调用LwIP_Pkt_Handle()接收数据包并通知 Lwip 的 TCPIP 协议栈,而真正在 mian 函数中调用“System_Periodic_Handle();”来处理的。处理网络数据首先我们看看 main 函数,如下:main 函数主要完成

23、<系统时钟以太网等初始化>然后是<打印以太网 PHY的状态>-<初始化 LwIP 协议栈>-<初始化 UDP 端口 69 端口的TFTP 应用>最后是< while 循环处理 TCP/IP 相关任务>。真正“System_Periodic_Handle();”来处理的。处理网络数据在 mian 函数中调用下面我们看看网络中断处理函数。网络中断中处理函数 ETH_IRQHandler(位于“stm32f10x_it.c”文件中)中调用 LwIP_Pkt_Handle()接收网络数据包并通知 Lwip 的 TCPIP协议栈,LwIP_Pk

24、t_Handle()函数调用了 ethernetif_input 函数ethernetif_input ()函数中的“p = low_level_input(netif);”将数据接收存入 pbuf 中,然后(move received packet into a new pbuf)的“err = netif->input(p, netif);” 最终调用了位于“etharp.c”文件中的函数“err_t ethernet_input(struct pbuf *p, struct netif *netif)”通知协议栈。负责也就是说最终调用了位于“etharp.c”文件中的函数“err_

25、t ethernet_input(struct pbuf *p,struct netif *netif)”后中断,最后 mian 函数周期调用的“System_Periodic_Handle();”函数便会处理 pbuf 中的网络数据。第三部分网络以及系统的初始化。以太网中断配置函数:以太网 GPIO 管脚配置,由于是 RMII 接口使用的管脚与 MII 有所不同:以太网配置,相关的时钟、MAC 参数以及DMA 等等:DHCP协议(Dynamic Host Configuration Protocol)是自动获取IP地址的一种协议,神舟四号也支持DHCP协议,DHCP协议动态IP分配的配置在文

26、件Utilitieslwip-1.3.1srcincludelwipopt.h文件的第523行至533行当设置为"#define LWIP_DHCP1"时,将启动动态IP分配的功能,当动态IP分配失败时才使用静态IP地址;当设置为"#define LWIP_DHCP0"时,将关闭动态IP分配的功能,直接使用静态IP地址。神舟四号开发板的出厂IP地址为,用户可以根据的实际环境修改用户期望的地址。关于静态IP地址的设置在文件Projectsrcnetconf.c文件中中有两处地方涉及静态IP,第一处在第118行至122行LwIP_Ini

27、t函数里:以上地址是在关闭动态IP分配的功能(即"#define LWIP_DHCP0")时,直接使用上述IP地址第二处在在Projectsrcnetconf.c文件中的第333行至335行Display_Periodic_Handle函数里以上地址当启动动态 IP 分配的功能(即"#define LWIP_DHCP1"),但是动态 IP 地址分配超时失败时使用上述 IP 地址,您可以安装您的要求修改 IP 地址,修改后需要重新编译工程并重新到神舟四号开发板上才能生效。第四部分实现 TFTP 文件传输应用程序实现 TFTP 的应用的相关程序位于“tftp

28、server.c”文件中,首先是头文件明等等:与函数声错误码的定义前面已经讲过,其中文含义如下:01234567未定义,请参阅错误文件未找到(如果提示这种的话)磁盘满或超过分配的的 TFTP 操作未知的传输 ID文件已经没有类似的用户然后是 TFTP 初始化,申请资源并向协议栈函数,通过 pcb = udp_new();生产一个新的 udpPCB块注意此处为 UDP 而不是 TCP,然后调用“udp_bind(UDPpcb,IP_ADDR_ANY, port);”将新申请的 udpPCB 与 69 端口绑定,IP_ADDR_ANY 参数表示接受来自任意 IP 的请求。 最后的“udp_recv

29、(UDPpcb, recv_callback_tftp, NULL);”通知协议栈当 69 端口有连接请求时调用 recv_callback_tftp 函数处理该请求。当 69 端口有连接请求时调用 recv_callback_tftp 函数处理该请求,以下是该函数。recv_callback_tftp 函数调用了 process_tftp_request 函数处理该请求。首先在串口和 LCD触摸屏打印提示有 HTTP 连接请求,并打印对方的 IP 地址。如下:然后将连接绑定到另一个端口,此处为0 端口,“bind to port 0 to receive next availableport

30、. NOTE: This is how TFTP works. There is a UDP PCB for the standard port 69 which altranions begin communication on, however, _all_ subsequent tranions for a given "stream"occur on another port!。然后是 TFTP 协议中操作码的,使用 SWITCH,如果是文件请求,则首先初始化 SD 卡以及 EFS 文件系统,最后调用“tftp_process_(upcb, addr, port, FileName);”函数处理对应文件的请求。如果不是文件请求则使用 SWITCH继续,如果 TFTP 协议操作码是文件上传请求则首先提前要写入的文件名,然后初始化 SD

温馨提示

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

评论

0/150

提交评论