注:本文为 “DHCP 协议 | DHCP 字段含义”相关文章合辑。
第二篇图缺失受限于原文图异常。
DHCP 协议详解
zdzeng 于 2019-03-09 21:48:07 发布
什么是 DHCP
DHCP(Dynamic Host Configuration Protocol,动态主机配置协议),前身是 BOOTP 协议,是一个局域网的网络协议,使用 UDP 协议工作,统一使用两个 IANA 分配的端口:67(服务器端),68(客户端)。
DHCP 通常被用于局域网环境,主要作用是集中的管理、分配 IP 地址,使 client 动态的获得 IP 地址、Gateway 地址、DNS 服务器地址等信息,并能够提升地址的使用率。简单来说,DHCP 就是一个不需要账号密码登录的、自动给内网机器分配 IP 地址等信息的协议。
DHCP 协议
DHCP 报文种类
DHCP 一共有 8 中报文,各种类型报文的基本功能如下:
报文类型 | 说明 |
---|---|
Discover(0x01) | DHCP 客户端在请求 IP 地址时并不知道 DHCP 服务器的位置,因此 DHCP 客户端会在本地网络内以广播方式发送 Discover 请求报文,以发现网络中的 DHCP 服务器。所有收到 Discover 报文的 DHCP 服务器都会发送应答报文,DHCP 客户端据此可以知道网络中存在的 DHCP 服务器的位置。 |
Offer(0x02) | DHCP 服务器收到 Discover 报文后,就会在所配置的地址池中查找一个合适的 IP 地址,加上相应的租约期限和其他配置信息(如网关、DNS 服务器等),构造一个 Offer 报文,发送给 DHCP 客户端,告知用户本服务器可以为其提供 IP 地址。但这个报文只是告诉 DHCP 客户端可以提供 IP 地址,最终还需要客户端通过 ARP 来检测该 IP 地址是否重复。 |
Request(0x03) | DHCP 客户端可能会收到很多 Offer 请求报文,所以必须在这些应答中选择一个。 通常是选择第一个 Offer 应答报文的服务器作为自己的目标服务器,并向该服务器发送一个广播的 Request 请求报文,通告选择的服务器,希望获得所分配的 IP 地址。 另外,DHCP 客户端在成功获取 IP 地址后,在地址使用租期达到 50% 时,会向 DHCP 服务器发送单播 Request 请求报文请求续延租约。 如果没有收到 ACK 报文,在租期达到 87.5% 时,会再次发送广播的 Request 请求报文以请求续延租约。 |
ACK(0x05) | DHCP 服务器收到 Request 请求报文后,根据 Request 报文中携带的用户 MAC 来查找有没有相应的租约记录。 如果有则发送 ACK 应答报文,通知用户可以使用分配的 IP 地址。 |
NAK(0x06) | 如果 DHCP 服务器收到 Request 请求报文后,没有发现有相应的租约记录或者由于某些原因无法正常分配 IP 地址,则向 DHCP 客户端发送 NAK 应答报文,通知用户无法分配合适的 IP 地址。 |
Release(0x07) | 当 DHCP 客户端不再需要使用分配 IP 地址时(一般出现在客户端关机、下线等状况)就会主动向 DHCP 服务器发送 RELEASE 请求报文,告知服务器用户不再需要分配 IP 地址,请求 DHCP 服务器释放对应的 IP 地址。 |
Decline(0x04) | DHCP 客户端收到 DHCP 服务器 ACK 应答报文后,通过地址冲突检测发现服务器分配的地址冲突或者由于其他原因导致不能使用,则会向 DHCP 服务器发送 Decline 请求报文,通知服务器所分配的 IP 地址不可用,以期获得新的 IP 地址。 |
Inform(0x08) | DHCP 客户端如果需要从 DHCP 服务器端获取更为详细的配置信息,则向 DHCP 服务器发送 Inform 请求报文;DHCP 服务器在收到该报文后,将根据租约进行查找到相应的配置信息后,向 DHCP 客户端发送 ACK 应答报文。 目前基本上不用了。 |
DHCP 报文格式
-
op:报文的操作类型。分为请求报文和响应报文。1:请求报文,2:应答报文。即 client 送给 server 的封包,设为 1,反之为 2。
-
请求报文:DHCP Discover、DHCP Request、DHCP Release、DHCP Inform 和 DHCP Decline。
-
应答报文:DHCP Offer、DHCP ACK 和 DHCP NAK。
-
htype:DHCP 客户端的 MAC 地址类型。MAC 地址类型其实是指明网络类型。htype 值为 1 时表示为最常见的以太网 MAC 地址类型。
-
hlen:DHCP 客户端的 MAC 地址长度。以太网 MAC 地址长度为 6 个字节,即以太网时 hlen 值为 6。
-
hops:DHCP 报文经过的 DHCP 中继的数目,默认为 0。DHCP 请求报文每经过一个 DHCP 中继,该字段就会增加 1。没有经过 DHCP 中继时值为 0。(若数据包需经过 router 传送,每站加 1,若在同一网内,为 0。)
-
xid:客户端通过 DHCP Discover 报文发起一次 IP 地址请求时选择的随机数,相当于请求标识。用来标识一次 IP 地址请求过程。在一次请求中所有报文的 Xid 都是一样的。
-
secs:DHCP 客户端从获取到 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 地址释放的相关报文都是采用单播方式进行发送的。
-
ciaddr:DHCP 客户端的 IP 地址。仅在 DHCP 服务器发送的 ACK 报文中显示,因为在得到 DHCP 服务器确认前,DHCP 客户端是还没有分配到 IP 地址的。在其他报文中均显示,只有客户端是 Bound、Renew、Rebinding 状态,并且能响应 ARP 请求时,才能被填充。
-
yiaddr:DHCP 服务器分配给客户端的 IP 地址。仅在 DHCP 服务器发送的 Offer 和 ACK 报文中显示,其他报文中显示为 0。
-
siaddr:下一个为 DHCP 客户端分配 IP 地址等信息的 DHCP 服务器 IP 地址。仅在 DHCP Offer、DHCP ACK 报文中显示,其他报文中显示为 0。(用于 bootstrap 过程中的 IP 地址)
-
一般来说是服务器的 ip 地址。但是注意!根据 openwrt 源码给出的注释,当报文的源地址、siaddr、option>server_id 字段不一致(有经过跨子网转发)时,通常认为 option>srever_id 字段为真正的服务器 ip,siaddr 有可能是多次路由跳转中的某一个路由的 ip
-
giaddr:DHCP 客户端发出请求报文后经过的第一个 DHCP 中继的 IP 地址。如果没有经过 DHCP 中继,则显示为 0。(转发代理(网关)IP 地址)
-
chaddr:DHCP 客户端的 MAC 地址。在每个报文中都会显示对应 DHCP 客户端的 MAC 地址。
-
sname:为 DHCP 客户端分配 IP 地址的 DHCP 服务器名称(DNS 域名格式)。在 Offer 和 ACK 报文中显示发送报文的 DHCP 服务器名称,其他报文显示为 0。
-
file:DHCP 服务器为 DHCP 客户端指定的启动配置文件名称及路径信息。仅在 DHCP Offer 报文中显示,其他报文中显示为空。
-
options:可选项字段,长度可变,格式为 “代码 + 长度 + 数据”。
代码 | 长度(字节) | 说明 |
---|---|---|
1 | 4 | 子网掩码 |
3 | 长度可变,必须是 4 字节的倍数 | 默认网关(可以是一个路由器 IP 地址列表) |
6 | 长度可变,必须是 4 字节的倍数 | DNS 服务器(可以是一个 DNS 服务器 IP 地址列表) |
15 | 长度可变 | 域名称(主 DNS 服务器名称) |
42 | 长度可变,必须是 4 字节的倍数 | NTP 服务器(可以是一个 NTP 服务器 IP 地址列表) |
44 | 长度可变,必须是 4 字节的倍数 | WINS 服务器(可以是一个 WINS 服务器 IP 地址列表) |
51 | 4 | 有效租约期(以秒为单位) |
53 | 1 | 报文类型(1 ~ 8)分别表示:Discover,Offer,Request,Decline,ACK,NAK,Release,Inform |
58 | 4 | 续约时间 |
60 | 长度可变 | Authentication for DHCP Message,用来完成基于标准 DHCP 协议,以在客户端输入用户名和密码的方式进行地址鉴权主要用在按用户认证收费场合,与之对应的是 pppoe 认证计费 |
255 | 0 | 标记 options 结束 |
DHCP 工作流程
IP 地址分配方式
DHCP SERVER 负责接收客户端的 DHCP 请求,集中管理所有客户机的 IP 地址设定资料,并负责处理客户端的 DHCP 请求,相比于 BOOTP,DHCP 通过 “租约” 来实现动态分配 IP 的功能,实现 IP 的时分复用,从而解决 IP 资源短缺的问题。
其地址分配方式有如下三种
-
人工配置:由管理员对每台具体的计算机指定一个地址
-
自动配置:服务器为第一次连接网络的计算机分配一个永久地址,DHCP 客户端第一次成功地从 DHCP 服务器端分配到一个 IP 地址之后,就永远使用这个地址
-
动态配置:在一定的期