DHCP协议详解

服务器 0
  1. DHCP是什么

1.1 DHCP定义

DHCP( Dynamic Host Configuration Protocol动态主机配置协议)定义:
  • 存在于应用层(OSI)

  • 前身是BOOTP(Bootstrap Protocol)协议

  • 是一个使用UDP(User Datagram Protocol,用户数据报协议)协议工作的,被用于局域网的一个网络协议

  • 主要是给网络快速自动地分配IP地址,能够帮助我们将IP地址和相关IP信息分配给网络中的计算机

  • 常用的2个端口:67(DHCP server), 68(DHCP client)

1.2 DHCP服务器

  • 一些运行有DHCP服务器端软件的特殊电脑

  • 普通电脑中都内置有DHCP客户端模块,电脑接上网络后,DHCP客户端发现新连通的网络,会在该网络上找DHCP服务器。DHCP服务器将给电脑提供合理的网络配置,并把设置信息传回本机,本机和DHCP服务器之间的通信,都是通过DHCP协议进行的

1.3 DHCP主要作用

  • 减少管理员的工作量

  • 避免输入错误的可能

  • 避免IP地址的冲突

  • 提高了IP地址的利用率

  • 方便客户端的配置:使client动态的获得IP地址、给设备配置正确的子网掩码,默认网关,DNS服务器地址信息等

2.DHCP的工作方式

2.1 DHCP的分配方式

自动分配

DHCP为客户端分配 租期永久的(无限长)的IP地址

手工分配

管理员为少数特定客户端(如WWW服务器等) 静态绑定固定的IP地址,通过DHCP将配置的固定IP地址发给客户端

动态分配

DHCP给主机指定一个有时间限制的IP地址,到达使用期限后或主机明确表示放弃这个地址时,客户端需要重新申请地址; 如果客户端没有重新申请,则这个地址将可能被其它的主机使用; 绝大多数客户端得到的都是这种 动态分配的地址(可以解决IP地址不够用的困扰)

2.2 DHCP的工作原理

租约(租约四部曲)

(1).发现阶段(DISCOVER)
  • DHCP客户端启动时,计算机发现本机上没有任何IP地址设定,将以广播方式通过UDP 67端口发送DHCP DISCOVER请求报文(客户端的MAC地址信息),来寻找DHCP服务器,请求IP地址租约,因为客户机还不知道自己属于哪一个网络,所以封包的源地址0.0.0.0目的地址255.255.255.255,向网络发送特定的广播信息

  • 网络上每一台安装了TCP/IP协议的主机都会接收这个广播信息,但只有DHCP服务器才会做出响应

  • 请求获得IP,子网掩码,默认网关,DNS等信息

(2).提供阶段(OFFER )
  • 该客户对应的租约已存在且未被再次分配(包括租约到期和未到期的租约),则直接分配已记录的地址信息

  • 该客户对应的租约不存在,服务器响应DHCP OFFER,会从对应的地址池中查找(注意:该处地址池应该有个前提条件,就是可用的地址池:应当和接收口的IP为同一网段,或同giaddr字段同一网段,否则无法分配);然后从尚未出租的IP地址中挑选一个最前面的ip地址连同其它的参数设定,响应给客户端一个DHCP OFFER (单播)报文,报文里面包括客户机MAC地址信息,TCP/IP的一些配置信息

(3).选择阶段(REQUEST)
  • DHCP客户端可以接收到多个DHCP服务器DHCP OFFER数据包,但只会挑选其中一个 DHCP OFFER(通常只接受收到的第一个DHCP OFFER数据包),然后会向网络发送一个DHCP REQUEST广播报文(报文中包含客户端的MAC地址、接受的租约中的IP地址、提供此租约的DHCP服务器地址等),告诉所有DHCP服务器它将指定接受哪一台服务器提供的 IP 地址,这样其他的服务器就会释放之前预分配给客户端的IP地址。同时,客户端还会向网络发送一个ARP 报文,查询网络上面有没有其它设备使用该 IP 地址,如果发现该 IP 已经被占用,客户端则会送出一个DHCP DECLIENT报文给 DHCP 服务器,拒绝接受其 DHCP OFFER,并重新发送 DHCP DISCOVER信息

  • 此时,由于还没有得到DHCP服务器的最后确认,客户端仍然使用0.0.0.0为源IP地址,255.255.255.255为目标地址进行广播。

