DHCP动态主机配置协议分析

版权声明:<--本博客所有内容均为个人在学习工作中的总结、摘录等-- --转载请注明出处-- --如有侵权请联系删除--> https://blog.csdn.net/qq_42196196/article/details/84111099

简介

        DHCP(Dynamic Host Configuration Protocol)即动态主机配置协议是一个局域网的网络协议,使用UDP协议工作,主要有两个用途:使网络环境中的主机动态的获得IP地址、Gateway地址、DNS服务器地址等信息,并能够提升地址的使用率;给用户用于内部网管理员作为对所有计算机作中央管理的手段。
        DHCP的前身是 BOOTP。BOOTP 原本是用于无磁盘主机连接的网络上面的:网络主机使用 BOOT ROM 而不是磁盘起动并连接上网络,BOOTP 则可以自动地为那些主机设定 TCP/IP 环境。但 BOOTP 有一个缺点:您在设定前须事先获得客户端的硬件地址,而 且,与 IP 的对应是静态的。换而言之,BOOTP 非常缺乏 "动态性" ,若在有限的 IP 资源环境中,BOOTP 的一对一对应会造成非常可观的浪费。
        DHCP 可以说是 BOOTP 的增强版本,它分为两个部份:一个是服务器端,而另一个是客户端。所有的 IP 网络设定数据都由 DHCP 服务器集中管理,并负责处理客户端的 DHCP 要求;而客户端则会使用从服务器分配下来的IP环境数据。比较起 BOOTP ,DHCP 透过 "租约" 的概念,有效且动态的分配客户端的 TCP/IP 设定,而且,作为兼容考虑,DHCP 也完全照顾了 BOOTP Client 的需求。

注:为了便于理解,下图为本机网卡信息:

封包格式及各字段分析

三种机制分配IP地址:
1. 自动分配方式,DHCP服务器为主机指定一个永久性的IP地址,一旦DHCP客户端第一次成功从DHCP服务器端租用到IP地址后,就可以永久性的使用该地址。
2. 动态分配方式,DHCP服务器给主机指定一个具有时间限制的IP地址,时间到期或主机明确表示放弃该地址时,该地址可以被其他主机使用。
3. 手工分配方式,客户端的IP地址是由网络管理员指定的,DHCP服务器只是将指定的IP地址告诉客户端主机。
具有以下功能:
1. 保证任何IP地址在同一时刻只能由一台DHCP客户机所使用。
2. DHCP应当可以给用户分配永久固定的IP地址。
3. DHCP应当可以同用其他方法获得IP地址的主机共存(如手工配置IP地址的主机)。
4. DHCP服务器应当向现有的BOOTP客户端提供服务。
        DHCP消息的格式是基于BOOTP(Bootstrap Protocol)消息格式的,这就要求设备具有BOOTP中继代理的功能,并能够与BOOTP客户端和DHCP服务器实现交互。BOOTP中继代理的功能,使得没有必要在每个物理网络都部署一个DHCP服务器。

封包格式及各字段分析

封包格式

字段分析

OP:操作码,占8位、分为请求报文和响应报文。1:请求报文,2:应答报文。即client送给server的封包,设为1,反之为2。
请求报文:Discover:1、Request:3、Release:7、Inform:8、Decline:4。
应答报文:Offer:2、ACK:5、NAK:6。


HW Type:硬件地址类型,占8位、MAC地址类型其实是指明网络类型,HW type值为1时表示为最常见的以太网MAC地址类型。
HW Len:硬件地址长度,占8位、以太网MAC地址长度为6个字节,即以太网时HW Len值为6。
Hops:跳点数,占8位、默认为0。DHCP请求报文每经过一个DHCP中继,该字段就会增加1。没有经过DHCP中继时值为0。(若数据包需经过router传送,每站加1,若在同一网内,为0。)
Transaction ID:事务标识,占32位、客户端通过DHCP Discover报文发起一次IP地址请求时选择的随机数,相当于请求标识。用来标识一次IP地址请求过程。在一次请求中所有报文的ID都是一样的。
Seconds:引导时间,占32位、客户端从获取到IP地址或者续约过程开始到现在所消耗的时间,以秒为单位。在没有获得IP地址前该字段始终为0。(DHCP客户端开始DHCP请求后所经过的时间。目前尚未使用,固定为0。)
Flags:标志位,只使用第0比特位,是广播应答标识位,用来标识DHCP服务器应答报文是采用单播还是广播发送,0表示采用单播发送方式,1表示采用广播发送方式。其余位尚未使用。(即从0-15bits,最左1bit为1时表示server将以广播方式传送封包给client)。注:在客户端正式分配了IP地址之前的第一次IP地址请求过程中,所有DHCP报文都是以广播方式发送的,包括客户端发送的DHCP Discover和DHCP Request报文,以及DHCP服务器发送的DHCP Offer、DHCP ACK和DHCP NAK报文。当然,如果是由DHCP中继器转的报文,则都是以单播方式发送的。另外,IP地址续约、IP地址释放的相关报文都是采用单播方式进行发送的。
Client IP Address:客户端IP地址,占32位、仅在DHCP服务器发送的ACK报文中显示,在其他报文中均显示0,因为在得到DHCP服务器确认前,客户端是还没有分配到IP地址的。只有客户端是Bound、Renew、Rebinding状态,并且能响应ARP请求时,才能被填充。
Your IP Address:服务器分配给客户端的IP地址,占32位、仅在DHCP服务器发送的Offer和ACK报文中显示,其他报文中显示为0。
Srever IP Address:服务器IP地址,占32位、仅在DHCP Offer、DHCP ACK报文中显示,其他报文中显示为0。(用于bootstrap过程中的IP地址)
Gateway IP Address:网关IP地址,占32位、如果没有经过DHCP中继,则显示为0。(转发代理(网关)IP地址)
Client Hardware Address:客户端的硬件地址,占128位、在每个报文中都会显示对应DHCP客户端的MAC地址。
Server Name:服务器名称(DNS域名格式),占512位、在Offer和ACK报文中显示发送报文的服务器名称,其他报文显示为0。
Boot File name:服引导文件名,占1024位、仅在DHCP Offer报文中显示,其他报文中显示为空。
Options:可选项字段,长度可变,格式为"代码+长度+数据"。

