动态主机配置协议 (DHCPv4)介绍,详细DHCP协议学习笔记

定义

动态主机配置协议 (DHCP) 是一种用于集中对用户 IPv4 地址进行动态管理和配置的技术。为与 IPv6 动态主机配置协议 (DHCPv6) 进行区分,本文统一将动态主机配置协议称为 DHCPv4。

DHCPv4 协议由 RFC 2131 定义,采用客户端/服务器通信模式,由 DHCPv4 客户端 (DHCP Client) 向 DHCPv4 服务器 (DHCP Server) 提出配置申请,服务器返回为客户端分配的配置信息。

地址分配机制

DHCPv4 提供两种地址分配机制,网络管理员可以根据网络需求为不同的主机选择不同的分配策略:

动态分配机制

通过 DHCPv4 为主机分配一个有使用期限(租期)的 IPv4 地址。适用于主机需要临时接入网络或空闲地址数小于网络主机总数且主机不需要永久连接网络的场景。

静态分配机制

网络管理员通过 DHCPv4 为指定的主机分配固定的 IPv4 地址。相比手工静态配置 IPv4 地址,通过 DHCPv4 方式静态分配机制避免人工配置发生错误,方便管理员统一维护管理。

目的

随着网络规模的扩大和网络复杂度的提高,网络配置变得越来越复杂,再加上计算机数量剧增且位置不固定,引发了 IPv4 地址变化频繁以及 IPv4 地址不足的问题。为了实现网络可以动态合理地分配 IPv4 地址给主机使用,动态主机配置协议 DHCPv4 应运而生。

受益

DHCPv4 的主要受益有以下两点:

降低客户端的配置和维护成本

DHCPv4 易配置部署,对于非技术用户,DHCPv4 能够将客户端与配置相关的操作降至最低,并能够降低远程部署和维护成本。

集中管理

DHCPv4 服务器可以管理多个网段的配置信息,当某个网段的配置发生变化时,管理员只需要更新 DHCPv4 服务器上的相关配置即可。

DHCPv4 典型组网

DHCPv4 组网中包括以下三种角色:

DHCPv4 客户端

发送 DHCPv4 请求报文,通过 BOOTP 或 DHCPv4 协议请求获取 IPv4 地址等网络参数的设备。例如,IP 电话、PC、手机、无盘工作站等。

DHCPv4 中继

负责转发 DHCPv4 服务器和 DHCPv4 客户端之间的 DHCPv4 报文,协助 DHCPv4 服务器向 DHCPv4 客户端动态分配网络参数的设备。

DHCPv4 服务器

负责从地址池中选择 IPv4 地址分配至 DHCPv4 客户端,还可以为 DHCPv4 客户端提供其他网络参数,如默认网关地址、DNS 服务器地址和 WINS 服务器地址。

DHCPv4 报文类型

DHCPv4 报文是基于 UDP 协议传输的。DHCPv4 客户端向 DHCPv4 服务器发送报文时采用 68 端口号,DHCPv4 服务器向 DHCPv4 客户端发送报文时采用 67 端口号。目前 DHCPv4 定义了如下八种类型的报文:

报文名称

说明

DHCP DISCOVER

DHCPv4 客户端首次登录网络时进行 DHCP 交互过程发送的第一个报文,用来寻找 DHCPv4 服务器。

DHCP OFFER

DHCPv4 服务器用来响应 DHCP DISCOVER 报文,此报文携带了各种配置信息。

DHCP REQUEST

用于客户端初始化后、重启后或更新 IPv4 地址租约时发送的报文。

DHCP ACK

服务器对客户端的 DHCP REQUEST 报文的确认响应报文。

DHCP NAK

服务器对客户端的 DHCP REQUEST 报文的拒绝响应报文。

DHCP DECLINE

当客户端发现服务器分配给它的 IPv4 地址发生冲突时发送的报文。

DHCP RELEASE

