数据通信——应用层(DHCP的原理与配置)
引言
假如我们的网络中有N台设备,它们都要设置IP地址,如果人工去一个个配置不仅不方便管理还很麻烦。因此我们用DHCP来自动分配地址。
一,系统的启动流程
不仅是计算机、很多网络设备的启动流程如下:
设备上电后,硬件开启并将初始化的硬件程序(也叫自举程序)装入内存运行后并进行读取,随后装入操作系统中,加载系统和应用软件 。
在这个时刻,我们的主机和路由器等网络设备的功能启动会在硬件开启后进行。不过在它启动前我们要配置好它的一些协议和细节。那这些协议的配置我们可以通过系统自动装配或者人工的方式实现。
比如说,我们运行TCP协议,那么与TCP协议相关的软件就会加载运行,像是其中的IP地址、子网掩码等都要具备。
为此,我们可以通过磁盘来接收协议配置信息,这样虽然快,但是太不灵活,你要一个个设置IP地址?所以说设备自动获取到协议的配置信息更好。因此,自动协议配置是一种可以对客户机分配IP地址的服务。
二,自动协议配置
我们要为设备分配IP地址和掩码等信息。因此我们要一台可以管理地址分配的服务器。这样,每个设备就可以向服务器索要IP地址等信息了。不过这些设备要支持自动向服务器索取IP地址的功能,因为服务器不会自发访问设备。
对此,出现了一个协议叫做RARP(反向地址转换协议)
三,RARP
RARP(Reverse Address Resolution Protocol)介绍这个玩意儿前,要先说说ARP协议,我们之前提到过ARP协议(地址转换协议)是设备进行广播通过IP地址来获取对端的MAC地址。而RARP就是应对设备不知道自己的IP地址,但是知道自己的物理地址的情况。
RARP与ARP相反。RARP发出解析过的物理地址并希望对端返回其对应的IP地址,仍是以广播形式发出,RARP有RARP服务器,它规定只有RARP服务器能产生应答。我们可以设置N多个RARP服务器。

反向地址转换协议(RARP) 允许局域网的物理机器从网关服务器的 ARP 表或者缓存上请求其 IP 地址。
当我们采用了RARP,并且在网关路由器上部署了MAC地址与IP的映射表时,其过程为:
(1)主机发送一个本地的RARP广播,在此广播包中含有自己的MAC地址并且请求收到该请求的RARP服务器给我分配一个IP地址;
(2)本地网段上的RARP服务器收到此请求后,检查其RARP列表,查找该MAC地址对应的IP地址;
(3)如果存在这个MAC地址与IP的映射,RARP服务器就给源主机发送一个响应数据包并将此IP地址提供给对方主机使用;
(4)如果不存在,RARP服务器不响应;
(5)源主机收到从RARP服务器的响应信息,就利用得到的IP地址进行通讯;如果一直没有收到RARP服务器的响应信息,超时后表示获取失败。
但这个东西太鸡肋了,我们看下图:

