DHCP协议原理(网络协议)

DHCP简介

定义

DHCP(动态主机配置协议)是一种网络管理协议,能够自动为局域网中的每台计算机分配IP地址及其他网络配置参数,包括子网掩码默认网关和DNS服务器等。这一机制极大简化了网络管理,尤其在大型局域网中,管理员无需手动为每台计算机配置TCP/IP协议,从而节省了时间并减少了因IP地址重复导致的网络问题。

子网掩码是一种用于区分网络部分和主机部分的32位数字,通常以四个十进制数表示(例如:255.255.255.0)。它在IP地址中扮演重要角色,帮助网络设备识别哪些设备位于同一子网内。

默认网关是网络设备用于发送数据到不同子网或外部网络的路由器地址。它充当了设备与其他网络之间的出口,确保数据能够正确传输。

应用

DHCP非常适合经常移动位置的设备。在Windows系统中,通过控制面板的网络图标进入网络连接后,可以在TCP/IP协议的属性中选择“自动获得IP地址”和“自动获得DNS服务器地址”,这表明计算机将通过DHCP协议动态获取网络配置。

DHCP工作流程

下图局域网中充当DHCP服务器的是路由器,未分配IP地址的设备是客户端。

  • 在传输层,DHCP消息封装的协议是UDP。DHCP客户端使用的UDP端口是68,而DHCP服务器使用的UDP端口是67。
  • 在网络层,DHCP消息使用IP协议,并且将协议字段的数值设置为0x11(17换算为十六进制即为0x11)指明IP头部之内封装的协议为UDP协议。
  • 在数据链路层,由于网络层载荷类型为IPv4数据包,所以数据链路层头部的类型字段封装的数值是0x0800。

发现阶段

DHCP客户端寻找DHCP服务器。DHCP客户端以广播方式(因为DHCP服务器的IP地址对于客户端来说是未知的)发送DHCP发现信息来寻找DHCP服务器,即向地址255.255.255.255发送特定的广播信息。网络上每一台安装了TCP/IP协议的主机都会接收到这种广播信息,但只有DHCP服务器才会做出响应。

提供阶段

DHCP服务器提供IP地址。在网络中接收到DHCP发现信息的DHCP服务器都会做出响应,它从尚未出租的IP地址中挑选一个分配给DHCP客户端,向DHCP客户端发送一个包含出租的IP地址和其他设置的DHCP提供信息。

选择阶段

DHCP客户端选择某台DHCP服务器提供的IP地址。如果有多台DHCP服务器向DHCP客户端发来的DHCP提供信息,则DHCP客户端只接收第一个收到的DHCP提供信息,然后它就以广播方式回答一个DHCP请求信息,该信息中包含向它所选定的DHCP服务器请求IP地址的内容。之所以要以广播方式回答,是为了通知所有的DHCP服务器,他将选择某台DHCP服务器所提供的IP地址。

确认阶段

DHCP服务器确认所提供的IP地址。当DHCP服务器收到DHCP客户端回答的DHCP请求信息之后,它便向DHCP客户端发送一个包含它所提供的IP地址和其他设置的DHCP确认信息,告诉DHCP客户端可以使用它所提供的IP地址,然后DHCP客户端便将其TCP/IP协议与网卡绑定。另外,除DHCP客户端选中的服务器外,其他的DHCP服务器都将收回曾提供的IP地址

重新登录

以后DHCP客户端每次重新登录网络时,就不需要再发送DHCP发现信息了,而是直接发送包含前一次所分配的IP地址的DHCP请求信息。当DHCP服务器收到这一信息后,它会尝试让DHCP客户端继续使用原来的IP地址,并回答一个DHCP确认信息。如果此IP地址已无法再分配给原来的DHCP客户端使用时(比如此IP地址已分配给其他DHCP客户端使用)​,则DHCP服务器给DHCP客户端回答一个DHCP否认信息。当原来的DHCP客户端收到此DHCP否认信息后,它就必须重新发送DHCP发现信息来请求新的IP地址。

更新租约

DHCP服务器向DHCP客户端出租的IP地址一般都有一个租借期限,期满后DHCP服务器便会收回出租的IP地址。如果DHCP客户端要延长其IP租约,则必须更新其IP租约。DHCP客户端启动时和IP租约期限过一半时,DHCP客户机都会自动向DHCP服务器发送更新其IP租约的信息。

DHCP报文

报文格式

字段作用 

操作类型

在DHCP协议中用于区分消息的方向。0x01表示客户端发出的消息(如DHCP发现和请求),而0x02表示服务器发出的消息(如DHCP提供、确认和否认)。这种设计确保了在DHCP通信中,客户端和服务器能够明确识别彼此的消息类型,从而实现有效的网络配置和管理。

硬件类型

在DHCP消息中用于指定硬件地址的类型。例如,0x01代表以太网(IEEE 802.3),这是最常见的硬件类型,用于描述基于有线网络的设备。 0x06表示IEEE 802.11,通常用于无线局域网(WLAN)。

硬件地址长度

