W5100E01-AVR(W5100评估板用户手册)(四)

W5100E01-AVR是为AVR开发者提供的W5100评估板。本文是W5100E01-AVR的用户手册,希望对大家有所帮助。今天我们接着昨天的博文继续介绍: 第一部分在这里:W5100E01-AVR是什么?怎么用?(用户手册V1.0版) W5100E01-AVR(W5100评估板用户手册)(一) 第二部分在这里:W5100E01-AVR是什么?怎么用?(二)(用户手册V1.0版) W5100E01-AVR(W5100评估板用户手册)(二) 第三部分在这里:W5100E01-AVR是什么?怎么用?(三)(用户手册V1.0版) W5100E01-AVR(W5100评估板用户手册)(三)   3.2.5.3. Ping请求程序 Ping请求程序是一个发送Ping请求给目的地的程序,使用ICMP协议的消息协议并利用ping_request()函数。 ping_request()函数通过与DOS命令提示符的Ping程序相近的形式创建。该函数在分析和处理选项后发送Ping请求给目的地。 域名和IP地址都可以用作Ping请求的目的地址。如果使用域名,域名会通过gethostbyname()函数或DNS服务器转换成IP地址,随着IP地址的改变,Ping请求随之发送。 当使用’-a’选项使用IP地址时,域名可以通过gethostbyaddr()函数从DNS服务器获取,Ping请求会发送给该IP地址。当不适用’-a’ 选项使用IP地址时,Ping请求发送给输入的IP地址,而不与DNS服务器建立连接。 gethostbyname(), gethostbyaddr()是DNS的相关函数,想了解更多,请参考3.2.6.6 DNS 客户。<图3.8>和<图3.9>显示的是处理ping_request()的程序。 <图3.8>描述了如何标记输入命令和选项,以及如何创建选项值,如何决定参数标志位的相关位。 <图3.9>是基于相关选项调用ping()函数的,包含检测命令的有效性选项以及参数标志位的值选项。ping()函数发送Ping请求给信息给目的地,并处理从任意目的地接收到的ICMP消息。 <图3‑8: ping_request()函数> <图3‑9: ping_request()函数——续> 让我们在进入Ping程序前简要的看一下Ping消息。 Ping消息在类型字段中具有’0’(Ping相应)或’8’(Ping请求)的值。ICMP消息的代码字段为’0’类型。具有依赖于4Bytes的ICMP消息的数据字段可以分别被重新定义成2 字节的ID字段和2Bytes的序列号字段。ICMP消息的数据字段填充了Ping数据且用于Loopback。 最后,Ping响应程序计算ICMP首部以及Ping数据的校验码,并用新的计算的值代替校验和为0的字段。 <图3.10>是ICMP报文格式和Ping消息之间的关系图。 检测Ping请求的响应可以通过检测ID的值、序列号与ping数据域是否相同来处理。如果Ping响应没有在等待时间内返回,ping请求重新发送,这种情况下,Ping请求发送的序列号递增1。 当ping()函数发送Ping请求消息并检测到Ping响应消息后,ping()的内容就包括目的IP地址、Ping响应等待时间和Ping请求数目。分析Ping数据大小并处理接收到的Ping响应找到适合的参数。 <图3.11>是ping()函数的处理过程,<表3-21>是Ping消息作为数据类型的定义和使用,参见”inet/ping.h”。 PINGMSG的数据字段大小是’PINGBUF_LEN’字节,定义PINGBUF_LEN为’32’。但是,数据字段最大可到’1472’,这是因为W5100发送的最大传输单元(MTU)是1480字节,代码总量、校验和、ID和序列号字段大小是8字节。如果我们从1480中减去8,我们就得到1472这个值,因此,字段大小为1472字节。 ping()函数的结果保存在数据类型中,定义在<表3-21>中。 保存的Ping日志可以通过DisplayPingStatistics()函数在RS232终端输出,<图3.12>所示为DisplayPingStatistics()函数的程序流程。 每当从远端主机没有正确接收Ping响应校验和时,CheckSumErr字段加1。 如果没有接收到消息或从远端主机或网关接收到超时消息,Unreachable MSG字段和TimeExceedMSG字段加1。 当接收到未知消息时,UnknownMSG字段加1。 每当从ARP请求获取远端之际物理地址(MAC地址)没有ARP响应时,ARPErr字段加1。 每当ping()函数发送Ping请求时,PingRequest字段加1。 每当从远端主机接收到Ping请求的响应时,PingReply字段加1。 每当因为发送Ping请求后,没有在特定时间内收到远端主机的响应时,Loss字段加1。 <图3‑11:ping()函数> <图3‑12:DisplayPingStatistics()函数> 正如前面所说的,Ping请求程序是使用运行在IP协议之上的ICMP协议的程序。如果在W5100上使用ICMP信道,如<图3.11>和 <图3.13>所示,必须确定用来使用的IP协议,调用setIPProtocol(s, IPPROT_ICMP)后必须创建socket,创建socket过程中调用socket(s,SOCK_IPL_RAW,port,flag)时必须创建IP_RAW信道。如果关闭ICMP Socket,在调用close(s)函数清除先前设置的ICMP标志位后,需要调用setIPProtocol(s, 0x00)。 3.2.6. 应用程序 这是一个使用W5100的网络应用程序,包括Loopback程序、Web服务器和DHCP客户端,通过管理程序可以选择应用程序。 3.2.6.1. … Continue reading W5100E01-AVR(W5100评估板用户手册)(四)