作者:【吴业亮】
博客:https://wuyeliang.blog.csdn.net/

概念及原理

动态主机设置协议(Dynamic Host Configuration Protocol, DHCP)是一个局域网的网络协议,使用UDP协议工作,主要有两个用途:给内部网络或网络服务供应商自动分配IP地址给用户给内部网络管理员作为对所有计算机作中央管理的手段。

DHCP 是 Dynamic Host Configuration Protocol(动态主机配置协议)缩写,它的前身是 BOOTP。BOOTP 原本是用于无磁盘主机连接的网络上面的:网络主机使用 BOOT ROM 而不是磁盘起动并连接上网络,BOOTP 则可以自动地为那些主机设定 TCP/IP 环境。但 BOOTP 有一个缺点:您在设定前须事先获得客户端的硬件地址,而且,与 IP 的对应是静态的。换而言之,BOOTP 非常缺乏 “动态性” ,若在有限的 IP 资源环境中,BOOTP 的一对一对应会造成非常严重的资源浪费。 DHCP 可以说是 BOOTP 的增强版本,它分为两个部份:一个是服务器端,而另一个是客户端。所有的 IP 网络设定数据都由 DHCP 服务器集中管理,并负责处理客户端的 DHCP 要求;而客户端则会使用从服务器分配下来的IP环境数据。比较起 BOOTP ,DHCP 透过 “租约” 的概念,有效且动态的分配客户端的 TCP/IP 设定,而且,作为兼容考虑,DHCP 也完全照顾了 BOOTP Client 的需求。 DHCP 的分配形式 首先,必须至少有一台 DHCP 工作在网络上面,它会监听网络的 DHCP 请求,并与客户端磋商 TCP/IP 的设定环境。

它提供三种 IP 定位方式:

1、Manual Allocation
  网络管理员为某些少数特定的Host绑定固定IP地址,且地址不会过期
2、Automatic Allocation
  自动分配,其情形是:一旦 DHCP 客户端第一次成功的从 DHCP 服务器端租用到 IP 地址之后,就永远使用这个地址。
3、Dynamic Allocation
动态分配,当 DHCP客户端 第一次从 DHCP 服务器端租用到 IP 地址之后,并非永久的使用该地址,只要租约到期,客户端就得释放(release)这个 IP 地址,以给其它工作站使用。当然,客户端可以比其它主机更优先的更新(renew)租约,或是租用其它的 IP 地址。 动态分配显然比自动分配更加灵活,尤其是当您的实际 IP 地址不足的时候,例如:您是一家 ISP ,只能提供 200 个IP地址用来给拨接客户,但并不意味着您的客户最多只能有 200 个。因为要知道,您的客户们不可能全部同一时间上网的,除了他们各自的行为习惯的不同,也有可能是电话线路的限制。这样,您就可以将这 200 个地址,轮流的租用给拨接上来的客户使用了。这也是为什么当您查看 IP 地址的时候,会因每次拨接而不同的原因了(除非您申请的是一个固定 IP ,通常的 ISP 都可以满足这样的要求,这或许要另外收费)。当然,ISP 不一定使用 DHCP 来分配地址,但这个概念和使用 IP Pool 的原理是一样的。 DHCP 除了能动态的设定 IP 地址之外,还可以将一些 IP 保留下来给一些特殊用途的机器使用,它可以按照硬件地址来固定的分配 IP 地址,这样可以给您更大的设计空间。同时,DHCP 还可以帮客户端指定 router、netmask、DNS Server、WINS Server、等等项目,您在客户端上面,除了将 DHCP 选项打勾之外,几乎无需做任何的 IP 环境设定。

工作原理


根据客户端是否第一次登录网络,DHCP 的工作形式会有所不同。

第一次登录的时候:

寻找 Server
当 DHCP 客户端第一次登录网络的时候,也就是客户发现本机上没有任何 IP 数据设定,它会向网络发出一个 DHCP DISCOVER 封包。因为客户端还不知道自己属于哪一个网络,所以封包的来源地址会为 0.0.0.0 ,而目的地址则为 255.255.255.255 ,然后再附上 DHCP discover 的信息,向网络进行广播。 在 Windows 的预设情形下,DHCP discover 的等待时间预设为 1 秒,也就是当客户端将第一个 DHCP discover 封包送出去之后,在 1 秒之内没有得到响应的话,就会进行第二次 DHCP discover 广播。若一直得不到响应的情况下,客户端一共会有四次 DHCP discover 广播(包括第一次在内),除了第一次会等待 1 秒之外,其余三次的等待时间分别是 9、13、16 秒。如果都没有得到 DHCP 服务器的响应,客户端则会显示错误信息,宣告 DHCP discover 的失败。之后,基于使用者的选择,系统会继续在 5 分钟之后再重复一次 DHCP discover 的过程。

