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/REQUEST 68 67 广播
2-4 步 OFFER/ACK 67 68 单播/广播

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 地址的动态分配,结合广播与单播机制,确保网络配置的自动化与高效性。

相关推荐
hsjiasb5 小时前
FreeRTOS学习(二十七)——任务栈与栈溢出检测
开发语言·stm32·学习·学习笔记·freertos
丰锋ff5 小时前
3.1 Qt事件之事件处理器
开发语言·qt
多弗朗皮卡丘5 小时前
C语言梦开始的地方7:函数
c语言·开发语言
月华路6 小时前
G1 垃圾回收:脏卡队列、记忆集与并发精化线程机制
java·开发语言
gugucoding6 小时前
47. 【Java】Java内存模型(JMM)与可见性
java·开发语言
m0_380743876 小时前
从零调用 Claude 教程
开发语言·python·node.js
起床学FPGA7 小时前
AI回答问题之后,会自动跳到最下面的问题
开发语言·javascript·ecmascript
x_x-F8 小时前
网络数据从网卡到用户态:一场基于内存所有权转移的接力赛
开发语言·网络·php
名字还没想好☜8 小时前
Java 线上内存泄漏排查实战:jmap 导堆、MAT 找 GC Roots 与四类常见泄漏
java·开发语言·jvm·内存泄漏
码匠许师傅8 小时前
【C++ 面试真题】聊聊 C++ 的多继承与虚继承
开发语言·c++·面试