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

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

而且:

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

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

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

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

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

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

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

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

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

主机申请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. ESD(静电释放)上半部分

    ESD(静电释放)上半部分 ESD:Electro-Static discharge静电释放 1.ESD静电释放的模式 1.1 人体放电模式(human body mode) 人体会释放静电,那么人体 ...

  2. 【音乐爬虫】Python爬虫-selenium+browsermob-proxy 解决动态网页 js渲染问题

    1.一般的python爬虫很简单,直接请求对应网址,解析返回的数据即可,但是有很多网站的数据的js动态渲染的,你直接请求是得不到对应的数据的 这时就需要其它手段来处理了. 2.以一个例子来说明,整个过 ...

  3. 【保姆级教程】手把手教你进行Go语言环境安装及相关VSCode配置

    [Go语言入门系列]前面的文章: [Go语言入门系列](七)如何使用Go的方法? [Go语言入门系列](八)Go语言是不是面向对象语言? [Go语言入门系列](九)写这些就是为了搞懂怎么用接口 本篇文 ...

  4. JDK1.8前_HashMap的扩容机制原理

    最近在研究hashmap的扩容机制,作为一个小白,相信我的理解,对于一些同样是刚刚接触hashmap的白白是有很很大的帮助,毕竟你去看一些已经对数据结构了解透彻的大神谈hashmap的原理等,人家说的 ...

  5. 031 01 Android 零基础入门 01 Java基础语法 03 Java运算符 11 运算符的优先级

    031 01 Android 零基础入门 01 Java基础语法 03 Java运算符 11 运算符的优先级 本文知识点:Java中运算符的优先级 运算符的优先级问题 前面学习了很多的运算符,如果这些 ...

  6. 01 AS 首次编译执行项目过程中遇到的几个常见问题

    问题01 as打开时出现The environment variable JAVA_HOME (with The value of C:\Java\jdk1.8.0_101\bin) does not ...

  7. 001 发大招了 神奇的效率工具--Java代码转python代码

    今天发现一个好玩的工具: 可以直接将java转成python 1. 安装工具(windows 环境下面) 先下载antlr: 下载链接如下: http://www.antlr3.org/downloa ...

  8. 温故知新————c++ 多态

    参考: 1. https://blog.csdn.net/weixin_42678507/article/details/89414998  (直接说明原理) 2 .https://www.cnblo ...

  9. arduino 动态内存不足问题

    亲测有用, 参考:https://blog.csdn.net/weixin_33915554/article/details/86975847 如果在代码中使用到一个数组,但是数组容量超过20000个 ...

  10. 用集装箱装ASP。带有Docker和Azure Kubernetes服务的NET Core应用程序

    介绍 曾经有一个单一软件应用程序的时代,整个应用程序被打包并部署在作为单个进程运行的单个服务器上.我们都知道,在这个模型中,单点故障可能会导致整个应用程序崩溃. 微服务体系结构的发展是为了解决单片应用 ...