如何使用W7100A实现DHCP客户端(版本1.0)?

Home / 博客 / 如何使用W7100A实现DHCP客户端(版本1.0)?

大家好,今天给大家介绍的是如何使用W7100A实现DHCP客户端,W7100A是WIZnet公司出品的一款网络单片机,内嵌单片机,全硬件TCP/IP协议栈和以太网接入模块,能快速、稳定地实现单片机的以太网接入。下面具体讲述如何用它实现DHCP客户端。

1     简介

DHCP服务器利用DHCP来指定如IP地址或者客户端的配置等。这篇应用手册将会介绍如何使用W7100A实现DHCP客户端。

 

2   DHCP

DHCP通过UDP协议经过运输层后,利用UDP广播与DHCP服务器进行通信。图1所示为DHCP服务器和客户端之间的通信。

图 1 DHCP信息

DHCP客户端在已经建立连接的网络上广播‘搜索信息’。如果DHCP服务器存在于计算机的网络上,它就会接收‘搜索信息’,然后向DHCP客户端发送‘提供信息’。‘提供信息’包括DHCP客户端使用的IP、网关(G/W)、与DNS服务器IP完全相同的网络信息,以及如DHCP服务器的IP地址租约时间等一些信息。DHCP客户端通过接收‘提供信息’识别DHCP服务器,然后发送‘请求信息’请求使用服务器提供的信息。在‘请求信息’被接收以后,DHCP服务器会决定租约时间(DHCP客户端的IP地址能够使用的时间)、网络配置是否可用。如果上面的信息都能够被使用,DHCP服务器就会向DHCP客户端发送ACK信息;如果这些信息不可用,则发送NACK信息。

3  DHCP客户端 

3.1      演示

图2显示了连接iMCU7100EVB开发板和网络设备的DHCP客户端的测试结果。搜索/提供/请求/ACK信息也都可以被检测到。除此之外,由DHCP服务器分配的DHCP客户端的网络配置也能够被检测到。

图 2 DHCP客户端测试

4  软件 

4.1      Socket

4.1.1    打开(OPEN)

由于DHCP服务器和DHCP客户端之间的通信不需要因特网的连接, DHCP就需要由UDP打开。利用下面的Sn_MR_UDP(代码第382行)来打开socket。

4.1.2    发送(SEND)

用户必须在发送DHCP数据之前先设置其他用户的IP地址和端口。DHCP_SERVER_PORT的值固定为67。当执行搜索或者请求信息时,IP地址利用广播地址(255.255.255.255)来发送数据。在接收到来自DHCP服务器的IP地址信息后,通过解析服务器IP[]来发送数据(代码第204行)。

4.1.3    接收(RECEIVE)

这一节与UDP的接收(RECEIVE)过程完全相同。请参考‘如何使用W7100A实现UDP通信’

4.1.4    DHCP信息格式

下面的结构是由代码组成,这些代码的运行需要用到DHCP信息。(具体的详细信息,请参考RFC1541文档中关于DHCP信息的介绍)。位于ciaddr区下面的区域用来发送网络信息;选项区域则用来发送信息类型和客户端识别等信息。

4.2      DHCP函数

实现DHCP客户端的函数将在dhcp_app.h文件中列出:

图 3 check_dhcp函数

图3所示为check_dhcp()函数的流程图。DHCP_OFFER、DHCP_ACK以及DHCP_REQUEST的操作执行取决于dhcp_state的变化(传输)。图4为parseDHCPMSG()函数的流程图,其中parseDHCPMSG()函数用来获取DHCP信息。图5为check_LeaseIP()函数和send_DHCP_REQUEST()函数的流程图。

图 4 parseDHCPMSG() 函数流程图

图 5 send_DHCP_REQUEST()函数流程图