前置问题:什么是(网络)协议?

网络协议为计算机网络中进行数据交换而建立的规则、标准或约定的集合。

而且:

一个网络协议至少包括三要素:

  语法:用来规定信息格式;数据及控制信息的格式、编码及信号电平等。

  语义:用来说明通信双方应当怎么做;用于协调与差错处理的控制信息。

  时序:定义了何时进行通信,先讲什么,后讲什么,讲话的速度等。比如是采用同步传输还是异步传输。

简单的来说,就是说话交流的过程,两方要说话,相互听得懂,那么得满足:

①:说的同一个语言(语法)

②:说的话表达了明确的意思(语义)

③:话讲的有条理,能被理解(时序)

清楚了这一点,我们就可以开始分析协议了。

主机申请IP:DHCP动态主机配置协议

①:客户端广播DHCP消息“Discover”

        所有的服务器端都可以收到这个消息。

②:服务器提供租约“Offer”

        所有的服务器端都会提供一个响应,Offer报文中“Your(Client) IP Address”字段就是服务器端能供使用的IP地址。

且服务器端会将自己的IP地址放在“option”字段中以便客户端区分不同的服务器端。

服务器端在发出此报文后会存在一个已分配IP地址的纪录。

③:客户端选择并请求租用“Request”

        客户端只能处理其中的一个DHCP Offer报文,一般的原则是客户端处理最先收到的DHCP Offer报文,客户端会发出一个广播的DHCP Request报文,在选项字段中会加入选中的服务器端的IP地址和需要的IP地址

服务器端收到DHCP Request报文后,判断选项字段中的IP地址是否与自己的地址相同,如果不相同,服务器端不做任何处理只清除相应IP地址分配记录;如果相同,服务器端就会向客户端响应一个DHCP ACK报文,并在选项字段中增加IP地址的使用租期信息。

④:服务器确认将地址租用给客户端“ACK”

        客户端接收到DHCP ACK报文后,检查服务器端分配的IP地址是否能够使用。如果可以使用,则客户端成功获得IP地址并根据IP地址使用租期自动启动续延过程;如果客户端发现分配的IP地址已经被使用,则客户端向服务器端发出DHCP Decline报文,通知服务器端禁用这个IP地址,然后客户端开始新的地址申请过程。

了解了DHCP协议的基本运行规则,就可以使用wireshack工具进行分析了。

Wireshack分析DHCP报文

在过滤器上输入bootp,显示如下

下面,我们通过抓包分析其报文,讲讲白话解释来理解一下DHCP的过程,DHCP的报文有以下基本格式:

但看这么一串僵硬的文字肯定不是很舒服,我们选取一些重要信息理解一下,我们把客户端向服务器端请求ip看作找工作的过程:

我们先看Discover阶段

这段的意思,可以说是,一个用户要找工作,他往给网上的某个“招聘群”里发了一条消息,说“我要找工作!”

我们看到:

消息类型 :boot request(1),表示这条信息是“请求包”,请求包是客户端发出的;

bootp 标志 :其中第一位为 0 表示单播,为 1 表示广播,但是其是在从服务器发出的才有用,此处无用;

一系列 IP 地址 :都是 0.0.0.0,因为还没有确定;

MAC 地址 :显示了设备的 MAC 地址;

DHCP 消息类型 :表示了该条信息的类型。

再看Offer阶段

这一段的意思,可以理解成,看到了这一个用户的消息,猎头们纷纷给该用户提供自己的工作环境信息和工资等。

和Discover阶段不同的是,我们看到消息类型变成了回复包、服务器向客户端的单播有了具体的地址,即设备的物理地址、在your (client) IP address中出现可以提供的地址,此外,在Option中还可以查看服务器端的子网掩码,域名等信息

再看Request阶段

这一阶段可理解为,用户接受了某个猎头提供的工作,并且告诉其他的猎头:“我找到工作了,不用再发offer了”。

这里还是广播,但是我们可以看到这边的已经将一系列信息,如:主机名称、申请的哪一个服务器、申请的ip等广播出去,收到的服务器就会停止发送offer,提供服务的服务器就会记录该客户端申请的地址。

最后是ack阶段

相当于是客户跟着猎头去公司,签了个合同,就成功的入职了。

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

总结

至于offer和ack阶段的目标地址到底是广播还是单播,可以参考一下博文:

https://www.zhihu.com/question/280872108?sort=created