数据包分析

完整的DHCP四次交互:

发现(Discover):
        发现阶段,即DHCP客户机寻找DHCP服务器的阶段。DHCP客户机以广播方式(因为DHCP服务器的IP地址对于客户机来说是未知的)发送DHCP discover发现信息来寻找DHCP服务器,即向地址255.255.255.255发送特定的广播信息。网络上每一台安装了TCP/IP协议的主机都会接收到这种广播信息,但只有DHCP服务器才会做出响应。

服务响应(Offer):
        提供阶段,即DHCP服务器提供IP地址的阶段。在网络中接收到DHCP discover发现信息的DHCP服务器都会做出响应,它从尚未出租的IP地址中挑选一个分配给DHCP客户机,向DHCP客户机发送一个包含出租的IP地址和其他设置的DHCP offer提供信息。

请求(Request):
        选择阶段,即DHCP客户机选择某台DHCP服务器提供的IP地址的阶段。如果有多台DHCP服务器向DHCP客户机发来的DHCP offer提供信息,则DHCP客户机只接受第一个收到的DHCP offer提供信息,然后它就以广播方式回答一个DHCP request请求信息,该信息中包含向它所选定的DHCP服务器请求IP地址的内容。之所以要以广播方式回答,是为了通知所有的DHCP服务器,他将选择某台DHCP服务器所提供的IP地址。

消息类型解析:

确认(ACK):
        确认阶段,即DHCP服务器确认所提供的IP地址的阶段。当DHCP服务器收到DHCP客户机回答的DHCP request请求信息之后,它便向DHCP客户机发送一个包含它所提供的IP地址和其他设置的DHCP ACK确认信息,告诉DHCP客户机可以使用它所提供的IP地址。然后DHCP客户机便将其TCP/IP协议与网卡绑定,另外,除DHCP客户机选中的服务器外,其他的DHCP服务器都将收回曾提供的IP地址。

重新登录:
        以后DHCP客户机每次重新登录网络时,就不需要再发送DHCP discover发现信息了,而是直接发送包含前一次所分配的IP地址的DHCP request请求信息。当DHCP服务器收到这一信息后,它会尝试让DHCP客户机继续使用原来的IP地址,并回答一个DHCP ACK确认信息。如果此IP地址已无法再分配给原来的DHCP客户机使用时(比如此IP地址已分配给其它DHCP客户机使用),则DHCP服务器给DHCP客户机回答一个DHCP NACK否认信息。当原来的DHCP客户机收到此DHCP NACK否认信息后,它就必须重新发送DHCP discover发现信息来请求新的IP地址。
NACK:

更新租约:
        DHCP服务器向DHCP客户机出租的IP地址一般都有一个租借期限,期满后DHCP服务器便会收回出租的IP地址。如果DHCP客户机要延长其IP租约,则必须更新其IP租约。DHCP客户机启动时和IP租约期限过一半时,DHCP客户机都会自动向DHCP服务器发送更新其IP租约的信息。

其他相关

DHCP交互过程:

