目录
一、基本概念
二、工作过程
1.DHCP客户广播发送DHCP发现报文(寻找DHCP服务器)
2.DHCP服务器发送DHCP提供报文(提供IP地址租用)
3.DHCP客户接受并发送DHCP请求报文(接受IP地址租约)
4.DHCP服务器发送DHCP确认报文(确认IP地址租约)
5.更新租用期(IP地址续约)
5.1 DHCP服务器同意
5.2 DHCP服务器不同意
5.3 DHCP服务器未响应
简单总结:
三、中继代理
DHCP使用客户/服务器的方式,DHCP服务器上运行DHCP服务器进程,简称为DHCP服务器。其在运输层的端口为67。
在DHCP客户端上运行DHCP客户进程,简称为DHCP客户。其在运输层的端口为68。
它使用运输层UDP所提供的服务,即在运输层会被封装成UDP用户数据报。
我们想要用户主机能正常访问Web服务器,就需要对主机配置IP地址、子网掩码、默认网关等信息。DHCP协议允许服务器向客户端动态分配网络配置信息。
我们可以在网络中添加DHCP服务器,网络中的各主机开机后自动启动DHCP程序,随后向DHCP服务器请求自己的网络配置信息。
启用DHCP后,DHCP客户会广播发送DHCP发现报文,封装该报文的源IP地址为0.0.0.0。因为此时主机还未配置IP地址,封装该报文的目的IP地址为255.255.255.255,这是因为此时并不知道网络中有多少个DHCP服务器以及它们的IP地址,所以需要广播发送。
该报文内部封装有事务ID、DHCP客户的MAC地址等数据。
因为发现报文是广播发送,所以网络上的所有设备都可以接收到该报文。
对于DHCP客户,它们的应用层并没有监听该UDP数据报目的端口67的进程,无法交付,所以进行丢弃。(再次体现了端口就是用来区分不同应用进程的标识符这一特性)
对于DHCP服务器,它们的应用层始终运行着DHCP服务器进程,所以会接受该报文,并根据发现报文中的客户MAC地址在自己的数据库里面进行查找。
如果有针对该MAC地址的配置信息。就直接使用这些配置信息构建并发送DHCP提供报文。如果没有就采用默认配置信息构建并发送DHCP提供报文。
封装该报文的源IP地址为DHCP服务器的IP地址,目的IP地址仍然为广播地址。因为此时主机仍然没有配置IP地址。
该报文内部封装有事务ID以及配置信息(IP地址、子网掩码、地址租期等配置信息)等数据。
注意:DHCP服务器从自己的IP地址池中挑选待租用给主机的IP地址时,会使用ARP协议来确保所选IP地址未被网络中其他主机所占用。
DHCP客户会根据提供报文中的事务ID来判断是否是自己请求的报文。即提供报文的事务ID与前面发送的发现报文的事务ID是否相等。
如果有多个提供报文时,DHCP客户一般会选择先到的那个提供报文。接受后,DHCP客户便会向选择的那个DHCP服务器发送DHCP请求报文。
封装该报文的源IP地址仍为0.0.0.0,此时DHCP客户才刚选择好DHCP服务器,必须得先经过选择的服务器的同意后,才能正式使用向该DHCP服务器租用的IP地址。目的IP地仍为广播地址,这样就可以不用向网络中的每个DHCP服务器单播发送DHCP请求报文,来告知它们是否请求它们作为自己的DHCP服务器。
该报文内部封装有事务ID、DHCP客户的MAC地址、接受的租约中的IP地址,提供此租约的服务器的IP地址等数据。
DHCP服务器接受该请求后会向客户端发送一个DHCP确认报文。
该报文源IP地址为DHCP服务器的IP地址,目的IP地址仍为255.255.255.255。
DHCP客户收到该报文后就可以使用所租用到的IP地址了。
注意:在使用租用到的IP地址之前,主机还会使用ARP协议来检测所租用的IP地址是否被其他主机已经占用,如果已被占用,DHCP客户就向DHCP服务器发送DHCP谢绝报文,来谢绝IP地址的租约,并重新发送发现报文。
租用期过了一半时,DHCP客户就会向DHCP服务器发送DHCP请求报文来请求更新租用期。
封装该报文的源IP地址就是客户租用的IP地址,目的IP地址为选择的服务器的IP地址。
如果服务器同意就会发送DHCP确认报文,客户就会获得新的租用期。
如果服务器不同意就发送DHCP否认报文,这时DHCP客户就必须立即停止使用租用的IP地址,并重新发送DHCP发现报文。
则在租用期过了87.5%时,DHCP客户再次发送DHCP请求报文。并等待服务器的反应。如果DHCP服务器依然未作出响应,那么当租用期到期后,DHCP客户就必须立即停止使用租用的IP地址,并重新发送DHCP发现报文。
随时解除租约:整个租用期期间,DHCP客户还可以随时提前停止租用期,这时候只需要向DHCP服务器发送DHCP释放报文段即可。
对于上述过程博主觉得可以这样去理解。 现在的你化身为一个准备去大城市打拼的热血青年。
但是你来到新的城市没有房子住,所以你(客户)得先联系可以提供租房服务的人(服务器),在这座城市(网络)里肯定有很多个可以提供租房服务的人。于是你用了某种方法将自己所在的地址(MAC地址)等信息广播发送出去,寻找这些人(寻找DHCP服务器),这些人看到后会先在自己租房表(数据库)里面查一下有没有关于你所在地址的周围房子的信息(IP地址),然后加上可以租用的时间(地址租期)等等给你发过去(提供IP地址租用)。
急切的你不会等着所有的人都给你回消息,于是你决定哪条信息先到就选择谁的。选择好之后你还得跟人家商量一下,并且告知其他人你已经找到房子了(接受IP地址租约)。随后你选择的那家确定你可以租进去(确认IP地址租约)。
租房过了一半后,你和提供租房的人商量想续约,如果人家同意就更新租期,如果不同意你就立马提着包走人,如果未响应就再过一段时间再和人家商量。而在租期之间如果你不想住了,你也可以立马走人然后重新找个地方。
总结只是为了大家能更好的去理解,一些细节过程肯定还是有差异的。
如果在一个路由器上与一段网络直接相连,该段网络如果没有DHCP服务器就无法给网络里的主机配置信息,因为路由器是隔离广播域的,而主机发送的DHCP发现报文是广播报文。
解决这个问题的方法就是给该路由器配置DHCP服务器的IP地址并使之成为DHCP中继代理。这时该路由器收到广播发送的DHCP发现报文时就会单播发给DHCP服务器。
使用中继代理的另一个原因是,我们并不愿意在每一个网络上都设置一个DHCP服务器,因为这样就会使DHCP服务器的数量太多。