DHCP报文及其格式(dhcp工作时的四种报文)
nanshan 2024-11-17 14:10 50 浏览 0 评论
DHCP(Dynamic Host Configuration Protocol,动态主机配置协议)使用UDP协议工作,采用67(DHCP服务器文)和68(DHCP客户端)两个端口号。546号端口用于DHCPv6 Client,而不用于DHCPv4,是为DHCP failover服务。
DHCP客户端向DHCP服务器发送的报文称之为DHCP请求报文,而DHCP服务器向DHCP客户端发送的报文称之为DHCP应答报文。
DHCP采用C/S(客户端/服务器)模式,可以为客户机自动分配IP地址、子网掩码以及缺省网关、DNS服务器的IP地址等,并能够提升地址的使用率。
相关术语:否定应答(称为NAK;或称为NACK;或称为Negative-Acknowledgment)翻译为否定应答或者非应答。这种协议消息在数字通信中被使用。其作用是作为一种确认数据收到的应答,但表明有小错误存在的一种消息信号。
1.DHCP报文种类
DHCP一共有8种报文,分别为DHCP Discover、DHCP Offer、DHCP Request、DHCP ACK、DHCP NAK、DHCP Release、DHCP Decline、DHCP Inform。各种类型报文的基本功能如下:
DHCP Discover
DHCP 客户端在请求 IP 地址时并不知道 DHCP 服务器的位置,因此 DHCP 客户端会在本地网络内以 广播方式发送 Discover 请求报文,以发现网络中的 DHCP 服务器。所有收到 Discover 报文的 DHCP 服务 器都会发送应答报文, DHCP 客户端据此可以知道网络 中存在的 DHCP 服务器的位置。
DHCP Offer
DHCP 服务器收到 Discover 报文后,就会在所配置的 地址池中查找一个合适的 IP 地址,加上相应的租约期 限和其他配置信息(如网关、 DNS 服务器等),构造一 个 Offer 报文,发送给 DHCP 客户端,告知用户本服务 器可以为其提供 IP 地址。但这个报文只是告诉 DHCP 客户端可以提供 IP 地址,最终还需要客户端通过 ARP 来 检测该 IP 地址是否重复。
DHCP Request
DHCP 客户端可能会收到很多 Offer 请求报文,所以必 须在这些应答中选择一个。通常是选择第一个 Offer 应答 报文的服务器作为自己的目标服务器,并向该服务器发 送一个广播的 Request 请求报文,通告选择的服务器, 希望获得所分配的 IP 地址。另外, DHCP 客户端在成 功获取 IP 地址后,在地址使用租期达到50% 时,会向 DHCP 服务器发送单播 Request 请求报文请求续延租约, 如果没有收到 ACK 报文,在租期达到87.5% 时,会再次发送 广播的 Request 请求报文以请求续延租约。
DHCP ACK
DHCP 服务器收到 Request 请求报文后,根据 Request 报文 中携带的用户 MAC 来查找有没有相应的租约记录,如果有 则发送 ACK 应答报文,通知用户可以使用分配的 IP 地址。
DHCP NAK
如果 DHCP 服务器收到 Request 请求报文后,没有发现有相 应的租约记录或者由于某些原因无法正常分配 IP 地址,则向 DHCP 客户端发送 NAK 应答报文,通知用户无法分配合适的 IP 地址。
DHCP Release
当 DHCP 客户端不再需要使用分配 IP 地址时,就会主动向 DHCP 服务器发送 RELEASE 请求报文,告知服务器用户不 再需要分配 IP 地址,请求 DHCP 服务器释放对应的 IP 地址。
DHCP Decline
DHCP 客户端收到 DHCP 服务器 ACK 应答报文后,通过地址 冲突检测发现服务器分配的地址冲突或者由于其他原因导致 不能使用,则会向 DHCP 服务器发送 Decline 请求报文,通知 服务器所分配的 IP 地址不可用,以期获得新的 IP 地址。
DHCP Inform
DHCP 客户端如果需要从 DHCP 服务器端获取更为详细的配 置信息,则向 DHCP 服务器发送 Inform 请求报文; DHCP 服 务器在收到该报文后,将根据租约进行查找到相应的配置信 息后,向 DHCP 客户端发送 ACK 应答报文。目前基本上不用了。
2.DHCP报文格式
DHCP服务的8种报文的格式是相同的,不同类型的报文只是报文中的某些字段取值不同。DHCP报文格式基于BOOTP的报文格式。下面是各字段的说明。
OP:报文的操作类型。分为请求报文和响应报文。1:请求报文,2:应答报文。即client送给server的封包,设为1,反之为2。
请求报文: DHCP Discover、DHCP Request、DHCP Release、DHCP Inform和DHCP Decline。
应答报文: DHCP Offer、DHCP ACK和DHCP NAK。
Htype: DHCP客户端的MAC地址类型。 MAC地址类型其实是指明网络类型 ,Htype值为1时表示为最常见的以太网MAC地址类型。
Hlen: DHCP客户端的MAC地址 长度。以太网MAC地址长度为6个字节,即以太网时Hlen值为6。
Hops:DHCP报文经过的DHCP中继的数目,默认为0。DHCP请求报文每经过一个DHCP中继,该字段就会增加1。没有经过DHCP中继时值为0。( 若数据包需经过router传送,每站加1,若在同一网内,为0。 )
Xid:客户端通过DHCP Discover报文发起一次IP地址请求时选择的随机数,相当于请求标识。用来标识一次IP地址请求过程。在一次请求中所有报文的Xid都是一样的。
Secs:DHCP客户端从获取到IP地址或者续约过程开始到现在所消耗的时间,以秒为单位。在没有获得IP地址前该字段始终为0。( DHCP客户端开始DHCP请求后所经过的时间。目前尚未使用,固定为0。)
Flags:标志位,只使用第0比特位,是广播应答标识位,用来标识DHCP服务器应答报文是采用单播还是广播发送,0表示采用单播发送方式,1表示采用广播发送方式。其余位 尚未使用 。(即 从0-15bits,最左1bit为1时表示server将以广播方式传送封包给client。 )
【注意】在客户端正式分配了IP地址之前的第一次IP地址请求过程中,所有DHCP报文都是以广播方式发送的,包括客户端发送的DHCP Discover和DHCP Request报文,以及DHCP服务器发送的DHCP Offer、DHCP ACK和DHCP NAK报文。当然,如果是由DHCP中继器转的报文,则都是以单播方式发送的。另外,IP地址续约、IP地址释放的相关报文都是采用单播方式进行发送的。(NAK是广播,而DHCP Offer、DHCP ACK是由请求报文的Bootp flags:决定的,flag1回广播,0回单播。)
Ciaddr:DHCP客户端的IP地址。仅在DHCP服务器发送的ACK报文中显示,在其他报文中均显示0,因为在得到DHCP服务器确认前,DHCP客户端是还没有分配到IP地址的。只有客户端是Bound、Renew、Rebinding状态,并且能响应ARP请求时,才能被填充。
Yiaddr:DHCP服务器分配给客户端的IP地址。仅在DHCP服务器发送的Offer和ACK报文中显示,其他报文中显示为0。
Siaddr:下一个为DHCP客户端分配IP地址等信息的DHCP服务器IP地址。仅在DHCP Offer、DHCP ACK报文中显示,其他报文中显示为0。( 用于bootstrap过程中的IP地址)
Giaddr:DHCP客户端发出请求报文后经过的第一个DHCP中继的IP地址。如果没有经过DHCP中继, 则显示为0。( 转发代理(网关)IP地址 )
Chaddr:DHCP客户端的MAC地址。在每个报文中都会显示对应DHCP客户端的MAC地址。
Sname:为DHCP客户端分配IP地址的DHCP服务器名称(DNS域名格式)。在Offer和ACK报文中显示发送报文的DHCP服务器名称,其他报文显示为0。
File:DHCP服务器为DHCP客户端指定的启动配置文件名称及路径信息。仅在DHCP Offer报文中显示,其他报文中显示为空。
Options: 可选项字段,长度可变,格式为"代码+长度+数据"。
报文类型
1: DHCP Discover
2: DHCP Offer
3: DHCP Request
4: DHCP Decline
5: DHCP ACK
6: DHCP NAK
7: DHCP Release
8: DHCP Inform
相关推荐
- 雷军1994年写的老代码曝光,被称像诗一样优雅
-
大数据文摘授权转载自程序员的那些事雷军的代码像诗一样优雅↓↓↓有些网友在评论中质疑,说雷军代码不会是“屎”一样优雅吧。说这话的网友,也许是开玩笑的,也许是真没看过雷军写过的代码。在2011年的时候,我...
- 原创经验分享:低级bug耗费12小时Fix
-
调试某程序非常简单的程序,简单到认为不可能存在缺陷,但该BUG处理时间超过12小时:程序属于后台进程,监控系统每隔15秒检查外设IO状态,IO异常后发出报警或复位外设,外设都在linux下有/sys/...
- SpringBoot实现的简单停车位管理系统附带导入和演示教程视频
-
这一次为大家带来的是简单的停车位管理系统,基于SpringBoot+Thymeleaf+Mybatis框架,这个系统相对来说比较简单,很容易学习并快速上手,因为逻辑很清晰,没有太复杂的代码逻辑,所以学...
- 一个开箱即用的代码生成器(代码自动生成工具开源)
-
今天给大家推荐一个好用的代码生成器,名为renren-generator,该项目附带前端页面,可以很方便的选择我们所需要生成代码的表。首先我们通过git工具克隆下来代码(地址见文末),导入idea。...
- 【免费开源】JeecgBoot单点登录源码全部开源了
-
JeecgBoot单点登录源码全部开源了,有需要的朋友可以来薅羊毛了。一、JeecgBoot介绍JeecgBoot是一款企业级的低代码平台!前后端分离架构SpringBoot2.x,SpringCl...
- SpringBoot+JWT+Shiro+Mybatis实现Restful快速开发后端脚手架
-
作者:lywJee来源:cnblogs.com/lywJ/p/11252064.html一、背景前后端分离已经成为互联网项目开发标准,它会为以后的大型分布式架构打下基础。SpringBoot使编码配置...
- 为什么越来越多的人选择使用idea软件
-
IDEA软件是什么?IDEA软件是干什么的?为什么越来越多的人选择使用IDEA软件?IDEA软件,全称IntelliJIDEA,它是由JetBrains公司开发开发的一款功能强大的集成开发环境(ID...
- 开题报告大学生互助系统(附源码)java毕设
-
本系统(程序+源码)带文档lw万字以上文末可获取一份本项目的java源码和数据库参考。系统程序文件列表开题报告内容选题背景随着互联网技术的飞速发展,大学生群体对信息共享与互助的需求日益增长。关于大...
- SpringBoot项目快速开发框架JeecgBoot——项目简介及系统架构!
-
项目简介及系统架构JeecgBoot是一款基于SpringBoot的开发平台,它采用前后端分离架构,集成的框架有SpringBoot2.x、SpringCloud、AntDesignof...
- 新手配电脑13代CPU怎么选择(新手配电脑13代cpu怎么选择好)
-
Intel第13代酷睿i3、i5、i7、i9系列处理器的核心参数、性能差异及适用群体的详细说明(以桌面端为例):一、13代酷睿全系参数对比(桌面端主流型号)参数i3-13100i5-13600Ki7-...
- 加速 SpringBoot 应用开发,官方热部署神器真带劲
-
平时使用SpringBoot开发应用时,修改代码后需要重新启动才能生效。如果你的应用足够大的话,启动可能需要好几分钟。有没有什么办法可以加速启动过程,让我们开发应用代码更高效呢?今天给大家推荐一款Sp...
- 基于微信小程序的移动端物流系统-计算机毕业设计源码+LW文档
-
摘要随着Internet的发展,人们的日常生活已经离不开网络。未来人们的生活与工作将变得越来越数字化,网络化和电子化。网上管理,它将是直接管理移动端物流系统app的最新形式。本论文是以构建移动端物流系...
- springboot教务管理系统+微信小程序云开发附带源码
-
今天给大家分享的程序是基于springboot的管理,前端是小程序,系统非常的nice,不管是学习还是毕设都非常的靠谱。本系统主要分为pc端后台管理和微信小程序端,pc端有三个角色:管理员、学生、教师...
- SpringBoot全家桶:23篇博客加23个可运行项目让你对它了如指掌
-
SpringBoot现在已经成为Java开发领域的一颗璀璨明珠,它本身是包容万象的,可以跟各种技术集成。本项目对目前Web开发中常用的各个技术,通过和SpringBoot的集成,并且对各种技术通...
- Maven+JSP+Servlet+C3P0+Mysql实现的音乐库管理系统
-
本系统基于Maven+JSP+Servlet+C3P0+Mysql实现的音乐库管理系统。简单实现了充值、购买歌曲、poi数据导入导出、歌曲上传下载、歌曲播放、用户注册登录注销等功能。难度等级:简单技术...
你 发表评论:
欢迎- 一周热门
-
-
UOS服务器操作系统防火墙设置(uos20关闭防火墙)
-
极空间如何无损移机,新Z4 Pro又有哪些升级?极空间Z4 Pro深度体验
-
如何修复用户配置文件服务在 WINDOWS 上登录失败的问题
-
手机如何设置与显示准确时间的详细指南
-
如何在安装前及安装后修改黑群晖的Mac地址和Sn系列号
-
日本海上自卫队的军衔制度(日本海上自卫队的军衔制度是什么)
-
NAS:DS video/DS file/DS photo等群晖移动端APP远程访问的教程
-
爱折腾的特斯拉车主必看!手把手教你TESLAMATE的备份和恢复
-
10个免费文件中转服务站,分享文件简单方便,你知道几个?
-
FANUC 0i-TF数据备份方法(fanuc系统备份教程)
-
- 最近发表
- 标签列表
-
- linux 查询端口号 (58)
- docker映射容器目录到宿主机 (66)
- 杀端口 (60)
- yum更换阿里源 (62)
- internet explorer 增强的安全配置已启用 (65)
- linux自动挂载 (56)
- 禁用selinux (55)
- sysv-rc-conf (69)
- ubuntu防火墙状态查看 (64)
- windows server 2022激活密钥 (56)
- 无法与服务器建立安全连接是什么意思 (74)
- 443/80端口被占用怎么解决 (56)
- ping无法访问目标主机怎么解决 (58)
- fdatasync (59)
- 405 not allowed (56)
- 免备案虚拟主机zxhost (55)
- linux根据pid查看进程 (60)
- dhcp工具 (62)
- mysql 1045 (57)
- 宝塔远程工具 (56)
- ssh服务器拒绝了密码 请再试一次 (56)
- ubuntu卸载docker (56)
- linux查看nginx状态 (63)
- tomcat 乱码 (76)
- 2008r2激活序列号 (65)