Wireshark笔记-DHCP流程与数据包解析

背景

DHCP从大学上网络课时就开始知道了,当时只知道,能让计算机上网,要不就静态配IP,要不就DHCP获取,就能上网。

2021年时,毕业好几年了,想学习下网络知识,就准备考一个软考网工。按要求了解了DHCP的4个交互过程。

今天(2025年),准备把这4个交互过程使用Wirshark抓取出来,分析下。

知识点

DHCP 全称动态主机配置协议(Dynamic Host Configuration Protocol),是一种网络管理协议。它能自动为接入网络的设备(如手机、电脑)分配 IP 地址、子网掩码、网关、DNS 服务器等关键网络参数,无需手动配置。

设备接入时会向 DHCP 服务器发送请求,服务器根据规则分配地址并设定租期,租期到后可续租或重新分配,有效避免 IP 冲突,简化网络运维,是局域网和广域网中保障设备联网的核心协议。

下面再给出2021年4月11号,做的笔记

这个比较重要,看看Wireshark是不是按照这个逻辑走的。

DHCP客户端与DHCP服务端交互过程

① DHCP客户端会发起DHCPDiscover广播消息,向所有DHCP服务器请求IP地址租约,此时源IP地址为0.0.0.0,广播地址为255.255.255.255,请求数据包会客户端的MAC和计算机名。

② 所有接收到DHCPDiscover广播包的服务器,会检测自己的配置,如果富余的IP地址,则DHCP服务器发起DHCPOffer广播消息来应答DHCP客户端,如果有多个DHCP服务器给予此DHCP客户端DHCPOffer消息,则DHCP客户端接收第一个DHCPOffer消息中的IP地址。

③ 当DHCP客户端收到DHCP服务器的租约时,它将发起DHCPRequest广播消息,告诉所有DHCP服务器自己已经做出选择,接受了某个DHCP服务器的租约。在此DHCPRequest广播消息中包含了DHCP服务端的MAC地址、接受的租约中的IP地址、提供此租约的DHCP服务器地址等,所有其他的DHCP服务器收到其广播包后,收回它们以此DHCP客户端所保留的IP地址租约。此时由于没有得到DHCP服务器确认,DHCP客户端仍然不能使用租约中提供的IP地址,所以在此数据包中仍然使用0.0.0.0作为源IP地址,广播地址255.255.255.255作为目的地址。

④  提供的租约被接受的DHCP服务器在接收到DHCP客户端发起的DHCPRequest广播消息后,会发送DHCPAck广播消息进行最后的确认,在这个消息中同样包含了租约期限及其他TCP/IP选项信息。

过程

Wireshark抓包如下:

在Wireshark的Info中可以看到逻辑上与知识点保持一致。

Discover -> Offer -> Request -> Ack

现在来看下Discover

从中可知,发送了广播包(这里很好理解,因为没有ip地址,他想与其他计算机通信,只能发广播包)

其中包含了MAC地址和主机名。其他比较有意思点:

Option 61(Client Identifier):唯一标识客户端(避免多网卡 / 虚拟环境的 IP 冲突)。

Option 60(Vendor class identifier):MSFT 5.0 → 客户端厂商标识(此处为Windows 系统,服务器可据此下发专属配置)。

Transaction ID:0x95903b9c,会话标识(与客户端 Discover 报文中的 ID 一致,确保请求 - 响应配对)。

接下来看Offer 

可知关键的信息:

Your (client) IP:192.168.23.101,服务器分配给客户端的 IP 地址(核心内容)。

Next server IP:192.168.23.138,DHCP 服务器自身 IP(告诉客户端:后续交互找我)。

Client MAC:74:d8:3e:ed:8d:61 客户端网卡 MAC(精准定位请求者,避免冲突)。

Transaction ID:0x95903b9c,会话标识(与客户端 Discover 报文中的 ID 一致,确保请求 - 响应配对)。

接下来看Request 

Option 50(请求 IP):192.168.23.101,客户端明确请求 Offer 中分配的 IP(告诉服务器:“我就要这个 IP”)。