1.DHCP Client以广播的方式发出DHCP Discover报文。
2.所有的DHCP Server都能够接收到DHCP Client发送的DHCP Discover报文,所有的DHCP Server都会给出响应,向DHCP Client发送一个DHCP Offer报文。DHCP Offer报文中“Your(Client) IP Address”字段就是DHCP Server能够提供给DHCP Client使用的IP地址,且DHCP Server会将自己的IP地址放在“option”字段中以便DHCP Client区分不同的DHCP Server。DHCP Server在发出此报文后会存在一个已分配IP地址的纪录。
3.DHCP Client只能处理其中的一个DHCP Offer报文,一般的原则是DHCP Client处理最先收到的DHCP Offer报文。DHCP Client会发出一个广播的DHCP Request报文,在选项字段中会加入选中的DHCP Server的IP地址和需要的IP地址。
4.DHCP Server收到DHCP Request报文后,判断选项字段中的IP地址是否与自己的地址相同。如果不相同,DHCP Server不做任何处理只清除相应IP地址分配记录;如果相同,DHCP Server就会向DHCP Client响应一个DHCP ACK报文,并在选项字段中增加IP地址的使用租期信息。
5.DHCP Client接收到DHCP ACK报文后,检查DHCP Server分配的IP地址是否能够使用。如果可以使用,则DHCP Client成功获得IP地址并根据IP地址使用租期自动启动续延过程;如果DHCP Client发现分配的IP地址已经被使用,则DHCP Client向DHCP Server发出DHCP Decline报文,通知DHCP Server禁用这个IP地址,然后DHCP Client开始新的地址申请过程。
6.DHCP Client在成功获取IP地址后,随时可以通过发送DHCP Release报文释放自己的IP地址,DHCP Server收到DHCP Release报文后,会回收相应的IP地址并重新分配。

续租:

        在使用租期超过50%时刻处,DHCP Client会以单播形式向DHCP Server发送DHCP Request报文来续租IP地址。如果DHCP Client成功收到DHCP Server发送的DHCP ACK报文,则按相应时间延长IP地址租期;如果没有收到DHCP Server发送的DHCP ACK报文,则DHCP Client继续使用这个IP地址。
        在使用租期超过87.5%时刻处,DHCP Client会以广播形式向DHCP Server发送DHCP Request报文来续租IP地址。如果DHCP Client成功收到DHCP Server发送的DHCP ACK报文,则按相应时间延长IP地址租期;如果没有收到DHCP Server发送的DHCP ACK报文,则DHCP Client继续使用这个IP地址,直到IP地址使用租期到期时,DHCP Client才会向DHCP Server发送DHCP Release报文来释放这个IP地址,并开始新的IP地址申请过程。

DHCP配置术语,主要参数:

作用域:网络上IP地址完整连续范围,通常定义为接受DHCP服务网络上的单个物理子网。
排除范围:在作用域内从DHCP服务中排除的有限IP地址序列。排除后的IP地址不会通过DHCP服务分配出去。
地址池:定义排除范围后,剩余的地址在作用域内形成可用的“地址池”。
租约:租约是由DHCP服务器指定的一段时间,在此段时间内,分配的IP可以供客户机使用,一般情况下,客户端会在一定时间发送“续租报文”。租约期限决定租约何时期满以及客户端需要向服务器对它进行更新的频率。
保留:可以使用“保留”创建DHCP服务器指派的永久地址租约,可以保留一些特定IP地址供DHCP客户端永久使用,可确保子网上指定的设备始终使用相同的IP地址。保留地址可以使用作用域地址范围中任何IP地址,即使该IP地址同时还位于某个排除范围内。
选项:选项是DHCP服务器在向DHCP客户端提供租约时可指派的其他客户端配置参数。例如,一些常用选项包含默认网关(路由器)、DNS服务器、IP地址。通常为每个作用域启用并配置这些选项类型。

跨网络的 DHCP 运作

        DHCP Discover报文是以广播方式进行的,其情形只能在同一网络之内进行,因为路由器是不会将广播传送出去的。但如果 DHCP 服务器安设在其它的网络上面呢?由于DHCP客户端还没有IP环境设定,所以也不知道网关,而且有些路由器也不会将 DHCP广播封包传递出去,因此这情形下DHCP发现报文是永远没办法抵达DHCP服务端的,当然也不会发生Offer及其它动作了。要解决这个问题,我们可以用DHCP代理(中继)主机来接管客户的DHCP请求,然后将此请求传递给真正的 DHCP 服务器,然后将服务器的回复传给客户。这里,代理主机必须自己具有路由能力,且能将双方的封包互传对方。

DHCP服务中继实现:
所有计算机均为自动获取IP
DHCP Server在1.1.2.0/24网段,其中配置1.1.1.0/24网段和1.1.2.0/24网段的DHCP服务。
路由器上(Cisco),命令#ip helper-address 1.1.1.253 配置中继服务。
DHCP服务中继实现,至此,所有计算机均可以向DHCP Server请求IP地址,1.1.2.0/24网段主机直接通过广播发现报文向DHCP Server请求IP地址,1.1.1.0/24网段主机通过路由器的中继请求IP地址(主机广播发现报文请求IP地址,路由器接收报文,单播到DHCP服务器,服务器响应将报文单播至路由器,路由器在1.1.1.0/24网段广播,刚刚请求IP的主机接收报文。。。(再向下说就是废话了)。。。)

猜你喜欢

转载自blog.csdn.net/qq_42196196/article/details/84111099
今日推荐