动态主机配置协议DHCP

当某组织获得一块地址后,就可以为本组织内的主机或者路由器分配IP地址。这个分配工作可以由系统管理员手动通过网络管理工具来完成。也可以由动态主机配置协议(Dynamic Host Congfiguration,DHCP)来完成。现在,主机通常是使用DHCP自动获取IP地址。
当然,网络管理员也可以配置DHCP,使得一台主机一直使用相同的IP地址,或者某主机被分配一个临时的IP地址(即每次都可以是不同的IP地址)。
除了为主机分配IP地址外,DHCP还允许主机得知关于它的其他信息。如子网掩码、默认网关、本地DNS服务器的地址

因为DHCP使主机自动获取IP地址等网络配置信息并使主机接入网络,所以DHCP也被称为即插即用协议(plug-and-play protocol)。这个协议大大的方便了网络管理人员,还被广泛地应用于有主机频繁加入和离开网络的住宅英特网接入网与无线局域网中。

当有主机加入或离开时,DHCP服务器就要更新其可用的IP地址。

当有一台主机加入时,DHCP服务器从其当前可用的地址池中分配一个任意地址给它;当一台主机离开时,其地址便被收回到这个池中。

DHCP运行过程

DHCP是一个客户--服务器协议。客户为主机。

在一个网络中新加入的主机会向DHCP服务器申请地址和得到相关网络配置信息。最简单情况是每个子网都配备一台DHCP服务器,如果某子网中没有服务器,那么就需要一个DHCP中继代理(通常为一台路由器),这个代理知道DHCP服务器的地址。

下图展示了DHCP客户--服务器的一个场景。图中有一台DHCP服务器和一台提供中继代理服务的路由器。

   

DHCP是一个4步骤的过程。

DHCP四步骤

DHCP服务器发现

一台新加入网络的主机首要任务便是找到与其能够交互的DHCP服务器。主机使用UDP分组向端口67发送DHCP发现报文(DHCP discover message)来完成该任务。

由于主机新加入该网络,并不知道该网络的IP地址也不知道DHCP服务器的地址。于是该主机在发送包含DHCP发现报文的IP数据报时,使用目的地址为255.255.255.255的广播地址和使用代表“本主机”的0.0.0.0作为源地址。

DHCP客户将该数据报传递给链路层,链路层然后将该帧广播到所有与该子网连接的子网。

DHCP服务器提供

DHCP服务器收到一个DHCP发现报文时,将使用DHCP提供报文(DHCP offer message)向客户做出响应。,这里仍然会使用广播地址255.255.255.255作为目的地址(现在客户主机并没有地址)。

一个子网中可能会存在好几台DHCP服务器,于是客户可能会在几个提供者之间进行优越选择。

每台服务器的提供报文会包含:发现报文的事务ID、向客户推荐的IP地址、网络掩码、以及IP地址租用期(address lease time),也是就IP地址的有效时间量。租用期通常为几小时或者几天。记为T,这个时间也表示在不更新租约的情况下地址可被租用的时间上限。

也包含更新时间(T1):客户从获得租约到尝试要求服务器更新租约的时间。
以及重绑定时间(T2):客户尝试要求DHCP服务器更新其地址的时间。默认情况下,T1 = T/2;T2 = 7T/8

DHCP请求

DHCP服务提供报文到达客户后,客户便知道了DHCP服务器的信息。这时,客户从一个或者多个提供者中选择一个,并向选择的服务器发送DHCP请求报文(DHCP request message),进行响应,回显配置参数。

此时的数据报目的地址IP地址仍为广播地址,除了被客户选中的服务器外,其余服务器若收到该报文发现报文选项中的服务器IP地址与自己的不同便不做任何响应,并清除相应地IP分配记录。

DHCP ACK

服务器使用DHCP ACK报文(DHCP ACK message)对DHCP请求报文进行响应,证实所要求的参数。如果服务器无法分配包含在DHCPREQUEST消息中的地址,该服务器将会响应一个DHCPNAK消息。

