一、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. 2018-2-13-win10-uwp-从StorageFile获取文件大小

    title author date CreateTime categories win10 uwp 从StorageFile获取文件大小 lindexi 2018-2-13 17:23:3 +0800 ...

  2. vue项目上线前优化(路由懒加载的使用,外部CDN的使用)

    引 当使用vue做完项目后,接下来当然是要进行线上部署了.但是在上线之前还是可以做很多方面优化的,可以让项目上线后的体验更加哦. 若是使用了vue-cli的话,可以从面板界面直观的看到各项数据,控制台 ...

  3. vue项目中element-ui等UI组件自定义样式不生效的解决

    引 在使用element-ui的时候虽然默认的样式已经能够满足很多的需求了,但是有总是有时候要加上些自定义的需求.不过,有的时候样式写上去了,按理说应该是没错的,但却是不生效呢. 其实在vue项目中使 ...

  4. 羽夏逆向破解日记簿——关于逆向epub格式转化器与思考

    看前必读   本软件是商业软件,本篇文章仅仅介绍 逆向分析过程 和 关于开发软件防止逆向的思考 ,不会提供任何成品破解补丁或成品软件,仅限用于学习和研究目的,否则,一切后果自负.您必须在下载后的24个 ...

  5. ls的输出格式

    在Linux中,如果在一个目录下面执行ls -al命令,输出格式如下: ls -al总共输出7列,下面对每一列进行说明. 第一列表示这个文件的权限与类型,它总共有10位,每个位的作用如下图所示: 其中 ...

  6. 批量删除WordPress文章和页面的数据库命令和从后台直接删除

    批量删除wordpress的方法有两种:1.从wp后台可以调整展示:最多999条 2.选择"Bulk"--"Apply" 通过批量删除wordpress文章和页 ...

  7. [POJ2891]Strange Way to Express Integers公式推导

    没啥事干,想着推个式子玩玩. 题目链接 题意不过多赘述,直接上过程: 由题意得 \[\begin{cases} x\equiv a_1\,(mod\,\, n_1) \\ x\equiv a_2\,( ...

  8. OpenNESS NTS 的前世今生

    目录 文章目录 目录 NEV SDK NEV SDK 的软件架构 NEV SDK 的持续演进 OpenNESS NTS NTS 在 VM 场景中的应用 NTS 在 Container 场景中的应用 N ...

  9. npm创建项目

    创建项目 创建项目目录 首先新建一个文件夹,这里存放着我们的项目. 创建项目文件 这里不使用任何项目模板,相当于使用空模板. 进入这个文件夹,再cmd中运行npm init. 然后按照提示输入pack ...

  10. 什么是Java线程池

    摘自:某个百度知道 多线程技术主要解决处理器单元内多个线程执行的问题,它可以显著减少处理器单元的闲置时间,增加处理器单元的吞吐能力. 假设一个服务器完成一项任务所需时间为:T1 创建线程时间,T2 在 ...