DHCP以及客户端是如何避免IP冲突

原文地址:http://www.xzbu.com/8/view-7133510.htm

1 DHCP简单回顾
  1.1 什么是DHCP
  DHCP (Dynamic Host Configuration Protocol)是一种动态的向终端提供IP地址、网关、DNS等配置参数的协议。DHCP协议由BOOTP(Bootstrap Protocol)协议发展而来,旨在降低大规模网络中人为配置工作量大、容易出现地址冲突等问题。达到简化IP地址配置,实现IP地址集中管理的目的。DHCP基于UDP协议,Client端口号是68,DHCP Server端口号是67。
  1.2 IP地址的分配顺序
DHCP Server向Client分配IP地址的先后顺序如下:
1、分配管理员配置了与Client mac地址静态绑定的IP地址;
2、分配Client曾经使用过的IP地址;
3、在地址池中顺序查找可供分配的IP地址,找到之后分配给Client。
无论是管理员手工分配IP地址,还是通过DHCP自动分配,非常重要的一个原则就是不能出现地址分配冲突的情况。

2 IP地址分配冲突避免
  2.1 IP地址申请及分配案例
   下面通过一个实验给出DHCP协议在动态分配IP地址时是如何保证不出现地址冲突的。
  2.1.1 试验案例
   R1、R2、R3共处于一个广播网络中,其中R1作为DHCP Server,R2配置静态IP地址100.1.1.2,R3为Client,通过DHCP动态获取IP地址。
   下面通过详细分析DHCP Server与Client之间是如何保证分配出去的地址不产生冲突的,试验不考虑静态IP地址绑定的场景。
  2.1.2 DHCP Server的实现
  按照协议规定,Client在申请IP地址时,会在它的本地物理子网上广播一个DHCPDISCOVER报文,用以寻找一个可用的DHCP Server。DHCP Server会通过DHCPOFFER报文回应Client,并携带一个可用的IP地址。在发送DHCPOFFER报文之前,DHCP Server有义务保证这个IP地址没有被网络上其他的设备占用,从而出现IP地址冲突。DHCP Server会向该IP地址发送ICMP echo request报文来检验该IP是否被占用(即发起一个ping的过程)。如果被占用,按照前文提及的IP地址分配顺序重新分配,并且再次重复IP地址冲突检测。DHCP Server(R1:100.1.1.1)在发送DHCPOFFER报文之前,先向100.1.1.2发送了ICMP echo request报文,因为这个地址已经被配置在R2上了,因此R2向DHCP Server回复了ICMP Echo reply报文。之后DHCP Server继续向100.1.1.3发送ICMP echo request,连续两个ICMP echo request报文未收到对端回复,其认为这个地址没有被占用,于是通过DHCPOFFER向Client(R3)提供100.1.1.3供其选择使用。
  2.1.3 Client的实现
  现实网络往往比试验环境复杂很多,在上一个过程中,如果R2配置了ACL,禁止ICMP echo request访问,则不会响应DHCP Server的ping请求。
然而在这个过程中,因为DHCP Server没有检查出100.1.1.2这个地址已经被网络中的R2占用,如果Client最终选择使用100.1.1.2这个IP地址,就会同R2出现地址冲突,这显然是无法满足需求的。
  实际在最后的确认阶段,当Client收到DHCP Server发送的DHCPACK报文之后,并不会马上使用Server分配的这个地址,而是会发送目的地址为Server分配地址的ARP请求报文作最后的确认(即免费ARP)。
如果没有检测到冲突,则将此地址与自己绑定。如果检测到冲突,就向DHCP Server发送DHCPDECLINE报文,在Request IP Address(option 50)字段填入Server提供的发生冲突的IP地址。
发送完成后,等待一段时间再开始重新申请IP地址,直至申请到一个可用的IP地址。

3 小结
  由上述分析可知,在DHCP协议中,DHCP Server与Client分别通过不同的方式,在各自流程阶段进行IP地址冲突检测,以确保分配到真实可用的IP地址。

你可能感兴趣的:(dhcp)