客户端主动释放服务器分配给它的 IPv4 地址时发送的报文。

DHCP INFORM

客户端获取 IPv4 地址后,向服务器请求更为详细的配置信息时发送的报文。

DHCPv4 报文格式

DHCPv4 报文格式是在 BOOTP 报文格式的基础上发展而来,因此 DHCPv4 服务器也支持与 BOOTP 客户端之间进行交互。

DHCPv4 报文中的 Options 字段

Options 字段用来存放分配给 DHCPv4 客户端的控制信息和参数,位于 DHCPv4 报文末尾。Options 字段由 Type、Length 和 Value 三部分组成。

Options 号

Options 作用

1

设置子网掩码选项。

3

设置网关地址选项。

6

设置 DNS 服务器地址选项。

12

设置 DHCPv4 客户端的主机名选项。

50

设置请求 IPv4 地址选项。

51

设置 IPv4 地址租约时间选项。

53

设置 DHCPv4 消息类型。

54

设置服务器标识。

55

设置请求选项列表。

58

设置续约 T1 时间。

59

设置续约 T2 时间。

DHCP 选项 82

Option 82 记录了 DHCP 客户端的位置信息,可以配置在 DHCP 中继或 DHCP 监听设备上。对于从 DHCP 客户端收到的 DHCP 报文,该报文中携带的 Option 82 将按照 Option 82 策略进行处理后再发送给 DHCP 服务器。

DHCP服务器根据DHCP报文中携带的Option82信息为客户端分配IP地址和其他参数,提供更加灵活的地址分配方案。

Option 82包含两个常用的子选项:Circuit ID和Remote ID。Circuit ID主要用于标识客户端所属的VLAN和接口,Remote ID标识客户端从哪个设备接入,一般为设备的MAC地址。

数据包格式

电路 ID 子选项

Circuit ID 包含三种类型:Type 0(值为端口索引)、Type 1(值为端口名称+VLAN ID)、Type 2(值为端口描述+VLAN ID),下面按照类型列出其格式。

  • 类型 0(端口索引)

Circuit ID 类型为 0,其中 Circuit ID 子选项使用物理接口或者 LAG 接口。

  • 类型 1(端口名称)

Circuit ID类型为1,其中端口名称和VLAN ID组成Circuit ID子选项值。

  • 类型 2(端口描述)

Circuit ID类型为1,其中端口名称和VLAN ID组成Circuit ID子选项值。

远程 ID 子选项

Remote ID包含两种类型:Type 0(值为系统MAC)和Type 1(值为主机名),下面按类型列出格式。

  • 类型 0(系统 MAC)

远程 ID 类型为 0,其中系统 MAC 用于远程 ID 子选项。

如何处理选项 82?

系统对收到的DHCP报文中的Option82进行如下处理:

  • 当收到不带 giaddr带有选项 82 的DHCP Discover/Request/Release/Decline/Inform 消息时,

    • 如果选项 82 trust-all被禁用,则丢弃该消息。

    • 如果启用了Option 82 trust-all 选项 ,则该类消息将按照用户配置的 Option 82 策略进行处理。Option 82 策略可以设置四种操作:KeepDropInsertReplace。默认操作为Keep,即从 DHCP 客户端收到的 DHCP 消息中的 Option 82 保持不变并进行转发。

  • 当出现除上述类型以外的任何其他类型的 DHCP 发现/请求/释放/拒绝/通知消息时,将允许接收该消息,并根据选项 82 策略进行处理。

  • 当收到不带选项 82 的DHCP Offer/Ack/Nak 消息时,将转发该消息而不带选项 82。

  • 当收到带有选项 82 的DHCP Offer/Ack/Nak 消息时,选项 82 会在转发消息之前被删除。

选项 82 信任全部

交换机收到的不带 giaddr 但包含 Option 82 的 DHCP Discover/Request/Release/Decline/Inform 数据包默认会被丢弃,但如果开启了 Option 82 trust all 功能,则此类数据包会被允许并处理。