(4).确认阶段(ACK )
  • 当DHCP Server收到DHCP Client发送的DHCP Request后,确认要为该DHCP Client提供的IP地址,并根据客户机的MAC地址记录该次租约行为后,并便向该DHCP Client响应一个ACK报文(包含该IP地址,默认网关,DNS服务器等网络配置信息),来告诉DHCP Client可以使用该IP地址了,并告知客户端这个网络参数租约的期限,并且开始租约计时。然后DHCP Client就可以将该IP地址与网卡绑定,完成初始化过程。另外其他DHCP Server都将收回自己之前为DHCP Client提供的IP地址

  • 客户端在接收到DHCP ACK后,会向网络发送针对此IP地址的ARP解析请求以执行冲突检测,查询网络上有没有其它机器使用该IP地址;如果发现该IP地址已经被使用,客户机会发出一个DHCP DECLINE数据包给DHCP服务器,拒绝此IP地址租约,并重新发送DHCP DISCOVER信息.

  • 当用户不再需要使用分配IP地址时,就会"主动"向DHCP服务器发送RELEASE报文,告知服务器用户不再需要分配IP地址,DHCP服务器会释放被绑定的租约(在数据库中清除某个MAC对某个IP的租约记录,这样,这个IP就可以分配给下一个请求租约的MAC)

续约

  • DHCP客户机会在租期过去50%的时候,直接向为其提供IP地址的DHCP服务器发送DHCP REQUEST消息包;如果客户机接收到该服务器回应的DHCP ACK消息包,客户机就根据包中所提供的新的租期以及其它已经更新的TCP/IP参数,更新自己的配置,IP租用更新完成。如果没有收到该服务器的回复,则客户机继续使用现有的IP地址,因为当前租期还有50%

  • 如果在租期过去50%的时候没有更新,则DHCP客户机将在租期过去87.5%的时候再次向为其提供IP地址的DHCP服务器联系;如果还不成功,到租约的100%时候,DHCP客户机必须放弃这个IP地址,重新申请

  • 如果此时并没有DHCP可用,DHCP客户机会使用169.254.0.0/16中随机一个地址,并且每隔5min在进行尝试

2.3 DHCP协议包的组成

op:

1.client发送给server的封包,设为1

2.server发送给client的封包,设为2

htype: 硬件类别,1表示10Mb/s的以太网(Ethernet)的硬件地址

hlen: 硬件地址长度

hops:跳数,若封包需经过router传送,每站加 1,若在同一网内,为0(客户端初始设置为0)

xid:DHCP REQUEST 时随机生成的一段字符串,服务器和客户端用来在它们之间交流请求和响 应,客户端用它对请求和应答进行匹配两个数据包拥有相同的xid说明他们属于同一次会话

seconds: 由客户端填充,表示从客户端开始获得IP地址或IP地址续借后所使用了的秒数

flags: 从0到15共16 bits

最左1Bit为1时表示 server将以广播方式传送封包给client

最左1Bit为0时表示 server将以单播方式传送封包给client

ciaddr: 客户端会在发送请求时将自己的ip地址放在此处

yiaddr: 服务器会将想要分配给客户端的ip地址放在此处

siaddr: 一般来说是服务器的ip地址.但是注意:根据openwrt源码给出的注释,当报文的源地址、siaddr、option­>server_id字段不一致(有经过跨子网转发)时,通常认为option­>srever_id字段为真正的服务器ip,siaddr有可能是多次路由跳转中的某一个路由的ip

giaddr: 如果需要跨子网进行DHCP地址发放,则在此处填入经过的路由器的ip地址

sname: 服务器主域名

file: 启动文件名,是一个空结尾的字符串。

options: 可以自由添加的部分,用于存放客户端向服务器请求信息和服务器的应答信息

2.4 DHCP中继

2.4.1 DHCP中继是什么

(1).在大型的网络中,可能会存在多个网段,DHCP客户机通过网络广播消息获得DHCP服务器的响应后得到IP地址。但广播消息是不能跨越网段的,因此,如果DHCP客户机和服务器在不同的网段内,即被路由器分割开来时,客户机向服务器申请IP地址的时候,就要用到DHCP中继

