14.8 使用DHCP获得新的网络地址

dhclient

大部分家庭网络和许多商业网络都使用DHCP(Dynamic Host Control Protocol,动态主机控制协议)为新加入的机器分配IP地址和其他关键信息。如果没有HDCP,在有新加入的机器时,就必须为其手工设置所有的网络信息;有了DHCP,只要把新机器连入网络,再请求DHCP服务器给它提供一个IP地址和其他必需的配置信息,接着就可以自动把DHCP服务器的响应集成到新设备的网络配置中。

说明 以下讨论假设已经用DHCP(而不是手工设置)配置好了网络设备。各种版本的Linux系统会在不同的配置文件中查找DHCP信息。基于Debian的Linux系统会在/etc/network/ interfaces中查找iface [interface] inet dhcp。而基于Red Hat的Linux系统则在/etc/sysconfig/network-scripts/ ifcfg-[interface]中查找BOOTPROTO=dhcp。在这些例子中,应该将[interface]替换为实际的网络接口名称。要得到更多的信息,可以在Google上搜索“dhcp your-distro”(your-distro是你正在使用的Linux版本名称)。

有时,你的计算机不能在启动时连接到DHCP服务器,这样就需要手工发起DHCP请求。或者你的网络有问题,因而需要一个新的IP地址。无论什么原因,dhcilent命令都会尝试查询任何可用的DHCP服务器,向它们请求必要的数据(必须以root用户来运行dhclient)。

  1. # dhclient eth0
  2. Listening on LPF/eth0/00:0b:cd:3b:20:e2
  3. Sending on LPF/eth0/00:0b:cd:3b:20:e2
  4. Sending on Socket/fallback
  5. DHCPDISCOVER on eth0 to 255.255.255.255 port 67 interval 8
  6. DHCPOFFER from 192.168.0.1
  7. DHCPREQUEST on eth0 to 255.255.255.255 port 67
  8. DHCPACK from 192.168.0.1
  9. bound to 192.168.0.104 -- renewal in 37250 seconds.
  10. # ifconfig eth0
  11. eth0 Link encap:Ethernet HWaddr 00:0B:CD:3B:20:E2
  12. inet addr:192.168.0.104 Bcast:192.168.0.255 Mask:255.255.255.0
  13. inet6 addr: fe80::20b:cdff:fe3b:20e2/64 Scope:Link

要释放(或放弃)DHCP服务器分配的IP地址,可以使用-r(代表release)选项,如下所示:

  1. # dhclient -r eth0
  2. sit0: unknown hardware address type 776
  3. sit0: unknown hardware address type 776
  4. Listening on LPF/eth0/00:0b:cd:3b:20:e2
  5. Sending on LPF/eth0/00:0b:cd:3b:20:e2
  6. Sending on Socket/fallback

在理想情况下,当启动计算机、插入无线PCMCIA卡,或是将以太网线连接到有线网卡的插座时,dhclient命令应该自动运行;但有时dhclient无法自动运行。当DHCP不能正常工作时,就得借助dhclient命令了。dhclient非常不错的一点就是它会自动显示很多详细信息,这样你就能够对它的运行情况一目了然,按照需要进行相应的诊断。

说明 一些Liunx分发版仍然在使用一种比较古老的程序执行DHCP(pump),而不是使用dhclient。有关pump命令的信息,可以看一下man pump,或者是阅读Red Hat和Mandrake的“HOWTO”说明(www.faqs.org/docs/Linux-mini/DHCP.html#REDHAT6)。