6.3、动态主机配置协议 DHCP

news2025/1/15 23:38:15

1、DHCP的作用

如下所示,我们如何配置用户主机,才能是用户主机正常访问网络中的 Web 服务器

image-20230108230719775

即:需要给网络中的各主机正确配置 IP 地址、子网掩码、默认网关、DNS 服务器等网络相关配置信息

例如:如下所示,手工配置的网络相关配置信息

image-20230108234321484

若配置的主机比较多,则手工配置的工作量比较大,且容易出错!

image-20230108234400722


若给该网络配置一台 DHCP 服务器,在该服务器中设置好可为网络中其他各主机配置的网络配置信息

网络中各主机开机后自动给启动 DHCP 程序,向 DHCP 服务器请求自己的网络配置信息

  • 这样网络中的各主机就都可以从 DHCP 服务器自动获取网络配置信息

image-20230108234751273

2、DHCP的工作过程

2.1、前提说明

假设网络中有两台 DHCP 服务器和一台用户主机

image-20230108234844086

DHCP 使用 C/S 方式,在 DHCP 服务器上运行 DHCP 服务器进程

  • 也可以简称为 DHCP 服务器

在用户主机上运行 DHCP 客户进程

  • 也可以简称为 DHCP 客户

image-20230108235011684


DHCP 是应用层的协议,它使用 UDP 所提供的服务

  • 也就是说 DHCP 报文在运输层会被封装成为 UDP 用户数据报

DHCP 服务器使用的 UDP 端口: 67 67 67

DHCP 客户使用的 UDP 端口: 68 68 68

这两个 UDP 端口都是熟知端口


封装有 DHCP 的用户数据报在网络层会被封装成 IP 数据报

  • 然后再根据所使用的网络接口封装成相应的相应的数据链路层的帧进行发送
  • 例如:封装成以太网帧

2.2、DHCP 客户与DHCP服务器的交互过程

image-20230109193348246


当启用主机的 DHCP 后,DHCP 客户将广播发送 DHCP 发现报文 \color{blue}\texttt{DHCP}发现报文 DHCP发现报文

封装该报文的 IP 数据报的源 IP 地址为 0.0.0.0 0.0.0.0 0.0.0.0

  • 这是因为主机目前还未分配到 IP 地址,因此使用该地址来代替

目的 IP 地址为广播地址 255.255.255.255 255.255.255.255 255.255.255.255

  • 之所以进行广播发送,是因为主机现在并不知道网络中有哪几个 DHCP 服务器

由于是广播的 IP 数据报,因此网络中的所有设备都会收到该 IP 数据报

  • 并对其层层解封

解封出封装有 DHCP 发现报文的 UDP 用户数据报

image-20230109001953098


对于 DHCP 客户,其应用层没有监听UDP 用户数据报目的端口 67 67 67 的进程

  • 也就是没有监听 DHCP 服务器进程

因此无法交付 DHCP 发现报文,只能丢弃(网络中其他客户机丢弃了这个 DHCP 发现报文)

对于 DHCP 服务器,其应用层始终运行着 DHCP 服务器进程,

  • 因此会接受该 DHCP 发现报文并作出响应

DHCP 报文的格式比较复杂,对于 DHCP 发现报文

  • 我们只需要知道其内部封装有事务 IDDHCP 客户端的 MAC 地址即可

image-20230109005850649


DHCP 服务器收到 DHCP 发现报文后,根据其中封装的 DHCP 客户端的 MAC 地址来查找自己的数据库

  • 看是否有针对该 MAC 地址的配置信息。

若有,则使用这些配置信息来构建并发送 DHCP 提供报文 \color{blue}\texttt{DHCP} 提供报文 DHCP提供报文

若没有,则采用默认配置信息来构建并发 DHCP 提供报文


封装有该报文的 IP 数据报的源 IP 地址为 DHCP 服务器的 IP 地址

目的 IP 地址仍为广播地址

  • 原因是:主机目前没有配置 IP 地址,为了使主机可以收到,只能发送广播

这样一来网络中的所有设备都会收到该 IP 数据报,并对其层层解封

  • 解封出封装有 DHCP 提供报文的 UDP 用户数据报

