当前位置: 首页 > web >正文

DHCP 握手原理

DHCP 握手原理

在这里插入图片描述

一、DHCP 概述

动态主机配置协议(Dynamic Host Configuration Protocol,DHCP) 用于自动分配网络配置参数(如 IP 地址、子网掩码、网关、DNS 等),简化手动配置流程。其核心是 DORA 四步握手(Discover → Offer → Request → Acknowledge),基于 UDP 协议(客户端端口 68,服务器端口 67)。

二、DHCP 四步握手流程

1. 阶段 1:Discover(客户端广播请求)

  • 触发场景:客户端初始化(如开机、重启、未获取到 IP)。
  • 消息DHCPDISCOVER
  • 源地址0.0.0.0(客户端无 IP)
  • 目标地址255.255.255.255(广播)
  • 内容
    • 客户端 MAC 地址
    • 请求的参数(如 IP 地址、租期)

流程图

Client:  DHCPDISCOVER ────────────────▶ 广播网络

2. 阶段 2:Offer(服务器响应)

  • 触发场景:DHCP 服务器收到 DHCPDISCOVER
  • 消息DHCPOFFER
  • 源地址:DHCP 服务器 IP
  • 目标地址255.255.255.255(广播,客户端仍无 IP)
  • 内容
    • 提供的 IP 地址、子网掩码
    • 租期、服务器标识(IP)

流程图

Server:  ◀────────── DHCPOFFER ─────────── 广播网络

3. 阶段 3:Request(客户端确认选择)

  • 触发场景:客户端可能收到多个 DHCPOFFER,选择其中一个。
  • 消息DHCPREQUEST
  • 源地址0.0.0.0(未正式分配 IP)
  • 目标地址255.255.255.255(广播)
  • 内容
    • 选中的服务器 IP
    • 请求的 IP 地址

流程图

Client:  DHCPREQUEST ────────────────▶ 广播网络

4. 阶段 4:Acknowledge(服务器确认分配)

  • 触发场景:服务器收到 DHCPREQUEST,确认分配。
  • 消息DHCPACK
  • 源地址:DHCP 服务器 IP
  • 目标地址:客户端 IP(此时客户端已临时使用分配的 IP)
  • 内容
    • 正式分配的 IP 地址、租期
    • 完整网络配置参数(网关、DNS 等)

流程图

Server:  ◀────────── DHCPACK ──────────── 客户端

三、关键机制与细节

1. 消息类型与端口

阶段消息UDP 源端口UDP 目标端口传输方式
1-3 步DISCOVER/REQUEST6867广播
2-4 步OFFER/ACK6768单播/广播

2. 状态机(客户端)

在这里插入图片描述

3. 续租机制

  • T1 时间(租期的 50%):客户端发送 DHCPREQUEST 续租。
  • T2 时间(租期的 87.5%):若 T1 未响应,广播 DHCPREQUEST 续租。
  • 租期过期:客户端释放 IP,回到 INIT 状态。

4. 异常处理

  • 无服务器响应:客户端定期重发 DISCOVER(指数退避策略)。
  • IP 冲突:客户端检测到 IP 冲突时,发送 DHCPDECLINE 拒绝分配。

四、示意图

Client       DHCP Server│                 ││  DHCPDISCOVER  │├───────────────▶│ (广播)│                 ││◀───────────────│  DHCPOFFER (单播/广播)│  DHCPREQUEST   │├───────────────▶│ (广播)│                 ││◀───────────────│  DHCPACK (单播)│  IP 已分配     │

五、常见问题

  1. 为什么前两步使用广播?
    客户端初始无 IP,无法单播;服务器需通过广播响应所有客户端。

  2. DHCP 与 BOOTP 的区别?
    DHCP 是 BOOTP 的扩展,支持动态租期、续租、更多配置参数。

  3. 能否分配固定 IP?
    可以,通过 DHCP 服务器的 静态绑定(根据客户端 MAC 地址分配固定 IP)。

DHCP 通过 DORA 四步握手 实现 IP 地址的动态分配,结合广播与单播机制,确保网络配置的自动化与高效性。

http://www.xdnf.cn/news/17185.html

相关文章:

  • 【学习嵌入式day-18-数据结构-循环链表】
  • 代码随想录day57图论7
  • CodeBuddy IDE 使用测评——半小时做一个web可视化数据工具
  • 基于WOA鲸鱼优化的VMD-GRU时间序列预测算法matlab仿真
  • uniapp 类似popover气泡下拉框组件
  • LeetCode——2683. 相邻值的按位异或
  • Spring Boot 与 Ollama 集成部署私有LLM服务 的完整避坑指南,涵盖 环境配置、模型管理、性能优化 和 安全加固
  • 【Electron】electron-vite中基于electron-builder与electron-updater实现程序远程自动更新,附源码
  • 对于包含大量文件的程序的便捷makefile操作
  • 建筑地产安全监控误报率↓77%:陌讯多模态融合算法实战解析
  • 布控球是什么?布控球有什么作用?什么场景下会使用到布控球设备?一篇短文带你了解
  • Windows驱动更新下载工具,电脑硬件设备驱动程序自动安装下载更新,可备份还原!键盘鼠标声卡网卡显卡主板硬盘驱动都可以下载,免费使用的神器!
  • 【软考中级网络工程师】2021年下半年上午真题及答案解析
  • 【科研绘图系列】R语言绘制误差棒图
  • C++继承关系中,深度解析类内存布局与多态的实现
  • PDF 文本提取技术深度对比:基于规则与基于模型的两种实现
  • 【乐企板式文件生成工程】关于乐企板式文件(PDF/OFD/XML)生成工程介绍
  • 结合opencv解释图像处理中的结构元素(Structuring Element)
  • C语言的结构体与联合体
  • 通信算法之301:IP核之单双端口 RAM和FIFO 读写
  • 【设计模式】代理模式
  • 【HUST】计算机|大学计算机基础内容(纯科普向)+数据结构数组、树、队列【旧文搬运】
  • Mac上pnpm的安装与使用
  • Java技术栈/面试题合集(12)-Maven篇
  • 使用maven-shade-plugin解决es跨版本冲突
  • ApplicationContext的实现类有哪些?
  • JSqlParser学习笔记 快速使用JSqlParser
  • C++临时对象:来源与性能优化之道
  • mysql 数据库系统坏了,物理拷贝出数据怎么读取
  • 【机器学习】(算法优化一)集成学习之:装袋算法(Bagging):装袋决策树、随机森林、极端随机树