一、作用
dhcp(Dynamic Host Configuration Protocol)用于主机自动获取ip地址、网关以及dns等配置。其基于C/S的架构,服务器默认监听UDP67端口,客户端默认监听UDP68端口。
二、操作过程
主机向dhcp服务器请求获取配置有4个步骤:
①主机发出一个dhcp discover广播报文,请求获取配置信息
②服务器收到请求后回复dhcp offer报文,包含相关配置信息
③主机发送dhcp request报文,向服务器确认自己将要使用分配的ip地址
④服务器回复ack,客户端确认使用该地址,整个过程结束
以此拓扑为例,Host1和DHCP Server(R2)不在同一个网段,所以需要在R1的e0/0接口上配置dhcp中继,现主机请求通过dhcp获取ip地址等信息
- DHCP Discover
Discover报文源ip为0.0.0.0,源mac为Host1的mac地址,因为此时主机没有ip地址,目的ip为255.255.255.255广播地址,目的mac为全f的二层广播地址,同一个局域网内的dhcp服务器均能接收到该主机的dhcp请求。R1的e0/0接口配置了dhcp中继,并且能够到达R2(不同网段的DHCP服务器),所以R1就是一台192.168.1.0网段里的dhcp服务器,他转发各种dhcp报文到R2,图2和图3中dhcp消息内,除了Hops(表明经过了多少跳到达dhcp服务器)和Relay agent IP address(dhcp中继的ip地址)不一样外,其他均一致,如图4和图5所示:
注意:dhcp中继(R1)和dhcp服务器(R2)都是使用67端口进行通信
该报文中各个选项字段说明了DHCP消息类型,客户端标识,主机名,请求列表等信息
-
DHCP Offer
服务器接收到Discover报文之后,如果本地地址池能够提供ip,则回复Offer报文。源IP/MAC为dhcp服务器ip/mac,由于此时主机还没有ip,目的IP/MAC为广播。
其中,your IP address就是服务器分配给主机的ip地址,其他相关的配置在Option字段中给出。 -
DHCP Request
主机接收到DHCP Offer消息后,确定自己要使用这些配置,就会发送Request报文。由于局域网中可能不止存在一台dhcp服务器,当主机发送discover报文之后,可能会收到多个Offer报文,一般主机会选择最先接收到的那个,在这个时候,主机不会马上使用这些配置,故源IP为0.0.0.0,目的IP/MAC为广播,个人认为这个Offer消息有两个作用,其一是用来告诉同网段内的所有dhcp服务器自己要选择哪个dhcp服务器,其二是告诉提供给自己所使用的Offer报文的那个服务器,我已经收到你的Offer消息,并确认要使用这个地址,你可以把这个ip从地址池中删除了。假如服务器是只发出Offer消息就认为所提供的ip会被使用,那我们发送几百个Discover之后ip地址池可能就被耗尽了 -
DHCP ACK
服务器收到Request之后,检查地址池,确认该地址可用后回复ACK报文。主机接收到该报文之后,才真正的使用服务器提供的地址。所以ACK报文的目的IP/MAC都是广播
至此,Host1获取到了DHCP服务器(R2)所提供的IP地址192.168.1.1,配置好IP地址之后,会针对该地址发送免费ARP,以确认该网段中没有其他地址冲突,由于本例中dhcp服务器上没有将192.168.1.1地址给排除,导致主机获取到了该地址,与R1的e0/0口地址冲突,这时候Host1发送一个DHCP Decline报文,并开始新的一轮dhcp地址请求过程,最后请求到192.168.1.2
总结一下本例中遇到的DHCP报文类型并补充一些没有涉及到的类型:
Type | 作用 |
---|---|
Discover | 客户端发起DHCP请求获取IP地址等配置信息 |
Offer | dhcp服务器提供相关配置信息给客户端 |
Request | 客户端确认要使用第一个Offer提供的IP地址,发送Request广播消息。此外,客户端下次开机的时候只需要发送Request消息而无需再发Discover消息重新请求一遍 |
ACK | 服务器接收到Request后确认IP地址可以使用,回复ACK |
NACK | 服务器接收到Request后发现由于某些原因IP地址无法使用,回复NACK |
Release | 用户不需要分配的IP地址时,向服务器发送Release消息释放该被绑定的租约 |
Decline | 客户端收到ACK后,发现该IP地址与同网段内其他主机的地址发生冲突,回复Decline,并重新发生Discover再次请求 |
Inform | 客户端需要从服务器获取更详细的信息时发送Inform报文,服务器回复ACK |
三、其他
- DHCP饥饿攻击与防护
顾名思义,这种攻击手段通过伪造大量的mac地址在短时间内发送大量dhcp请求,把dhcp服务器的地址池资源耗尽,之后可以在网络中放置一台非法dhcp服务器,从而给其他主机下发攻击者自定义的配置信息。可以通过交换机上配置端口安全,限制mac地址数量以及DHCP snooping技术(限制交换机端口接收offer报文)来防止此类攻击