对于 DHCP 服务器,其应用层没有监听该 UDP 用户数据报目的端口 68 68 68 的进程

  • 也就是 DHCP 客户进程,因此无法交付 DHCP 提供报文,只能丢弃

image-20230109010145251


而对于 DHCP 客户,其应用层运行着 DHCP 进程

  • 因此会接受该 DHCP 提供报文并作出相应处理

DHCP 客户会根据 DHCP 提供报文中的事务 ID 来判断该报文是否是自己所请求的报文

  • 若该事务 ID 与自己之前发送的 DHCP 发现报文中封装的事务 ID 相等

    就表明这是自己所请求的报文,就可以接收该报文;否则丢弃该报文

image-20230109010846766


DHCP 提供报文中还封装有配置信息

  • 例如:IP 地址,子网掩码, 地址租期,默认网关,DNS 服务器等

注意DHCP 服务器从自己的 IP 地址池中挑选待租用给主机 IP 地址时,

  • 会使用 ARP 来确认所选 IP 地址未被网络中其他主机占用

image-20230109011152207


在本例中,DHCP 客户会收到两个 DHCP 服务器发来的 DHCP 提供报文,

  • DHCP 客户从中选择一个,一般来说,选择先到的那个
  • 并向所选择的 DHCP 服务器发送 DHCP 请求报文 \color{blue}\texttt{DHCP} 请求报文 DHCP请求报文

封装该该报文的 IP 数据报的源 IP 地址仍为 0.0.0.0 0.0.0.0 0.0.0.0

  • 因为此时 DHCP 客户才从多个 DHCP 服务器中挑选一个作为自己的 DHCP 服务器,

    它首先需要征得该服务器的同意,之后才能正是使用向该 DHCP 服务器租用的 IP 地址

目的地址仍为广播地址

  • 因为不用向网络中的每一个 DHCP 服务器单播发送 DHCP 请求报文,

    来告知它们是否请求它们作为自己的 DHCP 服务器

DHCP 请求报文中封装有事务 ID

  • DHCP 客户端的 MAC 地址
  • 接受的租约中的 IP 地址
  • 提供此租约的 DHCP 服务器端的 IP 地址

image-20230109011927410


在本例中,假设 DHCP 客户选择 DHCP 服务器 1 1 1 作为自己的 DHCP 服务器

  • 并且 DHCP 服务器 1 1 1 接收该请求

于是 DHCP 服务器 1 1 1DHCP 客户发送 DHCP 确认报文

封装该该报文的 IP 数据报的源 IP 地址为 DHCP 服务器 1 1 1IP 地址

  • 目的地址仍为广播地址(DHCP 客户还没有所提供的使用 IP 地址)

image-20230109012212767

DHCP 客户收到该确认报文后,就可以使用所租用的 IP


注意:在使用租用到的 IP 地址之前

DHCP 客户使用 ARP 检测所分配到的 IP 地址是否已被网络中其他主机占用:

若被占用:给 DHCP 服务器发送 DHCP DECLINE” (DHCP 谢绝)报文撤销(谢绝) IP 地址租约,并重新发送 “DHCP DISCOVER” (DHCP 发现)报文;

若未被占用:可以使用租约中的 IP 地址与网络中其他主机通信了。

image-20230109012555141


当租用期过了一半时,DHCP 客户会向 DHCP 服务器发送 DHCP 请求报文

  • 来请求更新租用期

封装该报文的 IP 数据报的源 IP 地址为 DHCP 客户之前租用到的 IP 地址

  • 目的 IP 地址为 DHCP 服务器 1 1 1 的地址

DHCP 服务器若同意,则发回 DHCP 确认报文

  • 这样 DHCP 客户就得到了新的租用期

DHCP 服务器若不同意,则发回 DHCP 否认报文

  • 这时 DHCP 客户必须立即停止使用之前租用的 IP 地址

    并重新发送 DHCP 发现报文来重新申请 IP 地址

DHCP 服务器若未作出响应,则在租用期过了 87.5 % 87.5\% 87.5%

  • DHCP 客户必须重新发送 DHCP 请求报文

    然后继续等待 DHCP 服务器可能做出的响应