因此,在配置选项 82 策略时,需要同时考虑网络拓扑和信任配置,特别是如果客户端和中继代理/启用 DHCP 侦听的设备之间存在可能插入选项 82 的交换机。在此设备上启用 DHCP 选项 82 信任所有,以确保这些数据包不会被丢弃。

DHCPv4 客户端首次接入网络的报文交互过程

首次接入网络的 DHCPv4 客户端与 DHCPv4 服务器的报文交互过程称为 DHCPv4 报文四步交互:

第一步:发现阶段

首次接入网络的DHCPv4客户端不知道DHCPv4服务器的IPv4地址,为了学习到DHCPv4服务器的IPv4地址,DHCPv4客户端以广播方式发送DHCP DISCOVER报文(目的IPv4地址为255.255.255.255)给同一网段内的所有设备(包括DHCPv4服务器或中继)。DHCP DISCOVER报文中携带了客户端的MAC地址(chaddr字段)、需要请求的参数列表选项(Option55)、广播标志位(flags字段)等信息。

第二步:提供阶段

与DHCPv4客户端位于同一网段的DHCPv4服务器都会接收到DHCP DISCOVER报文,DHCPv4服务器选择跟接收DHCP DISCOVER报文接口的IPv4地址处于同一网段的地址池,并且从中选择一个可用的IPv4地址,然后通过DHCP OFFER报文发送给DHCPv4客户端。

通常,DHCPv4服务器的地址池中会指定IPv4地址的租期,如果DHCPv4客户端发送的DHCP DISCOVER报文中携带了期望租期,服务器会将客户端请求的期望租期与其指定的租期进行比较,选择其中时间较短的租期分配给客户端。

DHCPv4服务器在地址池中为客户端分配IPv4地址的顺序如下:

IPv4地址分配顺序不支持修改。

  1. DHCPv4服务器上已配置的与客户端MAC地址静态绑定的IPv4地址。

  2. 客户端发送的DHCP DISCOVER报文中Option50(请求IPv4地址选项)指定的地址。

  3. 地址池内查找“Expired”状态的IPv4地址,即曾经分配给客户端的超过租期的IPv4地址。

  4. 在地址池内随机查找一个“Idle”状态的IPv4地址。

  5. 如果未找到可供分配的IPv4地址,则地址池依次自动回收超过租期的(“Expired”状态)和处于冲突状态(“Conflict”状态)的IPv4地址。回收后如果找到可用的IPv4地址,则进行分配;否则,DHCPv4客户端等待应答超时后,重新发送DHCP DISCOVER报文来申请IPv4地址。

设备支持在地址池中排除某些不能通过DHCPv4机制进行分配的IPv4地址。例如,客户端所在网段已经手工配置了地址为192.168.1.100/24的DNS服务器,DHCPv4服务器上配置的网段为192.168.1.0/24的地址池中需要将192.168.1.100的IPv4地址排除,不能通过DHCPv4分配此地址,否则,会造成地址冲突。

为了防止分配出去的IPv4地址跟网络中其他客户端的IPv4地址冲突,DHCPv4服务器在发送DHCP OFFER报文前通过发送源地址为DHCPv4服务器IPv4地址、目的地址为预分配出去IPv4地址的ICMP ECHO REQUEST报文对分配的IPv4地址进行地址冲突探测。如果在指定的时间内没有收到应答报文,表示网络中没有客户端使用这个IPv4地址,可以分配给客户端;如果指定时间内收到应答报文,表示网络中已经存在使用此IPv4地址的客户端,则把此地址列为冲突地址,然后等待重新接收到DHCP DISCOVER报文后按照前面介绍的选择IPv4地址的优先顺序重新选择可用的IPv4地址。

