百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 技术文章 > 正文

通俗易懂地聊聊 DHCP 协议(dhcp协议工作原理)

nanshan 2024-10-27 11:10 30 浏览 0 评论

文章主要脉络如下。

哈喽小伙伴们大家好啊,这里是 cxuan 计算机网络连载系列的文章第 11 篇,本篇文章我们来聊一聊 DHCP 协议。在聊之前,先想象一个场景。

你现在站在地铁上或者坐在办公室中,你的手机也好,电脑也好都有一个 IP 地址假如这个 IP 地址是你手动输入的,你需要写下面这些东西 ……

电脑配置这些还好,直接咔咔咔的配置完了,如果你用的是手机,那么你需要点到 IP 地址,输入 IP 地址,点到子网掩码,输入子网掩码,点到默认路由,输入路由,点到 DNS 服务器,输入 DNS 服务器 …… 这玩意这么麻烦啊,恰好你刚配置完,领导叫你开会,得嘞,刚配置好的地址白瞎了。换了一个环境,需要重新配置 IP 地址,于是你把上面的步骤再重复了一遍,这时候散会了,然后你炸了。。。。。。

我们还省去了你有可能配置错误的时候。

上面这段描述最让人恼火的就是你需要手动配置 IP 地址,woc,为啥不能设置成自动配置 IP 地址呢?谁说不能的,能!那就是用 DHCP, 这也是我们下面要聊的内容。

认识 DHCP

DHCP 的全称是 Dynamic Host Configuration Protocol 动态主机配置协议。使用 DHCP 就能实现自动设置 IP 地址、统一管理 IP 地址分配。也就是不管你是在开会还是在工位干活,都省去了手动配置 IP 地址这一步繁琐的操作,同时 DHCP 也大大减少了可能由于你手动分配 IP 地址导致错误的几率。

DHCP 与 IP 密切相关,它是 IP 网络上所使用的协议。如果你想要使用 DHCP 提供服务的话,那么在整条通信链路上就需要 DHCP 服务器的存在,连接到网络的设备使用 DHCP 协议从 DHCP 服务器请求 IP 地址。DHCP 服务器会为设备分配一个唯一的 IP 地址。

除了 IP 地址外,DHCP 服务器还会把子网掩码,默认路由,DNS 服务器告诉你。

DHCP 服务器

现在,你不需要手动配置 IP 地址,也不再需要管理 IP 地址了,管理权已经移交给了 DHCP 服务器,DHCP 服务器会维护 IP 地址池,在网络上启动时会将地址租借给启用 DHCP 的客户端。

由于 IP 地址是动态的(临时分配)而不是静态的(永久分配),因此不再使用的 IP 地址会自动返回 IP 地址池中进行重新分配。

那么 DHCP 服务器由谁维护呢?

网络管理员负责建立 DHCP 服务器,并以租约的形式向启用 DHCP 的客户端提供地址配置,啊,既然不需要我管理,那就很舒服了~

好了,现在你能舒舒服服的开发了,你用 postman 配了一条 192.168.1.4/x/x 的接口进行请求,请求能够顺利进行,但是过了一段时间后,你发现 192.168.1.4/x/x 这个接口请求不通了,这是为啥呢?然后你用 ipconfig 查询了一下自己的 IP 地址,发现 IP 地址变成了 192.168.1.7,怎么我用着用着 IP 地址还改了?DHCP 是个垃圾,破玩意!!@#¥%¥%……¥%

其实,这也是一个 DHCP 服务器的一个功能,DHCP 服务器通常为每个客户端分配一个唯一的动态 IP 地址,当该 IP 地址的客户端租约到期时,该地址就会更改。

唯一意思说的就是,如果你手动设置了一个静态 IP,同时 DHCP 服务器分配了一个动态 IP,这个动态 IP 和静态 IP 一样,那么必然会有一个客户端无法上网。

我就遇到过这种情况,我使用虚拟机配置的静态 IP 是192.168.1.8,手机使用 DHCP 也同样配置了 192.168.1.8 的 IP 地址,此时我的虚拟机还没有接入网络,当我接入网络时,我怎样也连不上虚拟机了,一查才发现 IP 地址冲突了 ……