(2).当企业的内部网络规模较大时,通常被划分为多个不同的子网,网络内配置了VLAN,VLAN能隔离广播,而DHCP协议使用广播,DHCP服务器在哪个VLAN中,就只有在相同VLAN内的客户机能从DHCP服务器那里获取IP地址。所以,将DHCP这种特殊的广播信息在不同网段的VLAN之间转发,让其他VLAN的客户机也能从DHCP服务器那里获得IP地址,就要用到DHCP中继

(3).DHCP中继代理实际上是一种软件技术,安装了DHCP中继代理的设备(路由器,交换机,服务器)称为DHCP中继代理服务器,它承担不同网段间的DHCP客户机和服务器的通信

2.4.2 DHCP中继原理:

(1). DHCP客户机申请IP租约,发送DHCP Discover包

(2). 中继代理收到该包,并转发另一个网段的DHCP服务器

(3). DHCP服务器收到该包,将DHCP Offer包发送给中继代理

(4). 中继代理将地址租约(DHCP Offer)转发给DHCP客户端,接下来的过程,DHCP Request包从客户机通过中继代理转发到DHCP服务器,DHCP ACK消息从服务器通过中继代理转发到客户机

3.DHCP攻防

3.1 DHCP攻击的原理

(1).先使用攻击软件,不断向DHCP服务器发出 DHCP Request 报文请求耗尽DHCP服务器的资源,让客户机不能上网

(2).自己伪造DHCP服务器,并“冒充”为一这个网段中的合法DHCP服务器,向客户端提供DHCP服务,这时候客户端的网关就是伪造的DHCP服务器的地址,攻击者就可以截获流量,并且还可以将数据包正常转发到网络上,不影响客户端的正常通信,只不过客户端上网的流量都在攻击者监控下,并且非法DHCP+攻击程序容易拿到用户信息,比如用户操作系统的账号密码,结果DHCP客户端将从非法DHCP服务器处获得不正确的IP地址、网关、DNS等配置参数

3.2 非法DHCP服务的防范

(1).在DHCP服务器上进行IP与MAC地址的绑定:

在通过DHCP服务器进行客户端IP地址等参数分配的网络中,对于一些重要部门的用户,可以通过在DHCP服务器上绑定IP与MAC地址,实现对指定计算机IP地址的安全分配

(2).使用DHCP Snooping信任端口:

能够过滤来自网络中非法DHCP服务器或其他设备的非信任DHCP响应报文.一旦将交换机的某一个端口设置为指向正确DHCP服务器的接入端口,那么交换机会自动丢弃从其他端口上接收到的DHCP响应报文.因为非信任端口,所以非法的DHCP服务器虽然接收到了信息,也发出了响应报文,但是在不信任端口处被阻断了,内网设备就不会得到不信任DHCP发送的响应报文了,就是不管你响应有多快,但是都半路夭折了。

4.DHCPv6介绍

4.1 DHCPv6定义

  • DHCPv6(Dynamic Host Configuration Protocol for IPv6,支持IPv6的动态主机配置协议)是针对IPv6编址方案设计的,为主机分配IPv6前缀、IPv6地址,DNS等其他网络配置参数的协议

  • 基于UDPv6协议工作的

  • 常用的2个端口:547(DHCP server,relay), 546(DHCP client)

  • 由于在 IPv6中 没有广播报文,使用组播默认所有DHCPv6服务器都会加入并侦听该组播组:FF02::1:2报文,客户端也无需配置服务端的IPv6地址

4.2 DHCPv6协议的优势

  • 可以为主机分配IPv6地址

  • 可以为主机分配IPv6前缀,DNS服务器、域名等网络配置参数

  • 可以为特定主机分配特定的地址/前缀

  • 便于全网络的自动配置和网络层次性管理

4.3 DHCPv6的工作原理

4.3.1 DHCPv6网络构成

  • DHCPv6客户端:动态获取IPv6地址、IPv6前缀或其他网络配置参数的设备

  • DHCPv6服务器:负责为DHCPv6客户端分配IPv6地址、IPv6前缀和其他网络配置参数的设备

  • DHCPv6中继:DHCPv6客户端通过本地链路范围的组播地址与DHCPv6服务器通信,以获取IPv6地址和其他网络配置参数。如果服务器和客户端不在同一个链路范围内,则需要通过DHCPv6中继来转发报文,这样可以避免在每个链路范围内都部署DHCPv6服务器,既节省了成本,又便于进行集中管理

