参考1:DHCP服务的八种报文类型(通俗易懂的总结)
参考2:DHCP八种报文 Discover Offer Request Ack Nack decline release inform及其工作原理流程 详解

一、八种报文

1.DHCP Discover

DHCP客户端请求地址时,并不知道DHCP服务器的位置,因此DHCP客户端会在本地网络内以广播方式发送请求报文,这个报文成为Discover报文,目的是发现网络中的DHCP服务器,所有收到Discover报文的DHCP服务器都会发送回应报文,DHCP客户端据此就可以知道网络中存在的DHCP服务器的位置。

  1. DHCP Offer

DHCP服务器收到Discover报文后,就会在所配置的地址池中查找一个合适的ip地址,加上相应的租约期限和其他配置信息(网关,DNS服务器等),构造一个Offer报文,发送给客户,告知用户本服务器可以为其提供IP地址。(只是告诉client可以提供,是预分配,还需要client通过ARP检测该IP是否重复)

  1. DHCP Request

DHCP客户端会收到很多Offer,所以必须在这些回应中选择一个。Client通常选择第一个回应Offer报文的服务器作为自己的目标服务器并回应一个广播Request报文,通告选择的服务器。

DHCP客户端成功获取IP地址后,在地址使用租期过去1/2时,会向DHCP服务器发送单播Request报文续延租期,如果没有收到DHCP ACK报文,在租期过去3/4时,发送广播Request报文续延租期

  1. DHCP ACK

DHCP服务器收到Request报文后,根据Request报文中携带的用户MAC来查找有没有相应的续约记录,如果则发送ACK报文作为回应,通知用户可以使用分配的ip地址

  1. DHCP NAK

如果DHCP服务器收到Request报文后,没有发现相应的租约记录或者由于某些原因无法正常分配ip地址,则发送NAK报文作为回应,通知用户无法分配合适的ip地址

  1. DHCP Release

当DHCP客户端不再需要使用分配IP地址时(一般出现在客户端关机,下线等状况)就会主动向DHCP服务器发送RELEASE请求报文,告知服务器用户不再需要分配IP地址,请求DHCP服务器释放对应的IP地址

  1. DHCP Decline

DHCP客户端收到DHCP服务器ACK应答报文后,通过地址冲突检测发现服务器分配的地址冲突或者由于其他原因导致不能使用,则会向DHCP服务器发送Decline请求报文,通知服务器所分配的IP地址不可用,以获得新的IP地址。

  1. DHCP Inform

DHCP客户端如果需要从DHCP服务器端获取更为详细的配置信息,则向DHCP服务器发送Inform请求报文;DHCP服务器在收到该报文后,将根据租约进行查找到相应的配置信息后,向DHCP客户端发送ACK应答报文。

二、DHCP工作流程

客户机初始化& 寻找DHCP服务器(DHCP Discover)

  • 1.DHCP客户端启动时,计算机发现本机上没有任何IP地址设定,将以广播方式通过UDP 67端口发送DHCP Discover发现信息来寻找DHCP服务器。
  • 2.因为客户机还不知道自己属于哪一个网络,所以封包的源地址为0.0.0.0目的地址为255.255.255.255,向网络发送特定的广播信息。
  • 3.网络上每一台安装了TCP/IP协议的主机都会接收这个广播信息,但只有DHCP服务器才会做出响应。

分配IP地址 & 提供IP地址租用(DHCP Offer)

  • 1.DHCP服务器收到客户端发出的DHCP discover广播后,通过解析报文,查询dhcpd.conf配置文件。它会从那些还没有租出去的地址中,选择最前面的空置IP,连同其它TCP/IP设定,通过UDP 68端口响应给客户端一个DHCP offer数据包(包中包含IP地址、子网掩码、地址租期等信息)。告诉DHCP客户端,该DHCP服务器拥有资源,可以提供DHCP服务。
  • 2.此时还是使用广播进行通讯,源IP地址为DHCP服务器的IP地址,目标地址为255.255.255.255。同时,DHCP服务器为此客户端保留它提供的IP地址,从而不会为其他DHCP客户分配此IP地址。
  • 3.由于客户端在开始的时候还没有IP地址,所以在其DHCP discover封包内会带有其MAC地址信息,并且有一个XID编号来辨别该封包,DHCP服务器响应的DHCP offer封包则会根据这些资料传递给要求租约的客户

接受IP地址 & 接受IP租约(DHCP Request)

  • 1.DHCP客户端接受到DHCP offer提供信息之后,如果客户机收到网络上多台DHCP服务器的响应,一般是最先到达的那个
  • 2.然后以广播的方式回答一个DHCP request数据包(包中包含客户端的MAC地址、接受的租约中的IP地址、提供此租约的DHCP服务器地址等)。告诉所有DHCP服务器它将接受哪一台服务器提供的IP地址,所有其他的DHCP服务器撤销它们的提供以便将IP地址提供给下一次IP租用请求。
  • 3.此时,由于还没有得到DHCP服务器的最后确认,客户端仍然使用0.0.0.0为源IP地址,255.255.255.255为目标地址进行广播。
  • 4.事实上,并不是所有DHCP客户端都会无条件接受DHCP服务器的offer,特别是如果这些主机上安装有其它TCP/IP相关的客户机软件。客户端也可以用DHCP request向服务器提出DHCP选择,这些选择会以不同的号码填写在DHCP Option Field里面。客户机可以保留自己的一些TCP/IP设定。

