DHCP(Dynamic Host configuration Protocol,动态主机配置协议 )是一个局域网的网络协议,它主要是通过客户端发送广播数据包给整个物理网段内的所有主机,若局域网内有DHCP服务器时,才会响应客户端的IP参数要求。
客户端取得IP参数的过程如下:
(1)客户端:利用广播数据包发送搜索DHCP服务器的数据包
若客户端网络设置使用DHCP协议取得IP,则当客户端开机或者是重新启动网卡时,客户端主机会发送出查找DHCP服务器的UDP数据包(discover)给所有物理网段内的计算机。因为客户端还不知道自己属于哪一个网络,所以该数据包的来源地址会为0.0.0.0,而目的地址则为255.255.255.255。一般主机接收到这个数据包之后会直接丢弃,若局域网内有DHCP服务器,则会开始后续行为。
(2)服务器端:提供客户端网络相关的租约以供选择。(dhcp offer)
DHCP服务器在监听到客户端发出的dhcp discover广播后,会针对这个客户端的硬件地址( MAC)与本身的设置数据进行下列工作:
到服务器的日志文件中查找该用户之前是否曾经租用过某个IP,若有且该IP目前无人使用,则提供此IP给客户端。
若配置文件针对该MAC地址提供特定的固定IP时,则提供该固定的IP给客户端。
若不符合上述两个条件,则随机选取当前没有被使用的IP参数给客户端,并记录下来。
(3)客户端:决定选择DHCP服务器提供的网络参数租约并向服务器确认。
由于局域网内可能并非仅有一台DHCP服务器,但客户端仅能接收一组网络参数租约,因此客户端只会挑选其中一个DHCP offer(通常是最先抵达的那个)。当决定好使用此服务器的网络参数租约后,客户端便开始使用这组网络参数来配置自己的网络环境。此外,客户端会发送一个dhcp request广播数据包给所有物理网段内的主机,告知已经接受该服务器的租约(此时若有两台以上的DHCP服务器,则这些没有被接受的服务器会收回该IP租约。)。同时,客户端还会向网络发送一个ARP封包,查询网络上面有没有其他机器使用该IP地址;如果发现该IP地址已经被占用,客户端则会送出一个DHCPDECLIENT包给DHCP服务器,拒绝接受其DHCP offer,并重新发送DHCP discover信息。
(4)服务器端:记录该次租约行为后并向客户端发送响应数据包信息以确认客户端的使用。
当服务器端收到客户端的确认选择后,服务器会回送确认的dhcp ack响应数据包,并且告知客户端这个网络参数租约的期限,并且开始租约计时。那么该次租约何时会到期而被解约,有以下几种情况:
客户端脱机:关闭网络接口、重新启动、关机等行为,都算是脱机状态,这个时候server端就会将该IP地址收回,并放到server的备用区中,以便日后使用。
客户端租约到期:dhcp server端发放的IP有使用的期限,客户端使用这个IP到达期限规定的时间,而且没有重新提出DHCP的申请时,server端就会将该IP收回,这个时候就会断线。但用户也可以向DHCP服务器再次要求分配IP。
由于目前的DHCP客户端程序大多数会主动依据租约时间去重新申请IP,所以即使有租约期限,也不需要在某个时间点手动去重新申请IP。一般情况下,假设租约时间是T小时,那么客户端程序在0.5T时会主动向DHCP服务器发出重新要求网络参数的数据包。如果这次数据包请求没有成功,那么在0.85T后还会再次发送数据包一次。正因如此,所以服务器端会启动port67监听客户端请求,而客户端会启动port68主动向服务器请求。
实验:
实验的主机地址为192.168.9.131 虚拟机模式为仅主机模式;此时需要修改网络适配器;将仅主机的使用本地DHCP服务取消,然后应用;这样确保DHCP获取的地址是我们自己配置的。
(要做DHCP服务器,首先本地主机必须得有地址
实验一:对单网段进行配置
服务端:
[root@localhost ~]# yum install dhcp -y //装包
[root@localhost ~]# vim /etc/dhcp//dhcpd.conf //编写主配置文件
[root@localhost ~]# systemctl restart dhcpd //重启服务
客户端:
打开网络连接;我们可以看到地址、路由、DNS均为我们配置参数
实验2:固定IP的配置
服务端:
(1)先去查看需要固定IP地址主机的MAC地址
(2)再去服务端编辑主配置文件;红框中为固定主机配置IP地址
[root@localhost ~]# vim /etc/dhcp//dhcpd.conf
在试验一的基础上将客户端主机的MAC地址与要分配的IP地址做配置
(3)重启服务
[root@localhost ~]# systemctl restart dhcpd
客户端:查看
实验三:对多个网段进行配置
要实现多网端的DHCP;首先得要多个网络适配器,不同的网络适配器连接不同的网段,这样就可以进行不同网段的配置;我们在VMware上添加一个新的网络适配器,为了与之前的进行区分,将模式设置为NAT模式,这样之后我们将虚拟机的模式进行更改,就可以完成不同网络适配器的连接
服务端:
给网卡配置IP地址:
[root@localhost ~]# nmcli device connect eno33554992 //先连接网卡
Device 'eno33554992' successfully activated with 'eb7d6da1-25b7-4dab-b881-7b714a265c6e'.
[root@localhost ~]# nmcli connection modify eno33554992 +ipv4.addresses 192.168.67.10/24 ipv4.gateway
192.168.67.1 ipv4.method manual connection.autoconnect yes //给网卡配置IP地址
[root@localhost ~]# nmcli connection up eno33554992 //再启动网卡
在编写主配置文件
[root@localhost ~]# vim /etc/dhcp/dhcpd.conf
(这里我们在实验一的基础上进行配置;再添加一个网段)
重启服务
[root@localhost ~]# systemctl restart dhcpd
在客户端上查看:
这里我们打开另一台客户机,通过DHCP获取IP地址。(如果电脑内存不够也可以将客户机的网络适配器的模式修改为NAT模式,这样只就需要一台客户机
在仅主机模式下:为192.168.9.10网段的地址
在NAT模式下为192.168.67.100网段的地址