DHCP 服务器若未作出响应,则当租用期到期后

  • DHCP 客户必须立即停止使用之前租用的 IP 地址

    并重新发送 DHCP 发现报文来重新申请 IP 地址

DHCP 客户可以随时提前终止 DHCP 服务器所提供的租用期,

  • 这时只需要向 DHCP 服务器发送 DHCP 释放报文段即可

image-20230109193408082


注意DHCP 服务器再给 DHCP 客户挑选 IP 地址时,使用 ARP 来确保所挑选的 IP 地址未被网络中其他主机占用

  • DHCP 客户在使用 IP 地址之前也会使用 ARP 来检测该 IP 地址是否被网络中其他主机占用

综上

image-20230109193348246

3、DHCP中继代理

image-20230109193535324

该网络中的主机广播发送 DHCP 发现报文,但该广播报文不会被路由器转发,而是丢弃!

image-20230109193623352


解决办法

image-20230109193714329

当该路由器收到广播的 DHCP 发现报文后,会单播转发给 DHCP 服务器

image-20230109193811178


使用中继代理的原因:

  • 并不愿意在每一个网络上都设置一个 DHCP 服务器,因为这样会使 DHCP 服务器的数量太多

4、小结

image-20230109194440493

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Wind X R2 蓝牙5.2双模热插拔PCB

键盘使用说明索引(均为出厂默认值)软件支持一些常见问题解答(FAQ)首次使用测试步骤蓝牙配对规则(重要)蓝牙和USB切换键盘默认层默认触发层0的FN键配置的功能默认功能层1配置的功能默认的快捷键蓝牙参数蓝牙…

从图谱看美创,全面覆盖《数据安全产品与服务图谱2.0》

第二届数据安全治理峰会上,《数据安全产品与服务图谱2.0》(下简称:图谱2.0)正式发布。图谱2.0在原图谱框架的基础上实现了更具体系化、层次化的升级迭代,旨在进一步打通供需双方对当前主流数据安全产品与服务的认知&am…

element table数据量太大导致网页卡死崩溃

做后台项目时,一次性在表格中加载几百上千条数据,发现有时页面会崩溃。究其原因,发现是一次渲染dom太多导致卡顿。在此尝试了多种解决方法,发现最优的就是替换组件,elementUI中的表格组件el-table性能不优,…

【Linux】除了Linux基础命令外 你还应知道的命令

Linux基础命令补充一、Linux版本信息:二、云服务器的登录方法三、Linux指令1.whoami显示当前用户名2.cd加特殊符号3.stat查看文件的所有的属性4.echo用于在终端设备上输出指定字符串5.wc统计文件的字节数、单词数、行数等信息6.|管道操作符7.sort对文件内容按照ASCII码值进行排…

Node.js篇-安装与配置,基本使用,服务器,项目搭建,调试

1.安装与配置官网下载, 并配置环境变量查看安装成功/版本号: DOS命令 node -v运行JS文件: node 文件名.js2.基本使用(1)CommonJS模块化Node.js遵循了CommonJS模块化规范( e.g: 自定义模块 )使用module.exports 导出// commonjs模块化开发 function sum(){ //代码 } function…

使用Transformers 和 Tokenizers从头训练一个 language model

这是训练一个 ‘小’ 模型的demo (84 M parameters 6 layers, 768 hidden size, 12 attention heads) – 跟DistilBERT有着相同的layers & heads,语言不是英语,而是 Esperanto 。然后可以微调这个模型在下游的序列标注任务。 下载数据集 Esperant…

代码随想录算法训练营第二天|977.有序数组的平方 ,209.长度最小的子数组 ,59.螺旋矩阵II

一、参考资料有序数组的平方 题目链接:https://leetcode.cn/problems/squares-of-a-sorted-array/文章讲解:https://programmercarl.com/0977.%E6%9C%89%E5%BA%8F%E6%95%B0%E7%BB%84%E7%9A%84%E5%B9%B3%E6%96%B9.html视频讲解: https://www.b…

2.1 面向对象

文章目录初始对象成员方法构造方法其他内置方法封装继承继承的基础语法pass复写和使用父类成员类型注解变量的类型注解函数(方法)的类型注解Union类型多态初始对象 样例: # 定义类 class Student:name Nonegender None # 创建对象 stu_1 …

