动态主机配置协议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之解决一对一、多对一、多对多等关联实体在JSON序列化/输出时产生的无限递归死循环问题(infinite recursion)

    前言 这问题着实让人苦不堪言,有必要把它记下了. @JsonBackReference [亲测有效] 1.使用注解@JsonBackReference标记在有关联关系的实体属性上 2.仅导入此注解类有 ...

  2. Java内部类(2):普通的成员内部类

    在成员内部类中要注意两点 第一:成员内部类中不能存在任何static的变量和方法: 第二:成员内部类是依附于外围类的,所以只有先创建了外围类才能够创建内部类. 接下来是两个例子(关键字:.this . ...

  3. Pearson Correlation Score

    [http://www.statisticshowto.com/what-is-the-pearson-correlation-coefficient/] Correlation between se ...

  4. office web apps安装部署,配置https,负载均衡(一)背景介绍

    Office Web Apps,简称owa,是微软开发的在线预览office 文件服务.只要是做web开发技术的技术人员都知道,office文件预览,对于网站来说,绝对是一个难点,目前常见的预览off ...

  5. MBProgressHUD长时间加载无法取消的解决方法

    使用MBProgressHUD时,加载网路数据,或者等待webview加载完毕,长时间的等待导致体验不佳,这时候希望点击屏幕取消加载动画效果: // MBProgressHUD.h @protocol ...

  6. 【AMAD】django-social-auth -- 让django使用社交网络oauth鉴权变得极为轻松!

    简介 个人评分 简介 django-social-auth1集成的Oauth API包括: Google OpenID Google Oauth Google Oauth2 Yahoo OpenID ...

  7. SpringBoot中使用aop-测试

    面向切面编程(AOP),该种方式主要是为了弥补面向对象编程(OOP)的不足,通过配置切面以及关注点.通知等我们可以在程序的任意位置对我们的代码进行增强(执行一些代码),AOP是Spring的特性之一, ...

  8. OS X更新Catalina 10.15.2后虚拟机黑屏(已解决)

    简述 问题:更新OS X 10.15.2后VM Ware进unbuntu 16.0黑屏,但是VM Ware 有显示,情况类似如下: 解决办法   重启系统,command+r 进入恢复模式,打开bas ...

  9. apache tika检测文件是否损坏

    Apache Tika用于文件类型检测和从各种格式的文件内容提取的库. 将上传文件至服务器,进行解析文件时,经常需要判断文件是否损坏.我们可以使用tika来检测文件是否损坏 maven引入如下: &l ...

  10. raspberrypi 树莓派 内核编译

    相关版本信息 硬件:树莓派 2b 目标系统: linux 编译环境:ubuntu 14.4 32bit 用户路径:/home/hi/ 安装交叉编译链 cdmkdir pi/kernelcd pi/ke ...