计算机网络-DHCP协议抓包分析总结的更多相关文章

  1. dhcp协议抓包分析

    dhcp协议 DHCP,动态主机配置协议,前身是BOOTP协议,是一个局域网的网络协议,使用UDP协议工作,常用的2个端口:67(DHCP server),68(DHCP client). wires ...

  2. 【计算机网络】wireshark抓包分析1

    学习计算机网络很久了,但总是局限于书本知识,感觉get不到重点.经师兄建议用wireshark抓包分析看看. 我自己以前并没有做过抓包分析,所以这篇博文可能会有很多错误,只是我自己的一个记录,路过的亲 ...

  3. 网络协议抓包分析——TCP传输控制协议(连接建立、释放)

    前言 TCP协议为数据提供可靠的端到端的传输,处理数据的顺序和错误恢复,保证数据能够到达其应到达的地方.TCP协议是面向连接的,在两台主机使用TCP协议进行通信之前,会先建立一个TCP连接(三次握手) ...

  4. 网络协议抓包分析——IP互联网协议

    前言 IP协议是位于OSI模型的第三层协议,其主要目的就是使得网络间可以相互通信.在这一层上运行的协议不止IP协议,但是使用最为广泛的就是互联网协议. 什么是IP数据报 TCP/IP协议定义了一个在因 ...

  5. 网络协议抓包分析——ARP地址解析协议

    前言 计算机之间可以相互通信的前提是要知道对方的地址,才可以发送信息给其他计算机,就像别人要联系你也得先知道你的电话号码一样.这里的地址因为网络分层的原因就包括IP地址和MAC地址(即网卡地址.硬件地 ...

  6. 【极客思考】计算机网络:Wireshark抓包分析TCP中的三次握手与四次挥手

    [摘要]本文重点分析计算机网络中TCP协议中的握手和挥手的过程. [前提说明] 前段时间突然看到了一篇关于TCP/IP模型的文章,心想这段时间在家里也用wireshark抓了点包,那么想着想着就觉得需 ...

  7. ARP 协议抓包分析

    ARP(Address Resolution Protocol)- 地址解析分析 ARP 协议是根据IP地址获取物理地址的一个TCP/IP协议. 当PC1 想与 PC2 进行通信时,需要同时知道PC2 ...

  8. 【计算机网络】wireshark抓包分析2

    在分析1中,大概的看到了一个包中的信息.这里,看看这些包究竟在做什么 这是我的电脑跟某个网站交互的前4个包. 其中前三个包可以明显看出是TCP的三次握手. 那么,问题来了: 为什么第三个包的长度比前两 ...

  9. Wireshark数据抓包分析——网络协议篇

                   Wireshark数据抓包分析--网络协议篇     watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvZGF4dWViYQ==/ ...

随机推荐

  1. makefile实验二 对目标的深入理解 以及rebuild build clean的实现

    (一) rebuild build clean的实现 新知识点: 当一个目标的依赖是一个伪目标时,这个伪目标的规则一定会被执行. 贴实验代码 CC := gcc Target := helloworl ...

  2. C#编写一个较完整的记事本程序

    开发环境 Visual Studio 2019 至少需安装 .NET桌面开发 创建项目并配置 创建窗体文件 配置项目名称及框架 设计界面 创建窗体文件,将控件摆放位置如下,参考系统自带的记事本程序 窗 ...

  3. DIV垂直滚动效果源码

    <div id="demo" style="width: 300; overflow: hidden; line-height:24px; height: 100p ...

  4. Python实现的数据结构与算法之队列详解

    本文实例讲述了Python实现的数据结构与算法之队列.分享给大家供大家参考.具体分析如下: 一.概述 队列(Queue)是一种先进先出(FIFO)的线性数据结构,插入操作在队尾(rear)进行,删除操 ...

  5. Arduino 与 SPI 结合使用 以及SPI 深层理解

    本文主要讲解两部分内容,不做任何转发,仅个人学习记录: 一. Arduino 与 SPI 结合使用  : 二. SPI 深层理解 有价值的几个好的参考: 1. 中文版: https://blog.cs ...

  6. day53 Pyhton 前端04

    内容回顾: 盒子: 内边距:padding,解决内部矛盾,内边距的增加整个盒子也会增加 外边距:margin,解决外部矛盾,当来盒子都有外边距的时候,取两者最大值 边框:border border-c ...

  7. 【纯水题】POJ 1852 Ants

    题目大意 有一根长\(L\)厘米米的水平木棍上有\(n\)个蚂蚁,它们以每秒1cm/s的爬(fei)行(ben)到木棍的一端,之后掉下去. 给出每个蚂蚁的起始位置,但是不知道它们爬行的方向.相向而行的 ...

  8. spring boot:方法中使用try...catch导致@Transactional事务无效的解决(spring boot 2.3.4)

    一,方法中使用try...catch导致@Transactional事务无效的解决方法 1,问题的描述: 如果一个方法添加了@Transactional注解声明事务, 而方法内又使用了try catc ...

  9. spring boot:用dynamic-datasource-spring-boot-starter配置多数据源访问seata(seata 1.3.0 / spring boot 2.3.3)

    一,dynamic-datasource-spring-boot-starter的优势? 1,dynamic-datasource-spring-boot-starter 是一个基于springboo ...

  10. hdu1404,hdu1517 (博弈论入门)

    SG定理: 根据Sprague-Grundy定理(SG定理),对于某些博弈论问题可以这样思考: 首先可以确定一个必败状态(记为P)或必胜状态(记为N): 这样一来,若某一状态X若 可以 直接转移到P, ...