Option 54(服务器 ID):192.168.23.138,客户端指定 响应的服务器(排除其他 Offer 的服务器,避免干扰)。

Option 61(客户端 ID):客户端 MAC(唯一标识,防止冒充)。

Transaction ID:0x95903b9c,会话标识(与客户端 Discover 报文中的 ID 一致,确保请求 - 响应配对)。

最后看下ACK

当DHCP服务端回ACK后,说明是正式授权。重要的字段和上面3个包都一样。说下最后那两个:

Option 1(子网掩码):255.255.255.0,客户端的子网掩码(划分网络范围,如 192.168.23.xxx 属同一子网)。

Option 28(广播地址):192.168.23.255,本网段的广播地址(客户端发广播包时使用,如 DHCP 续租)。

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

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

相关文章

Coze用户账号设置修改用户头像-前端源码

概述 Coze Studio的用户头像修改功能是用户账号设置中的重要组成部分,允许用户上传和更新个人头像。本文将深入分析该功能的前端实现,包括组件架构、文件上传处理、API设计和用户体验优化等方面。 技术架构 整体架构设计 Coze Studio采用现代化的前端架构…

新手Github提交PR(Pull requests)详细教程

一、什么是Pull requests? Pull Requests(PR)是代码协作平台(如 GitHub、GitLab 等)中的一种功能,用于提议将某分支的代码变更合并到另一个分支(通常是主分支)。它允许开发者在合并…

本地通过跳板机连接无公网IP的内网服务器

本地环境:SSH client 堡垒机:有公网IP,有连接内网服务器的秘钥 SSH配置: Host jmsHostName [堡垒机的公网IP]Port 22User rootIdentityFile ~/.ssh/id_rsaHost appHostName 10.0.0.14Port 22User rootIdentityFile ~/.ssh/svc-p…

B树,B+树,B*树

下面我们来详细讲解一下 B树、B树、B*树 这三种非常重要的多路平衡查找树。它们在数据库和文件系统中有着极其广泛的应用。一、为什么需要这些树结构?在开始之前,我们先思考一个问题:为什么已经有了二叉搜索树(BST)、A…

汽车零部件工厂ESOP系统工业一体机如何选型

在汽车零部件工厂的生产管理中,ESOP 系统发挥着至关重要的作用。而工业一体机作为 ESOP 系统的关键硬件支撑,其选型的合理性直接关系到生产效率的提升、生产过程的精准控制以及生产数据的可靠采集与分析。因此,为汽车零部件工厂选择一款适合的…

​维基框架 (Wiki Framework) 1.1.0 版本发布​ 提供多模型AI辅助开发

介绍 多模型AI辅助开发​ 维基框架1.1.0集成了主流AI引擎的统一接口,支持开发者按需调用不同模型的优势能力: ​DeepSeek​:专注代码生成与重构,擅长复杂业务逻辑实现 ​ChatGPT​:多模态推理能力,适用于…

LabVIEW调用MATLAB 的分形生成

LabVIEW 调用 MATLAB,可借前者可视化流程与硬件交互优势,结合后者强数值计算、算法能力,复用成熟算法提速开发,还能灵活改代码。但需匹配版本、装运行环境,数据传递有性能损耗,脚本出错需跨软件调试。​优点…

ubuntu20.04开发ros2,使用docker安装部署的详细教程

学习docker的教程:可以直接在菜鸟教程上学习即可阶段 0:系统检查| 内容 | 建议 | |------|------| | 操作系统 | Ubuntu 22.04(与 ROS2 Humble 最匹配) | | 用户权限 | 能执行 sudo |🧩 阶段 1:在 Ubuntu 上…

SQL Server缩小日志文件.ldf的方法(适用于开发环境)

SQL Server缩小日志文件.ldf的方法(适用于开发环境) 核心概念:为什么日志文件会变大? 首先,理解原因至关重要。事务日志文件在以下情况下会增长: 大量操作:执行了大批量插入、更新或删除操作&am…