IP地址分配确认 & 租约确认(DHCP Ack)

  • 1.当DHCP服务器接收到客户机的DHCP request之后,会广播返回给客户机一个DHCP ack消息包,表明已经接受客户机的选择,告诉DHCP客户端可以使用它提供的IP地址。并将这一IP地址的合法租用以及其他的配置信息都放入该广播包发给客户机。
  • 2.客户端在接收到DHCP ack广播后,会向网络发送三个针对此IP地址的ARP解析请求以执行冲突检测,查询网络上有没有其它机器使用该IP地址;如果发现该IP地址已经被使用,客户机会发出一个DHCP decline数据包给DHCP服务器,拒绝此IP地址租约,并重新发送DHCP discover信息。此时,在DHCP服务器管理控制台中,会显示此IP地址为BAD_ADDRESS。
  • 3.如果网络上没有其它主机使用此IP地址,则客户机的TCP/IP使用租约中提供的IP地址完成初始化,从而可以和其他网络中的主机进行通讯。

重新登陆

  • 1.以后DHCP客户端每次重新登录网络时,就不需要再发送DHCP discover发现信息了,而是直接发送包含前一次所分配的IP地址的DHCP request请求信息。
  • 2.当DHCP服务器收到这一信息后,它会尝试让DHCP客户机继续使用原来的IP地址,并回答一个DHCP ack确认信息。
  • 3.如果此IP地址已无法再分配给原来的DHCP客户端使用时,则DHCP服务器给DHCP客户端回答一个DHCP nak否认信息。当原来的DHCP客户机收到此DHCP nak否认信息后,它就必须重新发送DHCP discover发现信息来请求新的IP地址。

更新租约

  • DHCP服务器向DHCP客户机出租的IP地址一般都有一个租借期限,期满后DHCP服务器便会收回出租的IP地址。如果DHCP客户机要延长其IP租约,则必须更新其IP租约。
  • 1.客户端会在租期过去50%的时候,直接向为其提供IP地址的DHCP服务器发送DHCP request消息包。如果客户端接收到该服务器回应的DHCP ack消息包,客户端就根据包中所提供的新的租期以及其它已经更新的TCP/IP参数,更新自己的配置,IP租用更新完成。如果没有收到该服务器的回复,则客户端继续使用现有的IP地址,因为当前租期还有50%
  • 2.如果在租期过去50%的时候没有更新,则客户端将在租期过去87.5%的时候再次向为其提供IP地址的DHCP联系。如果还不成功,到租约的100%时候,客户端必须放弃这个IP地址,重新申请。如果此时无DHCP可用,客户端会使用169.254.0.0/16中随机的一个地址,并且每隔5分钟再进行尝试。

三、DHCP单播与广播

四、DHCP客户端首次登录网络

DHCP客户端首次登录网络时,主要通过四个阶段与DHCP服务器建立联系。

  • 发现阶段,即DHCP客户端寻找DHCP服务器的阶段。客户端以广播方式发送DHCP Discover报文,只有DHCP服务器才会进行响应。
  • 提供阶段,即DHCP服务器提供IP地址的阶段。DHCP服务器接收到客户端的DHCP Discover报文后,从IP地址池中挑选一个尚未分配的IP地址分配给客户端,向该客户端发送包含出租IP地址和其它设置的DHCP Offer报文。
  • 选择阶段,即DHCP客户端选择IP地址的阶段。如果有多台DHCP服务器向该客户端发来DHCP Offer报文,客户端只接受第一个收到的DHCP Offer报文,然后以广播方式向各DHCP服务器回应DHCP Request报文,该信息中包含向所选定的DHCP服务器请求IP地址的内容。
  • 确认阶段,即DHCP服务器确认所提供IP地址的阶段。当DHCP服务器收到DHCP客户端回答的DHCP Request报文后,便向客户端发送包含它所提供的IP地址和其它设置的DHCP ACK确认报文。然后,DHCP客户端将其TCP/IP协议组件与网卡绑定。
  • 除DHCP客户端选中的服务器外,其它DHCP服务器本次未分配出的IP地址仍可用于其他客户端的IP地址申请。

