DHCP(Dynamic Host Configuration Protocol,动态主机配置协议)
DHCP封包在传输层(Transport Layer)是采用UDP协议,而当 Client传送封包给 Server时,采用的是UDP 67 Port,从 Server传送给 Client则是使用UDP 68 Port。
1. 发现阶段
discover 英 /d??sk?v?(r)/ v. 发现,找到;
在发现阶段,DHCP客户端通过发送DHCP-DISCOVER报文来寻找DHCP服务器。
由于DHCP服务器的IP地址对于客户端来说是未知的,所以DHCP客户端以广播方式发送DHCP-DISCOVER报文。所有收到DHCP-DISCOVER报文的DHCP服务器都会发送回应报文,DHCP客户端据此可以知道网络中存在的DHCP服务器的位置。
此时,源IP地址0.0.0.0,目标IP地址255.255.255.255,源MAC地址为本地网卡MAC,目标MAC为FFFF-FFFF-FFFF,源端口为68,目标端口为67;
DHCP-DISCOVER报文可以使用Option 50字段指定要使用的IP地址;
2.提供阶段
当DHCP服务器收到DHCP-DISCOVER报文后,使用Gratuitous ARP(无故ARP,免费ARP)广播要下发的IP是否可用,然后使用广播的形式回复DHCP Offer数据包。其中把IP地址,连同IP地址租约期限和其他配置信息(如网关地址,域名服务器地址等)写入到DHCP Offer报文中
3.选择阶段
如果有多台DHCP服务器向DHCP客户端回应DHCP-OFFER报文,则DHCP客户端只接受第一个收到的DHCP-OFFER报文。然后以广播方式发送DHCP-REQUEST请求报文,该报文中包含Option 54(服务器标识选项),即它选择的DHCP服务器的IP地址信息。
以广播方式发送DHCP-REQUEST请求报文,是为了通知所有的DHCP服务器,它将选择Option 54中标识的DHCP服务器提供的IP地址,其他DHCP服务器可以重新使用曾提供的IP地址。
4. 确认阶段
收到DHCP客户端发送的DHCP-REQUEST请求报文后,DHCP服务器根据DHCP-REQUEST报文中携带的MAC地址来查找有没有相应的租约记录。如果有,则发送DHCP-ACK报文作为应答,通知DHCP客户端可以使用分配的IP地址。
DHCP客户端收到DHCP服务器返回的DHCP-ACK确认报文后,会以广播的方式发送免费ARP报文,探测是否有主机使用服务器分配的IP地址,如果在规定的时间内没有收到回应,客户端才使用此地址。否则,客户端会发送DHCP-DECLINE报文给DHCP服务器,通知DHCP服务器该地址不可用,并重新申请IP地址。
如果DHCP服务器收到DHCP-REQUEST报文后,没有找到相应的租约记录,或者由于某些原因无法正常分配IP地址,则发送DHCP-NAK报文作为应答,通知DHCP客户端无法分配合适IP地址。DHCP客户端需要重新发送DHCP-DISCOVER报文来请求新的IP地址。
四次申请之后,仍不能得到IP,则从169.254.0.0/16中选用一个作为IP地址。
APIPA(Automatic Private IP Addressing,自动专用IP寻址),是一个DHCP故障转移机制,默认的网络掩码255.255.0.0。客户机调整它们的地址使用它们在使用ARP的局域网中是唯一的。APIPA可以为没有DHCP服务器的单网段网络提供自动配置TCP/IP协议的功能
租期
续租:当租期到达1/2时,客户端若依然在线,客户端主动发出Request数据包来续租;
若续租失败,继续在7/8的租期再次发送Request数据包续租;
若依然失败,那租期到达时地址被收回,客户端若想继续使用,需要重新获取地址。