谷粒商城项目之高级篇笔记(一)

目录1 商城业务1.1 商品上架1.1.1 商品Mapping1.1.2 建立product索引1.1.3 上架细节1.1.4 数据一致性1.1.5 代码实现1)先查库存(商品微服务远程调用库存微服务)2)商品上架,保存到es中(商品微服务远程调用搜…

小波分析——5.使用小波对信号去噪以及重构

文章目录假设有一个原始信号我们在前面的内容中已经介绍过,小波是什么,小波是如何对信号进行分解,以及小波对信号成分是如何分析的,今天在这篇文章,也是整个小波分析最后一个章节里,我们来谈谈小波最重要的…

Java获取上传的文件大小并且转换对文件大小进行单位转化

前言 今天产品提出来一个需求,上传文件的时候要记录文件的大小,并且保存到数据库里面。 正好借着这个机会,分享下对文件大小进行单位转化的一个方法。 获取文件大小(原字节)。 一般和前后端进行文件交互,都是通过MultipartFil…

Spring Boot常用注解,thymeleaf,数据提交

前言 Spring Boot主要解决的是在微服务的架构下简化配置(快速有效),前后端分离,快速开发。提供了快速启动,内嵌容器化web项目,开箱即用提供了默认配置,没有繁琐的xml配置和冗余代码。本文见简单…

GAMES101-图形学入门 LEC3: TRANSFORMATION-2D

文章目录上节内容回顾:本节知识概要Why study transformationModeling 模型变换Viewing 视图变换2D transformations 二维变换ScaleUniform 均匀缩放Non-Uniform 非均匀缩放Reflection Matrix 反射矩阵shear 切变rotate 旋转,默认绕(0,0&…

Wetool 一款高效免费的微信社群管理工具,检查单向好友,自动回复、群发

这是一款高效免费的微信社群管理工具,目前功能主要有客服、机器人、单删查询、自动接受好友、以及群管理的一些工具下面放一下软件功能截图需要注意的是开启此工具需要下载旧版本的微信,这个在软件安装启动页面会自动进行下载。单删改查功能这个功能适用…

python基础篇之循环语句(附加选车牌号小系统开发)

大家好,我是csdn的博主:lqj_本人 这是我的个人博客主页:lqj_本人的博客_CSDN博客-微信小程序,前端,vue领域博主lqj_本人擅长微信小程序,前端,vue,等方面的知识https://blog.csdn.net/lbcyllqj?spm1000.2115.3001.5343 哔哩哔哩欢迎关注&…

【CocosCreator入门】CocosCreator项目创建 | 面板介绍

本文进行创建项目流程和编辑器界面的介绍,熟悉组成编辑器的各个面板、菜单和功能按钮。 目录 一、CocosCreator创建项目 二、CocosCreator编辑器界面 2.1层级管理器 2.1.1界面介绍 2.1.2层级管理器操作 2.2资源管理器(Assets) 2.2.1界…

asp.net c#大型综合管理系统源码 OA+HR+CRM综合办公管理系统源码

分享一套大型协同办公(OAHRCRM)系统源码。 本系统是强大构建系统,为OA办公系统HR人力资源管理系统CRM客户关系管理系统集合而成,人员可以单点登入多个系统完成自己的作业,超方便实用。全套源代码提供,不封…

System Extract 步骤

纲要: 把Composition下的SWC分配到System Description 描述的CAN网络的的ECU上。 System Extract目录 1. Create System Extract 2. Map SWC to ECU instance 3. Maping System Signal to Data Element 4. Create System Extract 1. Create System Extract Ri…

SAP 开发测试生产环境的简单介绍

客户端(即Client),是SAP组织架构里最高层的组织单元,所有数据,包括静态数据(科目、客户、供应商、物料、资产等)、业务数据(采购订单、销售订单、生产订单、维修订单等)都会归属到各个Client下。…

Kettle用法之Windows定时任务

1 概述 前文提到了kettle的定时任务计划,但这个任务需要开启kettle,本文将利用windows的任务计划实现kettle的定时任务。 2 实现方法 需要编写bat文件,然后windows的任务计划调用执行。 3 操作步骤 3.1 第1步 启动spoon,新建一个作业&#xf…