一:前言

在网络时代早期,当一台设备想要在网络上通信时,它需要被手动分配一个地址。随着网络的发展,这样的手动过程很快变得繁琐起来。为了解决这个问题,BOOTP协议(Bootstrap Protocol)问世,它主要作用是给连接到网络的设备自动分配地址。BOOTP后来被更加复杂的协议DHCP(Dynamic Host Configuration Protocol)所取代

DHCP是一个应用层协议,负责让设备能够自动获取IP地址(以及其他重要的网络资源,比如DNS服务器和路由网关的地址)。今天大多数的DHCP服务器都向客户端提供其他的一些参数,比如网络上的默认网关和DNS服务器的地址

二:DHCP头结构

操作码(OpCode):指出这个数据包是DHCP请求还是DHCP回复

硬件类型(Hardware Type):硬件的地址类型(10MB以太网、IEEE802、ATM以及其他)

硬件地址长度(Hardware Length):硬件地址的长度

跳数(Hops):中继代理用以帮助寻找DHCP服务器

事务 ID(Transaction ID):用来匹配请求和响应的一个随机数

消耗时间(Seconds Elapsed):从客户端第一次向DHCP服务器发出地址请求到获得响应所需要的时间

标志(Flags):DHCP客户端能够接受的流量类型(单播、广播以及其他)

客户端IP地址(Client IP Address):客户端的IP地址(由“你的”IP地址域派生)

“你的”IP地址:(Yours IP  Address):DHCP服务提供的IP地址

服务器IP地址(Server IP Address):DHCP服务器的IP地址

网关IP地址(Gateway IP Address):网络默认的网关地址

客户端硬件地址(Client Hardware Address):客户端的MAC地址

服务器主机名(Server Host Name):服务器的主机名(可选)

启动文件(Boot File):DHCP所使用的启动文件(可选)

选项(Options):用来对DHCP数据包进行扩展,以提供更多的功能

三:DHCP续租过程

DHCP的主要任务就是在续租过程中向客户端分配IP地址。其过程通常被称为DORA过程,因为它使用了4种确认类型的DHCP数据包:发现(Discover)、提供(Offer)、请求(Request)、确认(Acknowledgement)

1   发现数据包

第一个数据包从 0.0.0.0 的 68 端口发往目的地 255.255.255.255 的 67 端口。客户端使用 0.0.0.0 是因为它目前还没有IP地址。数据包被发送至 255.255.255.255 ,是因为这是一个独立于网络的广播地址,从而确保这个数据包回被发往网络上的每台设备。因为这台设备并不知道DHCP服务器的地址,所以第一个数据包是为了寻找正在监听的DHCP服务器

从上图可以看出DHCP是基于UDP作为传输层协议的,这是一个请求数据包,在消息类型域中标识为1。该数据包中大多数字段为空,这个数据包的主要内容为以下四个字段

1 DHCP消息类型:这里为53(t=53),长度为1,值为1,是一个DHCP发现数据包

2 客户端标识符:这里提供了客户端请求IP地址的额外信息

3 所请求IP地址:这里提供了客户端希望得到的IP地址(通常是之前用过的IP地址)

4 请求参数列表:这里列出了客户端希望从DHCP服务器接收到的不同配置项(其他重要网络设备的IP地址)

2   提供数据包

这个数据包显示从 192.168.1.5 发往 192.168.1.10 。因为客户端实际上还没有192.168.1.10这个地址,所以服务器会首先尝试使用由ARP提供的客户端硬件与之通信。如果通信失败,那么将会直接提供(Offer)广播出去,进行通信

这个数据包的DHCP部分,称为提供数据包,表名这是一个响应的消息类型。这个数据包包含了和前一个数据包相同的事务ID,意味着这个响应与原先的请求相对应

该数据包由DHCP服务器发出,用以向客户端提供服务。它提供了关于其自身的信息,以及它想要给客户端提供的IP地址(3),Next Server IP address 域中的值表示DHCP服务器与默认网关共享一个IP地址

3   请求数据包

在客户端接收到DHCP服务器服务器提供的数据包之后,它将以一个DHCP请求数据包作为接受确认、