此阶段DHCPv4服务器分配给客户端的IPv4地址不一定是最终确定使用的IPv4地址,因为DHCP OFFER报文发送给客户端等待16秒后如果没有收到客户端的响应,此地址就可以继续分配给其他客户端。通过下面的选择阶段和确认阶段后才能最终确定客户端可以使用的IPv4地址。

第三步:选择阶段

如果有多个DHCPv4服务器向DHCPv4客户端回应DHCP OFFER报文,则DHCPv4客户端一般只接收第一个收到的DHCP OFFER报文,然后以广播方式发送DHCP REQUEST报文,该报文中包含客户端想选择的DHCPv4服务器标识符(即Option54)和客户端IPv4地址(即Option50,填充了接收的DHCP OFFER报文中yiaddr字段的IPv4地址)。

DHCPv4客户端广播发送DHCP REQUEST报文通知所有的DHCPv4服务器,它将选择某个DHCPv4服务器提供的IPv4地址,其他DHCPv4服务器可以重新将曾经分配给客户端的IPv4地址分配给其他客户端。

设备作为DHCPv4客户端,如果网络中有多个DHCPv4服务器,DHCPv4客户端会根据收到DHCP OFFER报文的顺序对DHCPv4服务器进行轮询,在前一个DHCPv4服务器分配IPv4地址失败时,选择下一个DHCPv4服务器分配IPv4地址。

第四步:确认阶段

当DHCPv4服务器收到DHCPv4客户端发送的DHCP REQUEST报文后,DHCPv4服务器回应DHCP ACK报文,表示DHCP REQUEST报文中请求的IPv4地址(Option50填充的IPv4地址)分配给客户端使用。

DHCPv4客户端收到DHCP ACK报文,会广播发送免费ARP报文,探测本网段是否有其他终端使用服务器分配的IPv4地址,如果在指定时间内没有收到回应,表示客户端可以使用此地址。如果收到了回应,说明有其他终端使用了此地址,客户端会向服务器发送DHCP DECLINE报文,并重新向服务器请求IPv4地址,同时,服务器会将此地址列为冲突地址。当服务器没有空闲地址可分配时,再选择冲突地址进行分配,尽量减少分配出去的地址冲突。

当DHCPv4服务器收到DHCPv4客户端发送的DHCP REQUEST报文后,如果DHCPv4服务器由于某些原因(例如协商出错或者由于发送REQUEST过慢导致服务器已经把此地址分配给其他客户端)无法分配DHCP REQUEST报文中Option50填充的IPv4地址,则发送DHCP NAK报文作为应答,通知DHCPv4客户端无法分配此IPv4地址。DHCPv4客户端需要重新发送DHCP DISCOVER报文来申请新的IPv4地址。

DHCPv4客户端重用曾经使用过的地址的工作原理

DHCPv4客户端非首次接入网络时,可以重用曾经使用过的地址。DHCPv4客户端与DHCPv4服务器交互DHCPv4报文,以重新获取之前使用的IPv4地址等网络参数,该过程称为两步交互。

是否支持重用曾经使用过的IPv4地址,因不同客户端而异。下面的DHCPv4客户端以PC为例。

第一步:选择阶段

客户端广播发送包含前一次分配的IPv4地址的DHCP REQUEST报文,报文中的Option50(请求的IPv4地址选项)字段填入曾经使用过的IPv4地址。

第二步:确认阶段

DHCPv4服务器收到DHCP REQUEST报文后,根据DHCP REQUEST报文中携带的MAC地址来查找有没有相应的租约记录,如果有则返回DHCP ACK报文,通知DHCPv4客户端可以继续使用这个IPv4地址。否则,保持沉默,等待客户端重新发送DHCP DISCOVER报文请求新的IPv4地址。

DHCPv4 客户端更新租期的工作原理

