一、DHCP简介

  DHCP(Dynamic Host Configuration Protocol)动态主机配置协议,前身是BOOTP协议。在大型局域网中,需要给很多主机配置地址信息,如果采用传统手工配置(累死),效率太低,因此采用此协议可以很方便的给主机配置各种地址信息,例如IP地址,SubMask、网关地址、DNS等等。

  下面进行简单介绍,下面所述中Client值得就是DHCP Client,Server指的是DHCP Server


(1)DHCP协议理解

  • 定义:DHCP:Dynamic Host Configuration Protocol,动态主机配置协议,是一个应用在局域网中的网络协议,它使用UDP协议工作。
  • 理解:DHCP协议就是一个基于UDP协议工作在局域网内的网络协议,其最终的目的就是获取响应的IP地址,其中这过程中有多种分配方式,以及发送报文的格式要求等。
  • 作用:动态分配IP地址,过程自动化,终端无需一一手工配置,配置信息统一管理(DNS,网关),IP地址有限、需要大量配置IP地址、经常移动终端。
  • 好处:提高配置IP地址效率,减少配置工作量,减少IP地址冲突。
  • 分配IP地址方式:
    • (1)手工配置方式:通过网络管理员手工配置某台客户端特定的IP地址,当客户端请求分配时,DHCP服务器就将手动配置的IP地址分配给客户端。。
    • (2)自动配置方式:当DHCP客户端第一次想服务端租用到第一个IP地址后,就将这个IP地址永久分配给客户端使用。
    • (3)动态配置方式:服务器暂时分配一个IP地址给客户端,根据租约到期或者续约租期的方式来管理分配的IP地址。

(2)DHCP报文格式

2.1 DHCP报文封装格式

DHCP报文封装格式

链路层头

IP头  20bytes

UDP头

DHCP报文


2.2 DHCP报文格式

  • op:1byte,是报文的操作类型,分为请求报文和响应报文,1为请求报文;2为响应报文。具体的报文类型在option字段中标识。
  • htype:1byte,表示client硬件地址的类型,1表示以太网类型。
  • hlen:1byte,硬件地址的长度,以太网的硬件地址长度为6bytes。
  • hops:1byte,表示当前dhcp报文经过的DHCP中继的数目,每经过一个DHCP中继这个字段就加1.
  • xid:4bytes,由client端产生的随机数,用于匹配请求和应答报文,就是匹配应答报文是对哪个请求报文做出应答。
  • secs:2bytes,客户端进入IP地址申请进程的时间或者更新IP地址进程的时间;由客户端软件根据情况设定。目前没有使用,固定为0。
  • flags:2bytes,是标志字段,16比特中只使用了最高位比特(即最左边的比特),这个个比特是广播响应标识位,用来标识DHCP服务器发出的响应报文是广播还是单播,0是单播,1是广播。其余的比特位保留不用,都为0。
  • ciaddr:4bytes,是客户端的IP地址,可以是client自己的IP地址,也可以是server分配给client的IP地址。
  • yiaddr(Your IP Address):4bytes,是server分配给client的IP地址
  • siaddr:4bytes,是client端获取IP地址等信息的server端的地址
  • giaddr:4bytes,是client发出请求报文后经过的第一个中继的IP地址。
  • chaddr:16bytes,是client端的硬件地址,在client发出报文时会把自己网卡的硬件地址写进这个字段。
  • sname:64bytes,服务器主机名,是client端获取IP地址等信息的服务器名称。
  • file:128bytes,是client的启动配置文件名,是服务器为client指定的启动配置文件名及路径信息,由服务器填写。
  • options:是可选变长的选项字段,这个字段包含了终端的初始配置信息和网络配置信息,包括报文类型,有效租期,DNS服务器的IP地址等配置信息

  Options字段有很多项,是可选的,不同的报文option项可能不同。

  不同的option项有不同的含义,下面是一些常见的option项:

  • DHCP Message Type:表示DHCP的报文类型。
  • Client identifier:   client端的硬件地址
  • Server identifier:  服务器的IP地址
  • Subnet Mask:  子网掩码
  • route:  网关IP地址
  • Domain Name Server: DNS服务器的IP地址
  • IP Address Lease Time: 租约时间

(3)DHCP报文的种类

  Dhcp协议一共有8种报文,包括:DHCP DsicoverDHCP OfferDHCP RequestDHCP ACKDHCP NAKDHCP ReleaseDHCP DeclineDHCP Inform

  报文类型由options字段中的option53“DHCP Message Type”选项来确定。各报文的具体含义如下:

1.DHCP Dsicover报文:0x01  客户端请求包

这个报文是client端开始dhcp过程的第一个请求报文,client在请求地址时,并不知道server端的位置,所以client会以广播的方式发送请求报文,它的目的是发现网络中的服务器。