该文件的第三个数据仍然从IP地址 0.0.0.0 发出,因为没有完成获取IP地址的过程,但数据包知道了它所有通信的DHCP服务器

消息类型字段显示这是一个请求数据包,这个包与发现数据包相似,其所有的IP地址信息都是空的

在最后地选项域,这个所要请求的IP地址不再是空,且DHCP服务器标识域也有IP地址

4   确认数据包

这个过程的最后一步就是DHCP在确认数据包中给客户端发送其所请求的IP地址,并在数据库中记录相关信息

这时客户端就有了一个IP地址,可以在网络上通信

四:DHCP租约内续租

当DHCP给一台设备分配了一个IP地址,它同时也给客户端定下了一个租约。客户端在有限时间之内只用这个地址,否则就必须续租。上面的例子是客户端第一次获取IP地址或者其租约已经过期的情况下

当一个拥有IP地址的客户端在租约内重新启动时,它必须进行一次精简版的DORA过程,来重新认领它的IP地址,称为租约内续租

在租约内续租时,发现和提供数据包就没必要了(前两步),只需要完成请求和确认两个步骤

五:DHCP选项和消息类型

DHCP依赖于可选项来提供真正的灵活性。数据包的DHCP选项在大小和内容上都可以变化。数据包的整体大小则取决于其所使用的选项

所有DHP数据包都需要的唯一选项就是消息类型选项(53),这个选项标识着DHCP客户端或者服务器将如何处理数据包中的信息

消息类型:

类型号 1 :客户端用来定位可用的DHCP服务器

类型号  2:服务器用来给客户端发送发现数据包的响应

六:DHCPv6

如果按照之前的DHCP数据包结构的定义,该结构中没有为IPv6地址提供足够的空间。为了解决这个问题,同时不对DHCP协议进行改动,在RFC3315中提出了DHCPv6协议。由于DHCPv6不是基于BOOTP协议(DHCP的前身)设计的,因为DHCPv6的数据包结构要比DHCP协议精简很多

如上图所示,DHCPv6数据包结构仅包含2个两个字段,其作用与DHCP中的类似字段相同。数据包的其他部分取决于位于第一个字节的消息类型。在选项部分,每个选项由一个2字节的选项码和一个长度为2字节的选项值字段组成

DHCPv6实现了和DHCP相同的功能,但要理解DHCPv6的通信,不许把DORA替换为SARR(Solicit——Advertise——Request——Reply)

SARR过程包括以下4个步骤:

1  发起(Solicit):客户端向一个特定地组播地址(ff02::1:2)发送一个初始化数据包,尝试在网络发现可用的DHCPv6服务器

2  公告(Advertise):一个可用的DHCPv6服务器直接回复客户端,表名此服务器能够提供地址分配和设置服务

3  请求(Request):客户端通过组播的方式向服务器发起地址配置信息请求

4  回复(Reply):服务器向客户端直接发送其请求的所有配置信息,SARR过程完成

上图描述了一台新入网的主机fe80::20c:29ff:fe5e:7744按照SARR过程,从DHCPv6服务器 fe80::20c:29ff:fe1f:a755获取配置信息

总的来说,DHCPv6和DHCP的数据包结构有很大的区别,但是在功能实现思路上是一致的。这个过程仍然包括DHCP服务器发现步骤和正式的配置信息获取步骤。这些事件通过客户端和服务器之间交互数据包中的事务ID进行关联。传统的DHCP机制不支持IPv6地址分配,因此,如果你的设备能够从网络中某个服务器自动获取IPv6地址,表明在你的网络中已经在运行DHCPv6服务

