DHCP流程

文章出处:http://guoyueheng148.blog.163.com/blog/static/60167091201002441837141/

DHCP服务是由服务器端和客户端组成的。客户端请求配置,服务器分发配置。DHCP协议是一个应用层的协议,DHCP客户端使用的是熟知的UDP端口68发出请求,而DHCP服务器使用熟知的UDP端口67响应客户端。DHCP(动态主机配置协议)是从BOOTP协议发展而来的用于自动分配客户端计算机IP地址的一种标准协议,在RFC 2131中进行定义。Windows服务器操作系统中,均包含DHCP服务器组件。
现在具体看一下客户与服务器的工作流程。
首先假设一个案例的环境以及说明:一个使用路由器与外界割开的局域网,网络ID为1.0.0.0/8,有多台DHCP服务器,其中一台DHCP服务器的IP 地址为1.1.1.1,MAC地址为aaaaaaaaaaaa。这台DHCP服务器可以提供的地址范围是1.9.9.9~1.255.255.254。局域网内有另一台被配置为DHCP客户端的机器,它的MAC地址为112233445566

<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                   Smac:112233445566 

Dip:255.255.255.255      Sip:0.0.0.0

<2>服务器响应。dhcp服务流程的第2步,也称为dhcpoffer。当网络内的所有dhcp服务器接收到客户机请求IP地址时,它就在自己的 IP地址库中查找是否有空闲IP提供给客户。如果有,dhcp服务器就在数据库中顺序的将空闲Ip地址做上标记,然后加入到dhcpoffer消息中把这个包广播出去。注意,客户机在收到dhcpoffer数据包时,虽然客户机选择了IP地址,但并没有设定到tcp/ip配置中,所以其ip地址仍然是 0.0.0.0。
这是简化后的offer包:

Dmac:112233445566     Smac:aaaaaaaaaaaa

Dip:255.255.255.255      Sip:1.1.1.1


<3>客户机选中网络某台dhcp服务器并选择其所提供的IP。这是dhcp服务流程的第3步,也称为dhcprequest。Dhcp客户机发送 dhcprequest广播包,在广播包中的[dhcp服务器表识]字段被设置的dhcp服务器IP地址是被dhcp客户端选中的dhcp服务器,所有其他dhcp服务器都将把刚才分发出去的IP地址取消。
这是简化后的request包:

 Dmac:ffffffffffff                        Smac:112233445566 

Dip:255.255.255.255           Sip:0.0.0.0


<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     Smac:aaaaaaaaaaaa

Dip:255.255.255.255       Sip:1.1.1.1


<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地址分配给不同的客户机。

你可能感兴趣的:(网络协议)