DHCPv4 服务器给每个分配给客户端的 IPv4 地址定义一个使用期限(租期)。客户端在租期到期前的某个时间点更新 IPv4 地址的租期。更新租期的过程如下:

  1. 当租期达到 50%(T1)时,客户端发送 DHCP REQUEST 报文请求更新租期。

  2. 当租期达到 87.5%(T2)时,如果仍未收到应答,客户端再次发送 DHCP REQUEST 报文。

  3. 如果租期时间到时都没有收到回应,客户端停止使用此 IPv4 地址,重新发送 DHCP DISCOVER 报文请求新的 IPv4 地址。


本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/3542.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

玩转大语言模型——使用graphRAG+Ollama构建知识图谱

系列文章目录 玩转大语言模型——ollama导入huggingface下载的模型 玩转大语言模型——langchain调用ollama视觉多模态语言模型 玩转大语言模型——使用graphRAGOllama构建知识图谱 文章目录 系列文章目录前言下载和安装用下载项目的方式下载并安装用pip方式下载并安装 生成知…

Nginx三种不同类型的虚拟主机(基于域名、IP 和端口)

🏡作者主页:点击! Nginx-从零开始的服务器之旅专栏:点击! 🐧Linux高级管理防护和群集专栏:点击! ⏰️创作时间:2025年1月15日13点14分 目录 1. 基于域名的虚拟主机 …

pytest-instafail:让测试失败信息即时反馈

pytest-instafail:让测试失败信息即时反馈 前言一、简介二、优势三、安装与使用3.1 未安装时运行情况3.2 安装3.3 已安装时运行情况3.3 pytest.ini 配置选项 四、对比 总结 前言 当测试用例数量庞大时,定位测试失败的原因往往耗时费力。此时,…

从 0 开始实现一个 SpringBoot + Vue 项目

从 0 开始实现一个 SpringBoot Vue 项目 从 0 开始实现一个 SpringBoot Vue 项目 软件和工具创建 SpringBoot 后端项目创建 MySQL 数据库配置文件实现增删改查接口 Model 层mapper 层service 层controller 层测试 实现项目功能接口 代码测试 创建 Vue 前端 安装 Node.js配置…

5. 推荐算法的最基础和最直观的认识

1.性别年龄转换为统一的计量单位 所谓推荐,就是替别人推荐,比如工厂A需要招男员工,希望大家推荐认识的人。那么在这里,就有了推荐的概念,限定条件是男。我们知道,人的性别一般分为男或者女。在这里假设把男…

ASP.NET Core - 配置系统之配置添加

ASP.NET Core - 配置系统之配置添加 2. 配置添加 2. 配置添加 配置系统可以读取到配置文件中的信息,那必然有某个地方可以将配置文件添加到配置系统中。之前的文章中讲到 ASP.NET Core 入口文件中,builder(WebApplicationBuilder 对象) 中有一个 Config…

AI编程工具横向评测--Cloudstudio塑造完全态的jupyter notebook助力数据分析应用开发

AI编程工具横向评测–Cloudstudio塑造完全态的jupyter notebook助力数据分析应用开发 数据分析类应用的开发,指的是首先进行数据分析,比如统计学分析、机器学习模型的构建等,然后将分析的流程开发成数据分析类的工具,或者将数据分…

HBase实训:纸币冠字号查询任务

一、实验目的 1. 理解分布式数据存储系统HBase的架构和工作原理。 2. 掌握HBase表的设计原则,能够根据实际业务需求设计合理的表结构。 3. 学习使用HBase Java API进行数据的插入、查询和管理。 4. 实践分布式数据存储系统在大数据环境下的应用,…

算法与数据结构——复杂度

目录 一 数据结构前言 1 数据结构 2 算法 3 算法与数据结构的关系 二 算法效率 1 算法效率: 2 复杂度 2.1 概念: 2.2分类: 2.3 空间复杂度在计算机高速发展的现代重要吗? 3 复杂度的重要性 三 时间复杂度…

usb通过hdc连接鸿蒙next的常用指令

