文章目录
- 1. 前言
- 2. DHCP 协议简介
- 2.1 DHCP 客户端广播 `DHCPDISCOVER` 消息
- 2.2 DHCP 服务器回复 `DHCPOFFER` 消息
- 2.3 DHCP 客户端广播 `DHCPREQUEST` 消息
- 2.4 DHCP 服务器回复 `DHCPACK` 消息
- 2.5 剩余的工作
- 3. 参考资料
1. 前言
限于作者能力水平,本文可能存在谬误,因此而给读者带来的损失,作者不做任何承诺。
2. DHCP 协议简介
DHCP
,是 Dynamic Host Configuration Protocol
的缩写,译称 动态主机配置协议
。DHCP
是一个局域网协议
,前身为 BOOTP
协议,用来为局域网主机动态管理、分配 IP 地址
。DHCP
协议位于OSI 7层协议模型
的应用层
,向下调用 UDP
协议工作。
DHCP
的具体实现为 C/S 模式(客户端/服务端 模式)
。DHCP 请求、分配 IP 地址的过程
,可以简单概括为:客户端向服务端发起 IP 地址分配请求,服务端响应该请求返回分配的 IP 地址等信息给客户端,之后客户端使用返回的 IP 地址工作,使用完毕(租期到期、或下线)后释放该地址给 DHCP 服务器。典型的 DHCP 客户端有 dhcpcd 。
接下来细化上述DHCP 请求、分配 IP 地址的过程
,先上一张图:
上图是一个典型的 DHCP 分配地址的过程,下面以每一小节一个消息的组织形式,来细化这一过程。在此之前,有必要把 DHCP 消息的格式做个简要介绍:
下图为协议对消息字段的解释:
这里只挑我们重点关注的2个字段进行说明:
yiaddr: DHCP 服务器分配给客户端的 IP 地址,4字节长。
chaddr: 网络设备地址(如以太网卡 MAC 地址),16字节长。像以太网卡 MAC 地址只需6字节,剩余部分填 0。
2.1 DHCP 客户端广播 DHCPDISCOVER
消息
DHCP 客户端
通过在局域网广播
DHCPDISCOVER
消息,向局域网的所有 DHCP 服务器
发起 IP 地址分配请求。我们以找工作的过程,来进行类比:我们(找工作的人),就是 DHCP 客户端;找工作要投递简历,投递简历的过程,就是发送 DHCPDISCOVER
消息,我们找工作通常会投多家公司,这就是广播
了;而接收我们简历投递的公司,就是 DHCP 服务器
。看一下 DHCP 客户端
DHCPDISCOVER
消息的抓包:
2.2 DHCP 服务器回复 DHCPOFFER
消息
局域网内的 DHCP 服务器
收到 DHCP 客户端
广播的 DHCPDISCOVER
消息后,从自身管理的 IP 地址池挑选一个空闲 IP,单播
回复一个带可用 IP 地址的 DHCPOFFER
消息给请求 IP 的 DHCP 客户端
。还是类比于找工作的过程,我们投递了简历的公司,经过面试后(发现可用 IP),如果发现你合适(有可用 IP),则会给你发一个 Offer (单播 DHCPOFFER
消息给 DHCP 客户端)。当然,如果面试发现你不合适(没有可用 IP 或 其它可能的问题),自然也不会发 Offer 给你(没有 DHCPOFFER
从这些 DHCP 服务器发出)。看一下 DHCP 客户端
DHCPOFFER
消息的抓包:
2.3 DHCP 客户端广播 DHCPREQUEST
消息
DHCP 客户端
在收到 DHCP 服务器
的 DHCPOFFER
消息后,再次向 DHCP 服务器
广播
DHCPREQUEST
消息,告知自己准备要使用 DHCPOFFER
消息给出 IP 地址。之所以是广播,因为还有完全确立使用该 IP。当然,DHCP 客户端
可能收到多个来自 DHCP 服务器的 DHCPOFFER
消息,它回挑选其中一个,通常是挑选最先收到的。还是类比于找工作的过程,在收到公司发给我们的 Offer 后(收到 DHCPOFFER
消息后),我们从中挑选一封 Offer 接受(毕竟烈女不嫁二夫^ - ^),然后告知公司我接受你家的 Offer(向 DHCP 服务器
广播
DHCPREQUEST
消息)。看一下 DHCP 客户端
DHCPREQUEST
消息的抓包:
2.4 DHCP 服务器回复 DHCPACK
消息
DHCP 服务器
接收到 DHCP 客户端
的 IP 请求消息 DHCPREQUEST
后,单播
回复一个 DHCPACK 告知 DHCP 客户端
,你申请的 IP 成功了,DHCP 服务端
会将之记录在案:该 IP 已经分配出去了。当然,也可能回复 DHCPNAK
消息,告知 DHCP 客户端
你申请的 IP 不批准:毕竟消息中间存在间隙,别的客户端也可能已经将这个 IP 拿走了。再类比到找工作,即使你拿到 Offer 了,入职前还是要跟公司再次确认(收取 DHCPACK
消息确认),因为有可能别人抢了你的职位(别的客户端捷足先登拿走了你申请的 IP)。会有公司这么干,发了 Offer 也不给你入职,公司可能找了一个性价比更优的。虽然无耻,但很现实 ^ - ^ 。看一下 DHCP 客户端
DHCPACK
消息的抓包:
2.5 剩余的工作
看起来一切都已经完成了,是这样吗?对于 DHCP 协议来讲,确实工作已经结束了。但是,如果局域网内,有其它的设备静态配置了 DHCP 客户端申请的 IP ,而 DHCP 服务端不会知道这一点,所以可能分配了一个和局域网内设备冲突的 IP 给客户端,这是 DHCP 客户端拿到 DHCPACK 消息确认的 IP 后,通过发送一个 ARP 广播,来确认是不是局域网内有和自己刚申请到的 IP 冲突的设备,看下 DHCP 客户端在拿到申请的 IP 后,在局域网内发 ARP 广播来确认是否存在冲突 IP 的抓包:
DHCP 客户端
发几个 ARP 广播
,没设备回应的话,就认为没人使用申请的 IP,接下来就使用该 IP 愉快的玩耍了。这一部分内容,已经不属于 DHCP
协议的内容了。
3. 参考资料
[1] DHCP协议详解
[2] DHCP协议: RFC 2131