一旦客户收到DHCP ACK报文后,交互便完成了,客户可以在租用期内使用这个IP地址。

更新租约或获得其他消息

若一个主机已有一个IP地址并希望更新其租约,那么它便可跳过最初的DHCPDISCOVER/DHCPOFFER消息,直接通过DHCPREQUSEST消息请求当前当前正在使用的地址。然后协议运作流程如前所述,服务器可能同意也可能拒绝该要求。

客户需要配置其他信息,可使用DHCPINFORM消息代替DHCPREQUEST消息向服务器发出请求,表明想获取其他配置信息。此消息导致服务器会返回一个DHCPACK消息,其中包含请求的额外信息。

以图示例

下面以《计算机网络自顶向下方法》中的图,介绍DHCP协议运行过程(DHCP客户与服务器交互过程)。

yiaddr(意为“你的因特网地址”)指示被分配给新到达客户的地址

       

  • 新到达的客户向DHCP服务器发送发现报文。源地址为0.0.0.0,目的地址为广播地址255.255.255.255,源端口号为68,目的端口为67。事务ID为654。

  • 服务器收到该发现报文后响应提供报文,提供报文包含了上文介绍的发现报文的事务ID、向客户推荐的IP地址、IP地址租用期等信息。

  • 客户选择了提供报文然后做出响应发送请求报文。注意这里发送的IP数据报目的地址仍为广播地址,源地址仍为0.0.0.0。报文包含了客户需要的配置参数,现在的事务ID为原事务ID增加1。

  • 服务器发送DHCP ACK报文进行响应,并证实客户要求的参数。

附图一张客户机的DHCP状态机

   

DHCP协议在客户机和服务器中都会运行一个状态机。状态用于指出协议下一个处理的消息类型。上图中,状态之间的转换源于消息的接收和发送或者超时。

需要注意上图中,从选择到INIT的箭头。这个箭头表示客户机可能接收来自不需要的地址的ACK。如果它没有发现所需要的地址,便会发送一个DHCPDECLINE消息,并转换到INIT状态。


本篇学习笔记主要介绍的是DHCP协议的主要作用以及整个运作流程,许多细节并未涉及。并且,本篇中的DHCP是针对于IPv4,IPv6使用的DHCP版本DHCPv6可能会在后面介绍。