虽然 DHCP 服务器能提供 IP 地址,但是他怎么知道哪些 IP 地址空闲,哪些 IP 地址正在使用呢?

实际上,这些信息都配置在了数据库中,下面我们就来一起看一下 DHCP 服务器维护了哪些信息。

  • 网络上所有有效的 TCP/IP 配置参数

这些参数主要包括主机名(Host name)、DHCP 客户端(DHCP client)、域名(Domain name)、IP 地址IP address)、网关(Netmask)、广播地址(Broadcast address)、默认路由(default rooter)

  • 有效的 IP 地址和排除的 IP 地址,保存在 IP 地址池中等待分配给客户端
  • 为某些特定的 DHCP 客户端保留的地址,这些地址是静态 IP,这样可以将单个 IP 地址一致地分配给单个DHCP 客户端

好了,现在你知道 DHCP 服务器都需要保存哪些信息了,并且看过上面的内容,你应该知道一个 DHCP 的组件有哪些了,下面我们就来聊一聊 DHCP 中都有哪些组件,这些组件缺一不可。

DHCP 的组件

使用 DHCP 时,了解所有的组件很重要,下面我为你列出了一些 DHCP 的组件和它们的作用都是什么。

  • DHCP Server,DHCP 服务器,这个大家肯定都知道,因为我们上面就一直在探讨 DHCP 服务器的内容,使用 DHCP ,是一定要有 DHCP 服务器的,要不然谁给你提供服务呢?
  • DHCP Client,DHCP 客户端,这个大家应该也知道,毕竟只有一个服务端不行啊,没有客户端你为谁服务啊?DHCP 的客户端可以是计算机、移动设备或者其他需要连接到网络的任何设备,默认情况下,大多数配置为接收 DHCP 信息
  • Ip address pool: 你得有 IP 地址池啊,虽然说你 DHCP 提供服务,但是你也得有工具啊,没有工具玩儿啥?IP 地址池是 DHCP 客户端可用的地址范围,这个地址范围通常由最低 -> 最高顺序发送。
  • Subnet:这个组件是子网,IP 网络可以划分一段一段的子网,子网更有助于网络管理。
  • Lease:租期,这个表示的就是 IP 地址续约的期限,同时也代表了客户端保留 IP 地址信息的时间长度,一般租约到期时,客户端必须续约。
  • DHCP relay:DHCP 中继器,这个一般比较难想到,DHCP 中继器一般是路由器或者主机。DHCP 中继器通常应对 DHCP 服务器和 DHCP 客户端不再同一个网段的情况,如果 DHCP 服务器和 DHCP 客户端在同一个网段下,那么客户端可以正确的获得动态分配的 IP 地址;如果不在的话,就需要使用 DHCP 中继器进行中继代理。

现在 DHCP 的组件你了解后,下面我就要和你聊聊 DHCP 的工作机制了。

DHCP 工作机制

在聊 DHCP 工作机制前,先来看一下 DHCP 的报文消息

DHCP 报文

DHCP 报文共有以下几种:

  • DHCP DISCOVER :客户端开始 DHCP 过程发送的包,是 DHCP 协议的开始
  • DHCP OFFER :服务器接收到 DHCPDISCOVER 之后做出的响应,它包括了给予客户端的 IP 租约过期时间、服务器的识别符以及其他信息
  • DHCP REQUEST :客户端对于服务器发出的 DHCPOFFER 所做出的响应。在续约租期的时候同样会使用。
  • DHCP ACK :服务器在接收到客户端发来的 DHCPREQUEST 之后发出的成功确认的报文。在建立连接的时候,客户端在接收到这个报文之后才会确认分配给它的 IP 和其他信息可以被允许使用。
  • DHCP NAK :DHCPACK 的相反的报文,表示服务器拒绝了客户端的请求。
  • DHCP RELEASE :一般出现在客户端关机、下线等状况。这个报文将会使 DHCP 服务器释放发出此报文的客户端的 IP 地址
  • DHCP INFORM :客户端发出的向服务器请求一些信息的报文
  • DHCP DECLINE :当客户端发现服务器分配的 IP 地址无法使用(如 IP 地址冲突时),将发出此报文,通知服务器禁止使用该 IP 地址。

