如何用W7100A实现DNS客户端(一)
这篇文档将会介绍DNS以及如何用iMCU7100EVB来实现DNS客户端,并且通过实际例子演示该功能。
在第二章我们简单地介绍一下域名系统,第三章是DNS演示的部分,第四章将涉及到代码的分析。本文中所有的示例代码全部基于Keil编译环境。
这里我们先分享前面部分,希望对大家有所帮助。
1 简介这篇文档将会介绍DNS以及如何用iMCU7100EVB来实现DNS客户端,并且通过实际例子演示该功能。本文中所有的示例代码全部基于Keil编译环境。
2 域名系统(Domain Name System)域名系统可以实现互联网域名(ex:www.wiznet.co.kr)和互联网IP地址(ex:202.131.29.70)之间的互相转换。DNS由DNS服务器组成,不同域名间的映射表被保存在服务器中;DNS解析程序(DNS客户端)能够查询并且接收来自DNS服务器的映射结果。DNS解析程序请求域名服务器把域名转换成对应的IP地址,域名服务器在接收到请求后开始搜索数据库。如果搜索到客户端请求的相关信息,映射的结果就会被发送到客户端。相反,如果没有搜索到相关信息,域名服务器就会查询根名服务器(root Name Server),等待查询结果并将结果发送到客户端。
下面的图2.2显示了DNS客户端和DNS服务器之间的通信方式。这些查询/应答的信息可以分成五段:报文头(Header)、问题(Question)、应答(Answer)、授权应答(Authority)、附加信息(Additional)。报文头段大小固定为12字节,而其它4段的长度不固定。应答、授权应答以及附加信息这三段可以看做一组,称为资源记录(Resource Records,简称RRs)。而每个报文头﹑问题和资源记录分别有自己的特殊格式。
想了解更多关于DNS的信息,请参阅RFC1034和RFC1035相关文档。
在本文中,iMCU7100EVB实现了DNS客户端的功能;它从DNS服务器上查询域名所对应的IP地址。该例程用UDP协议实现了与DNS服务器之间的发送/接收/分析应答通讯。
3 DNS演示本章将会对iMCU7100EVB实现DNS客户端的过程进行演示。iMCU7100EVB可以利用UDP协议实现DNS客户端功能。要进行DNS演示,还需要用到超级终端机程序。
在进行演示之前,有一些重要的注意事项需要说明。必须根据用户的设置来设定相应的DNS程序中main.c文件的IP地址、网关IP地址、子网掩码等等信息。想了解更多关于这些值的信息,可以询问ISP(互联网服务提供商)或者是网络管理员。示例代码中的值都是随机设定的,如果不修改这些值,DNS代码可能无法正常工作。同时dns.c文件的DNS服务器的IP地址也需要根据用户的网络环境进行修改。通常DNS服务都是由ISP提供的,如果发生任何问题,请向ISP寻求解决方法。
开始进行演示时,将所有的电源线、网线以及串口线连接到iMCU7100EVB。关于开发板(EVB)的更多细节,可以参考‘iMCU7100EVB用户指南’。在正确修改DNS客户端和DNS服务器的IP地址后,编译附录中的源程序并生成HEX文件,然后利用串口线或者是调试器线将编译生成的HEX文件下载到iMCU7100EVB开发板。用户需要使用WizISP程序或者W7100A Debugger程序。详细信息请参考文档‘W7100A Debugger指南’和‘W7100A的WizISP程序用户指南’。这两个程序都在附带的CD内,也可以从WIZnet主页下载。
在成功下载HEX文件后,运行超级终端机程序。如果使用WizISP下载,需要关闭BOOTSEL 引脚,同时复位开发板。而如果使用W7100A Debugger,按下’run’按钮停止Debugger并且复位开发板。
在DNS演示中要用到超级终端机程序,原因是用户需要通过串口来输入要解析的域名。如图3.3所示,超级终端机的设置也需要根据用户的串行端口进行相应设定。尽管COM2口在图3.3中作为串行端口使用,但是它可以根据用户PC机上的实际设置进行更改。
同时,将波特率设置为115200,用户可以通过手动修改DNSC代码的串口设置来改变波特率。运行开发板和超级终端机程序,然后在超级终端机窗口中输入正确的域名。如图3.4所示,将会显示如下的结果。
当解析成功时,将会出现图3.4中的Part(a)中的结果,如果域名输入错误或者是DNS服务器解析失败,则出现Part(b)中的结果。除了这两种情况,如果在一段时间之后DNS服务器仍然没有响应,iMCU7100EVB将会提示超时信息。
这就是我们今天的内容,后续部分我们将在明天发布,谢谢关注。