数据通信——应用层(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安全培训具有重要意义。 有助于提高员工的安全意识 通过模拟真实的海上风电作业环境࿰…...
基于服务器使用 apt 安装、配置 Nginx
🧾 一、查看可安装的 Nginx 版本 首先,你可以运行以下命令查看可用版本: apt-cache madison nginx-core输出示例: nginx-core | 1.18.0-6ubuntu14.6 | http://archive.ubuntu.com/ubuntu focal-updates/main amd64 Packages ng…...
python爬虫:Newspaper3k 的详细使用(好用的新闻网站文章抓取和解析的Python库)
更多内容请见: 爬虫和逆向教程-专栏介绍和目录 文章目录 一、Newspaper3k 概述1.1 Newspaper3k 介绍1.2 主要功能1.3 典型应用场景1.4 安装二、基本用法2.2 提取单篇文章的内容2.2 处理多篇文档三、高级选项3.1 自定义配置3.2 分析文章情感四、实战案例4.1 构建新闻摘要聚合器…...
IT供电系统绝缘监测及故障定位解决方案
随着新能源的快速发展,光伏电站、储能系统及充电设备已广泛应用于现代能源网络。在光伏领域,IT供电系统凭借其持续供电性好、安全性高等优势成为光伏首选,但在长期运行中,例如老化、潮湿、隐裂、机械损伤等问题会影响光伏板绝缘层…...
Docker 本地安装 mysql 数据库
Docker: Accelerated Container Application Development 下载对应操作系统版本的 docker ;并安装。 基础操作不再赘述。 打开 macOS 终端,开始 docker 安装mysql之旅 第一步 docker search mysql 》〉docker search mysql NAME DE…...
前端中slice和splic的区别
1. slice slice 用于从数组中提取一部分元素,返回一个新的数组。 特点: 不修改原数组:slice 不会改变原数组,而是返回一个新的数组。提取数组的部分:slice 会根据指定的开始索引和结束索引提取数组的一部分。不包含…...
LCTF液晶可调谐滤波器在多光谱相机捕捉无人机目标检测中的作用
中达瑞和自2005年成立以来,一直在光谱成像领域深度钻研和发展,始终致力于研发高性能、高可靠性的光谱成像相机,为科研院校提供更优的产品和服务。在《低空背景下无人机目标的光谱特征研究及目标检测应用》这篇论文中提到中达瑞和 LCTF 作为多…...
使用SSE解决获取状态不一致问题
使用SSE解决获取状态不一致问题 1. 问题描述2. SSE介绍2.1 SSE 的工作原理2.2 SSE 的事件格式规范2.3 SSE与其他技术对比2.4 SSE 的优缺点 3. 实战代码 1. 问题描述 目前做的一个功能是上传多个文件,这个上传文件是整体功能的一部分,文件在上传的过程中…...
uni-app学习笔记三十五--扩展组件的安装和使用
由于内置组件不能满足日常开发需要,uniapp官方也提供了众多的扩展组件供我们使用。由于不是内置组件,需要安装才能使用。 一、安装扩展插件 安装方法: 1.访问uniapp官方文档组件部分:组件使用的入门教程 | uni-app官网 点击左侧…...
Qt的学习(一)
1.什么是Qt Qt特指用来进行桌面应用开发(电脑上写的程序)涉及到的一套技术Qt无法开发网页前端,也不能开发移动应用。 客户端开发的重要任务:编写和用户交互的界面。一般来说和用户交互的界面,有两种典型风格&…...
Android屏幕刷新率与FPS(Frames Per Second) 120hz
Android屏幕刷新率与FPS(Frames Per Second) 120hz 屏幕刷新率是屏幕每秒钟刷新显示内容的次数,单位是赫兹(Hz)。 60Hz 屏幕:每秒刷新 60 次,每次刷新间隔约 16.67ms 90Hz 屏幕:每秒刷新 90 次,…...