DHCP 的工作机制比较简单,无非就是客户端向服务器租借 IP ,服务器提供 IP 给客户端的这个过程呗。嗯,你很聪明,大致是这样的,不过有一些细节需要注意下,下面我通过两张图来和你聊一下。

关于从 DHCP 中获取 IP 地址的流程,主要分为两个阶段。

第一个阶段是 DHCP 查找包的阶段

查找包的阶段主要分为两步:第一步是 DHCP 发现包,第二步是 DHCP 提供包。

DHCP 客户端在通信链路上发起广播,看看链路上有没有能提供 DHCP 包的服务器,然后通信链路上的各个节点会检查自己是否能够提供 DHCP 包,这时 DHCP 服务器说它能够提供 DHCP 包,然后 DHCP 就发出一个 DHCP 包沿着通信链路返回给 DHCP 客户端。

第二个阶段是 DHCP 的请求阶段。

DHCP 的请求包也分为两步:第一步是 DHCP 请求包,第二步是 DHCP 确认包。

DHCP 客户端在通信链路上发起 DHCP 请求包,请求包主要是告诉 DHCP 服务器,它想要用上一步提供的网络设置,然后 DHCP 服务器向 DHCP 客户端发送确认包,表示允许 DHCP 客户端使用第二步发送的网络设置。

至此,DHCP 的网络设置就结束了,然后通信链路上的主机之间就可以进行 TCP/IP 通信了。

当不需要 IP 地址时,可以发送 DHCP 解除包(DHCP RELEASE)进行解除。另外,DHCP 的设置中通常会有一个租期时间的设定,DHCP 客户端在这个时限内可以发送 DHCP 请求包通知想要延长这个期限。

DHCP 状态机

我们上面知道 DHCP 会发送几种请求包,我们知道,动作肯定伴随着状态的更改,DHCP 也是一样的,在 DHCP 发送/接收各种包的时候,其状态也在发生相应的改变。DHCP 协议可以在客户端和服务器上运行状态机。状态决定了协议接下来要处理的消息类型。

状态之间的转换(箭头)是由于接收和发送消息或者计时器到期才发生的转换。下面是 DHCP 的状态轮转图。

客户端在开始时没有消息,此时处于 INIT 状态,然后客户端会在通信链路上发起一个广播 DHCP DISCOVER

Selecting 选择状态下,客户端会收集 DHCPOFFER 消息,直到确定要使用的地址和服务器为止。

一旦 DHCP 客户端做好选择后,它就会发送 DHCPREQUEST 消息并进入 Requesting 状态,在这个状态下它很可能收到并不需要的 ACK 响应,如果这个状态下没有找到合适的地址的话,那么客户端就会发送DHCPDECLINE 并恢复为 INIT 状态,但是这种发生的概率比较小。

在处于 Requesting 状态下的客户端很可能接受发送过来的 DHCPACK 消息,获取超时时间 T1T2,然后进入 Bound 绑定状态,在这个状态下可以使用地址直到地址过期。

在第一个计时器 T1 到期时,客户端会进入 renewing 续订状态,并重新尝试建立租约时间,如果收到新的 ACK 消息就表示续订成功,然后就恢复为 Bound 状态。

如果没有收到 ACK 那么 T2 会最终过期进入 Rebinding 状态,进入这个状态的客户端会重新尝试获取地址,如果最终的租约到期,那么客户端必须放弃租约地址,并且如果没有其他地址或网络连接要使用,客户端将断开连接。

DHCP 冲突

现在我们讨论一下 DHCP 冲突的问题,DHCP 冲突其实就是 IP 重了,当一个子网中两个或者更多主机配置了相同的 IP 地址时,就会发生 IP 冲突的现象。发生这种情况可能导致的后果是两个冲突的主机混在一起,一台主机可能接收了另一台主机的数据包。

那么造成这种情况的原因是啥呢?

造成这种情况的原因有很多,这里我列举两个可能出现的情况:

  • 第一种情况是一台主机配置了静态 IP 地址,这台主机联网后,其 IP 地址不会在 DHCP 服务器中,然后另外一个主机入网,DHCP 服务器给这台主机自动分配了相同的 IP 地址,这两个地址就产生了 IP 冲突。
  • 第二种情况是,客户端从 DHCP 服务器获得了 IP 地址,然后这台主机下线了,随着租约到期,DHCP 会将这个 IP 地址又分配给了其他主机,等到这个主机重新上线后,由于某种原因,计算机无法访问 DHCP 服务器,这种情况下会造成 IP 冲突。

