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.rhkb.cn/news/430724.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

sheng的学习笔记-AI-K-摇臂赌博机(K-armed bandit)

AI目录:sheng的学习笔记-AI目录-CSDN博客 强化学习 sheng的学习笔记-AI-强化学习(Reinforcement Learning, RL)-CSDN博客 基础知识 单步强化学习任务 先考虑比较简单的情形:最大化单步奖赏,即仅考虑一步操作。需注意…

使用API有效率地管理Dynadot域名,注册域名服务器(NS)信息

前言 Dynadot是通过ICANN认证的域名注册商,自2002年成立以来,服务于全球108个国家和地区的客户,为数以万计的客户提供简洁,优惠,安全的域名注册以及管理服务。 Dynadot平台操作教程索引(包括域名邮箱&…

GPU共享技术深度剖析与总结

在人工智能和深度学习领域,GPU(图形处理器)已成为不可或缺的计算工具。随着深度学习模型的规模和复杂性的增加,单个GPU已经难以满足所有训练需求,GPU共享技术应运而生,成为提高训练效率的重要手段。本文将深…

聊聊AUTOSAR:基于Vector MICROSAR的TC8测试开发方案

技术背景 车载以太网技术作为汽车智能化和网联化的重要组成部分,正逐步成为现代汽车网络架构的核心,已广泛应用于汽车诊断(如OBD)、ECU软件更新、智能座舱系统、高清摄像头环视泊车系统等多个领域。 在这个过程中,ET…

oklink爬虫逆向分析

目标网站 aHR0cHM6Ly93d3cub2tsaW5rLmNvbS96aC1oYW5zL2tsYXl0bi9ibG9jay1saXN0L3BhZ2UvMg 一、抓包分析 请求头有很多加密参数,不过经过观察,发现只有X-Apikey是检测的 二、逆向分析 发包类型不是XMLHttpRequest,不能下xhr断点 打开启动器…

【项目案例】物联网比较好的10+练手项目推荐,附项目文档/源码/视频

练手项目推荐 1 智能小车 项目功能介绍: 本项目由三部分组成:应用端(微信小程序)、设备端(Hi3861)、驱动端(UPS)。 1. 应用端,采用微信小程序作为应用端控制界面。在开…

spring里面内置的非常实用的工具

一 、请求数据记录 Spring Boot提供了一个内置的日志记录解决方案,通过 AbstractRequestLoggingFilter 可以记录请求的详细信息。 AbstractRequestLoggingFilter 有两个不同的实现类,我们常用的是 CommonsRequestLoggingFilter。 通过 CommonsRequestL…

CSS | 如何来避免 FOUC(无样式内容闪烁)现象的发生?

一、什么是 FOUC(无样式内容闪烁)? ‌FOUC(Flash of Unstyled Content)是指网页在加载过程中,由于CSS样式加载延迟或加载顺序不当,导致页面出现闪烁或呈现出未样式化的内容的现象。‌ 这种现象通常发生在HTML文档已经加载&…

WPF DataGrid 动态修改某一个单元格的样式

WPF DataGrid 动态修改某一个单元格的样式 <DataGrid Name"main_datagrid_display" Width"1267" Height"193" Grid.Column"1"ItemsSource"{Binding DataGridModels}"><DataGrid.Columns><!--ElementStyle 设…

旷视科技ShuffleNetV1代码分析[pytorch版]

一、前述 旷视科技针对于ShuffleNet系列网络在GitHub网站上已开源&#xff0c;其链接&#xff1a;https://github.com/megvii-model/ShuffleNet-Series 在这个系列中&#xff0c;包括了ShuffleNetV1/V2网络&#xff0c;如下图所示。 我们点开ShuffleNetV1文件夹&#xff0…

python爬虫:从12306网站获取火车站信息

代码逻辑 初始化 (init 方法)&#xff1a; 设置请求头信息。设置车站版本号。 同步车站信息 (synchronization 方法)&#xff1a; 发送GET请求获取车站信息。返回服务器响应的文本。 提取信息 (extract 方法)&#xff1a; 从服务器响应中提取车站信息字符串。去掉字符串末尾的…

UML——统一建模语言

序言&#xff1a; 是统一建模语言的简称&#xff0c;它是一种由一整套图表组成的标准化建模语言。UML用于帮助系统开发人员阐明&#xff0c;展示&#xff0c;构建和记录软件系统的产出。UML代表了一系列在大型而复杂系统建模中被证明是成功的做法&#xff0c;是开发面向对象软件…

【计算机基础】用bat命令将Unity导出PC包转成单个exe可执行文件

Unity打包成exe可执行文件 上边连接是很久以前用过的方法&#xff0c;发现操作有些不一样了&#xff0c;并且如果按上述操作比较麻烦&#xff0c;所以写了个bat命令。 图1、导出的pc程序 如图1是导出的pc程序&#xff0c;点击exe文件可运行该程序。 添加pack_project.bat文件 …

el-form中三级动态添加数据

el-form中三级动态添加数据 data数据view按钮触发事件 data数据 submitForm: {id: undefined, //修改IDapp_id: undefined, //IP类型name: , //规则名称sort: undefined, //排序detail: [{keycode: 0,title_one: undefined, //一级标题desc_detail: [{keycode: 0,title_two: u…

LPDDR4芯片学习(一)——基础知识与引脚定义

一、基础知识 01 dram基本存储单元 当需要将一位数据存储到DRAM中时&#xff0c;晶体管会充电或放电电容。充电的电容表示逻辑高&#xff08;1&#xff09;&#xff0c;放电的电容表示逻辑低&#xff08;0&#xff09;。由于电容会随着时间泄漏电荷&#xff0c;因此需要定期刷…

Axure大屏可视化模板:跨领域数据分析平台原型案例

随着信息技术的飞速发展&#xff0c;数据可视化已成为各行各业提升管理效率、优化决策过程的重要手段。Axure作为一款强大的原型设计工具&#xff0c;其大屏可视化模板在农业、园区、城市、企业数据可视化、医疗等多个领域得到了广泛应用。本文将通过几个具体案例&#xff0c;展…

PyTorch使用------自动微分模块

目录 &#x1f354; 梯度基本计算 1.1 单标量梯度的计算 1.2 单向量梯度的计算 1.3 多标量梯度计算 1.4 多向量梯度计算 1.5 运行结果&#x1f4af; &#x1f354; 控制梯度计算 2.1 控制不计算梯度 2.2 注意: 累计梯度 2.3 梯度下降优化最优解 2.4 运行结果&#x1…

mybatis 配置文件完成增删改查(五) :单条件 动态sql查询,相当于switch

文章目录 单条件 动态sql查询写测试方法 疑问总结 单条件 动态sql查询 <select id"selectByConditionBySingle" resultMap"brandResultMap">.select *from tb_brandwhere<choose>/*相当于switch*/<when test"status ! null">…

江协科技STM32学习- P17 TIM输入捕获

&#x1f680;write in front&#x1f680; &#x1f50e;大家好&#xff0c;我是黄桃罐头&#xff0c;希望你看完之后&#xff0c;能对你有所帮助&#xff0c;不足请指正&#xff01;共同学习交流 &#x1f381;欢迎各位→点赞&#x1f44d; 收藏⭐️ 留言&#x1f4dd;​…

if __name__ == ‘__main__‘: 在 Python 中的作用

Python Python 是一种广泛使用的高级编程语言&#xff0c;它以其易读性和简洁的语法而闻名。Python 支持多种编程范式&#xff0c;包括面向对象、命令式、函数式和过程式编程。它由 Guido van Rossum 创建&#xff0c;并在 1991 年首次发布。 Python 的一些关键特性包括&#…