4.3.2 分配过程

交互两个消息的快速分配过程

(1) DHCPv6客户端在发送的Solicit消息中携带Rapid Commit选项,标识客户端希望服务器能够快速为其分配地址/前缀和网络配置参数

(2) 如果DHCPv6服务器支持快速分配过程,则直接返回Reply消息,为客户端分配IPv6地址/前缀和其他网络配置参数。如果DHCPv6服务器不支持快速分配过程,则采用交互四个消息的分配过程为客户端分配IPv6地址/前缀和其他网络配置参数

交互四个消息的分配过程
发现阶段
客户端发送Solicit报文来发现 DHCPv6 服务器,并请求DHCPv6 服务器为其分配 IPv6 地址和网络配置参数,由于客户端不知道 DHCPv6 服务器的 IPv6 地址,所以客户端用组播地址:FF02::1:2向同一链路范围内的所有DHCPv6服务器发送Solicit报文;Solicit报文中携带了客户端的DUID、需要请求的非临时地址、以及其他网络配置参数等信息
提供阶段
DHCPv6 服务器接收到Solicit报文后,选择按照 IPv6 地址从小到大的顺序采用循环查找方式,选择最新找到的可供分配的 IPv6 地址,然后通过Advertise报文以单播方式回应给客户端;Advertise报文里面携带了服务器的DUID、客户端的DUID、分配给客户端的IPv6地址及租期等信息
选择阶段
因为Solicit报文是组播发送的,所以如果同一链路范围内存在多个 DHCPv6 服务器,则接收到Solicit报文的服务器都会回应Advertise报文,如果有多个 DHCPv6 服务器向DHCPv6客户端回应Advertise报文,则 DHCPv6 客户端选择服务器优先级最高的Advertise报文,然后客户端以组播方式向同一链路范围内的所有 DHCPv6 服务器发送Request报文,该报文中包含客户端选择的 DHCPv6 服务器的DUID、客户端的DUID、客户端IPv6地址
确认阶段
当 DHCPv6 服务器收到Request报文后,对报文中携带的服务端DUID信息进行判断:
若报文中携带的服务端DUID不是本服务端的DUID,则对该Request报文不回应,同时将Request报文中请求的IPv6地址回收
若报文中携带的服务端DUID是本服务端的DUID,则以单播方式回应Reply报文,确认Request报文中请求的IPv6地址分配给客户端使用

4.4 DHCPv6报文格式

5.DHCPv4 vs DHCPv6

(1). 相同点

  • 使用DHCP client, DHCP relay and DHCP server概念

  • 使用scopes and leases概念

  • 使用4个消息包的完整交互 (DHCP for IPv4使用Discover/Offer/Request/Acknowledge (DORA), DHCPv6使用Solicit/Advertise/Request/Reply (SARR))

  • 使用DHCP options为终端节点提供附加信息(DHCPv6的type code长度为16-bit)

  • 支持Rapid Commit功能

(2). 差异点

  • 标识客户端方式:DHCPv6使用DHCP Unique Identifiers (DUID) (RFC 6355),DHCPv4使用MAC地址.

  • 消息类型名称不同,大部分功能类似

  • DHCPv4基于IPv4包传输,DHCPv6基于IPv6包传输

  • DHCPv6使用IPv6组播消息,DHCPv4使用广播的IPv4消息

  • DHCPv6中client与relay/server(RFC 6939)通信时使用link-local地址, DHCPv4使用unsolicited广播地址

  • 监听的UDP端口不同, DHCPv4 relay/server监听udp端口67 client监听udp端口68, relay/server监听udp端口547 client监听udp端口546

  • DHCPv4可以在路由器上配置, stateful DHCPv6一般不能在路由器上配置

  • DHCPv4为客户端提供默认网关地址,DHCPv6不包含这个option,IPv6节点通过ICMPv6 RA消息学习到first hop路由器地址

  • DHCPv4地址池可能耗尽; DHCPv6网段通常为64位耗尽可能性接近0

好了,DHCP讲解到此结束

也许您对下面的内容还感兴趣: