DHCP(Dynamic Host Configuration Protocol动态主机协议)。
DHCP是局域网网络协议,使用UDP端口的67,68工作,主要用于为局域网络中主机动态分发地址,以及集中管理局域网中主机。
客户端DHCP请求服务器时使用的端口为UDP68,服务器响应客户端DHCP请求使用的端口为UDP67
DHCP工作原理:
DHCP工作总共四个阶段分为以下四个:
1、发现阶段
客户端广播向所有服务器发送DHCP discover报文。(此时客户端DHCP请求使用的端口为UDP 68)
2、提供阶段
DHCP服务器使用DHCP offer回应DHCP客户端。(服务器回应客户端时使用的端口为UDP 67,客户端选择最先回复DHCP
offer报文作为客户端请求的服务器)
3、选择阶段
DHCP客户端广播发送DHCP request选择报文。
4、确认阶段
服务器回应DHCP ack确认报文。
DHCP四个阶段的工作内容:
一、发现阶段的客户端是不知道服务器的IP地址的所以会广播发送DHCP
discover报文寻找DHCP服务器,目标地址为255.255.255.255,只要在这个网络中的IP地址的服务器都可以接收到DHCP客户端的IP地址请求。
二、提供阶段:DHCP服务器收到DHCP客户端发送的DHCP discover报文后回应DHCP
offer报文,DHCPoffer报文中包含了分配给客户端指定mac地址的IP地址,dns,租期,网关等参数。网络内的所有客户端根据封装在DHCP
offer报文中的mac地址选择是否接收此报文。
如果DHCP客户端发送的请求中带有期望的租期,那么DHCP服务器会根据自身设置的租期进行比较,给出客户端时间较短的租期。
DHCP服务器会把已经分配给客户端的地址组成一个正在使用的IP地址表,未分配的IP地址组成一个可分配的IP地址表,IP地址冲突的分成一个IP地址冲突表,不能分配的IP地址分到不能分配的表中。
DHCP服务器给DHCP客户端选择IP地址有五个优先顺序
1;DHCP服务器给指定的mac地址静态绑定分配IP地址
2:DHCP客户端在DHCP discover报文中的option50请求指定的IP地址
3:DHCP服务器曾经分配给客户端的IP地址
4:DHCP服务器随即分配IP地址
5:没有可分配地址的情况下DHCP服务器会找超过租期的IP地址和冲突的IP地址进行分配,有可用则分配,没有可用回复DHCP
nak拒绝报文,来通知客户端没有可分配的IP地址,客户端会重新发送DHCPdiscover报文请求IP地址。
DHCP服务器为了避免分配的IP地址会冲突所以会在DHCPoffer报文中添加源地址来icmp echo
request来检测是否用客户端使用该地址,如果有应答则分配另一个id地址,并划分到冲突地址表中, 没有则继续分配。
提供阶段不是最终的提供IP地址阶段,该阶段还需要等客户端16s回复,如果没有等到客户端回复则此IP地址为继续分配给下一个客户端。
三、选择阶段
DHCP客户端以广播方式发送DHCP discover报文,在同一个网段内有多个服务器回应DHCP offer报文则客户端会选择第一个回应DHCP
offer的服务器来进行IP地址选择并广播发送DHCP request报文。
以广播方式发送DHCP
REQUEST报文,是为了通知所有的DHCP服务器,它将选择某个DHCP服务器提供的IP地址,其他DHCP服务器可以重新将曾经分配给客户端的IP地址分配给其他客户端。
四、确认阶段
DHCP服务器收到DHCP客户端发送的DHCP request报文之后会回复DHCP ACK来确认分配IP地址。
DHCP客户端受到服务器发送过来的DHCP
ACK之后会免费发送广播arp报文来探测在这个网段中是否有使用该IP地址的客户端,如果没有则使用该IP地址,如果有客户端会向服务器发送DECLINE报文,并重新向服务器请求IP地址,同时,服务器会将此地址列为冲突地址。当服务器没有空闲地址可分配时,再选择冲突地址进行分配,尽量减少分配出去的地址冲突。
如果因为DHCP客户端和DHCP服务器协商和DHCP服务器受到DHCP
request报文过慢导致此IP地址已经分配给其他客户端,DHCP服务器会回复DHCP NAK报文给客户端,客户端受到DHCP
NAk报文之后会重新发送DHCP discover报文寻找IP地址
DHCP四个阶段报文解读:
Discover阶段:
Offer阶段:
Request阶段:
DHCP ACK阶段: