DHCP协议讲解(含DHCP状态机)

加个目录

一、概述

大家都知道,为了使用TCP/IP协议族,每台主机和路由器需要一定的配置信息。

下面是一个简单的例子:

某学校的教学办公区域将要布置数百台计算机,每台都需要分配IP,如何实现对这些数量巨大的主机进行IP分配?
最简单的方法自然是手动逐一为每台主机分配IP,但这即繁琐,同时也需要时刻注意分配的IP是否冲突。
而DHCP协议,就是用来帮助我们自动为网络中的主机分配IP的。

1、DHCP的概念:

  • DHCP(Dynamic Host Configuration Protocol,动态主机配置协议)通常被应用在大型的局域网络环境中,主要作用是集中的管理、分配IP地址,使网络环境中的主机(有时也为路由器)动态的获得IP地址、网关地址和DNS服务器地址等信息,并能够提升地址的使用率
  • 由于DHCP是C/S模式运行的,所以使用DHCP的设备为客户端,而提供DHCP服务的为服务端。DHCP客户端可以让设备自动地从DHCP服务器获得IP地址以及其他配置参数。DHCP服务器端控制一段IP地址范围,客户端登录服务器时就可以自动获得服务器分配的IP地址和子网掩码。

2、DHCP地址池(为什么分配地址最大不能超过主机?):

  • DCHP服务器分配给DHCP客户端的地址范围。
  • 设置地址池时结束IP不应超过当前网段的最大主机地址,如起始地址为172.16.0.1/16,则最大允许设置分配172.16.0.1172.16.255.255这个范围内的地址,当然也可在这个范围内设置更少的地址,如172.16.0.1172.16.1.1,则是256个地址可用于分配,或172.16.0.10~172.16.0.15,则是6个地址可用于分配。
  • 设置地址池时,地址池中不应当包含DHCP服务器自身的LAN地址,否则可能造成地址冲突。

3、DHCP租期:

  • 当一个IP分配给MAC地址(指客户端网卡,每一个网卡都有对应的MAC地址作为网络中的唯一标识)后,在租期内,默认这个MAC地址的IP为该地址,不再进行分配。 当到期后,该地址被回收,重新分配。
  • 设置地址租期,对于减轻DHCP压力,网络稳定有一定的好处,但是有些时候网络会因此出现诸如IP地址不够等一些问题。

4、DHCP分配地址的方式:

  • 自动分配方式:在这种方式下DHCP服务器会给主机一个永久性的IP地址,只要DHCP的客户端第一次能够成功的从DHCP服务端获得IP地址,那么它就可以永久性的的使用该地址了。
  • 动态分配方式:是指主机会获得一个有时间限制的IP地址,当时间到期或者主机主动放弃该地址的时候,这个地址才能被其它地址使用。
  • 手工分配方式:客户端的IP地址由网络管理员指定,DHCP服务器只是将指定的IP地址告诉给客户端主机。

5、常用端口:

  • DHCP Server端,使用UDP端口:67
  • DHCP Client端,使用UDP端口:68

