动态主机配置协议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. Go项目实战:打造高并发日志采集系统(二)

    日志统计系统的整体思路就是监控各个文件夹下的日志,实时获取日志写入内容并写入kafka队列,写入kafka队列可以在高并发时排队,而且达到了逻辑解耦合的目的.然后从kafka队列中读出数据,根据实际需 ...

  2. 高可用安装k8s1.13.0 --不能带cavisor、不能加cni ,带上这两个总是报错,kubelet无法启动

    高可用安装k8s1.13.0 --不能带cavisor,总是报错,kubelet无法启动

  3. Spring Cloud(3):配置服务(Config)

    Spring Cloud Config的目标是在在大量的微服务中,将服务配置信息和和服务的实际物理部署分离,且服务配置服务不应与服务实例一起部署.配置信息应该作为环境变量传递给正在启动的服务,或者在服 ...

  4. JavaScript(6)—— 返回特征数字

    案例要求 根据业务情况,要把核心的东西变成一个模块便于复用,慢慢沉淀后,能够更快更高效地编程. 业务核心算法: /* 数字检测 @return 返回2,能被3和7整除 返回1,能够被3整除 返回0,不 ...

  5. sublime的Package Control的安装及使用

    一.快速安装 使用Ctrl+`快捷键或者通过View->Show Console菜单打开命令行,粘贴如下代码(注意下面代码为一行): import urllib.request,os; pf = ...

  6. P1494 小Z的袜子 【普通莫队】

    我的第二道莫队题,对莫队又有了自己的看法. 在第一题的基础上之上,觉得莫队有个很关键的地方在于 莫队所维护的值是什么,怎么推出维护的公式来. 这道题就是这样,一开始还没自己推出公式来,也有几个坑点. ...

  7. mysql innodb索引原理

    聚集索引(clustered index) innodb存储引擎表是索引组织表,表中数据按照主键顺序存放.其聚集索引就是按照每张表的主键顺序构造一颗B+树,其叶子结点中存放的就是整张表的行记录数据,这 ...

  8. [转帖]加强Linux服务器安全的20项建议

    加强Linux服务器安全的20项建议 2017-10-19 22:15:01作者:Linux编辑稿源:系统极客 https://ywnz.com/linuxyffq/99.html 一般情况下用 Li ...

  9. FTP文件上传下载

    使用Apache Commons Net来实现FTP服务器文件的上传 与 下载 maven配置Jar <!-- https://mvnrepository.com/artifact/common ...

  10. 大数据备忘录———将数据从oracle导入impala中

    上周遇到了将数据从oracle导入到impala的问题,这个项目耽误了我近一周的时间,虽然是种种原因导致的,但是还是做个总结. 需求首先是跑数据,跑数据这个就不叙述,用的是公司的平台. 讲讲耽误我最久 ...