视乎客户端是否第一次登录网路,DHCP 的工作形式会有所不同。
第一次登录的时候:
1. 寻找 Server。当 DHCP 客户端第一次登录网路的时候,也就是客户发现本机上没有任何 IP 资料设定,它会向网路发出一个 DHCPDISCOVER 封包。因为客户端还不知道自己属于哪一个网路,所以封包的来源位址会为 0.0.0.0 ,而目的位址则为 255.255.255.255 ,然后再附上 Dhcpdiscover 的信息,向网路进行广播。
在 Windows 的预设情形下,Dhcpdiscover 的等待时间预设为 1 秒,也就是当客户端将第一个 Dhcpdiscover 封包送出去之后,在 1 秒之内没有得到回应的话,就会进行第二次 Dhcpdiscover 广播。若一直得不到回应的情况下,客户端一共会有四次 Dhcpdiscover 广播(包括第一次在内),除了第一次会等待 1 秒之外,其余三次的等待时间分别是 9、13、16 秒。如果都没有得到 DHCP 伺服器的回应,客户端则会显示错误信息,宣告 Dhcpdiscover 的失败。之后,基于使用者的选择,系统会继续在 5 分钟之后再重复一次 Dhcpdiscover 的过程。
2. 提供 IP 租用位址。当 DHCP 伺服器监听到客户端发出的 Dhcpdiscover 广播后,它会从那些还没有租出的位址范围内,选择最前面的的空置 IP (linux的dhcpd服务,从最后端一个开始),连同其它 TCP/IP 设定,回应给客户端一个 DHCPOFFER 封包。
由于客户端在开始的时候还没有 IP 位址,所以在其 Dhcpdiscover 封包内会带有其 MAC 位址信息,并且有一个 XID 编号来辨别该封包,DHCP 伺服器回应的 Dhcpoffer 封包则会根据这些资料传递给要求租约的客户。根据伺服器端的设定,Dhcpoffer 封包会包含一个租约期限的信息。
3. 接受 IP 租约。如果客户端收到网路上多台 DHCP 伺服器的回应,只会挑选其中一个 Dhcpoffer 而已(通常是最先抵达的那个),并且会向网路发送一个Dhcprequest广播封包,告诉所有 DHCP 伺服器它将指定接受哪一台伺服器提供的 IP 位址。
同时,客户端还会向网路发送一个 ARP 封包,查询网路上面有没有其它机器使用该 IP 位址;如果发现该 IP 已经被占用,客户端则会送出一个 DHCPDECLINE 封包给 DHCP 伺服器,拒绝接受其 Dhcpoffer ,并重新发送 Dhcpdiscover 信息。
linux中DHCP配置
1、工具:dhcpd;
可以通过rpm或者通过源码包安装;
2、配置文件
[root@ ~]# cat /etc/dhcpd.conf
ddns-update-style interim; #动态dns更新模式,默认不用改
ignore client-updates; ##忽略客户机更新DNS记录
subnet 192.168.0.0 netmask 255.255.255.0 { #定义作用域(IP子网),网卡上必须有这个地址
# --- default gateway
option routers 192.168.0.1; #配置默认网关
option subnet-mask 255.255.255.0; #掩码
option nis-domain "domain.org"; #指定nis域名
option domain-name "domain.org"; #为客户端指定DNS域名
option domain-name-servers 192.168.0.1; #指定dns服务器地址
option time-offset -18000; # Eastern Standard Time 为客户端设定格林威治时间的偏移时间,单位是秒
# option ntp-servers 192.168.0.1;
# option netbios-name-servers 192.168.0.1;
# --- Selects point-to-point node (default is hybrid). Don't change this unless
# -- you understand Netbios very well
# option netbios-node-type 2;
range dynamic-bootp 192.168.0.1 192.168.0.100; #指定地址范围
default-lease-time 21600; #默认租期
max-lease-time 43200; #最大租期
# we want the nameserver to appear at a fixed address
host ds { 绑定mac和IP地址
next-server marvin.RedHat.com; #设置服务器从引导文件中装入主机名,用于无盘工作站
hardware ethernet 00:0C:29:58:0A:D4 ; #mac地址
fixed-address 192.168.0.253; #IP地址
}
}
经过做实验,dhcpd分配IP只对属于该作用域的网卡生效(不采取dhcp中继的情况下),默认分配IP从最后一个开始。