【网络协议】动态主机配置协议DHCP的更多相关文章

  1. 【RL-TCPnet网络教程】第25章 DHCP动态主机配置协议基础知识

    第25章      DHCP动态主机配置协议基础知识 本章节为大家讲解DHCP(Dynamic Host Configuration Protocol,动态主机配置协议),通过前面章节对TCP和UDP ...

  2. 动态主机配置协议DHCP

    一.什么是DHCP DHCP,动态主机配置协议,提供一种称为“即插即用连网”的机制,允许一台计算机加入新的网络和获取IP地址而不用手工配置. 二.DHCP工作原理和工作流程 DHCP服务器被动打开UD ...

  3. 计算机网络之动态主机配置协议DHCP

    为了将软件协议做成通用的和便于移植,协议软件的编写者不会把所有细节都固定在源代码中,而是把协议软件参数化,这就使得在很多台计算机上使用同一个经过编译的二进制代码成为可能. 一台计算机和另一台计算机的区 ...

  4. <TCP/IP>DHCP动态主机配置协议

    坚持是一种好习惯 大家都知道,为了上网我们是需要提交一些配置信息的,如IP地址,子网掩码,DNS服务器等,这些是一个主机能够在Internet上运行并给用户提供常用服务(比如web和Email)的基本 ...

  5. 第9章 应用层(2)_动态主机配置协议(DHCP)

    2. 动态主机配置协议(DHCP) 2.1 静态地址和动态地址的应用场景 (1)静态地址应用场景 ①IP地址不经常更改的设备(如服务器地址) ②使用有规律的IP地址以便于管理(如学校机房为方便教师管理 ...

  6. DHCP:动态主机配置协议

    DHCP(Dynamic Host Configuration Protocol,动态主机配置协议)是一个局域网的网络协议,使用UDP协议工作, 主要有两个用途:给内部网络或网络服务供应商自动分配IP ...

  7. DHCP(动态主机配置协议)工作流程

    一.DHCP的作用 我们先来看一下什么是DHCP,DHCP(Dynamic Host Configuration Protocol,动态主机配置协议)它可以为客户机自动分配IP地址.子网掩码以及缺省网 ...

  8. DHCP动态主机配置协议

    1.DHCP简述 某组织一旦获得了一个地址,它就可以为本组织内的主机与路由器接口逐个分配IP地址.系统管理通常可以手工配置路由器中的IP地址(静态分配).但这项任务目前通常更多是使用动态主机配置协议( ...

  9. 动态主机配置协议-DHCP

    一.DHCP 概述 当局域网中有大量的PC时.如果我们逐个为每台PC去手动配置IP.那这就是一个吃力也未必讨好的办法 累死你 而DHCP 刚好可以解决这个问题.DHCP全称(动态主机配置协议).使用的 ...

随机推荐

  1. Springboot--关于使用webapp目录

    前我在学习springBoot集成springMVC的时候发现webapp目录, 1. 直接右键运行,访问不到页面,原来并不是不支持啊,只是默认没有把它放在编译路径里面. 我们可以在项目的packag ...

  2. 0-linux简介

    linux是什么? linux有什么用? linux学了能做什么? 潜台词:linux能找什么工作?有没有钱和前途? linux要学什么? 服务的安装,配置,维护 保障服务/系统/业务的稳定,能长期不 ...

  3. ASP.NET Core 入门笔记4,ASP.NET Core MVC路由入门

    敲了一部分,懒得全部敲完,直接复制大佬的博客了,如有侵权,请通知我尽快删除修改 摘抄自https://www.cnblogs.com/ken-io/p/aspnet-core-tutorial-mvc ...

  4. 【计算机视觉】【并行计算与CUDA开发】GPU硬编码

    一.OpenCV中的硬编码 OpenCV2.4.6中,已实现利用GPU进行写视频,编码过程由cv::gpu::VideoWriter_GPU完成,其示例程序如下. 1 int main(int arg ...

  5. js单击事件

    <script type="text/javascript"> // 根据ID获取元素,得到按钮[注册] var elbtn=document.getElementBy ...

  6. Confluence与Jira安装及后期迁移问题记录

    Confluence与Jira 由于线上jira和confluence之前互相关联,confluence的登录用户全部关联自jira的用户,confluence安装时会提示是否关联jira,由于这个问 ...

  7. 什么是阿里云ACE认证

    作为国内最大的云计算服务商,阿里云不仅引领着中国云计算技术在全球范围内扩大版图,同时还责无旁贷的承担着培养.壮大中国云生态人才力量的使命. 阿里云自2015年推出国内首个公有云技术认证以来,短短三年已 ...

  8. 03 Python基础

    1.输出和输入 (1)print打印 Python 提供print方法来打印信息 输入: print ("hello python") 调用print方法,用户双引号(" ...

  9. Spring 如何解决循环依赖问题?

    在关于Spring的面试中,我们经常会被问到一个问题,就是Spring是如何解决循环依赖的问题的. 这个问题算是关于Spring的一个高频面试题,因为如果不刻意研读,相信即使读过源码,面试者也不一定能 ...

  10. C - 简易贪吃蛇的编写

    不多废话,直接进入正题——用C编写简易贪吃蛇.附上拙劣的源码 * c-snake * 首先说明使画面动起来的原理:通过 system("cls"); 清除当前控制台的显示,再pri ...