这是一个网络层次的概况。你可以发现ARP和RARP是共同在数据链路层工作的,因此广播发送的数据网关不会进行转发,也就是说每个网段都需要RARP服务器,还是太麻烦了。而且,ARP和RARP一样,都只为IP地址和MAC地址进行互相解析,其它协议配置不提供。
至此我们又有了新的方案——BOOTP(引导程序协议)
四,BOOTP
这个玩意儿我们就简单说说吧!它是基于UDP的C/S模式,是一个应用层协议。设备仍然是向服务器发送请求报文,服务器进行响应。由于设备一开始没有IP地址且通信不再处于数据链路层,因此需要IP报文设置。这个请求的报文将IP报文的首部中的源地址设置为了“0.0.0.0”(默认的源IP地址)目的地址为“255.255.255.255”(默认的目的IP地址)。
我不太想多写这个协议的工作流程,概括来讲,它是通过广播来获取IP,通过MAC获取IP映射。
优点是:可以穿越路由器(因为应用层协议);
缺点是:IP需要静态配置与MAC的映射,网络不具备移动性。
还是有点five,后来这个玩意儿就升级,变成了DHCP
五,DHCP
DHCP(动态主机配置协议)堪称一流的东西,DHCP客户机启动时,它会自动与DHCP服务器通信,由DHCP服务器给它分配IP地址等信息,我们还可以设置租约,规定这个IP使用多久,到期或者设备关机后,IP会被回收。
DHCP一共有三个组件:DHCP服务器(提供分配地址的中心)、DHCP客户机(需获取IP地址的设备)、DHCP中继系统(在客户机和服务器间转发消息)。
DHCP工作流程
发现阶段:客户机通过发送DHCP Discovery广播报文进行请求。如果客户机需要有一个永久性的租用地址,则可以直接请求该地址。这个阶段,源主机发送的IP报文首部的源目IP地址为全0(源)和全1(目)。
提供阶段:收到了IP的广播请求报文,会先分配地址,如果没有要分配的地址则从DHCP的地址池中取出一个可用的IP地址,并且返回一个单播DHCP Offer的报文回应。
选择阶段:客户机收到多个DHCP Offer报文时,往往会选择第一个或者自己所需的那一个IP地址后,广播发送给标识服务器的DHCP Request报文。
确认阶段:被标识的服务器收到后,会单播发回一个DHCP ACK报文表示你可以使用该地址。但是如果发送DHCP Nak。则表示客户机需要重新开始整个过程。也有可能发送DHCP Decline告诉客户机你的IP地址不能用耶!
如果客户机下线并重新登录后,这时就不需要进行发现和提供阶段了,直接将DHCP Request报文发出,服务器收到以后会尝试让客户机继续使用曾经的IP地址。如果我们要更新客户机的IP地址租赁期限,通过DHCP Request进行更新。在上述所有过程中,如果服务器没有返回DHCP ACK则证明服务器没有收到(大概0.875s),需要重发。
客户端获得IP地址后,也可以发送DHCP INFORM这个报文请求获取服务器的其它一些网络配置信息,如DNS等。
DHCP也可以穿越路由器工作,我们可设置DHCP中继代理,这样DHCP就会以单播方式在网络之间传递DHCP的相应报文。

因此,我们可以发现,DHCP几乎涵盖了RARP和BOOTP的功能,并在此基础上拓展了许多新的概念,下面我们用实验来看一下这个DHCP。
六,DHCP配置
首先,如下连接拓扑,将两台PC机均设置为DHCP模式后并开启抓包软件:



我们开启抓包后,会发现开启DHCP的PC机会源源不断的发送DHCP Discovery报文:

接下来我们配置DHCP服务器,我们在路由器接口上进行配置:
<Huawei>sys
Enter system view, return user view with Ctrl+Z.
[Huawei]int g0/0/0
[Huawei-GigabitEthernet0/0/0]ip add 192.168.1.254 24 //设置网关IP地址
[Huawei-GigabitEthernet0/0/0]quit
[Huawei]dhcp enable //开启DHCP服务
[Huawei]int g0/0/0
[Huawei-GigabitEthernet0/0/0]dhcp select interface //选择此接口作为地址池让客户端获取
[Huawei-GigabitEthernet0/0/0]dhcp server dns-list 114.114.114.114 8.8.8.8 //配置DNS
[Huawei-GigabitEthernet0/0/0]dhcp server lease day 0 hour 23 minute 0//设置地址池租赁时间为23小时
[Huawei-GigabitEthernet0/0/0]dhcp server excluded-ip-address 192.168.1.10//配置不被分配的地址段,这些地址段可以保留后用来做其他配置
[Huawei-GigabitEthernet0/0/0]dhcp server excluded-ip-address 192.168.1.200
好了,我们配置完后观察抓包的流量:

上图中的黄条就是配置接口IP后出现的,通过ARP协议检测到了它的IP地址与MAC地址的映射