DHCP服务的八种报文(消息)作用相关推荐

  1. DHCP八种报文 Discover Offer Request Ack Nack decline release inform及其工作原理流程 详解

    工作端口 服务端端口:67 客户端端口:68 八种报文 Discover DHCP客户端寻找DHCP服务器位置时所使用的报文.DHCP请求客户端时,因不知服务器位置,便在本地网络中以广播形式发送Dis ...

  2. DHCP协议格式、DHCP服务搭建、DHCP协商交互过程入门学习

    相关学习资料 http://www.rfc-editor.org/rfc/rfc2131.txt http://baike.baidu.com/view/7992.htm?fromtitle=DHCP ...

  3. Android DHCP服务配置

    在android 10后,dhcp服务提供两种配置 1.想要使用dnsmasq作为dhcp服务,需要配置如下 frameworks/base/packages/Tethering/res/values ...

  4. 面试官:说出八种消息队列的应用场景。啊?八种?

    本文来源于公众号:胖滚猪学编程.转载请注明出处! 一个风度翩翩,穿着格子衬衣的中年男子,拿着一个满是划痕的mac向她走来,看着铮亮的头,胖滚猪心想,这肯定是尼玛顶级架构师吧!完了要挂了. 结果面试官第 ...

  5. dhcp服务器有哪些消息类型,DHCP 协议的 8 种消息类型及功能服务器

    1) 主机发送 DHCP Discover 广播包在网络上寻找 DHCP 服务器: 单播数据包, 地址. 2) DHCP 服务器向主机发送 DHCP Offer 单播数据包,包含 IP 地址.MAC ...

  6. 以太网 DHCP(DHCP的8种报文、DHCP配置、DHCP中继)

    2.14.1 以太网 DHCP(DHCP的8种报文.DHCP配置.DHCP中继) DHCP-2 2.14.1 以太网 DHCP(DHCP的8种报文.DHCP配置.DHCP中继) 一.DHCP的8种报文 ...

  7. 关于OSPF的五种报文类型介绍、OSPF八种状态机变化与报文交互介绍。

    4.2.2 路由 OSPF(OSPF的5种报文.8种状态机.邻居与邻接的形成) 目录 OSPF的5种报文 Hello报文 报文字段简介 DD/DBD报文 DD报文字段简介(首个DD报文) DD报文字段 ...

  8. python协程实现一万并发_python进阶:服务端实现并发的八种方式

    [本文导读]文中有许多不妥之处,敬请批评指正!python编写的服务端,有八种实现并发的方式,如阻塞(对等)套接字实现并发.非阻塞套接字实现并发.epoll实现并发.多进程实现并发.多线程实现并发.进 ...

  9. DHCP服务和NIS服务

    <本章目标> ■ 掌握Linux系统网络配置 ■ 掌握DHCP和NIS的服务器配置和客户端使用 ■ 使用DHCP中继代理实现跨网段的网络地址自动分配 ■ 使用NIS服务实现主机和用户帐户的 ...

  10. linux服务篇-DHCP服务

    DHCP服务概述: 名称:DHCP  - Dynamic Host Configuration Protocol  动态主机配置协议 功能:DHCP(Dynamic Host Configuratio ...

最新文章

  1. 运维企业专题(4)LVS高可用与负载均衡前篇——先学原理,再学配置
  2. [转载]mysql操作if...else...来查问
  3. 计算机类会议论文2021截稿,科学网—人工智能 | 国际会议截稿信息3条 - 李昕的博文...
  4. 笔记本电脑清洁小记(附螺丝滑丝处理,常见意外情况)
  5. python中的wx_配置 Python的wxWidgets可视开发环境 | 学步园
  6. java 成员函数相互调用_java 深入理解内部类以及之间的调用关系
  7. 3天2100万!周杰伦的说好不哭,20万点评Python来分析
  8. esxi6.7密码设置规则_太神奇了!excel表格竟然可以设置查看密码
  9. mybatis中的自动提交事务的设置
  10. 线性表的链式存储实现
  11. 谈谈创业这点事(8)
  12. matlab的setdiff函数,matlab setdiff函数
  13. stm32 uv5打开uv4工程错误
  14. 极狐Gitlab操作手册
  15. utorrent不能下载的解决方法
  16. hive表分区上传数据出现的一个问题及解决思路
  17. 开关电源matlab仿真设计报告,MATLAB非隔离式开关电源仿真分析+源代码
  18. DevOps落地实践及案例分享
  19. indesign页眉如何左右分布_InDesign排版技巧
  20. shell之正则表达式

热门文章

  1. Java微信小程序发送服务通知
  2. 微信小程序自定义tab切换(可滑动)
  3. 升级opengl和显卡驱动_又更新了!英伟达OpenGL 4.4显卡驱动下载
  4. JavaScript练习(一)——跟随鼠标移动
  5. python共享单车数据分析_利用python分析共享单车项目
  6. GoAhead的asp过程与goform过程浅析
  7. scara机器人动荷载_揭密SCARA机器人
  8. [从零开始学习FPGA编程-6]:快速入门篇 - 操作步骤1 - 国内外FPGA主要厂家及其主要产品系列、开发工具
  9. 批量更改文件的后缀名
  10. pyecharts(9)-动态可视化-树形图-思维导图