硬件地址长度字段用于指示该媒介的地址长度。在以太网中,MAC地址的长度为6个字节(即6个八位组),因此在DHCP消息中,这个字段的值设置为0x06。

交互ID

DHCP客户端在接收到DHCP服务器发出的DHCP提供消息后,会检查该消息的交互ID:如果两者的交互ID相同,客户端接受这个IP地址。如果交互ID不同,客户端忽略这个消息。确保了在同一子网中多个DHCP客户端能够正确识别和处理来自DHCP服务器的响应,避免了混淆和冲突。

标志

指示客户端希望以单播还是广播形式接收服务器的响应。如果客户端希望接收单播,它会将标志字段设置为 0x0000;如果希望接收广播,则设置为 0x8000。这种设计确保了客户端在不同的网络状态下能灵活地选择通信方式,从而提高了 DHCP 协议的灵活性和效率。

客户端前IP地址

在DHCP消息中用于指示客户端当前正在使用的IP地址。这在续租过程中尤为重要,因为客户端需要通知服务器其现有地址,以便于续租或处理请求。

你的IP地址

当DHCP服务器向DHCP客户端提供和确认一个IP地址时,它就会将这个字段的值设置为提供和确认给客户端的那个IP地址。

服务器IP地址

标识DHCP服务器的IP地址。在DHCP服务器回应客户端的DHCP发现消息或DHCP请求消息时,它会在相应的消息中设置这个字段。

代理设备IP地址

标识DHCP代理中继的IP地址。当DHCP代理接收到来自客户端的请求并转发给服务器时,会填入该字段,以便服务器知道请求来自哪个网络。这在跨越不同子网时尤为重要,确保DHCP服务器能够正确回复。

客户端硬件地址

标识DHCP客户端的硬件地址。当DHCP客户端在局域网中以广播的形式发送DHCP发现消息时,它就会将这个字段的值设置为自己的硬件地址值。

可选项

这个字段是可选的。当DHCP客户端希望DHCP服务器提供其他配置参数,或者DHCP服务器向DHCP客户端提供其他参数时,都会通过设置可选项字段来进行询问、提供、请求和确认。在DHCP服务器和DHCP客户端交互配置参数时,它们除IP地址之外还应该/可以交互的参考包括但不限于:该地址的租期、子网掩码、默认网关地址和DNS服务器地址。

推荐一下

0voice · GitHub

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

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

相关文章

李沐 过拟合和欠拟合【动手学深度学习v2】

模型容量 模型容量的影响 估计模型容量 难以在不同的种类算法之间比较,例如树模型和神经网络 给定一个模型种类,将有两个主要因素: 参数的个数参数值的选择范围 VC维 线性分类器的VC维 VC维的用处 数据复杂度 多个重要因素: 样…

信息安全数学基础(20)中国剩余定理

前言 信息安全数学基础中的中国剩余定理(Chinese Remainder Theorem,简称CRT),又称孙子定理,是数论中一个重要的定理,主要用于求解一次同余式组。 一、背景与起源 中国剩余定理最早见于我国南北朝时期的数学…

鸿蒙小技巧