提供 IP 租用地址

当 DHCP 服务器监听到客户端发出的 DHCP discover 广播后,它会从那些还没有租出的地址范围内,选择最前面的空置 IP ,连同其它 TCP/IP 设定,响应给客户端一个 DHCP OFFER 封包。 由于客户端在开始的时候还没有 IP 地址,所以在其 DHCP discover 封包内会带有其 MAC 地址信息,并且有一个 XID 编号来辨别该封包,DHCP 服务器响应的 DHCP offer 封包则会根据这些资料传递给要求租约的客户。根据服务器端的设定,DHCP offer 封包会包含一个租约期限的信息。
  
接受 IP 租约

如果客户端收到网络上多台 DHCP 服务器的响应,只会挑选其中一个 DHCP offer 而已(通常是最先抵达的那个),并且会向网络发送一个DHCP request广播封包,告诉所有 DHCP 服务器它将指定接受哪一台服务器提供的 IP 地址。 同时,客户端还会向网络发送一个 ARP 封包,查询网络上面有没有其它机器使用该 IP 地址;如果发现该 IP 已经被占用,客户端则会送出一个 DHCPDECLIENT 封包给 DHCP 服务器,拒绝接受其 DHCP offer ,并重新发送 DHCP discover 信息。 事实上,并不是所有 DHCP 客户端都会无条件接受 DHCP 服务器的 offer ,尤其这些主机安装有其它 TCP/IP 相关的客户软件。客户端也可以用 DHCP request 向服务器提出 DHCP 选择,而这些选择会以不同的号码填写在 DHCP Option Field 里面。

租约确认

当 DHCP 服务器接收到客户端的 DHCP request 之后,会向客户端发出一个DHCPACK 响应,以确认 IP 租约的正式生效,也就结束了一个完整的 DHCP 工作过程。

DHCP 发放流程第一次登录之后: 一旦 DHCP 客户端成功地从服务器哪里取得 DHCP 租约之后,除非其租约已经失效并且 IP 地址也重新设定回 0.0.0.0 ,否则就无需再发送 DHCP discover 信息了,而会直接使用已经租用到的 IP 地址向之前之 DHCP 服务器发出 DHCP request 信息,DHCP 服务器会尽量让客户端使用原来的 IP 地址,如果没问题的话,直接响应 DHCPack 来确认则可。如果该地址已经失效或已经被其它机器使用了,服务器则会响应一个 DHCPNACK 封包给客户端,要求其重新执行 DHCP discover。 至于 IP 的租约期限却是非常考究的,并非如我们租房子那样简单, 以 NT 为例子:DHCP 客户端除了在开机的时候发出 DHCP request 请求之外,在租约期限一半的时候也会发出 DHCP request ,如果此时得不到 DHCP 服务器的确认的话,客户端还可以继续使用该 IP ;当租约期过了87.5%时,如果客户端仍然无法与当初的DHCP服务器联系上,它将与其它DHCP服务器通信。如果网络上再没有任何DHCP服务器在运行时,该客户端必须停止使用该IP地址,并从发送一个Dhcpdiscover数据包开始,再一次重复整个过程。要是您想退租,可以随时送出 DHCPRELEASE 命令解约,就算您的租约在前一秒钟才获得的。

