DHCP原理简析及交互实践

news/2025/2/13 23:51:22/

环境:
os:centos7
dnsmasq:version 2.76

一. dhcp工作原理

首先补充几个dhcp相关的基本概念:
1、动态主机配置协议DHCP(Dynamic Host Configuration Protocol)是一种网络管理协议,用于集中对用户IP地址进行动态管理和配置。
2、DHCP协议采用UDP作为传输协议,DHCP客户端发送请求消息到DHCP服务器的67号端口,DHCP服务器回应应答消息给DHCP客户端的68号端口

3、在没有部署DHCP中继的场景下,首次接入网络的DHCP客户端与DHCP服务器的报文交互称为DHCP报文四步交互,如下图:
在这里插入图片描述
4、当DHCP客户端非首次接入网络时,可以重用曾经使用过的地址。客户端广播发送包含前一次分配的IP地址的DHCP REQUEST报文,报文中的Option50(请求的IP地址选项)字段填入曾经使用过的IP地址。DHCP服务器收到DHCP REQUEST报文后,根据DHCP REQUEST报文中携带的MAC地址来查找有没有相应的租约记录,如果有则返回DHCP ACK报文,通知DHCP客户端可以继续使用这个IP地址。否则,保持沉默,等待客户端重新发送DHCP DISCOVER报文请求新的IP地址
在这里插入图片描述

二. 实践

2.1 准备

参考文章《【云计算 | Openstack】KVM虚机通过dhcp自动获取地址》,使用dnsmasq作为dhcp服务端,使用virsh虚机作为dhcp客户端。

在这里插入图片描述

网络架构如下图所示,dnsmasq监听网桥br0的67号端口

在这里插入图片描述

2.2 开始dhcp并抓包

当客户端开始dhcp时,对虚机口进行抓包结果如下:
在这里插入图片描述

2.3 报文分析

上文提到dhcp的4步交互前提是:dhcp客户端首次接入网络。本次实践dhcp客户端非首次接入,同时修改了dhcp地址池的cidr信息。因此整个dhcp流程大致为:
客户端发送dhcp request——无响应——客户端重新发送dhcp discover——服务端响应dhcp offer——客户端发送dhcp request——服务端响应dhcp ack

1、先看下报文1-2DHCP Request

客户端发送两次dhcp request报文想继续使用之前申请的地址

在这里插入图片描述

2、报文3DHCP Discover,该步是发现阶段

客户端发送的dhcp request收不到响应,因此DHCP客户端以广播方式发送DHCP DISCOVER报文(目的IP地址为255.255.255.255)给同一网段内的所有设备(包括DHCP服务器或中继)。DHCP DISCOVER报文中携带了客户端的MAC地址、需要请求的参数列表选项(Option55)、广播标志位(flags字段)等信息。

在这里插入图片描述
(Option 55 包含的内容)

在这里插入图片描述

3、报文4-7

dhcp服务端收到了discover报文后,连续发送3个arp和一个icmp报文,用来判断地址11.11.1.70是否被其他客户端占用

在这里插入图片描述

4、报文8DHCP Offer,该步是提供阶段

服务端选择一个可用的IP地址,然后通过DHCP OFFER报文发送给DHCP客户端,Option 1包含了该ip地址的掩码位

在这里插入图片描述
5、报文9DHCP Request,该步是选择阶段

如果有多个DHCP服务器向DHCP客户端回应DHCP OFFER报文,则DHCP客户端一般只接收第一个收到的DHCP OFFER报文,然后以广播方式发送DHCP REQUEST报文,该报文中包含客户端想选择的DHCP服务器标识符(即Option54)和客户端IP地址(即Option50)。
DHCP客户端广播发送DHCP REQUEST报文通知所有的DHCP服务器,它将选择某个DHCP服务器提供的IP地址,其他DHCP服务器可以重新将曾经分配给客户端的IP地址分配给其他客户端。

在这里插入图片描述
6、报文10DHCP ACK,该步是确认阶段

当DHCP服务器收到DHCP客户端发送的DHCP REQUEST报文后,DHCP服务器回应DHCP ACK报文,表示DHCP REQUEST报文中请求的IP地址(Option50填充的)分配给客户端使用。

在这里插入图片描述
7、报文11-12

DHCP客户端收到DHCP ACK报文,会广播发送免费ARP报文,探测本网段是否有其他终端使用服务器分配的IP地址,如果在指定时间内没有收到回应,表示客户端可以使用此地址

在这里插入图片描述

8、报文13-14

DHCP客户端收到DHCP ACK报文,会广播发送ARP报文,获取网关的MAC信息(网关的ip地址在dhcp offer 和dhcp ack报文的Option 3 中均有体现)

在这里插入图片描述


http://www.ppmy.cn/news/32142.html

相关文章

在 Vue 中使用 dhtmlxGantt 组件时遇到的问题汇总

最近接到需要在页面中引入甘特图,经过多方对比插件 甘特图1 1.Gantt-elastic:一个基于HTML和CSS的甘特图插件,具有自适应布局和触摸屏支持。 2.jsgantt-improved:一个基于JavaScript的甘特图插件,具有灵活的配置选项&a…

UDS 14229 -1 刷写34,36,37服务,标准加Trace讲解,没理由搞不明白

🍅 我是蚂蚁小兵,专注于车载诊断领域,尤其擅长于对CANoe工具的使用🍅 寻找组织 ,答疑解惑,摸鱼聊天,博客源码,点击加入👉【相亲相爱一家人】🍅 玩转CANoe&…

分享10个不错的C语言开源项目

今天跟大家分享10个重量级的C语言开源项目,C语言确实经得住考验: Redis:Redis是一个开源的高性能的键值对数据库。它以C语言编写,具有极高的性能和可靠性。 Nginx:Nginx是一个高性能的HTTP和反向代理服务器&#xff0…

ES+Redis+MySQL,这个高可用架构设计太顶了!

一、背景 会员系统是一种基础系统,跟公司所有业务线的下单主流程密切相关。如果会员系统出故障,会导致用户无法下单,影响范围是全公司所有业务线。所以,会员系统必须保证高性能、高可用,提供稳定、高效的基础服务。 …

ChatGPT告诉你:项目管理能干到60岁吗?

早上好,我是老原。这段时间最火的莫过于ChatGPT,从文章创作到论文写作,甚至编程序,简直厉害的不要不要的。本以为过几天热度就自然消退了,结果是愈演愈烈,热度未减……大家也从一开始得玩乐心态&#xff0c…

javaSE系列之类与对象

javaSE系列之类与方法什么是类类的定义书写事项什么是实例化this引用this的注意事项对象的初始化构造方法封装的概念访问限定符封装扩展之包static成员static的特性static的初始化代码块注意事项内部类1.实例内部类💗 💗 博客:小怡同学💗 &am…

python flask项目打包成docker镜像发布

1.编写python flask代码,简单写一个加法的接口,命名为sum.py import json from flask import Flask,request,render_template app Flask(__name__)app.route(/) def index():return hello worldapp.route(/sum,methods[POST]) def correct():a request…

第十八章 opengl之高级OpenGL(帧缓冲)

OpenGL创建一个帧缓冲纹理附件渲染缓冲对象附件渲染到纹理举例实践如下后期处理反相灰度核效果锐化模糊边缘检测屏幕缓冲当前已经接触了很多:颜色缓冲,(写入深度信息)深度缓冲,(根据条件丢弃特定片段&#…