网络:DHCP 协议简介

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

  • 12
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值