跨网络的 DHCP 运作 从前面描述的过程中,我们不难发现:DHCP DISCOVER 是以广播方式进行的,其情形只能在同一网络之内进行,因为 router 是不会将广播传送出去的。但如果 DHCP 服务器安设在其它的网络上面呢?由于 DHCP 客户端还没有 IP 环境设定,所以也不知道 Router 地址,而且有些 Router 也不会将 DHCP 广播封包传递出去,因此这情形下 DHCP DISCOVER 是永远没办法抵达 DHCP 服务器那端的,当然也不会发生 OFFER 及其它动作了。要解决这个问题,我们可以用 DHCP Agent (或 DHCP Proxy )主机来接管客户的 DHCP 请求,然后将此请求传递给真正的 DHCP 服务器,然后将服务器的回复传给客户。这里,Proxy 主机必须自己具有路由能力,且能将双方的封包互传对方。 若不使用 Proxy,您也可以在每一个网络之中安装 DHCP 服务器,但这样的话,一来设备成本会增加,而且,管理上面也比较分散。当然喽,如果在一个十分大型的网络中,这样的均衡式架构还是可取的。视您的实际情况而定了。

DHCP术语

1、DHCP服务器:配置DHCP服务的计算机

2、DHCP客户端:启用DHCP设置的计算机

3、作用域:一个完整连续的可用IP地址范围,DHCP服务主要就是通过作用域来管理网络分布、IP地址分配及其他相关配置参数。

4、超级作用域:管理级的作用域集合,用于支持同一物理网络上的多个逻辑IP子网。超级作用域包含子作用域的列表,对子作用域进行统一管理。

5、排除范围:排除范围是作用域内从DHCP服务中排除的有限IP地址序列。排除范围确保在这些范围中的任何地址都不是由网络上的服务器提供给DHCP 客户机的。

6、地址池:在定义DHCP作用域并应用排除范围之后,剩余的地址在作用域内形成可用地址池,也就是作用域中包含的可用IP地址范围哈,地址池中的地址可以由DHCP服务器动态分配给DHCP客户机。

7、租约:客户计算机可以使用动态分配的IP地址的时间,这个时间可以由DHCP服务器设定哈。当向一台客户机发出租约后,此租约就被看作是活动的,在租约终止前,客户机可以向DHCP服务器更新其租约。当租约到期或被服务器删除后,它就变成不活动的了,租约持续时间决定了租约什么时候终止及客户机隔多久向DHCP服务器更新其租约。

8、预约:创建从DHCP服务器到客户机的永久地址租约指定,预约可以保证子网上的特定硬件设备总是使用相同的IP地址,这对于远程访问网关、DNS服务器等必须要配置IP地址的计算机非常有用。
选项类型:DHCP服务器向DHCP客户机提供租约服务时可以指定的其他客户机配置参数。典型地这些选项类型由各个作用域启用和配置。虽然大多数选项都是在RFC2132中预定义了,但若需要的话,我们还是可以使用DHCP管理器定义并添加自定义选项类型。

9、选项类别:DHCP服务用于进一步提供给客户机的选项类型的方法。选项类别可以在用户的DHCP服务器上配置以提供特定的客户机支持。当一个选项类别添加到服务器后,就可以为该类别的客户机配置提供特定类别的选项类型。
DHCP工作原理

我们来了解下DHCP的工作原理

(1)当DHCP客户机第一次登录网络时,如果客户机上没有任何IP信息设定,它会向网络发出DHCP DISCVER数据包,为保证服务器能够接收到请求,数据包源地址设定为0.0.0.0,而目的地址为255.255.255.255,以广播形式发送DHCP DISCOVER的信息。
(2)当DHCP服务器监听到客户端发出的DHCP DISCOVER广播后,它会从那些还没有租出的地址范围内选择可用的IP及其他TCP/IP设定以DHCP OFFER数据包的形式发送给客户机。
(3)如果客户端收到网络上多台DHCP服务器的响应,客户端会挑选最快的一个DHCP OFFER并向网络发送一个DHCP REQUEST广播封包,告诉所有DHCP服务器它将使用哪一台服务器提供的IP地址。同时,客户端还会向网络发送ARP广播数据包,查询网络上面有没有其他机器使用该IP地址,如果发现该IP地址已经被占用,客户端则会发送一个DHCP DECLINE数据包给DHCP服务器,拒绝接受其DHCP OFFER,并重新发送DHCP REQUEST信息。
注:实际上并不是所有DHCP客户端都会无条件接受DHCP服务器的响应,客户端可以保留自己的一些TCP/IP设定,比如网关、DNS地址等等。。。
(4)将地址分配给客户端后,DHCP服务器会发送一个DHCP ACK消息,以确认IP租约的正式生效,结束完整的DHCP工作过程。
(5)DHCP客户端成功地从服务器取得IP地址之后,一般不需要再发送DHCP DISCOVER信息了,除非其租约已经到期或者IP地址重新设定回0.0.0.0。此时客户端会直接使用已经租用到的IP地址向为其发此IP地址的DHCP服务器发出DHCP REQUEST信息,DHCP服务器会尽量让客户端使用原来的IP地址,如果没有特殊的情况,会直接响应DHCP ACK,允许客户端继续使用该IP地址。如果该地址已经失效或者已经被其他主机使用了,服务器则会响应一个DHCP NACK数据包给客户端,要求其重新执行DHCP DISCOVER。
注意:客户端执行DHCP DISCOVER后,如果没有DHCP服务器响应客户端的请求,客户端会随机使用169.254.0.0/16网段中的一个IP地址配置本机地址。

