<1>客户机请求IP地址配置。这是dhcp流程的第一步,也称为dhcpdiscover。当客户机启动时,客户机上的IP地址被配置为0.0.0.0。由于使用这样的IP地址是不能进行正常通信,客户机就必须通过DHCP服务器来获取一个合法的IP,而客户机又不知道服务器的IP,所以客户机这个时候会对整个网络,也就是255.255.255.255做一全网广播。这个广播包的内容大致是这样:”网络里有没有DHCP服务器?如果有,谁可以给我一个 IP地址呢?”注意,除非我们路由器上做了相关的dhcp转发设定,否则是不会路由这样的广播包。因为若转发全网广播这会迫使整个Internet都接收这样的包,大量的广播包会对网络造成阻塞,影响了Internet的性能。请记住这句话:“如果dhcp客户端先前有一个dhcp服务器分配的IP,而在续约的时候dhcp服务器并没提供服务,那么客户端将继续使用这个IP。如果dhcp客户端第一次被配置,而在申请租约的时候服务器不存在,那么客户端将根据注册表来选择是自动配置169.254.0.0,还是0.0.0.0”
这个discover包的贞结构以及IP报头结构简化以后应该如此:
Dmac:ffffffffffff |
< 2>服务器响应。dhcp服务流程的第2步,也称为dhcpoffer。当网络内的所有dhcp服务器接收到客户机请求IP地址时,它就在自己的 IP地址库中查找是否有空闲IP提供给客户。如果有,dhcp服务器就在数据库中顺序的将空闲Ip地址做上标记,然后加入到dhcpoffer消息中把这个包广播出去。注意,客户机在收到dhcpoffer数据包时,虽然客户机选择了IP地址,但并没有设定到tcp/ip配置中,所以其ip地址仍然是 0.0.0.0。
这是简化后的offer包:
Dmac:112233445566 Dip:255.255.255.255 |
< 3>客户机选中网络某台dhcp服务器并选择其所提供的IP。这是dhcp服务流程的第3步,也称为dhcprequest。Dhcp客户机发送 dhcprequest广播包,在广播包中的[dhcp服务器表识]字段被设置的dhcp服务器IP地址是被dhcp客户端选中的dhcp服务器,所有其他dhcp服务器都将把刚才分发出去的IP地址取消。
这是简化后的request包:
Dmac:ffffffffffff Dip:255.255.255.255 |
< 4>服务器确认IP租约。这也是租约过程中的最后一步,也称为dhcpack/dhcpnak。Dhcp服务器接收到dhcprequest后,以 dhcpack消息的形式向客户机广播成功的确认,该消息包含IP地址的有效租约和其他可能的配置信息,比如dns的设置。当客户机收dhcpack消息时,就完成了tcp/ip的初始化,也就是说客户机可以在网络上通信了。如果客户机接收到来自服务器dhcpnak不成功确认的数据包,它将重新开始 dhcp租约过程。如果DHCP客户端的操作系统为Windows 2000及其后版本,当DHCP客户端接收到DHCPACK广播消息后,会向网络发出三个针对此IP地址的ARP解析请求以执行冲突检测,确认网络上没有其他主机使用DHCP服务器提供的IP地址,从而避免IP地址冲突。如果发现该IP已经被其他主机所使用(有其他主机应答此ARP解析请求),则DHCP 客户端则会广播发送(因为它仍然没有有效的IP地址)DHCPDECLINE消息给DHCP服务器拒绝此IP地址租约,然后重新发起DHCP DISCOVER进程。此时,在DHCP服务器管理控制台中,会显示此IP地址为BAD_ADDRESS。
如果没有其他主机使用此IP地址,则DHCP客户端的TCP/IP使用租约中提供的IP地址完成初始化,从而可以和其他网络中的主机进行通讯。至于其他TCP/IP选项,如DNS服务器和 WINS服务器等,本地手动配置将覆盖从DHCP服务器获得的值。被简化了的数据包结构:
Dmac:112233445566 Dip:255.255.255.255 |
< 5>IP租约的更新。也可以说是续约,比如想继续组某家房产中介提供的房屋时。这里需要记住两个时间点,一个是租约长度的一半为T1,另一个是租约到达租约长度87.5%时为T2。续约的时间是当DHCP客户机重启或者租期达到T1时。客户机直接向提供租约的服务器发送请求dhcprequest,要求更新现有的地址租约,延长租期。如果dhcp服务器收到请求,它将发送dhcpack确认信息给客户机,更新客户机租约。如果客户机无法与提供租约的服务器取得联系,则客户机将在T1与T2一半的时间再次发送给其权威DHCP服务器发送一个DHCPREQUEST。如果还是得不到其响应,客户机一直等到租器达到T2时,进入到一种重新申请的状态,它向网络上的所有的服务器广播dhcprequest请求以更新现有的地址租约。如果收到来自服务器的响应,则客户端更新。如果租期过了仍然没有收到服务器的没收到响应,客户机将无法使用现在的地址。
<6>ip租约释放
使用ipconfig/release命令使客户机向服务器发送DHCPRELEASE消息并释放其租约。注意,dhcp客户机在关闭时,并不调用 ipconfig /release,也就是释放租约。所以,如果客户机在租约时间内保持关闭,在租约到期后,dhcp服务器可能将客户机的ip地址分配给不同的客户机。
评论