1.子调用父的方法 子组件 父组件 2.使用emitter实现孙子传爷 孙子组件 import emitter from ohos.events.emitter;let event: emitter.InnerEvent {eventId: 1,priority: emitter.EventPriority.HIGH};let eventData: emitter.EventData {data: {"state": true,…

R语言APSIM模型进阶应用与参数优化、批量模拟实践技术

随着数字农业和智慧农业的发展,基于过程的农业生产系统模型在模拟作物对气候变化的响应与适应、农田管理优化、作物品种和株型筛选、农田固碳和温室气体排放等领域扮演着越来越重要的作用。APSIM (Agricultural Production Systems sIMulator)模型是世界知名的作物生…

帧率和丢帧分析实践

一、识别丢帧 1、使用AppAnalyzer检测性能问题 首先使用AppAnalyzer工具进行性能问题检测,AppAnalyzer是DevEco Studio中提供的检测评分工具,用于测试并评价HarmonyOS应用或元服务的质量,能快速提供评估结果和改进建议,当前支持的…

Visual Studio 引入外部静态库与动态库

Windows Visual Studio 引入外部静态库与动态库 1.前言 在C开发中不可避免地要在自己的项目中引入外部库(OpenGL、OpenCV、OCC等),使用这些库都需要在项目中配置相应的属性才能正常开发编译。 2.引入 引入外部库主要引入三种文件&#xf…

C语言 | Leetcode C语言题解之第420题强密码检验器

题目&#xff1a; 题解&#xff1a; #define MAX(a, b) ((a) > (b) ? (a) : (b)) #define MIN(a, b) ((a) < (b) ? (a) : (b))int strongPasswordChecker(char * password) {int n strlen(password);bool has_lower false, has_upper false, has_digit false;for …

高质量的翻译:应用程序可用性和成功的关键

在日益全球化的应用市场中&#xff0c;开发一款优秀的产品只是成功的一半。另一半&#xff1f;确保你的用户&#xff0c;无论他们在哪里或说什么语言&#xff0c;都能无缝理解和使用它。这就是高质量翻译的用武之地——不是事后的想法&#xff0c;而是应用程序可用性和最终成功…

攻防世界---->ReverseMe-120

做题学习笔记。 前言&#xff1a;目前遇见的reverse都是&#xff0c;已知密文&#xff0c;去求解明文flag&#xff1b; 此题逆着来&#xff0c;通过明文&#xff0c;去求解密文flag。 base加密的识别&#xff0c;还算容易。 那么&#xff0c;base解码的识别呢&#xff1f; 攻…

Java调用数据库 笔记06 (修改篇)

1.创建Java的普通class类 2.加载驱动 Class.forName("com.mysql.jdbc.Driver"); 3.驱动管理类调用方法进行连接&#xff0c;得到连接对象 DriverManager.getConnection(url, user, password); 其中设置参数&#xff1a; static final String url "jdbc:my…

聊天组件 Vue3-beautiful-chat 插槽

前言 Vue3-beautiful-chat 组件有四个插槽可以定制 一、user-avatar(头像) 首先是头像插槽,我们可以直接在 <beautiful-chat></beautiful-chat> 中间使用; 作用: 我们可以在用户头像上添加自定义样式,比如添加节日边框、可以使用首字母作为头像。。。 …

《使用 LangChain 进行大模型应用开发》学习笔记(五)

前言 本文是 Harrison Chase &#xff08;LangChain 创建者&#xff09;和吴恩达&#xff08;Andrew Ng&#xff09;的视频课程《LangChain for LLM Application Development》&#xff08;使用 LangChain 进行大模型应用开发&#xff09;的学习笔记。由于原课程为全英文视频课…

kafka动态认证 自定义认证 安全认证-亲测成功

kafka动态认证 自定义认证 安全认证-亲测成功 背景 Kafka默认是没有安全机制的&#xff0c;一直在裸奔。用户认证功能&#xff0c;是一个成熟组件不可或缺的功能。在0.9版本以前kafka是没有用户认证模块的&#xff08;或者说只有SSL&#xff09;&#xff0c;好在kafka0.9版本…

【全网首发】2024华为杯数学建模ABCDEF选题方向+完整思路代码+数据集处理+可视化结果

2024华为杯研究生数学建模比赛ABCDEF选题分析 建议选哪道题&#xff1f; 点击链接加入群聊【2024华为杯数学建模助攻资料】&#xff1a;http://qm.qq.com/cgi-bin/qm/qr?_wv1027&kxtS4vwn3gcv8oCYYyrqd0BvFc7tNfhV7&authKeyedQFZne%2BzvEfLEVg2v8FOm%2BWNg1V%2Fiv3H…

Apifox Mock使用教程

Apifox是一个功能强大的可视化接口文档管理工具&#xff0c;使用Apifox可以让接口Mock变得更简单容易。Apifox具有出色的Mock功能&#xff0c;不仅兼容Mock.js语法&#xff0c;同时提供Nunjucks 和自定义脚本支持&#xff0c;能够满足不同场景需求&#xff0c;为前端接口调试提…

Element 表格相关操作

数据和页面展示分离操作 <script setup> // 从Element Plus中导入需要的图标组件 import {Check,Delete,Edit,Message,Search,Star, } from element-plus/icons-vue // 导入Vue的ref和onMounted函数 import {ref,onMounted} from vue;// 使用ref创建一个响应式的use…

vue-使用refs取值,打印出来是个数组??

背景&#xff1a; 经常使用$refs去获取组件实例&#xff0c;一般都是拿到实例对象&#xff0c;这次去取值的时候发现&#xff0c;拿到的竟然是个数组。 原因&#xff1a; 这是vue的特性,自动把v-for里面的ref展开成数组的形式&#xff0c;哪怕你的ref名字是唯一的&#xff01…

Java集合(List篇)

List a.使用List i.最基础的一种集合&#xff0c;是一种有序列表&#xff0c;内部按照放入元素的先后顺序存放&#xff0c;每个元素都可以通过索引确定自己的位置。 ii.数组的删除和新增 iii.ArrayList集合的新增和删除。 iv.LinkedList&#xff08;链表式集合&#x…

Ceph 基本架构(一)

Ceph架构图 Ceph整体组成 Ceph 是一个开源的分布式存储系统&#xff0c;设计用于提供优秀的性能、可靠性和可扩展性。Ceph 的架构主要由几个核心组件构成&#xff0c;每个组件都有特定的功能&#xff0c;共同协作以实现高可用性和数据的一致性。 以下是 Ceph 的整体架构及其…

Tomcat CVE-2017-12615 靶场攻略

漏洞描述 当 Tomcat运⾏在Windows操作系统时&#xff0c;且启⽤了HTTP PUT请求⽅法&#xff08;例如&#xff0c;将 readonly初始化参数由默认值设置为false&#xff09;&#xff0c;攻击者将有可能可通过精⼼构造的攻击请求数据包向服务器上传包含任意代 的 JSP ⽂件&#xf…