基于以太网板卡的DHCP客户端的设计

2014-10-21 11:09张奎
电子世界 2014年12期
关键词:设计

张奎

【摘要】DHCP是为了实现TCP/IP网络参数的自动分配而设计的,本文深入分析DHCP工作原理,在以太网板卡的基础上,设计了一个DHCP客户端,从而实现了板卡端口的地址自动配置。

【关键词】DHCP客户端;以太网板卡;设计

1.引言

随着网络技术的发展,TCP/IP网络与人们的工作与生活越来越紧密的联系在一起。为确保网络通信的正常进行,需要配置IP地址等网络参数。目前,IP地址分配主要采用手动分配和自动分配的方式。其中,手动分配的地址将被长期占用,导致地址利用率低。而自动分配则是由处于网络中的服务器分配地址,这种方式将手工配置IP地址所导致的错误减少到最低程度[1]。

IETF设计的动态主机配置协议(DHCP)正是这样一种动态分配机制。本文将阐述利用以太网板卡的现有功能,设计一个DHCP客户端,从而使板卡的每个端口可以动态获取IP地址等网络参数。

2.DHCP原理

DHCP(Dynamic Host Configuration Protocol),是一种动态向网络终端提供配置参数的协议。DHCP使用客户端/服务器模式,请求配置信息的终端被称为DHCP客户端,而提供配置信息的被称为DHCP服务器。

DHCP客户端和服务器之间的交互通过以下8种类型的报文来实现:

①DISCOVER:由客户端广播,寻找可达的服务器;

②OFFER:由服务器响应客户端的DISCOVER报文,携带了相关配置参数;

③REQUEST:客户端发往服务器,请求配置参数或确认原来的配置是否可用;

④ACK:服务器发往客户端,该报文包含了所提交的配置参数;

⑤NAK:服务器发往客户端,提示客户端参数错误或租期已满;

⑥DECLINE:客户端发往服务器,告诉服务器IP地址已被使用;

⑦RELEASE:客户端发往服务器,告诉服务器放弃IP地址并终止剩余租期;

⑧INFORM:客户端发往服务器,告诉服务器已配置了网络,仅向服务器请求本地配置参数[2];

客户端从服务器动态获取IP地址,主要通过四个阶段进行:

①发现阶段:客户端寻找服务器的阶段。客户端以广播方式发送DISCOVER报文。

②提供阶段:服务器提供IP地址的阶段。服务器接收到客户端的DISCOVER报文后,根据IP地址分配的规则选出一个IP地址,与其他参数一起通过OFFER报文发送给客户端。

③选择阶段:客户端选择IP地址的阶段。如果有多台服务器向该客户端发来OFFER报文,客户端只接受第一个,然后以广播方式发送REQUEST报文,该报文中包含服务器在OFFER报文中分配的IP地址。

④确认阶段:服务器确认IP地址的阶段。服务器收到REQUEST报文后,只有被选择的服务器会进行如下操作:如果确认将该地址分配给该客户端,则返回ACK報文;否则返回NAK报文,表明该地址不能分配给该客户端[3]。

3.系统设计

软件部分采用VC++6.0开发工具设计和编译,程序运行在WindowsXP环境下,程序设计的流程如图2所示。客户端程序的具体实现过程主要包括:

(1)定义一个数据结构,保存程序运行中的配置参数,描述如下:

struct dhcp_frm_params

unsigned char op; // 操作类型.

unsigned char htype; // client网络硬件协议类型.

unsigned char hlen; // client网络硬件地址长度.

unsigned char hops; // 当前的DHCP报文经过的DHCP中继的数量.

unsigned int tx_id; // 匹配Server的响应报文是对哪个请求报文的响应.

unsigned short seconds; // client开始DHCP请求后到现在经历的时间.

unsigned short flags;

unsigned char ciaddr[4]; // 表示client的IP地址.

unsigned char yiaddr[4]; // server分配给client的IP地址.

unsigned char siaddr[4]; // client获取配置信息的服务器的IP地址.

unsigned char giaddr[4]; // 记录第一个DHCP中继的IP地址.

unsigned char chaddr[16]; // 记录client的实际硬件地址内容.

signed char sname[64]; // client获取配置信息的服务器的名称.

signed char file[128]; // client的配置文件的名称.

unsigned char* options; // 包含大量可选的终端初始配置信息.

unsigned int options_len; // options的长度.

}

(2)为了产生特定的交互报文,定义了一系列函数,主要函数描述如下:

根据配置参数,生成一个dhcp报文:

make_up_dhcp_frm(dhcp_frm_params& dhcp_frm, char* buf);

①发送一个dhcp-discover报文;

tx_one_dhcp_disscover_frm();

②判断收到报文是否是dhcp-discover报文的响应报文;

chk_dhcp_discover_response_frm(char*buf, unsigned int dataLen );

③发送一个dhcp-request报文;

tx_one_dhcp_request_frm();

④判断收到报文是否是dhcp-request报文的响应报文;

chk_dhcp_request_response_frm(char *buf, unsigned int dataLen );

⑤查找dhcp-discover的响应报文;

get_dhcp_discover_response_msg();

⑥查找dhcp-request的响应报文;

get_dhcp_request_response_msg();

⑦發送免费的ARP报文,进行地址冲突检测;

tx_one_gratis_arp_frm();

⑧检测对免费ARP的响应报文;

chk_gratis_arp_response_frm();

⑨查找免费ARP的响应报文。

get_gratis_arp_response_msg()。

(3)报文的收发:

当由软件生成交互报文后,通过板卡的协议仿真通道,将数据发送出去。同时,通过检测通道接收到的数据,获取服务器或者其他网络节点发送的报文。

在设计过程中,硬件部分实现创建一个协议仿真通道,执行数据的收发。软件部分实现初始化系统数据,产生交互过程中需要的报文,保存获取的网络参数。

测试中使用了某国产路由器作为DHCP服务器,将板卡的一个测试端口直接与路由器相连,通过超级终端以console方式登陆路由器,配置地址池,使能路由器端口的DHCP服务器功能。启动配置过程后,在超级终端中可以看到服务器成功为客户端分配了IP地址,并设置了地址的过期时间。

4.结语

本文详细介绍了DHCP客户端如何动态获取IP地址的过程,并基于以太网板卡的功能,实现了一个DHCP客户端,可以用来测试从网络中获取地址的能力,对现有板卡的功能是一个很好的补充。

参考文献

[1]邢国稳.工业以太网中DHCP协议应用技术分析[J].微计算机信息,2005,5:30-31.

[2]RFC 2132,DHCP Options and BOOTP Vendor Extensions.

[3]Dynamic Host Configuration Protocol,RFC 2131,1997.

猜你喜欢
设计
二十四节气在平面广告设计中的应用
何为设计的守护之道?
《丰收的喜悦展示设计》
基于PWM的伺服控制系统设计
基于89C52的32只三色LED摇摇棒设计
基于ICL8038的波形发生器仿真设计
瞒天过海——仿生设计萌到家
设计秀
有种设计叫而专
从平面设计到“设计健康”