下面是华为交换机DHCP配置方法

操作步骤
全局启动DHCP服务。

<Huawei>system-view
Enter system view, return user view with Ctrl+Z.
[Huawei]dhcp enable

创建地址池并配置相关属性。
配置IP地址池10的属性(地址池范围、DNS地址、出口网关和地址池租期)。

[Huawei]ip pool 10
Info:It's successful to create an IP address pool.
[Huawei-ip-pool-10]network 172.16.10.0 mask 255.255.255.0
[Huawei-ip-pool-10]dns-list 114.114.114.114
[Huawei-ip-pool-10]gateway-list 172.16.10.1
[Huawei-ip-pool-10]lease day 10
[Huawei-ip-pool-10]quit

配置IP地址池20的属性(地址池范围、DNS地址、出口网关、NetBOIS地址和地址池租期)

[Huawei]ip pool 10
Info:It's successful to create an IP address pool.
[Huawei-ip-pool-20]network 172.16.20.0 mask 255.255.255.0
[Huawei-ip-pool-20]dns-list 114.114.114.114
[Huawei-ip-pool-20]gateway-list 172.16.20.1
[Huawei-ip-pool-20]lease day 10
[Huawei-ip-pool-20]quit

配置VLANIF接口下地址分配方式。
配置接口GE0/0/1和GE0/0/2分别加入相应的VLAN。

[Huawei]vlan batch 10 20
[Huawei]interface GigabitEthernet 0/0/1
[Huawei-GigabitEthernet0/0/1]port link-type access
[Huawei-GigabitEthernet0/0/1]port default vlan 10
[Huawei-GigabitEthernet0/0/1]quit
[Huawei]interface GigabitEthernet 0/0/2
[Huawei-GigabitEthernet0/0/2]port link-type access
[Huawei-GigabitEthernet0/0/2]port default vlan 20
[Huawei-GigabitEthernet0/0/2]quit

配置VLANIF10接口下的客户端从全局地址池中获取IP地址。

[Huawei]interface Vlanif 10
[Huawei-Vlanif10]ip address 172.16.10.1 24
[Huawei-Vlanif10]dhcp select global
[Huawei-Vlanif10]quit

配置VLANIF20接口下的客户端从全局地址池中获取IP地址。

[Huawei]interface Vlanif 20
[Huawei-Vlanif20]ip add 172.16.20.1 24
[Huawei-Vlanif20]dhcp select global
[Huawei-Vlanif20]quit

验证配置结果。
在Switch上使用display ip pool命令用来查看IP地址池配置情况。

[Huawei]display ip pool  -----------------------------------------------------------------------Pool-name      : 10Pool-No        : 0Position       : Local           Status           : UnlockedGateway-0      : 172.16.10.1    Mask           : 255.255.255.0VPN instance   : --
-----------------------------------------------------------------------Pool-name      : 20Pool-No        : 1Position       : Local           Status           : UnlockedGateway-0      : 172.16.20.1    Mask           : 255.255.255.0VPN instance   : --IP address StatisticTotal       :506   Used        :0          Idle        :506   Expired     :0          Conflict    :0          Disable   :0
[Huawei]

在客户端上验证是否成功

