第3节 DHCP客户端
推荐给好友
打印
加入收藏
更新于2009-01-12 00:02:35

        动态主机配置协议在运行时获取网络参数。该协议使用的是协议栈的 UDP层。在调用ip_startup()初始化协议栈之后,DHCP客户端方可被调用。
        DHCP协议在RFC2131和RFC2132中被定义。协议栈运行的DHCP客户端自动去寻找DHCP服务器(被称为发现)。客户端通过UDP层和BOOTP端口(67和68)传送报文。由于IP数据报还没有IP地址,所以它使用的是广播地址。该发现报文中包含一个唯一的事务 ID(xid)。一台正在侦听的 DHCP 服务器也通过广播地址发回一个提供报文,该报文中包含了客户端发送的 xid、推荐的网络参数和一个唯一的服务器ID。客户端通过这个服务器ID回送一个请求报文,响应服务器提供的网络参数。最后,服务器通过这个新 IP 地址响应客户端。
        RFC2132中列出了DHCP客户端可以请求的各种选项。这些选项也可以给DHCP 服务器报告信息。dhcpclnt.h 模块中列出了 DHCP 客户端支持的所有选项。其 中有两个 特别有趣 的报告选项12 和 15(DHOP_NAME 和DHOP_DOMAIN),大多数 DHCP 服务器都将这两个选项传递给域名服务器(DNS)。DHCP客户端包含在模块dhcplnt.c,dhcplnt.h和dhcsetup.c中。


图5 DHCP事务

        在调用dhc_setup()开始DHCP事务前,结构体netstatic[]必须先清零。否则,DHCP客户端视图去更新而不管netstatic[]结构体中IP地址。只有当netstatic[]结构体中的IP地址是最初DHCP服务器提供的,这才是一个有效的过程。

        DHCP客户端API
        void dhc_setup(void)
        初始化DHCP客户端。客户端试图在30秒内获取IP地址,否则就获取失败。该函数只有在成功获取IP(DHCP在BOUND状态下)或定时器超时后才返回。这个30秒是在dhcsetup.c的dhc_setup()函数中指定的。The timeout is hardcoded in a while loop about ? of the way into the function (look for TPS)。
               —— while (((cticks - dhcp_started) < (30*TPS)) &&
               —— (dhc_alldone() == FALSE))
        int chc_second(void)
        该函数在dhcpclnt.c中。它必须每秒被调用一次才能支持DHCP关于租用期、IP更新和租用期过期的规范。

<<上一页    下一页>>
相关链接


 
关于我们 | 诚邀加盟 | 客户服务 | 相关法律 | 网站地图 | 友情链接 | 服务信箱:service@eefocus.com
© 2006 与非门科技信息咨询(北京)有限公司 All Rights Reserved.