上图可以看到,DHCP服务器与DHCP客户机迅速完成了建立。其报文传递也是很快。发现报文到达后,DHCP主机立刻回复了一个Offer报文 ,可以看到DHCP服务器为PC暂时分配的IP地址是192.168.1.252。但是我们看到主机并不确认自己是否可以使用这个报文,因此广播发送Request报文,经过服务器的ACK报文确定,并发向目的IP地址为192.168.1.252的设备,告诉其可以使用。
我们也能发现在1和3阶段均是以广播形式发送源目为全0和全1的字段,而2和4阶段则是单播方式发送报文。
我们最后在用主机Ping一下路由器的接口,发现可以Ping通的:


ipconfig命令也可以观察到:
后续
这些就是DHCP的内容,它只是个很简单的利用工具。在我们实际进行网络配置的时候使用它会非常方便,节省我们很多的时间。而且DHCP 服务器的网络规划做的也很好,让我们方便了后续的路由聚合与汇总。
相关文章:
数据通信——应用层(DHCP的原理与配置)
引言 假如我们的网络中有N台设备,它们都要设置IP地址,如果人工去一个个配置不仅不方便管理还很麻烦。因此我们用DHCP来自动分配地址。 一,系统的启动流程 不仅是计算机、很多网络设备的启动流程如下: 设备上电后,硬件…...
力扣151.反转字符串中的单词
原题链接:力扣151.反转字符串中的单词 全代码: 需要复刷 class Solution { public:void reverse(string& s, int start, int end){ //翻转,区间写法:左闭右闭 []for (int i start, j end; i < j; i, j--) {swap(s[i],…...
vim三种模式,文本操作(操作字符/光标,列出行号可视化块模式/多文件查看)
目录 vim--文本编辑器 功能 基本概念 命令/默认模式 插入模式 底行模式 文本操作 引入 移动光标位置 删除字符 -- x/dd 复制/粘贴字符 -- yw/yyp 替换文本 -- r / %s 底行模式 全局替换 -- /g 撤销操作 -- u / ctrlr 修改字符 -- cw 示例 跳行 -- ctrlg 底行…...
jquery控制easyui中combobox、textbox显示隐藏
//combobox下拉框 $("#下拉框id.combo").hide();//textbox输入框 $("#输入框id.textbox").hide(); 参考网址: https://blog.csdn.net/Coldmood/article/details/128279727...
Android拖放startDragAndDrop拖拽onDrawShadow静态添加xml布局View,Kotlin(4)
Android拖放startDragAndDrop拖拽onDrawShadow静态添加xml布局View,Kotlin(4) import android.content.ClipData import android.graphics.Canvas import android.graphics.Point import android.os.Bundle import android.util.Log import a…...
Servlet 初始化参数(web.xml和@WebServlet)
1、通过web.xml方式 <?xml version"1.0" encoding"UTF-8"?> <web-app xmlns"http://xmlns.jcp.org/xml/ns/javaee"xmlns:xsi"http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation"http://xmlns.jcp.org/xm…...
shell_62.shell脚本生成一个标准的 SQL INSERT 语句
无论是将文件读入脚本,还是将数据从脚本输出到文件,都会用到文件重定向,这是一种很 常见的操作。本节中的示例脚本两种功能皆有。它会读取 CSV 格式的数据文件,输出 SQL INSERT 语句,并将数据插入数据库。 shell 脚本使…...
华为ICT——第五章语音处理理论与实践
目录 语言学: 主要应用场景: 语言学: 语言学: 语音学(1) 语音学(2) 语音处理介绍: 人类语音的来源: 语言数据: 语言信号预处理: …...
ardupilot开发 --- SLAM 篇
1. 视觉SLAM 1.1 深度相机的种类 结构光相机,如 Kinect1.0、RealSenseTOF相机,如 Kinect2.0双目相机,如 ZED详细参考:https://zhuanlan.zhihu.com/p/282776636 1.2 视觉SLAM算法 2D slam 与3D slam 应用场景有哪些不同&#x…...
Elasticsearch:在你的数据上训练大型语言模型 (LLM)
过去的一两年,大型语言模型(LLM)席卷了互联网。 最近 Google 推出的 PaLM 2 和 OpenAI 推出的 GPT 4激发了企业的想象力。 跨领域构思了许多潜在的用例。 多语言客户支持、代码生成、内容创建和高级聊天机器人都是一些例子。 这些用例要求 LL…...
拓展卡尔曼滤波EKF
How to fusion two Gauss Distribution N ( x , μ 0 , σ 0 ) N ( x , μ 1 , σ 1 ) N ( x , μ ′ , σ ′ ) \begin{equation} \begin{aligned} \mathcal{N}(x,\mu_0,\sigma_0) \mathcal{N}(x,\mu_1,\sigma_1) \mathcal{N}(x,\mu,\sigma) \\ \end{aligned} \end{equatio…...
第四章 应用SysML基本特性集的汽车示例 P2(断更)|系统建模语言SysML实用指南学习
仅供个人学习 使用试用版CSM很鸡肋,然后书中一些内容没有说明,自定义方面有点困难,第四章暂时停止 同时感觉画图的顺序也很随意?甚至需求图放在了后面,觉得很离谱。 准备跳过这一章节 汽车模型 续P1 序列图表示启…...
Vue入门——核心知识点
简介 Vue是一套用于构建用户界面的渐进式JS框架。 构建用户界面:就是将后端返回来的数据以不同的形式(例如:列表、按钮等)显示在界面上。渐进式:就是可以按需加载各种库。简单的应用只需要一个核心库即可,复杂的应用可以按照需求…...
使用opencv的tracking模块跟踪目标
OpenCV跟踪模块算法介绍 OpenCV的tracking模块是一个功能强大的跟踪算法库,包含多种用于跟踪对象的算法。它可以帮助你在连续的视频帧中定位一个物体,例如人脸、眼睛、车辆等。 在OpenCV的tracking模块中,一些主要的跟踪算法包括࿱…...
Debian或Ubuntu静态交叉编译arm和aarch64
Debian或Ubuntu静态交叉编译arm和aarch64 介绍术语ARM架构前置条件从源代码编译一个简单的C程序configure和make交叉编译关于静态链接和依赖关系使用 musl libc 实现与 configure 和 make 进行交叉编译 ARM 正在获得越来越多的关注,并且越来越受欢迎。直接在这些基于…...
最新ai系统ChatGPT程序源码+详细搭建教程+以图生图+Dall-E2绘画+支持GPT4+Midjourney绘画
一、AI创作系统 SparkAi创作系统是基于OpenAI很火的ChatGPT进行开发的Ai智能问答系统和Midjourney绘画系统,支持OpenAI-GPT全模型国内AI全模型。本期针对源码系统整体测试下来非常完美,可以说SparkAi是目前国内一款的ChatGPT对接OpenAI软件系统。那么如…...
【设计模式】第16节:行为型模式之“命令模式”
一、简介 命令模式:将请求(命令)封装为一个对象,这样可以使用不同的请求参数化其他对象(将不同请求依赖注入到其他对象),并且能够支持请求(命令)的排队执行、记录日志、…...
安装pytorch报错torch.cuda.is_available()=false的解决方法
参考文章: https://blog.csdn.net/qq_46126258/article/details/112708781 https://blog.csdn.net/Andy_Luke/article/details/122503884 https://blog.csdn.net/anmin8888/article/details/127910084 https://blog.csdn.net/zcs2632008/article/details/127025294 …...
自定义表格的表头根据后端的数据进行筛选是否进行自定义表头添加按钮
自定义表格的表头根据后端的数据进行筛选是否进行自定义表头添加按钮 自定义表格的表头根据后端的数据进行筛选是否进行自定义表头添加按钮 <template><div class"box"><el-table :data"msgMapList" border class"table">&l…...
海上风电应急救援vr模拟安全培训提高企业风险防范能力
相比传统的发电厂,海上风电作业积累的经验少,风险高,因此为了规范施工人员的行为和操作,保障生产安全进行,开展海上风电VR安全培训具有重要意义。 有助于提高员工的安全意识 通过模拟真实的海上风电作业环境࿰…...
拒绝文献堆砌:如何打造逻辑严密的基金立项依据?
在基金申报的征途中,许多科研人员常陷入一个误区:认为立项依据就是文献的简单叠加。于是,我们花费大量时间搜集资料,将数十篇参考文献的摘要机械地罗列在一起。然而,这样的做法往往导致一个致命的弱点:缺乏…...
2026年4月怎么部署OpenClaw?本地简单流程:部署与大模型API、Skill配置教程
2026年4月怎么部署OpenClaw?本地简单流程:部署与大模型API、Skill配置教程。OpenClaw作为2026年主流的AI自动化助理平台,可通过阿里云轻量服务器实现724小时稳定运行,并快速接入钉钉,让AI在企业群聊、个人工作流中自动…...
企业必须为 Agent 配一个“人工兜底”策略
企业必须为 Agent 配一个“人工兜底”策略 摘要/引言 开门见山:凌晨三点的Agent报警邮件与CEO的抉择 202X年7月15日凌晨3:17,字节跳动旗下飞书客服Agent“小助手Pro”的自动迭代模块误触发了“智能调价权限升级”——原本它只能协助用户调整基础服务套餐的折扣率不超过5%,…...
PixEz-flutter全链路网络可靠性架构实战:从数据同步到动态优化
PixEz-flutter全链路网络可靠性架构实战:从数据同步到动态优化 【免费下载链接】pixez-flutter 一个支持免代理直连及查看动图的第三方Pixiv flutter客户端 项目地址: https://gitcode.com/gh_mirrors/pi/pixez-flutter 在移动应用开发中,网络请求…...
Python办公自动化教程 - openpyxl让Excel处理变得轻松
Python办公自动化教程 - openpyxl让Excel处理变得轻松适用人群:零基础办公人员、想提高工作效率的非IT专业人士 学习目标:掌握使用Python处理Excel文件,实现日常办公自动化 前置知识:不需要任何编程基础,只要会操作电脑…...
Janus-Pro-7B企业应用:制造业设备图片故障标注+维修建议生成
Janus-Pro-7B企业应用:制造业设备图片故障标注维修建议生成 1. 引言:当AI“老师傅”走进工厂车间 想象一下这个场景:工厂里一台关键设备突然发出异响,操作工赶紧用手机拍下照片,上传到一个系统。几秒钟后,…...
解决Blender和UE5坐标轴差异:服装Mesh导入导出常见问题排查指南
Blender与UE5坐标轴差异全解析:从理论到实践的资产迁移指南 在数字内容创作流程中,Blender与Unreal Engine 5(UE5)的协同工作已成为行业标准。但许多开发者第一次将服装模型从Blender导入UE5时,都会遇到一个令人困惑的现象——明明在Blender中…...
换个角度看LFI-labs:用Python脚本自动化通关,顺便复习命令注入与文件包含
用Python脚本自动化通关LFI-labs:从漏洞分析到批量测试实战 第一次接触LFI-labs靶场时,我像大多数人一样手动在浏览器里一关关测试。直到某天凌晨三点,盯着第15次重复输入的payload,突然意识到——这种重复劳动正是编程该解决的问…...
SEO优化软件年费用大概是多少
SEO优化软件年费用大概是多少 SEO优化软件已经成为许多企业和网站运营者必不可少的工具。它能够帮助提升网站在搜索引擎中的排名,从而带来更多的流量和潜在客户。但在选择和使用SEO优化软件时,很多人都会关心一个问题:SEO优化软件年费用大概…...
OpenClaw+Qwen3-4B创意写作:自媒体内容批量生成方案
OpenClawQwen3-4B创意写作:自媒体内容批量生成方案 1. 为什么需要自动化内容创作 作为一个自媒体运营者,我每天最头疼的就是内容创作。从选题策划到草稿撰写,再到格式调整和平台适配,整个过程耗时耗力。尤其当需要同时维护多个平…...
