DHCP 原理以及IP获取过程
一、概述
DHCP 基本定义
DHCP(Dynamic Host Configuration Protocol,动态主机配置协议)。是一个局域网的网络协议,使用UDP协议工作。 DHCP主要有两个用途:
- 给内部网络或网络服务供应商自动分配IP地址
- 给用户或者内部网络管理员作为对所有计算机作中央管理的手段。
DHCP有3个端口,其中UDP67
和UDP68
为正常的DHCP服务端口,分别作为DHCP Server和DHCP Client的服务端口;546
号端口用于DHCPv6 Client,而不用于DHCPv4,是为DHCP failover服务,这是需要特别开启的服务,DHCP failover是用来做“双机热备”的。
下面来看一个DHCP DIscover包:
DHCP 分配方式
- 自动分配方式(Automatic Allocation)
DHCP服务器为主机指定一个永久性的IP地址,一旦DHCP客户端第一次成功从DHCP服务器端租用到IP地址后,就可以永久性的使用该地址。
- 动态分配方式(Dynamic Allocation)
DHCP服务器给主机指定一个具有时间限制的IP地址,时间到期或主机明确表示放弃该地址时,该地址可以被其他主机使用。手工分配方式(Manual Allocation),客户端的IP地址是由网络管理员指定的,DHCP服务器只是将指定的IP地址告诉客户端主机。
DHCP 优点
- 减少管理员的工作量
- 避免输入错误的可能
- 避免ip地址冲突
- 当网络更改ip地址段时,不需要再重新配置每一个用户的ip地址
- 提高了ip地址的利用率
- 方便客户端的配置
二、DHCP 获取IP的过程
首次连接网络
-
第一步寻找DHCP服务器
当DHCP客户端第一次登录网络的时候,计算机发现本机上没有任何IP地址设定,将以广播方式发送DHCP discover
发现信息来寻找DHCP服务器,即向255.255.255.255发送特定的广播信息。网络上每一台安装了TCP/IP协议的主机都会接收这个广播信息,但只有DHCP服务器才会做出响应。第一阶段为dhcp发现阶段,主要意思即为寻找局域网内的dhcp服务器。 -
第二步分配IP地址
在网络中接收到DHCP discover
发现信息的DHCP服务器就会做出响应,它从尚未分配的IP地址池中挑选一个分配给DHCP客户机,并向DHCP客户机发送一个包含分配的IP地址,分配的DHCP offer
报文中还包含了一些其他的字段,如dns地址,网关,掩码等 -
第三步接受IP地址
DHCP客户端接受到DHCP offer
提供信息之后,选择第一个接收到的提供信息(存在多个DHCP服务器回应的话,先来的优先),然后以广播的方式回答一个DHCP request
请求信息,该信息包含向它所选定的DHCP服务器请求IP地址的内容。 -
第四步IP地址分配确认
当DHCP服务器收到DHCP客户端回答的DHCP request
请求信息之后,确认地址池中的这个地址没有被分配,如果没有被分配便向DHCP客户端发送一个包含它所提供的IP地址和其他设置的DHCP ack
确认信息,告诉DHCP客户端可以使用它提供的IP地址。如果被分配了 ,就会回复DHCP-NAK
报文,告诉CLient 地址已经被分配了。然后,DHCP客户机便将其TCP/IP协议与网卡绑定,另外,除了DHCP客户机选中的DHCP服务器外,其他的DHCP服务器将收回曾经提供的IP地址。 -
获取到IP后广播ARP
当CLient收到服务器分配的地址后,会向这个广播域内发送一个免费ARP的请求,如果没有人响应这个请求,CLient才正式使用这个地址,如果有人回应的话,会返回一个DHCP-Decline
报文,要求服务器重新获取地址。广播ARP实现的原理是:当机子重启或者设置了IP地址的时候,这个主机会通过免费ARP来询问这个局域网中是否有相同的IP存在(这个ARP询问的就是自己本身的IP地址,看是否有人回应),如果有人回复这个ARP的请求(因为ARP询问是广播的,所以局域网内所有的主机都可以收到),那么就会得到一个错误的消息“以太网地址 aa:bb:cc:dd:ee:ff发送来重复的IP地址”,通常情况下,是没人回应的,因为没有冲突存在,如果有人回应了这个ARP的请求,那么说明该IP地址已经被使用了,对方回应了这个ARP的响应,它会通过操作系统显示提示出来,说该IP地址存在冲突问题。在现在的DHCP服务器中,已经也引入了这个机制了,它会在分配给客户端这个IP地址之前,会先发送一个Ping,或者ARP等机制来查看该局域网中是否已经有该IP地址存在了,如果有得话,那么DHCP会分配其他IP给请求的客户端,如果没有人回应,那么则把该IP地址让客户端使用,所以很多情况下,看到设备上面,没有做地址排除的时候,而且有些IP地址已经在使用了,但是服务器能够很好的分配不冲突的地址给客户端,不造成地址冲突。
-
续租IP
当CLient的IP租期到达一半
的时候,DHCP client会单播发送DHCP-Request
报文,请求服务器更新租期,服务器收到以后,如果Client可以继续使用该IP地址的话,会响应CLientDHCP-ACK
,如果该IP不能继续分配,则响应CLientDHCP-NAK
。此时Client会在租期的75%再次询问server 进行续约,如果该IP地址可用则回复ACK,否则回复NAK。
再次登录
-
如果客户端重启后,会自动发送
DHCPREQUEST
广播给DHCP服务器以便请求继续租用原来使用的IP地址,如果服务器收到这个消息,确认客户端可以使用该地址,则回答一个DHCP ACK
确认消息,如果此IP地址已经无法再分配,则返回一个DHCP NCK
否认信息,客户端收到这个信息以后,则必须重新发送DHCP Discovery
消息获取新的地址(启动首次登录的流程)。 若没有得到响应,则尝试与网关通信,如果通信正常,这个租期还没到期的话,则可以继续使用,但是不能和网关通信的话,则会获得169.254.0.1~169.254.255.254之间的IP地址,然后每隔5min尝试更新租约。 -
当客户端已经获得了IP地址,发送
DHCP INFORM
报文来获取其他一些网络配置信息,比如网关、DNS服务器 -
当客户端可通过
DHCP RELEASE
报文主动释放服务器分配给它的地址,当服务器收到此报文后,可将这个IP地址分配给其他客户端。