2.3零基础玩转uni-app轮播图:从入门到精通 (咸虾米总结)

还在uni-app中的轮播图组件头疼吗?看完这篇,让你轻松掌握swiper的所有秘密!轮播图的重要性 在现代移动应用开发中,轮播图(Swiper)已成为展示焦点内容、广告推广和产品展示的首选组件。无论是电商平台的商品…

FPGA学习笔记——AHT20温湿度读取并在串口显示(IIC协议)

目录 一、任务 二、分析 1.需要了解的 2.需要用到的模块 3.流程分析 三、Visio图 四、代码 五、实验现象 一、任务 使用IIC协议通信的AHT20,将温湿度数据读取出来,并在串口助手上显示。 二、分析 1.需要了解的 需要了解IIC协议简介 也可以看看E…

Pycharm SSH连接

添加远程服务器文件——>设置——>项目下的Python解释器——>添加解释器——>SSH在弹出的弹窗中,输入远程的主机、端口和用户名、一直下一步,得到如下图所示的结果:选择Conda 环境:第一步选择Conda环境;第…

c# 读取xml文件内的数据

好多大型的项目&#xff0c;把一些固定的参数都存在 xml文件里。创建c# winfom 项目&#xff0c;test_xml创建resources文件夹存放xml文件创建parameters.xml文件<root><test_xml><param name "threshold" value "128"/><param name …

Legion Y7000P IRX9 DriveList

Legion Y7000P IRX9 DriveList 联想Y7000P驱动列表 驱动列表 intelwlan-TYY5057FK6MQBRF0.exe NVVGA-TYY5057F3M0H9RF0.exe RTKwlan-TYY5077FFSNECRF0.exe audio-TYY5057F4N1JARF0.exe chipset-TYY5037FB10X3RF0.exe hdr-TYY5027FXNF9AWF0.exe intelVGA-TYY5057F5R9J7RF…

编程与数学 02-017 Python 面向对象编程 23课题、测试面向对象的程序

编程与数学 02-017 Python 面向对象编程 23课题、测试面向对象的程序一、单元测试&#xff08;Unit Testing&#xff09;使用 unittest 模块使用 pytest二、集成测试&#xff08;Integration Testing&#xff09;三、模拟对象&#xff08;Mocking&#xff09;四、测试驱动开发&…

[React]Antd Cascader组件地区选择

前言表单中添加一个地区选择功能&#xff0c;要求支持增删改查功能。Cascader 使用Cascader组件动态加载地区选项。使用 loadData 实现动态加载选项&#xff0c;&#xff08;loadData 与 showSearch 无法一起使用&#xff09;。 这里使用了Form.Item组件。 <Form.Itemlabel{…

深度学习-----《PyTorch神经网络高效训练与测试:优化器对比、激活函数优化及实战技巧》

一、训练过程并行批量训练机制一次性输入64个批次数据&#xff0c;创建64个独立神经网络并行训练。所有网络共享参数&#xff08;Ω&#xff09;&#xff0c;更新时计算64个批次的平均损失&#xff0c;统一更新全局参数。梯度更新策略使用torch.no_grad()上下文管理器清理反向传…

Matplotlib 可视化大师系列(五):plt.pie() - 展示组成部分的饼图

目录Matplotlib 可视化大师系列博客总览Matplotlib 可视化大师系列&#xff08;五&#xff09;&#xff1a;plt.pie() - 展示组成部分的饼图一、 饼图是什么&#xff1f;何时使用&#xff08;何时避免&#xff09;&#xff1f;二、 函数原型与核心参数三、 从入门到精通&#x…

C++ Core Guidelines 核心理念

引言 C 是一门功能强大但复杂性极高的编程语言。为了帮助开发者更高效、安全地使用现代 C&#xff0c;C 核心指南&#xff08;CppCoreGuidelines&#xff09;应运而生。这份由 C 之父 Bjarne Stroustrup 等人主导的指南&#xff0c;提供了大量关于 C 编码的规则、最佳实践和设…