1 DHCP简介
DHCP(Dynamic Host configuration Protocol)动态主机配置协议,DHCP报文是承载于UDP上的高层协议报文,使用UDP协议的68号端口(DHCP客户端)及67号端口(DHCP Server端),在大部分场景下,DHCP给大部分用户的印象就是一个在局域网中分配IP地址信息的协议,其实DHCP能做的事情不止于此。使用DHCP主要是两个用途:
- 用于内部网络(局域网)或网络服务供应商(ISP)自动分配IP地址给用户
- 用于内部网络管理员对所有电脑作中央管理
2 DHCP的8种报文
前四种报文是最常见的一个DHCP交互的过程,后面四种报文日常见到的要稍微少一些。
报文 | 描述 |
---|---|
DHCP Discover | client在物理子网上发送广播来寻找可用的服务器。该client实现生成一个目的地址为255.255.255.255的广播UDP包。 |
DHCP Offer | 当DHCP服务器收到一个来自客户的IP租约请求时,它会提供一个IP租约。DHCP为客户保留一个IP地址,然后通过网络单播一个DHCP OFFER消息给客户。该消息包含客户的MAC地址、服务器提供的IP地址、子网掩码、租期以及提供IP的DHCP服务器的IP。 |
DHCP Request | 当客户PC收到一个IP租约提供时,它必须告诉所有其他的DHCP服务器它已经接受了一个租约提供。因此,该客户会发送一个DHCP REQUEST消息,其中包含提供租约的服务器的IP。当其他DHCP服务器收到了该消息后,它们会收回所有可能已提供给该客户的租约。然后它们把曾经给该客户保留的那个地址重新放回到可用地址池中,这样,它们就可以为其他计算机分配这个地址。任意数量的DHCP服务器都可以响应同一个IP租约请求,但是每一个客户网卡只能接受一个租约提供(一个现网中会存在多个DHCP服务器的可能)。 |
DHCP ACK | 当DHCP服务器收到来自客户的Request消息后,它就开始了配置过程的最后阶段。这个响应阶段包括发送一个DHCP ACK包给客户。这个包包含租期和客户可能请求的其他所有配置信息。这时候,TCP/IP配置过程就完成了。 |
DHCP NAK | 如果DHCP服务器收到Request请求报文后,没有发现有相应的租约记录或者由于某些原因无法正常分配IP地址,则向DHCP客户端发送NAK应答报文,通知用户无法分配合适的IP地址。 |
DHCP Release | 客户端向DHCP服务器发送一个请求以释放DHCP资源,并注销其IP地址。意思就是这地址我现在不用了,你拿回去吧。 |
DHCP Inform | DHCP客户端如果需要从DHCP服务器端获取更为详细的配置信息,则向DHCP服务器发送Inform请求报文;DHCP服务器在收到该报文后,将根据租约进行查找到相应的配置信息后,向DHCP客户端发送ACK应答报文。目前基本上不用了。 |
DHCP Decline | DHCP客户端收到DHCP服务器ACK应答报文后,通过地址冲突检测发现服务器分配的地址冲突或者由于其他原因导致不能使用,则会向DHCP服务器发送Decline请求报文,通知服务器所分配的IP地址不可用,以期获得新的IP地址。在cisco设备中,DHCP在分配一个IP地址前,会对这个IP地址进行ping,但现网可能会有某些策略原因,过滤了ICMP包,当地址分配给客户端以后,客户端会再次进行地址冲突的检测,也就是免费ARP,当发现现网有这个IP后,他会给服务端回复Decline,需要服务端再重新分配IP地址给客户端(重新进行DORA)。 |
3 DHCP工作流程
3.1 获取IP地址过程
-
(广播)DHCP 客户端以广播的方式发出DHCP Discover报文。
-
(单播)所有接收到DHCP Discover的服务端都会给出响应,发送一个DHCP Offer报文给客户端。
DHCP Offer报文中“Your(Client) IP Address”字段就是DHCP Server能够提供给DHCP Client使用的IP地址,且DHCP Server会将自己的IP地址放在“option”字段中以便DHCP Client区分不同的DHCP Server。DHCP Server在发出此报文后会存在一个已分配IP地址的纪录。见下图:
-
(广播)客户端会只处理最先收到的DHCP offer报文,会发送一个DHCP Request报文给相应的服务端。DHCP Client会发出一个广播的DHCP Request报文,在选项字段中会加入选中的DHCP Server的IP地址和需要的IP地址。如下图:
-
(单播)DHCP服务端在收到DHCP Request报文后,判断选项字段中的IP地址是否与自己相同。如果不相同,DHCP Server不做任何处理只清除相应地址的分配记录;如果相同,DHCP Server会向客户端响应一个DHCP ACK报文,并在option字段中增加IP地址的使用租期信息。如下图:
5.(广播)客户端在接收到DHCP ACK报文后,会通过免费ARP进行地址冲突检测。如果可以使用,则DHCP Client成功获得IP地址并根据IP地址使用租期自动启动续延过程;如果DHCP Client发现分配的IP地址已经被使用,则DHCP Client向DHCPServer发出DHCP Decline报文,通知DHCP Server禁用这个IP地址,然后DHCP Client开始新的地址申请过程(继续DORA,把前面1-5流程重新跑一次)。下图为免费ARP检测地址冲突:
3.2 DHCP地址续约
- (单播)在使用租期超过50%时刻处,DHCP Client会以单播形式向DHCP Server发送DHCP Request报文来续租IP地址。如果DHCP Client成功收到DHCP Server发送的DHCP ACK报文,则按相应时间延长IP地址租期;如果没有收到DHCP Server发送的DHCP ACK报文,则DHCP Client继续使用这个IP地址。
- (广播)在使用租期超过87.5%时刻处,DHCP Client会以广播形式向DHCP Server发送DHCPRequest报文来续租IP地址。会出现以下三种情况:
①如果DHCP Client成功收到DHCP Server发送的DHCP ACK报文,则按相应时间延长IP地址租期;
②如果没有收到DHCP Server发送的DHCP ACK报文,则DHCP Client继续使用这个IP地址,直到IP地址使用租期到期时,DHCP Client才会向DHCP Server发送DHCP Release报文来释放这个IP地址,并开始新的IP地址申请过程。
③因为客户端发送的是广播报文,DHCP Client收到了另外一个DHCP Server发来的DHCP NAK报文,那么客户端会重新申请IP地址(重新走DORA流程)。现网当中,原来给客户端分配地址的server1联系不上,那么在使用租期达到87.5%时,客户端会发送广播DHCP Request,server2在收到这个报文后,发现与自己的字段不匹配,没有这个租约记录,这个地址不是我server2租出去的,这时server2会回复DHCP NAK报文,客户端在收到NAK报文后,立即重新请求新的IP地址。拓扑如下图:
4 DHCP配置
4.1 网络拓扑
4.2 服务端
Router(config)#interface e0/0
Router(config-if)#ip address 192.168.1.1 255.255.255.0
Router(config)#ip dhcp pool DHCP-TEST //创建地址池,一个地址池对应一个网段
Router(dhcp-config)#network 192.168.1.0 255.255.255.0 //定义地址池对应的网段
Router(dhcp-config)#default-router 192.168.1.1 //设置默认路由
Router(dhcp-config)#dns-server 8.8.8.8 //设置DNS服务器
Router(dhcp-config)#lease 2 0 0 //设置租约,天,时,分
Router(dhcp-config)#exit
Router(config)#ip dhcp excluded-address 192.168.1.1 //将一个或多个地址排除在地址池之外(如网关IP和服务器IP等) ,以避免分配给客户端,注意是config下配置
4.3 客户端
VPCS> ip dhcp
VPCS> show ip
NAME : VPCS[1]
IP/MASK : 192.168.1.2/24
GATEWAY : 192.168.1.1
DNS : 8.8.8.8
DHCP SERVER : 192.168.1.1
DHCP LEASE : 172793, 172800/86400/151200
MAC : 00:50:79:66:68:04
LPORT : 20000
RHOST:PORT : 127.0.0.1:30000
MTU : 1500