当检测到 IP 冲突时,通常 Windows 系统和 Mac 系统会弹出 IP 冲突的弹窗。

DHCP 中继代理

常规家庭网络(土豪除外)中大多数都只有一个以太网,也就是 LAN 网段,一个 DHCP 服务器完全可以满足 LAN 中的客户机使用。但是,在更复杂的网络中,比如企业或者学校,一台 DHCP 服务器显然就无法满足了。因此,这种情况下,往往需要 DHCP 的统一管理,具体实现方式可以通过 DHCP 中继代理 来转发 DHCP 流量,如下图所示。

如上图所示,存在两个网段 A 和网段 B,DHCP 客户机和 DHCP 服务器不在一个网段内,所以我们在通信链路上架设了一个中继代理,DHCP 客户机通过访问中继代理以达到访问 DHCP 服务器的目的。

使用这种方式,我们不再需要在每个网段都设置一个 DHCP 服务器,只需要在每个网段架设一个中继代理即可。它可以设置 DHCP 服务器的 IP 地址,从而可以在 DHCP 服务器上为每个网段注册 IP 地址的分配范围。

DHCP 客户端会向 DHCP 中继代理发送 DHCP 请求包,而 DHCP 中继代理在收到这个广播包之后再以单播的形式发送给 DHCP 服务器。服务器收到该包以后再向 DHCP 中继代理返回应答,并由 DHCP 中继代理将此包发送给 DHCP 客户端。

DHCP 认证

我们总是假想所有情况都能够顺利进行,害怕出问题,这也许意味着我永远只是个初级程序员吧。我们上面探讨的 DHCP 服务器都是合理的、合法的,但是互联网是一把双刃剑,不是所有人都是合法公民。如果假设了一个未经授权的 DHCP 服务器怎么办?它很可能会对网络造成影响。

为了避免这些问题,在 [RFC3118] 中指定了一种认证 DHCP 消息的方法。它定义了一个 DHCP 选项,即Authentication 选项,如下所示

认证选项的主要目的就是确定 DHCP 消息是否来自一个授权的发送方

身份验证的代码(code)属性值是 90,而长度(Length)给出了选项中的字节数(不包括代码和长度字段的字节)。如果协议(Protocol)和算法(Algorithm)属性被设置为 0 ,则认证信息字段将保存一个简单的共享配置的 token,token 大家开发应该都接触过吧,就是一条认证信息。只要配置令牌在客户端和服务器上匹配,这条消息就会被接受。

我们上面聊到的只是其中的一种,还有一种更安全的方法是涉及所谓的延迟身份认证,如果协议和算法都被设置为 1,就表示使用了延迟身份认证。在这种情况下,客户端的 DHCPDISCOVER 消息或 DHCPINFORM 消息包括身份验证选项,并且服务器以其 DHCPOFFER 或 DHCPACK 消息中包含的身份验证信息进行响应。这个认证信息中包括一个消息认证码,它提供对发送方的认证和消息的完整性校验。RDM 表示中继检测,中继检测包括一个单项递增的值,只要经过一个代理中继,那么这个中继检测的值就会 + 1。

虽然 DHCP 认证能够确保安全性,但是它没有被广泛使用,原因有两点:

  • 首先,该方法要求在 DHCP 服务器和每个需要身份验证的客户端之间分配共享密钥。
  • 其次,在 DHCP 已经被广泛使用之后,才指定了 Authentication 选项。

总结

这篇文章我和你探讨了计算机网络中一个比较容易忽视的概念,为什么说他容易忽视呢?因为我们平常开发过程中基本上不会管 IP 地址的配置的,也就是环境搭建的时候会用到一些,但是要系统学习计算机网络的话,DHCP 的重要性不可忽视,DHCP 包括工作机制、DHCP 报文消息,DHCP 状态机、DHCP 认证这些都是需要你了解并掌握的。

原文链接:趣聊 DHCP ,有点意思

关注我,带你更好的学习计算机网络。

相关推荐

三种自建KMS激活系统自动激活windows方法