私有云落地解决方案之网络篇-关键技术-DHCP地址-1相关推荐

  1. 家庭云/私有云搭建系列之网络篇——“我们该如何通过网络连接自己的私有云设备” IPv4篇

    相信点进来看这篇文章的读者多少都使用过互联网也就是我们俗称的"上网/网上冲浪".  举个简单的例子,当你在百度上搜索一篇文章,那么此时你就已经完成了一次网上冲浪,即与服务器的交互! ...

  2. 利用Bdrive打造个人私有云存储解决方案

    Bdrive 一款私有云储存软件,可以自己方便的在 Mac/Windows 下架设服务器,并可以通过 PC.Mac.iOS.Android 跨平台使用.以下简单介绍一下利用Bdrive来完成个人私有云 ...

  3. 【复杂网络】用户画像不应脱离社会关系,谈复杂网络的关键技术和应用实践

    原文链接:http://www.sohu.com/a/119515569_470008 本文是11月17日大数据杂谈群分享的内容. 关注"大数据杂谈"公众号,点击"加群学 ...

  4. 【算力网络】算力网络的技术创新——网络基础设施关键技术

    本人就职于国际知名终端厂商,负责modem芯片研发. 在5G早期负责终端数据业务层.核心网相关的开发工作,目前牵头6G算力网络技术标准研究. 博客内容主要围绕:        5G协议讲解       ...

  5. 如何考量私有云的解决方案

    2016年是云计算发展的关键年份,国内外云服务商争相调整自身的战略,目光不再仅限于提供基础设施层面的服务:而云计算领域公有云.私有云和混合云三足鼎立成定局. 说到私有云,大家的第一反应可能会是这样的: ...

  6. 学芒云盘(学校私有云盘)-特色功能(私有云存储解决方案)

    学芒云盘是一款为学校定制开发的私有云盘资源管理系统,且web端.pc客户端.移动端数据实时同步.主要功能有pc客户端自动同步备份,批量上传多个文件,文件夹直接上传,文件及文件夹拖拽上传,文件秒传,文件 ...

  7. 载波聚合或双连接的方式进行_5G网络的关键技术有哪些

    5G网络技术主要分为三类:核心网.回传和前传网络.无线接入网. 核心网 核心网关键技术主要包括:网络功能虚拟化(NFV).软件定义网络(SDN).网络切片和多接入边缘计算(MEC). 1.网络功能虚拟 ...

  8. 网络爬虫关键技术分析与实现

    1搜索引擎的发展的历史 1990年以前,没有任何人能搜索互联网.所有搜索引擎的祖先,是1990年由Montreal的McGill University学生Alan Emtage,Peter Deuts ...

  9. 5G网络的关键技术及特点,面临的挑战!

    01  5G关键技术 超密集组网:5G需要满足热点高容量场景(高流量密度.高速率) 超密集组网:大量增加小基站,以空间换性能 基站一般包括:宏基站和小基站 宏基站:即"铁塔站",一 ...

最新文章

  1. Linux Shell编程 test命令
  2. What do you need at home?
  3. 利用Eclipse连接JDBC-(SQL Server2008)
  4. 基环树一些有趣的事情
  5. 局部页面切换url为什么不变_python爬虫 - 翻页url不变网页的爬虫探究
  6. Oracle dataguard一主两备环境搭建
  7. 和Hibernate3.6相比,Hibernate 5.x中的增删改性能降低了
  8. 保险的现金价值是什么意思?
  9. python面对对象计算矩形_python第九课 面向对象
  10. web调试代理工具Whistle
  11. 软件开发项目过程管理文档
  12. jQuery画廊插件-GalleryView
  13. 网络战争全面打响!究竟谁能更胜一筹?
  14. 微信公众号小程序开通方法_微信小程序发布审核大概要多久
  15. Django源码cookie解读:关于中文cookie会被吞掉并截断的问题。
  16. 单击Artwork时没有弹窗的问题
  17. select函数使用方法
  18. 【工具】笔记软件测评(简单)
  19. python下载酷狗音乐源码
  20. 【数据分析】python基础必修3—条件语句/运算符/真假值/循环/算法练习

热门文章

  1. MySQL表对账设计_对账系统设计
  2. python3爬虫之访问量、点击率数据的爬取分析
  3. 为硬件保留内存 问题的解决方法
  4. 19999 元的小米 MIX Alpha,有哪些亮点和不足?
  5. MySQL学习笔记(9)视图
  6. [开心学php100天]第三天:不羁的PHP文件操作
  7. kdevelop用法
  8. 恒玄BES调试笔记-BES2500如何设定超距回连时间
  9. 常数变易法的原理解释
  10. 办公室共享打印机怎么连接?