如何在W5200中实现DHCP

Home / 博客 / 如何在W5200中实现DHCP

W5200是WIZnet公司研发的一款基于全硬件TCP/IP协议栈的以太网芯片,将所需的网络协议用脱离主控芯片的硬件逻辑电路实现,能卸载处理器对软件协议栈的烧写负担,整个系统的网络接入也变得高效稳定,DHCP是一个局域网的网络协议,使用UDP协议工作,以下将介绍如何在以太网芯片W5200中实现DCHP。

1     简介

DHCP服务器使用DHCP分配信息,这些信息包括IP地址或者分配到客户端的设置。该应用笔记将解释在如何使用W5200实现DHCP客户端。

2    DHCP

DHCP使用传输层协议UDP(用户数据报协议),使用UDP广播与DHCP服务器通信。图1描述了DHCP服务器与客户端的通信。

图. 1 DHCP消息

DHCP客户端在连接的网络上广播“发现设备消息”(‘DISCOVERY message’)。 如果DHCP服务器存在这个计算机网络,DHCP服务器将接收“发现设备消息”(‘DISCOVERY message’)并且发送“提供服务消息”(‘OFFER message’)到DHCP客户端。“提供服务消息”(‘OFFER message’)包括DHCP客户端可以使用的IP,网关(G/W),与DNS服务器IP一样的网络信息,还有一些像租约时间这样的信息。DHCP客户端通过接收“提供服务消息”(‘OFFER message’)能够确认DHCP的报告已收到,然后发送“请求设备消息”以使用服务器建议的信息。 当“请求设备消息”(‘DISCOVERY message’)被接受到之后,DHCP服务器决定这个租赁期限(DHCP客户端的IP地址可以被使用的时间期限)和网络配置是否能用。如果上述信息可用,DHCP服务器将发送ACK消息到DHCP客户端;如果不可用将发送NACK消息。

3     DHCP 客户端

3.1 演示

图2 显示了DHCP客户端的测试结果,该测试将W5200E01-M3与一个网络装置连接。可以检查DISCOVER/OFFER/REQUEST/ACK消息。同样可以检查DHCP服务器分配给DHCP客户端的网络配置。

图 2 DHCP过程(左:成功&右:超时)

如果网络中没有DHCP服务器,DHCP过程将会超时(见图2,右)。默认的情况,W5200将重试3次直到DHCP_DISCOVER (Offer)响应被收到,否则W5200将会使用全0的网络参数。(IP: 0.0.0.0, 子网: 0.0.0.0, 网关: 0.0.0.0)

4       软件

4.1 Socket

4.1.1    打开(OPEN)

由于互联网连接之间不需要DHCP服务器和DHCP客户端,DHCP需要打开UDP。使用下面的Sn_MR_UDP 打开(OPEN)socket(line886)。

 4.1.2 发送(SEND)

发送DHCP数据之前用户必须设置其他用户的IP地址和端口。DHCP_SERVER_PORT固定为67.当操作DISCOVER 或REQUEST时, IP地址将使用广播地址(255.255.255.255)来发送数据。从DHCP消息接收到DHCP服务器IP后,使用解析的DHCP服务器IP(DHCP_SIP[])发送数据(line287)。

4.1.3   接收(RECEIVE)

这部分与UDP的接收部分相同。请参考“在W5200中如何实现 UDP”。

4.1.4    DHCP消息格式

下面的结构是由使用DHCP消息的代码组成。(请参考RFC1541文档获得关于DHCP消息格式和每一个字段的更多信息)。以下ciaddr字段用于发送网络信息;选项字段用于发送消息类型和像客户标识符这样的信息。

 4.2   DHCP函数

实现DHCP客户端的函数列在以下的dhcp.h和dhcp.c文件中。

图. 3 检查dhcp函数

图.3表示了check_dhcp()流程图。DHCP_OFFER,DHCP_ACK,和DHCP_REQUEST操作取决于dhcp_state的变化(转换)。图.4 表示了parseDHCPMSG()的流程图。parseDHCPMSG()用于解析DCHP消息。图.5表示了check_LeaseIP()和send_DHCP_REQUEST()流程图。

图. 4 parseDHCPMSG()函数流程图

 

图. 5 send_DHCP_REQUEST()函数流程图

 关于此篇博文,若您有任何疑问,欢迎评论留言,我们将及时解答,谢谢关注!~^_^