第一种:在windows服务器上搭建主要针对vol版本(win7、win10、win20xx、win2012等等)平台:我自己搭建的windows虚拟机,windows2016的操作系统软件:...

重装系统被收98元?避开Windows付费陷阱的实用指南

重装系统被收98元?避开Windows付费陷阱的实用指南有网友反映,在重装Windows系统后,屏幕突然弹出“激活系统需支付98元服务费”的提示,疑惑自己是不是遭遇了付费陷阱。事实上,微软官方的Wi...

Windows Server2012远程桌面服务配置和授权激活

安装:注意:安装完毕之后需手动重启一下计算机配置终端服务管理工具---远程桌面服务---RD授权诊断程序,查看当前服务器有没有授权授权:运行—>gpedit.msc->计算机配置---管理...

新书速览|Windows Server 2022 系统与网站配置实战

讲述桌面体验、ServerCore/NanoServer,容器与云系统的配置1本书内容《WindowsServer2022系统与网站配置实战》秉持作者一贯理论兼具实践的写作风格,以新版的Wi...

Windows激活全攻略:KMS神钥与专业工具的完美结合!

对于许多Windows用户来说,系统的激活是一个必经的过程。虽然Windows操作系统在未经激活的状态下也可以使用一段时间,但长期来看,未激活的系统会限制某些功能并频繁提示用户激活。以下是两种流行的激...

微软Win9全新激活技术曝光(微软系统激活有什么用)

2014-07-0905:46:00作者:徐日俄罗斯Wzor日前披露了更多关于Windows9的最新消息,据悉,Windows9将会在今年秋季亮相,其宣传口号是“想要开始按钮和开始菜单?如你所...

快速激活Windows 10/11:CMD命令详细教程

#记录我的2024#激活Windows操作系统是确保系统功能和安全更新正常运行的重要步骤。本文将为您分享如何使用命令提示符(CMD)在Windows10和Windows11上进行激活的详细步骤。...

Wndows 2019 RDS应用发布部署(rds的安装和应用程序的发布)

安装前的准备1、需要提供服务器作为应用中心,应用中心的推荐配置如下表所示。规格建议1-10人11-20人21-50人51-100人100+人CPU4核8核16核内存8GB16GB32GB64GB系统盘...

解决 Windows 系统激活难题(如何解决windows激活问题)

今天,一位朋友给我说,他手头有三台电脑,均同时弹出系统未激活的提示。他对此毫无头绪,便急忙将电脑上出现的激活提示信息一股脑发给了我。我看到其中一台显示的是“Windows10企业版LTSC尚...

自建KMS激活服务器(自建kms激活服务器的风险)

自建KMS激活服务器Win10和office安装后,都需要激活才可以使用,一般可以输入购买的MAK激活码进行在线激活,也可以通过KMS激活,网上也有很多激活工具,但这些工具一般都含有病毒或木马程序,容...

30秒免费激活windows和office亲测有效!

“第三方工具有病毒?”“KMS服务器激活总失效?”今天给大家分享一个开源激活工具——MicrosoftActivationScripts(MAS),无需密钥、不装软件,30秒永久激活Window...

「操作系统」Windows 10 LTSC 2019 企业版C大集成更新版

Windows10LTSC企业版CHIANNET集成更新优化整合多镜像版,CHIANNET,是USBOS超级PE维护盘工具箱作者,长久以来一直默默的更新着,USBOSPE软件,电脑城装机及...

一文看懂Windows激活:自查方法+授权类型科普(Win7/Win10通用)

一、如何判断Windows是否永久激活?无论是Win7还是Win10,均可通过以下方法快速验证:命令提示符法(通用):按下Win+R,输入slmgr.vbs/xpr并按回车键运行即可查看是否...

部分Windows Server 2019/2022用户反馈无法运行微软Teams应用

IT之家7月2日消息,科技媒体borncity今天(7月2日)发布博文,报道称在多个WindowsServer版本上,MicrosoftTeams应用近期出现了运行故障。用...

这种Windows激活方式已有20年...(windows现在激活)

2006年微软正式发布WindowsVista,随之而来引入了一项新的激活机制「OEM激活」,这项机制在Vista和Win7上最为流行。其实WindowsServer自2008开始至2025版本一...

取消回复欢迎 发表评论: