DHCP执行流程介绍

  • DHCP简介
  • DHCP大致执行流程
    • 新主机向DHCP Server申请IP地址
    • DHCP Server将分配好的IP发送给新主机
    • 新主机发送DHCP Request广播数据包,告知其他DHCP Server
    • 目标DHCP Server广播DHCP ACK消息确认包
  • DHCP的报文种类
  • IP地址的收回与续租

本文大部分参考了:

《趣谈网络协议》

DHCP协议详解

DHCP简介

动态主机配置协议(Dynamic Host Configuration Protocol),简称DHCP。前身是BOOTP协议,是一个局域网的网络协议,使用UDP协议工作,统一使用两个IANA分配的端口:67(服务器端),68(客户端)。DHCP通常被用于局域网环境,主要作用是集中的管理、分配IP地址,使client动态的获得IP地址、Gateway地址、DNS服务器地址等信息,并能够提升地址的使用率。

简单来说,它的主要作用就是:用于在内网中当一台新的主机加入的时候,动态的给新加入的内网机器分配IP地址等信息的协议。

另外,DHCP还提供帮助客户机预启动执行环境PXE(Pre-boot Execution Environment)的功能。

这里只是简单的记录一下DHCP分配IP的流程,PXE只是简单带过。


DHCP作为PXE的功能

网络管理员也就是DHCP其实不仅仅只有分配IP的功能,会具有一项比较重要的功能,就是帮助客户机自动安装操作系统(PXE)

在一些没有安装OS的空电脑中,可能就需要在系统启动的时候通过PXE去初始化OS。

现在一般电脑的网卡几乎都支持PXE启动, PXE client 就在网卡的 ROM (只读存储器)中,当计算机引导时,BIOS 把 PXE client 调入内存执行。
安装完成后,将提示重新引导计算机。这个时候,在重新引导的过程中将BIOS修改回从硬盘启动就可以了。这样就实现了只需要安装一次操作系统,后面电脑启动的时候都使用这个操作系统。

在BIOS设置页面,有一项PXE Boot to LAN,若设置为Enabled则表示计算机从网络启动,从PXE服务端下载配置文件和操作系统内核进行启动;若设置为Disabled则表示从本地启动,启动动BIOS后,会去寻找启动扇区,如果没有安装操作系统,就会找不到启动扇区,这个时候就启动不起来。

DHCP在PXE的作用主要是为PXE客户端提供PXE服务端的位置,之后PXE客户端就能够和服务端进行交互,去获得自己想要的文件等信息,完成初始化操作系统的作用。这里就不详细说了,下面是大致的流程图:

下面开始正式介绍DHCP分配IP的大致流程!!!

在DHCP协议中,DHCP Server就类似于网络管理员。它只需要配置一段共享的IP地址。之后每一台新接入的机器都通过DHCP协议,来到这个共享的IP地址里进行申请,等待成功申请到IP后就可以正常工作了。等待加入的主机使用完毕(相当于过期等情况)就可以还给DHCP Server供其它机器使用。

在介绍工作流程之前,先介绍一下IP地址分配方式和租约表。

地址分配方式有如下三种:

  • 人工配置:由管理员对每台具体的计算机指定一个地址、或者通过相关的命令设置(ifconfig、ip addr)
  • 自动配置:服务器为第一次连接网络的计算机分配一个永久地址,DHCP客户端第一次成功地从DHCP服务器端分配到一个IP地址之后,就永远使用这个地址
  • 动态配置:在一定的期限内将地址租给计算机,客户端第一次从DHCP服务器分配到IP地址后,并非永久地使用该地址,每次使用完后,DHCP客户端就得释放这个IP地址,并且租期结束后客户必须续租或者停用该地址,而对于路由器,经常使用的地址分配方式是动态配置。

租约表

  • 静态租约表:对应一个静态租约存储文件,server运行时从文件中读取静态租约表。(存放分配的静态IP)
  • 动态租约表:对应一个周期存储文件,server周期性将租约表存进该文件,在程序开始时将会读取上次存放的租约表。(租约表记录了当前所有分配的租约,包括静态链接的)。(存放分配的动态的IP)
  • DHCP服务器是一直处在被动接受请求的状态,当有客户端请求时,服务器会读取获得客户端当前所在的状态以及客户端的信息,并在静态租约表和动态租约表中进行检索找到相应的表项,再根据客户端的状态执行不同的回复。
  • 当收到客户端的首次请求时,DHCP服务器先查找静态租约表;若存在请求的表项,返回这个客户的静态IP地址;否则,从IP地址池中选择可用的IP分配给客户,并添加信息到动态数据库中。此外,服务器将会周期性的刷新租约表写入文件存档,在这个过程中会顺便对动态租约表进行租期检查。

DHCP大致执行流程

DHCP工作流程大致分为以下四步:

  • 新主机向DHCP Server申请IP地址(DHCP DIscover)
  • DHCP Server将分配好的IP发送给新主机(DHCP Offer)
  • 新主机发送DHCP Request广播数据包,告知所有DHCP服务器自己要接受哪台服务器提供的IP等信息(DHCP Request)
  • 目标DHCP Server广播DHCP ACK消息确认包,通知该网络中的所有主机,申请的IP地址即可正常使用(DHCP ACK)

新主机向DHCP Server申请IP地址

当一台主机新加入一个网络时,只知道自己的MAC地址。它需要告诉网络中的其它主机自己的到来,并去申请对应的IP等信息,这个步骤常称为DHCP Discover

新主机会使用IP地址0.0.0.0发送一个广播包,提供自己的MAC地址,并告诉所有主机自己是新来的,现在需要IP地址,请求DHCP Server分配IP!

这个广播包封装了UDP,UDP封装了BOOTP。其实DHCP是BOOTP的增强版,但是如果你去抓包的话,很可能看到的名称还是BOOTP协议。格式如下:

DHCP Server将分配好的IP发送给新主机

DHCP Server相当于IP的管理员,在新主机发送请求后,能够立刻接受到并分配一个IP(会从那些还没有租出去的地址中,选择最前面的空置IP)给它,这个过程称为DHCP Offer。同时,DHCP Server为此客户保留为它提供的IP地址,从而不会为其他DHCP客户分配此IP地址。

DHCP Server如何确定新主机?

DHCP Server就是通过MAC地址的唯一性去确定这个发送请求的主机是一个新主机。

DHCP Offer的格式就像这样,里面有给新人分配的地址。

上图可以发现,DHCP Server也是发送的广播包。这是因为虽然新主机的MAC确认,但是无法确认对应的IP地址,所以只能通过广播包让新主机接受。

DHCP Server除了分配IP,还会分配子网掩码、网关和IPD地址租用期等信息。

新主机发送DHCP Request广播数据包,告知其他DHCP Server

由于,第一个步骤是广播数据包,当这个网络中有多个DHCP Server的时候,它就可能申请到很多的IP地址。这时,就必须按照一定的规则进行选择,并通知其他DHCP Server。

新主机一般会选择第一个DHCP Offer,即最先到达的。然后会向网络发送一个DHCP Request广播数据包,其中包含==客户端的MAC地址、接受的租约中的IP地址、提供此租约的DHCP服务器地址==等,并告诉所有DHCP Server它将接受哪一台服务器提供的IP地址,这时候其他的DHCP Server会撤销它们提供的IP地址,以便提供给下一个IP租用请求者。

此时,由于还没有得到DHCP Server的最后确认,客户端仍然使用0.0.0.0为源IP地址、255.255.255.255为目标地址进行广播。在BOOTP里面,接受某个DHCP Server的分配的IP。

目标DHCP Server广播DHCP ACK消息确认包

当DHCP Server接收到客户机的DHCP request之后,会广播返回给客户机一个DHCP ACK消息包,表明已经接受客户机的选择,并将这一IP地址的合法租用信息和其他的配置信息都放入该广播包,发给客户机。

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

并且这时候,网络中的其他主机也能够通过这个数据包知道新主机的相关信息。

重新登陆后,新加入的主机就不用再重头执行,而是使用之前申请到的IP直接发送DHCP Request。DHCP Server接受到后,就会进行判断当前这个IP是否还可用(没有分配给其他主机),如果可用,就会返回ACK报文。如果不可用,那么回返回DHCP NAK报文段,告知新加入的主机需要重新执行DHCP Discover以及后面的流程。

DHCP的报文种类

其实上面的四个步骤,都对应的四种报文类型。

也可以发现,上面其实都是正常工作下的流程,所以肯定还存在不正常的流程。例如,分配的IP地址冲突等等。那么肯定也存在相应的报文来进行处理。

DHCP总共有八种报文类型:

报文类型 说明
Discover(0x01) DHCP客户端在请求IP地址时并不知道DHCP服务器的位置,因此DHCP客户端会在本地网络内以广播方式发送Discover请求报文,以发现网络中的DHCP服务器。所有收到Discover报文的DHCP服务器都会发送应答报文,DHCP客户端据此可以知道网络中存在的DHCP服务器的位置。
Offer(0x02) DHCP服务器收到Discover报文后,就会在所配置的地址池中查找一个合适的IP地址,加上相应的租约期限和其他配置信息(如网关、DNS服务器等),构造一个Offer报文,发送给DHCP客户端,告知用户本服务器可以为其提供IP地址。但这个报文只是告诉DHCP客户端可以提供IP地址,最终还需要客户端通过ARP来检测该IP地址是否重复。
Request(0x03) DHCP客户端可能会收到很多Offer请求报文,所以必须在这些应答中选择一个。通常是选择第一个Offer应答报文的服务器作为自己的目标服务器,并向该服务器发送一个广播的Request请求报文,通告选择的服务器,希望获得所分配的IP地址。另外,DHCP客户端在成功获取IP地址后,在地址使用租期达到50%时,会向DHCP服务器发送单播Request请求报文请求续延租约,如果没有收到ACK报文,在租期达到87.5%时,会再次发送广播的Request请求报文以请求续延租约
ACK(0x05) DHCP服务器收到Request请求报文后,根据Request报文中携带的用户MAC来查找有没有相应的租约记录,如果有则发送ACK应答报文,通知用户可以使用分配的IP地址。
NAK(0x06) 如果DHCP服务器收到Request请求报文后,没有发现有相应的租约记录或者由于某些原因无法正常分配IP地址,则向DHCP客户端发送NAK应答报文,通知用户无法分配合适的IP地址。
Release(0x07) 当DHCP客户端不再需要使用分配IP地址时(一般出现在客户端关机、下线等状况)就会主动向DHCP服务器发送RELEASE请求报文,告知服务器用户不再需要分配IP地址,请求DHCP服务器释放对应的IP地址。
Decline(0x04) DHCP客户端收到DHCP服务器ACK应答报文后,通过地址冲突检测发现服务器分配的地址冲突或者由于其他原因导致不能使用,则会向DHCP服务器发送Decline请求报文,通知服务器所分配的IP地址不可用,以期获得新的IP地址。
nform(0x08) DHCP客户端如果需要从DHCP服务器端获取更为详细的配置信息,则向DHCP服务器发送Inform请求报文;DHCP服务器在收到该报文后,将根据租约进行查找到相应的配置信息后,向DHCP客户端发送ACK应答报文。目前基本上不用了。

IP地址的收回与续租

IP地址的回收:DHCP申请的地址一般都是有期限的,即分配的IP地址到达期限后就会回收。

IP地址的续租:在DHCP协议中,客户机在租期到达50%时,会直接向为其提供IP地址的DHCP Server发送DHCP request消息包。客户机收到服务器回应的DHCP ACK消息包后,会根据包中所提供的新的租期以及其他已经更新的TCP/IP参数,更新自己的配置。这样,IP租用更新就完成了。

如果在租期过去50%的时候没有更新,则客户端将在租期过去87.5%的时候再次向为其提供IP地址的DHCP联系。如果还不成功,到租约的100%时候,客户端必须放弃这个IP地址,重新申请。如果此时无DHCP可用,客户端会根据之前获取的子网信息随机获取相关的一个地址,并且每隔5分钟再进行尝试。