6、DHCP报文类型:

  • DHCP DISCOVER : 客户端开始 DHCP 过程发送的包,是 DHCP 协议的开始
  • DHCP OFFER : 服务器接收到 DHCP DISCOVER 之后做出的响应,它包括了给予客户端的 IP(yiaddr)、客户端的 MAC 地址、租约过期时间、服务器的识别符以及其他信息:(此时DHCP客户端没有IP地址,所以DHCP服务器同样使用广播进行通讯
  • DHCP REQUEST : 客户端对于服务器发出的 DHCP OFFER 所做出的响应,包含了DHCP客户端的MAC地址、接受的租约中的IP地址、提供此租约的DHCP服务器地址等信息。在续约租期的时候同样会使用
  • DHCP ACK : 服务器在接收到客户端发来的 DHCP REQUEST之后发出的成功确认的报文,包含了租约期限及其他TCP/IP选项信息。在建立连接的时候,客户端在接收到这个报文之后才会确认分配给它的IP和其他信息可以被允许使用(ACK包中包含了客户端的MAC地址)。
  • DHCP NAK : DHCP ACK 的相反的报文,表示服务器拒绝了客户端的请求。
  • DHCP RELEASE : 一般出现在客户端关机、下线等状况。这个报文将会使 DHCP 服务器释放发出此报文的客户端的 IP 地址
  • DHCP INFORM : 客户端发出的向服务器请求一些信息的报文
  • DHCP DECLINE : 当客户端发现服务器分配的IP地址无法使用(如 IP 地址冲突时),将发出此报文,通知服务器禁止使用该 IP 地址。

7、openwrt中的dhcp服务是由dnsmasq进程提供的,此进程也可通过配置提供dns服务。

二、DHCP工作过程(附抓包分析)

DHCP的实现分为4步,分别是:

  • 第一步:Client端在局域网内发起一个DHCP Discover包,目的是想发现能够给它提供IP的DHCP Server。

  • 第二步:可用的DHCP Server接收到Discover包之后,通过发送DHCP Offer包给予Client端应答,意在告诉Client端它可以提供IP地址。

  • 第三步:Client端接收到Offer包之后,发送DHCP Request包请求分配IP。

  • 第四步:DHCP Server发送ACK数据包,确认信息。

实例数据包如下:

在这里插入图片描述

  • DHCP Discover:在这里插入图片描述

  • DHCP Offer:在这里插入图片描述

  • DHCP Request:在这里插入图片描述

  • DHCP ACK:在这里插入图片描述

正常来说,一次DHCP过程只需要上面状态机的前四步,后面的续约是在DHCP的租期到达1/2和3/4的时候`进行的。

DHCP REQUEST首次必须是广播——为了告诉所有DHCP服务器自己已经做出选择,接受了某个DHCP服务器的租约。之后可单播

三、DHCP状态机(完整状态机可以下去自己抓包分析)

在这里插入图片描述

  • 1.客户机开始处于Init状态:没有信息,并广播DHCP DISCOVER消息

  • 2.选择状态:客户机接收DHCP OFFER消息直到决定使用哪个服务器和地址

  • 3.请求状态:当它做出选择,发出DHCP REQUEST消息来响应时,进入请求状态

  • 4.接收ACK:

    • 可能会收到来自不需要的地址的ACK。如果没有发现它需要的地址,发送一个DHCP DECLING消息,并转化到Init状态
    • 接收到一个自己需要的地址的DHCP ACK消息,接受它,获得超时值T1(T/2)和T2(3T/4),并进入绑定状态,这是就能使用这个地址直至过期
  • 5.IP续期:

    • 客户端从服务器租用IP地址会有一个固定的租约期。除了租约期限外,还有两个时间值T1和T2。其中,T1定义为租约期限的1/2,而T2定义为租约期限的3/4
    • 当到达T1定义的时间期限时,客户端会向提供租约的原始服务器发送DHCP Request包(单播),尝试重新建立租约
      • 如果服务器接受此请求,则回复DHCP ACK消息,包含更新后的租约期限续租后就会立刻更新T1和T2
      • 如果不接受租约更新请求,就会发送DHCP NAK包,此时DHCP客户端立即发起DHCP DISCOVER进程以寻求IP地址;
      • 如果没有从DHCP服务器得到任何回复,则继续使用此IP地址直到到达T2定义的时间限制。
    • 此后(假设此时仍未接收到任何回复),DHCP客户端定时发送DHCP Request包(单播)。如果一直都没有得到确认,则继续使用此IP地址直到T2定义的时间限制。
    • 此时(T2),客户端会发送DHCP Request包(广播),尝试与网络中的其他DHCP服务器重新建立租约
    • 如果租期到达时,仍然未更新租约,则地址自动释放客户端既不能更新自己的租期,也无法从其他的DHCP服务器获得新的租期,客户端必须停止使用这个IP地址,从而停止常规的TCP/IP网络操作
  • T1和T2时刻都是发送DHCP Request包,只不过T1时刻是单播发送,而T2时刻是广播发送

四、DHCP实用场景

  • 1、办公网络:在办公网络中,DHCP可以用来自动分配IP地址、子网掩码、默认网关和DNS服务器的信息,从而简化网络管理,并且可以避免手动配置每台设备的网络信息。
  • 2、学校或大学网络:在学校或大学的校园网络中,DHCP可以帮助大量的设备如学生和教职员工的笔记本电脑、智能手机、平板电脑等设备方便地连接到网络并且获取必要的网络配置信息。
  • 3、企业内部网络:在企业内部网络中,DHCP可以帮助快速增加或减少设备并且简化网络管理,使得员工在任何地点都可以方便地连接到企业网络。
  • 4、公共场所网络:例如酒店、机场、咖啡厅等公共场所的网络,DHCP可以帮助游客和顾客方便地连接到网络,无需手动配置IP地址等网络信息。
  • 5、无线网络:在无线网络中,DHCP可以帮助无线设备快速获取IP地址等连接信息,并方便地切换到不同的无线接入点而无需重新配置网络信息。
  • 6、园区网中不同部门规划了不同网段,每个网段内的主机可以通过DHCP服务器动态获取IP地址等网络参数。如果主机与DHCP服务器不在同一网段,还需要部署DHCP中继。

五、DHCP中继

应用场景:

  • 在大型的网络中,可能会存在多个网段。DHCP客户机通过网络广播消息获得DHCP服务器的响应后得到IP地址。但广播消息是不能跨越网段的。因此,DHCP客户机和服务器在不同的网段内时,客户机向服务器申请IP地址就要用到DHCP中继代理。
  • 简单网络中,一个DHCP服务器可供一个局域网使用(由于广播的缘故)
  • 复杂网络中,可以通过一个或更多DHCP中继代理来中继DHCP流量。

工作原理:

  • DHCP中继代理用于将DHCP操作扩展到跨越多个网段

    • DHCP中继会对DHCP Client发送的报文的源目IP地址进行改动,将本来的广播报文改变成单播报文,以使得DHCP报文可以跨三层路由设备传输。
      在这里插入图片描述
  • 4.使用中继的时机

    • 在一般情况下,中继不会参与客户机和服务器之间的所有DHCP流量交换。
    • 相反,它仅中继那些 广播消息(或IPv6中的组播)。这种消息通常在客户机首次获得自已的地址时交换。
    • 当一台客户机获得一个IP地址,并且服务器的IP地址使用服务器标识选项时,它可与服务器进行单播通信不经过中继
  • 5.中继代理在传统上是第3层设备,并且通常结合了路由功能。

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

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

相关文章

fastjson 怎么把List<User> 和 json字符串 相互转换 请提供代码

fastjson 怎么把List 和 json字符串 相互转换 请提供代码 FastJSON&#xff08;阿里巴巴的 JSON 库&#xff09;可以轻松实现 List<User> 和 JSON 字符串之间的相互转换。以下是一些简单的代码示例&#xff1a; 将 List 转为 JSON 字符串&#xff1a; import com.alib…

哈希_快乐数

//编写一个算法来判断一个数 n 是不是快乐数。 // // 「快乐数」 定义为&#xff1a; // // // 对于一个正整数&#xff0c;每一次将该数替换为它每个位置上的数字的平方和。 // 然后重复这个过程直到这个数变为 1&#xff0c;也可能是 无限循环 但始终变不到 1。 // 如果…

Pytorch:torch.optim详解

本篇笔记主要介绍torch.optim模块&#xff0c;记录学习过程 在深度学习中&#xff0c;我们通常会使用优化算法来调整神经网络的权重和偏差&#xff0c;以便模型能够更好地拟合训练数据。torch.optim是PyTorch中的一个模块&#xff0c;它提供了各种优化算法的实现&#xff0c;用…

Seata简介与常用模式解决方案概述

Seata 是什么? Seata 是一款开源的分布式事务解决方案&#xff0c;致力于提供高性能和简单易用的分布式事务服务。 Seata事务管理中有三个重要的角色&#xff1a; TC (Transaction Coordinator) - 事务协调者&#xff1a;维护全局和分支事务的状态&#xff0c;协调全局事务提…

挑战传统IT:RPA以更低的成本和更高的效率领跑数字化转型

在企业数字化进程中&#xff0c;传统的IT解决方案往往带来高成本和低效率的问题。因此&#xff0c;如何顺利地、平稳地进行数字化转型对企业来说是核心考虑。 为此&#xff0c;本文将深入探讨RPA&#xff08;Robotic Process Automation&#xff09;如何以其独特的优势&#xf…

记一次mysql 3306端口映射到外网 frp

通过下面命令启动被访问机器的frp nohup ./frps -c ./frps.toml & 记一次mysql 3306端口映射到外网 坑 mysql本身没有配置远程访问 frp配置错误&#xff0c;没注意中文单引号和英文单引号的区别 mysql本身没有配置远程访问 问题 navacat 远程链接mysql 出现 Lost c…

Camunda 7.x 系列【58】自定义表单设计器

有道无术,术尚可求,有术无道,止于术。 本系列Spring Boot 版本 2.7.9 本系列Camunda 版本 7.19.0 源码地址:https://gitee.com/pearl-organization/camunda-study-demo 文章目录 1. 前言2.表单设计器3. 案例演示3.1 引入流程设计器3.2 表单数据存储3.3 测试1. 前言 Camu…

牛客 算法题 golang语言实现

题目 HJ101 输入整型数组和排序标识&#xff0c;对其元素按照升序或降序进行排序 描述 输入整型数组和排序标识&#xff0c;对其元素按照升序或降序进行排序数据范围&#xff1a; 1 ≤ &#xfffd; ≤ 10001≤n≤1000 &#xff0c;元素大小满足 0 ≤ &#xfffd; &#…

CONTROLLING VISION-LANGUAGE MODELS FOR MULTI-TASK IMAGE RESTORATION

CONTROLLING VISION-LANGUAGE MODELS FOR MULTI-TASK IMAGE RESTORATION (Paper reading) Ziwei Luo, Uppsala University, ICLR under review(6663), Cited:None, Stars: 350, Code, Paper. 1. 前言 像CLIP这样的视觉语言模型已经显示出对零样本或无标签预测的各种下游任务…

AutoDIR: Automatic All-in-One Image Restoration with Latent Diffusion

AutoDIR: Automatic All-in-One Image Restoration with Latent Diffusion (Paper reading) Yitong Jiang, The Chinese University of Hong Kong, arXiv23, Code, Paper 1. 前言 我们提出了一种具有潜在扩散的一体化图像恢复系统&#xff0c;名为AutoDIR&#xff0c;它可以…

sql23(Leetcode2356每位教师所教授的科目种类的数量)

代码&#xff1a; # Write your MySQL query statement below select teacher_id,count(distinct(subject_id)) as cnt from Teacher group by teacher_id

YoloV7改进策略:RefConv打造轻量化YoloV7利器

文章目录 摘要论文:《RefConv: 重参数化的重聚焦卷积》1、简介2、相关研究2.1、用于更好性能的架构设计2.2、结构重参数化2.3、权重重参数化方法3、重参数化的重聚焦卷积3.1、深度RefConv3.2、普通的RefConv3.3、重聚焦学习4、实验4.1、在ImageNet上的性能评估4.2、与其他重参…

西南科技大学信号与系统A实验三(线性连续时间系统的分析)

一、实验目的 1.掌握用 matlab 分析系统时间响应的方法 2.掌握用 matlab 分析系统频率响应的方法 3.掌握系统零、极点分布与系统稳定性关系 二、实验原理 1. 系统函数 H(s) 系统函数:系统零状态响应的拉氏变换与激励的拉氏变换之比. H(s)=R(s)/E(s) 在 matlab 中可采用…

GZ031 应用软件系统开发赛题第10套

2023年全国职业院校技能大赛 应用软件系统开发赛项&#xff08;高职组&#xff09; 赛题第10套 工位号&#xff1a; 2023年4月 竞赛说明 一、项目背景 党的二十大报告指出&#xff0c;要加快建设制造强国、数字中国&#xff0c;推动制造业高端化、智能化、…

图片伪装,将RAR文件隐藏到图片里

下载链接 效果图&#xff1a; 代码&#xff1a; ECHO OFF TITLE PtoR MODE con COLS55 LINES25 color 0A:main cls echo.当前时间&#xff1a;%date% %time% echo.欢迎使用图片伪装&#xff0c;本脚本可以将RAR文件隐藏到图片里. echo.set /p "imagefile①请拖入图像文件…

数据仓库数据管理模型

数据仓库分为贴源层、数据仓库层、数据服务层&#xff0c;有人叫做数仓数据模型&#xff0c;或者叫"数据管理模型”。 我们为什么要进行数据分层管理&#xff0c;下图的优点介绍已经说得比较明确&#xff0c;再补充几点&#xff1a; 保障数据一致性&#xff1a;上层的数…

最简单的Python程序员编辑器——学习Python的第二篇

第二章 基础 安装python 按照上一期的教程安装&#xff0c;如果有什么问题可以提出阿莱 安装完之后&#xff0c;在电脑的程序中查找SHELL 这里是Win10&#xff0c;win11你也是到程序菜单查找。 你可以把把它点击右键&#xff0c;保存到桌面上&#xff0c;或者固定到开始菜单…

数组元素积的符号

数组元素积的符号 描述 : 已知函数 signFunc(x) 将会根据 x 的正负返回特定值&#xff1a; 如果 x 是正数&#xff0c;返回 1 。如果 x 是负数&#xff0c;返回 -1 。如果 x 是等于 0 &#xff0c;返回 0 。 给你一个整数数组 nums 。令 product 为数组 nums 中所有元素值的…

leetcode 283. 移动零

代码&#xff1a; class Solution {public void swap(int[] nums,int m,int n){int tmpnums[m];nums[m]nums[n];nums[n]tmp;}public void moveZeroes(int[] nums) {int cur0;int dest-1;int nnums.length;for(;cur<n;cur){if(nums[cur]!0){dest;swap(nums,cur,dest);}}} } …

数字系列——数字经济(2)​

上次呢&#xff0c;已经为大家捋了什么是数字经济&#xff1f;、数字经济的特点有哪些&#xff1f;和数字经济的构成&#xff0c;对于数字经济有了基础性的了解&#xff0c;今天继续为大家捋一捋。 数字经济的发展 1.互联网的普及 互联网作为数字经济的坚实基础&#xff0c;其…