2.DHCP Offer报文: 0x02  服务器响应包

  这个报文server端对DISCOVERY报文的响应报文。会在所配置的地址池中查找一个合适的IP地址,加上相应的租约期限和其他配置信息(如GATEWAY,DNS SERVER等),构造一个OFFER报文,发送给用户,告知用户本SERVER可以为其提供IP地址的分配,并且。发OFFER报文一般是单播的方式发送。

3.DHCP Request报文:0x03 客户端选择包

  在一个子网中可能有多台服务器,所有收到DISCOVER报文的服务器都会回应OFFER报文,所以client端可能收到多个OFFER报文,通常会选择第一个OFFER报文的服务器作为自己的目标服务器,并回应一个REQUEST请求报文。在续租约的时候client端也会发送REQUEST报文  请求续租期。

4.DHCP ACK报文:0x05  服务器确认包

  是server对client端的REQUEST报文的确认响应报文,server在收到REQUEST报文后,根据REQUEST报文中携带的client MAC来查找有没有相应的租约记录,如果有则发送ACK报文作为回应,通知client可以使用分配的IP地址。

5.DHCP NAK报文:0x06  服务器拒绝包

  Server端对client端的REQUEST报文的拒绝响应报文,如果服务器没有相应的租约记录,就会发送NAK报文给client端。

6.DHCP Release报文:0x07  客户端释放包

  Client端主动释放server端分配给它的IP是,就会发送DHCP-RELEASE报文给server,server收到这个报文后,就会回收这个IP地址。

7.DHCP Decline:0x04

  client收到server回应的ACK报文后,通过地址冲突检测发现 SERVER分配的地址冲突或由于其它原因导致不能使用,则发送DHCP-DECLINE报文,通知server所分配的IP地址不可用。

8.DHCP Inform报文:0x08

  在client已经获得了IP地址,需要从server端获得更详细的配置信息时,就会发送DHCP-INFORM报文向server请求,server在收到这个报文后,会根据租约查找,找到相应的配置信息后,就会回应DHCP-ACK报文给client。


(4)DHCP工作过程

  1. 客户端通过广播发送DHCP Discover报文寻找DHCP服务端
  2. 服务端通过单播发送DHCP Offer报文向客户端提供从地址池中挑选的可用IP等网络信息
  3. 客户端只接收第一个收到的DHCP Offer报文提取IP地址,然后向通过广播发送DHCP Request报文告知服务端要使用该IP地址
  4. 服务端通过单播发送DHCP ACK报文告知客户端该IP地址是合法可用的,并提供租约信息


二、DHCP动态获取IP地址

  DHCP动态获取IP地址的过程主要分为发现Discover阶段提供Offer阶段选择Request阶段确认ACK阶段四个阶段。


(1)发现Discover阶段:

  client端在局域网内以广播的方式发起一个DHCP Discover广播报文,目的是在子网络中发现能够给client端提供IP地址的server端。

  特别要注意到的是,PC会随机出一个Transaction ID,如果之后收到的Offer报文中的Transaction ID与PC模拟出的不同,PC会将该Offer报文直接丢弃。

  UDP 目标端口号为67    源IP地址:0.0.0.0    目的IP地址:255.255.255.255


(2)提供Offer阶段:

  局域网中DHCP server接受到Discover包之后,通过发送DHCP offer包给client端应答,主要是告知client端可以提供IP地址,以及相应的IP地址租约信息和其他配置信息也会在其中。

  UDP 目标端口号为68    源IP地址:172.22.192.1    目的IP地址:172.22.194.142

  DHCP Offer报文中“Your(Client) IP Address”字段就是DHCP Server能够提供给DHCP Client使用的IP地址,且DHCP Server会将自己的IP地址放在“option”字段中以便DHCP Client区分不同的DHCP Server


(3)选择Request阶段:

  在client端可能会接受到多个offer包,通常clientdaunt只会接受收到的第一个DHCP offer报文,然后client端就会以广播的方式发送一个DHCP request报文请求分配IP地址

  UDP 目标67    源IP为0.0.0.0   目的IP:255.255.255.255

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


(4)确认ACK阶段:

  server端在收到DHCP request报文之后,会判断”option”字段的serverIP地址是否是自己的IP地址,如果符合分配IP地址的条件,就会给client发送一个DHCP ACK包,如果不满足就发挥发送一个DHCP NAK 包

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


(5)DHCP Release

  DHCP Client在成功获取IP地址后,随时可以通过发送DHCP Release报文释放自己的IP地址,DHCP Server收到DHCP Release报文后,会回收相应的IP地址并重新分配

  图中的5个报文,其中DHCP Release报文为PC释放IP时发出的报文。