Wireshark协议分析之DHCP相关推荐

  1. Wireshark协议分析从入门到精通(免费版)-陈鑫杰-专题视频课程

    Wireshark协议分析从入门到精通(免费版)-5479人已学习 课程介绍         Wireshark是目前全球使用广泛的开源抓包软件(前身为Ethereal),是一个通用化的网络数据嗅探器 ...

  2. 《Wireshark协议分析从入门到精通》

    51CTO学院: http://edu.51cto.com/lesson/id-62643.html

  3. 网络安全协议分析-wireshark流量监控(未完)

    文章目录 TCP的六个标志 一.ARP欺骗 二.SYN半连接扫描. 三.FTP爆破 HTTP抓包修改 DNS与DHCP协议分析 DNS DHCP(饿死攻击) DDOS攻击 TCP的六个标志 TCP的六 ...

  4. Wireshark(2)-协议分析的起点

    数据的读入 Wireshark数据的读入分为两种,一种是直接从网卡读入实时的报文数据,另一种是读取被保存为文件的报文数据.先来分别看下这两种方式有何区别. 网卡输入 从网卡流如的数据是通过dumpca ...

  5. wireshark源代码分析

    各位亲,不是我不想回复你们的问题.是我也不了解.不能误导.希望大家相互帮助.看看能否帮那些提问的小盆友们回复一下呢? 这些都是转载的,如果实在没有办法,可以打开链接到原作者哪里去提问试试看... 经过 ...

  6. 思科服务器远程管理,Telnet远程访问思科交换机、路由器 TCP协议分析工具

    Top 1 Telnet远程访问思科交换机.路由器 1.1 问题 在企业中为方便网络管理员对Cisco设备的配置,一般需事先在Cisco交换机及路由器上开启远程管理的服务,借助网络通过telnet方式 ...

  7. Wireshark - 【学习笔记】(Ubuntu18.04)、协议分析(IP、ARP、ICMP、DNS、UDP、TCP、DHCP、HTTP、HTTPS、FTP、Telnet)

    参考视频: Wireshark零基础入门到实战/网络抓包/流量分析必备 Wireshark的示例包 https://wiki.wireshark.org/SampleCaptures 下面很多实验的包 ...

  8. Wireshark数据包分析之DHCP协议包解读

    *此篇博客仅作为个人笔记和学习参考 DHCP协议包格式 DHCP报文类型 DHCP Discover.DHCP Offer.DHCP Request.DHCP ACK.DHCP NAK.DHCP Re ...

  9. 计算机网络——Wireshark软件使用与协议分析(ARP协议、IP与ICMP分析)

    实验4   Wireshark软件使用与协议分析 4.1-----ARP协议分析 一.实验目的 学习 Wireshark 的基本操作,抓取和分析有线局域网的数据包:掌握以太网 MAC帧的基本结构,掌握 ...

最新文章

  1. @Repository、@Service、@Controller 和 @Component
  2. itchat 动态注册
  3. android后台文件下载库,android中如何下载文件并显示下载进度
  4. pandas 提取数字_经验轻松提取Meta原始文献特征
  5. ASP.NET学习笔记(11)--ASP简介
  6. Android 自定义view的知识梳理。
  7. android lua sd卡,记Android层执行Lua脚本的一次实践
  8. ASP 调用dll(VB)及封装dll实例
  9. 你的护城河在哪?老程序员的一些2016感悟
  10. python3虚拟环境不带任何模块_Python3虚拟环境-不存在的包
  11. 在Linux下安装LaTeX+CJK+中文字体的方法 [转]
  12. 火狐浏览器_全球知名度非常高的火狐浏览器,它好在哪呢?
  13. java正则表达式 and_Java正则表达式详解
  14. 自由修改机型名称、手机型号工具-QQ微博尾巴装X神器
  15. 22.1.2是否存在三升序列
  16. java lpad oracle_oracle中lpad函数是干嘛用的?
  17. 美国大学生足球联赛数据集football——node2vec
  18. 第三章:晶体三极管及应用电路
  19. 2021-07-10程序控制流程
  20. 能上QQ却打不开网页的原因及解决办法

热门文章

  1. 爬取B站直播流 - http+flv的相关研究
  2. C++函数之递归调用
  3. 在Linux中查找和删除重复文件的4种方法
  4. 线性回归的推导与java代码
  5. 认证资料大全(八)------ SUN认证列表
  6. python里的self
  7. 【TCP】TCP通信
  8. Amazon 邮箱大全
  9. includes的用法
  10. 《程序设计基础II》实验3——递推