DHCP执行流程详解相关推荐

  1. MySQL系列---架构与SQL执行流程详解

    文章目录 1. 背景 2. 架构体系 2.1 架构图 2.2 模块详解 2.3 架构分层 3. 查询SQL语句执行流程 3.1 连接 3.1.1 MySQL支持的通信协议 3.1.2 通信方式 3.2 ...

  2. statement执行insert into语句_【图文并茂】源码解析MyBatis ShardingJdbc SQL语句执行流程详解...

    源码分析Mybatis系列目录: 1.源码分析Mybatis MapperProxy初始化[图文并茂] 2.源码分析Mybatis MappedStatement的创建流程 3.[图文并茂]Mybat ...

  3. 19. OP-TEE中TA与CA执行流程详解-------软件架构篇

    历经一年多时间的系统整理合补充,<手机安全和可信应用开发指南:TrustZone与OP-TEE技术详解 >一书得以出版,书中详细介绍了TEE以及系统安全中的所有内容,全书按照从硬件到软件, ...

  4. data spring 指定时区_Spring 框架基础(05):Mvc架构模式,执行流程详解

    本文源码:GitHub || GitEE 一.SpringMvc框架简介 1.Mvc设计理念 MVC是一种软件设计典范,用一种业务逻辑.数据.界面显示分离的方法组织代码,将业务逻辑聚集到一个组件里面, ...

  5. spring mvc返回页面显示空白_Spring 框架基础(06):Mvc架构模式简介,执行流程详解...

    一.SpringMvc框架简介 1.Mvc设计理念 MVC是一种软件设计典范,用一种业务逻辑.数据.界面显示分离的方法组织代码,将业务逻辑聚集到一个组件里面,在改进和个性化定制界面及用户交互的同时,不 ...

  6. springmvc的执行流程详解

    1.什么是MVC MVC是Model View Controller的缩写,它是一个设计模式 2.springmvc执行流程详细介绍 第一步:发起请求到前端控制器(DispatcherServlet) ...

  7. Spring 框架基础(06):Mvc架构模式简介,执行流程详解

    本文源码:GitHub·点这里 || GitEE·点这里 一.SpringMvc框架简介 1.Mvc设计理念 MVC是一种软件设计典范,用一种业务逻辑.数据.界面显示分离的方法组织代码,将业务逻辑聚集 ...

  8. .net mvc actionresult 返回字符串_Spring 框架基础(06):Mvc架构模式简介,执行流程详解

    一.SpringMvc框架简介 1.Mvc设计理念 MVC是一种软件设计典范,用一种业务逻辑.数据.界面显示分离的方法组织代码,将业务逻辑聚集到一个组件里面,在改进和个性化定制界面及用户交互的同时,不 ...

  9. Spark执行流程详解

    1.在命令行执行提交命令时,在spark-submit脚本中,调用了SparkSubmit类中的mainMethod.invoke方法,这个类通过反射,调用我们自定义的类. 2.我们自定义类中的mai ...

最新文章

  1. C++负数、小数如何保存
  2. 【从零开始的ROS四轴机械臂控制】(二) - ROS与Gazebo连接,Gazebo仿真及urdf文件修改
  3. oracle sap 用友 保险财务系统比较,SAP和用友的财务管理系统比较详解
  4. 如何使用 React 和 React Hooks 创建一个天气应用
  5. 命令行删除mysql57_Ubuntu16.04彻底删除MySQL5.7 方法
  6. Just For Fun:闲来无事,C语言+GTK生成mnist数据集的图形用户界面GUI
  7. Thanos 开源的大规模Prometheus集群解决方案
  8. php上传文件502,PHPStrom上传文件报502错误原因
  9. 文件磁盘相关函数[2]-建立新文件 FileCreate
  10. 【解决windows】Windows Linux双系统安装历程,超详细
  11. c语言题库及详解答案 免费下载,C语言题库(带详解答案).pdf
  12. 计算机电源安装,手把手教你正确安装主机电源
  13. Ansys DesignModeler
  14. 虚拟偶像春天来临,谁能从中脱颖而出?
  15. ardupilot 函数output_armed_stabilizing
  16. java实现密码重置功能_如何实施密码重置链接
  17. 新浪微博--分享到微博的简单使用
  18. CTS2019 氪金手游
  19. Ubuntu 18.04 安装Wine 微信
  20. An Empirical Evaluation of Generic Convolutional and Recurrent Networks for Sequence Modeling

热门文章

  1. Topographic Laser Ranging and Scanning_Principles and Processing——第二章 2.1-2.2
  2. BlueJ 3.0有了新的编辑器
  3. 跨境电商如何避免账号账密泄露带来的财产损失?
  4. vue2进阶篇:vue-router之路由的2种工作模式
  5. linux ftp 配额 quota,Linux_quota磁盘配额详解
  6. Codecombat, 寓教于乐
  7. 一蓑烟雨任平生(数位DP)
  8. 74161/74LS161 四位二进制同步计数器
  9. RELLIS-3D数据集
  10. 每日新闻丨美暗示华为有望本月解禁;阿里巴巴第二财季业绩超预期,云计算成亮点...