Wireshark抓包分析理解DHCP协议及工作流程的更多相关文章

  1. wireshark抓包分析——TCP/IP协议

    本文来自网易云社区 当我们需要跟踪网络有关的信息时,经常会说"抓包".这里抓包究竟是什么?抓到的包又能分析出什么?在本文中以TCP/IP协议为例,简单介绍TCP/IP协议以及如何通 ...

  2. FTP协议的粗浅学习--利用wireshark抓包分析相关tcp连接

    一.为什么写这个 昨天遇到个ftp相关的问题,关于ftp匿名访问的.花费了大量的脑细胞后,终于搞定了服务端的配置,现在客户端可以像下图一样,直接在浏览器输入url,即可直接访问. 期间不会弹出输入用户 ...

  3. TCP\IP协议实践:wireshark抓包分析之链路层与网络层

    目录 TCP\IP协议实践:wireshark抓包分析之链路层与网络层 从ping开始 链路层之以太网封装 ip首部 开启ping程序,开始抓包 由一个ping的结果引出来的两个协议ARP ICMP ...

  4. wireshark 抓包分析 TCPIP协议的握手

    wireshark 抓包分析 TCPIP协议的握手 原网址:http://www.cnblogs.com/TankXiao/archive/2012/10/10/2711777.html 之前写过一篇 ...

  5. Wireshark抓包分析/TCP/Http/Https及代理IP的识别

    前言 坦白讲,没想好怎样的开头.辗转三年过去了.一切已经变化了许多,一切似乎从没有改变. 前段时间调研了一次代理相关的知识,简单整理一下分享之.如有错误,欢迎指正. 涉及 Proxy IP应用 原理/ ...

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

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

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

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

  8. TCP/IP详解卷1 - wireshark抓包分析

    TCP/IP详解卷1 - 系列文 TCP/IP详解卷1 - 思维导图(1) TCP/IP详解卷1 - wireshark抓包分析 引言 在初学TCP/IP协议时,会觉得协议是一种很抽象的东西,通过wi ...

  9. Http实战之Wireshark抓包分析

    Http实战之Wireshark抓包分析 Http相关的文章网上一搜一大把,所以笔者这一系列的文章不会只陈述一些概念,更多的是通过实战(抓包+代码实现)的方式来跟大家讨论Http协议中的各种细节,帮助 ...

  10. 云计算之路-阿里云上:Wireshark抓包分析一个耗时20秒的请求

    这篇博文分享的是我们针对一个耗时20秒的请求,用Wireshark进行抓包分析的过程. 请求的流程是这样的:客户端浏览器 -> SLB(负载均衡) -> ECS(云服务器) -> S ...

随机推荐

  1. CMDB开发(二)

    一.项目架构:目录规范 # 遵循软件开发架构目录规范 bin 启动文件 src 源文件(核心代码) config 配置文件 lib 公共方法 tests 测试文件 二.采集规范 # bin目录下新建s ...

  2. 02 Xpath Helper介绍

    目录 参考文档 下载地址 安装 使用 参考文档 xpath helper https://www.cnblogs.com/ChevisZhang/p/12869582.html http://c.bi ...

  3. chgrp chown

    chgrp 用来改变文件所属群组,如果要改变的群组不在/etc/group里面,将会报错. chown 用来改变文件的所有者,如果改变的所有者便在/etc/passwd里面,将会报错. 需要注意的是c ...

  4. 基于FPGA的贪吃蛇游戏 之代码解析

    基于FPGA的贪吃蛇游戏 之代码解析 1. 代码结构 代码结构包含7格.v文件. 下面依次解析. 2. 代码解析 (1) seg_display.v 数码管的译码模块是最熟悉,最简单的模块了.这里是共 ...

  5. pageoffice 6 Vue+Springboot磁盘路径打开文档

    本示例关键代码的编写位置 Vue+Springboot 注意 本文中展示的代码均为关键代码,复制粘贴到您的项目中,按照实际的情况,例如文档路径,用户名等做适当修改即可使用. 在正式的项目开发中,用户文 ...

  6. k8s其它学习链接

    k8s弹性伸缩概念以及测试用例 https://www.cnblogs.com/jasonboren/p/11493347.html CKA看这一篇就够了 k8s官网 k8s基础之六 有状态和无状态的 ...

  7. vue项目使用研究1

    在windows上安装了npm vue-cli之后,创建vue项目. 用pycharm打开 vue form表单最简单提交方法 <!DOCTYPE html> <html lang= ...

  8. DashVector + DashScope升级多模态检索

    本教程在前述教程(DashVector + ModelScope玩转多模态检索)的基础之上,基于DashScope上新推出的ONE-PEACE通用多模态表征模型结合向量检索服务DashVector来对 ...

  9. Ceph存储池管理

    目录 Ceph存储池 1. Ceph的存储流程 1. 数据写入 2. 数据读取 2. 资源池的配置 2.1 资源池创建 pgp是什么 (Placement Group for Placement pu ...

  10. 将.net core api 部署成windows服务

    将.net core api 部署成windows服务   参考 https://blog.csdn.net/qq_38762313/article/details/103311944 将NSSM解压 ...