参考官方 注册报名https://www.hiascend.com/developer/activities/details/44de441ef599450596131c8cb52f7f8c/signup?channelCodeS1&recommended496144 hdc-调试命令-调测调优-系统 - 华为HarmonyOS开发者https://developer.huawei.com/consumer/cn/doc/harmonyos-guid…

论文笔记-arXiv2025-A survey about Cold Start Recommendation

论文笔记-arXiv2025-Cold-Start Recommendation towards the Era of Large Language Models: A Comprehensive Survey and Roadmap 面向大语言模型(LLMs)时代的冷启动推荐:全面调研与路线图1.引言2.前言3.内容特征3.1数据不完整学习3.1.1鲁棒…

如何将数据库字符集改为中文,让今后所有的数据库都支持中文

最后一行有我自己的my.ini文件 数据库输入中文数据时会变为乱码, 这个时候,我们为每个数据库设置字符集,太过于麻烦,为数据库单独设置重启后又会消失 Set character_set_database’utf8’; Set character_set_server’utf8’; …

AI刷题-小R的随机播放顺序、不同整数的计数问题

目录 一、小R的随机播放顺序 问题描述 测试样例 解题思路: 问题理解 数据结构选择 算法步骤 最终代码: 运行结果: 二、 不同整数的计数问题 问题描述 测试样例 解题思路: 问题理解 数据结构选择 算法步骤 最终…

从零搭建SpringBoot3+Vue3前后端分离项目基座,中小项目可用

文章目录 1. 后端项目搭建 1.1 环境准备1.2 数据表准备1.3 SpringBoot3项目创建1.4 MySql环境整合,使用druid连接池1.5 整合mybatis-plus 1.5.1 引入mybatis-plus1.5.2 配置代码生成器1.5.3 配置分页插件 1.6 整合swagger3(knife4j) 1.6.1 整…

在.NET用C#将Word文档转换为HTML格式

将Word文档转换为HTML格式尤其具有显著的优势,它不仅能够确保文档内容在多种设备和平台上保持一致灵活的显示,还便于通过网络进行传播和集成到各种Web应用中。随着越来越多的企业和开发者寻求更灵活、更具兼容性的文件处理方式,.NET框架下的C…

GPT-5 传言:一场正在幕后发生的 AI 变革

新的一年,让我们从一个引人入胜的话题开始:如果我告诉你,GPT-5 并非虚构,而是真实存在呢?它不仅真实存在,而且正在你看不见的地方悄然塑造着世界。我的基本假设是:OpenAI 已经秘密开发出 GPT-5&…

【机器学习实战】kaggle 欺诈检测---使用生成对抗网络(GAN)解决欺诈数据中正负样本极度不平衡问题

【机器学习实战】kaggle 欺诈检测---如何解决欺诈数据中正负样本极度不平衡问题https://blog.csdn.net/2302_79308082/article/details/145177242 本篇文章是基于上次文章中提到的对抗生成网络,通过对抗生成网络生成少数类样本,平衡欺诈数据中正类样本极…

ZNS SSD垃圾回收优化方案解读-2

四、Brick-ZNS 关键设计机制解析 Brick-ZNS 作为一种创新的 ZNS SSD 设计,聚焦于解决传统 ZNS SSDs 在垃圾回收(GC)过程中的数据迁移低效问题,其核心特色为存储内数据迁移与地址重映射功能。在应用场景中,针对如 Rock…

浅谈云计算14 | 云存储技术

云存储技术 一、云计算网络存储技术基础1.1 网络存储的基本概念1.2云存储系统结构模型1.1.1 存储层1.1.2 基础管理层1.1.3 应用接口层1.1.4 访问层 1.2 网络存储技术分类 二、云计算网络存储技术特点2.1 超大规模与高可扩展性2.1.1 存储规模优势2.1.2 动态扩展机制 2.2 高可用性…