1.DHCP服务器给首次接入网络的客户端分配网络参数的工作原理

只有跟DHCP客户端在同一个网段的DHCP服务器才能收到DHCP客户端广播的DHCP DISCOVER报文。当DHCP客户端与DHCP服务器不在同一个网段时,必须部署DHCP中继来转发DHCP客户端和DHCP服务器之间的DHCP报文。

1)无中继场景时DHCP客户端首次接入网络的工作原理

在没有部署DHCP中继的场景下,首次接入网络DHCP客户端与DHCP服务器的报文交互过程,该过程称为DHCP报文四步交互

第一步:发现阶段

首次接入网络的DHCP客户端不知道DHCP服务器的IP地址,为了学习到DHCP服务器的IP地址,DHCP客户端以广播方式发送DHCP DISCOVER报文(目的IP地址为4个255)给同一网段内的所有设备(包括DHCP服务器或中继)。

DHCP DISCOVER报文中携带了客户端的MAC地址(chaddr字段)、需要请求的参数列表选项(Option55)、广播标志位(flags字段)等信息。

第二步:提供阶段

与DHCP客户端位于同一网段的DHCP服务器都会接收到DHCP DISCOVER报文,DHCP服务器选择跟接收DHCP DISCOVER报文接口的IP地址处于同一网段的地址池,

并且从中选择一个可用的IP地址,然后通过DHCP OFFER报文发送给DHCP客户端。

通常,DHCP服务器的地址池中会指定IP地址的租期,如果DHCP客户端发送的DHCP DISCOVER报文中携带了期望租期,服务器会将客户端请求的期望租期与其指定的租期进行比较,选择其中时间较短的租期分配给客户端。

  DHCP服务器在地址池中为客户端分配IP地址的顺序如下:

1.DHCP服务器上已配置的与客户端MAC地址静态绑定的IP地址。

2.客户端发送的DHCP DISCOVER报文中Option55(请求IP地址选项)指定的地址。

3.地址池内查找“Expired”状态的IP地址,即曾经分配给客户端的超过租期的IP地址。

4.在地址池内随机查找一个“Idle”状态的IP地址。(V200R008C30及之前版本,按照IP地址从大到小的顺序查找)

5.如果未找到可供分配的IP地址,则地址池依次自动回收超过租期的(“Expired”状态)和处于冲突状态(“Conflict”状态)的IP地址。回收后如果找到可用的IP地址,则进行分配;

否则,DHCP客户端等待应答超时后,重新发送DHCP DISCOVER报文来申请IP地址。

为了防止分配出去的IP地址跟网络中其他客户端的IP地址冲突,DHCP服务器在发送DHCP OFFER报文前通过发送源地址为DHCP服务器IP地址、目的地址为预分配出去IP地址的ICMP ECHO REQUEST报文对分配的IP地址进行冲突探测。

如果在指定的时间内没有收到应答报文,表示网络中没有客户端使用这个IP地址,可以分配给客户端;如果指定时间内收到应答报文,表示网络中已经存在使用此IP地址的客户端,则把此地址列为冲突地址,

然后等待重新接收到DHCP DISCOVER报文后按照前面介绍的选择IP地址的优先顺序重新选择可用的IP地址。

此阶段DHCP服务器分配给客户端的IP地址不一定是最终确定使用的IP地址,因为DHCP OFFER报文发送给客户端等待16秒后如果没有收到客户端的响应,此地址就可以继续分配给其他客户端。

通过下面的选择阶段和确认阶段后才能最终确定客户端可以使用的IP地址。

第三步:选择阶段

如果有多个DHCP服务器向DHCP客户端回应DHCP OFFER报文,则DHCP客户端一般只接收第一个收到的DHCP OFFER报文,然后以广播方式发送DHCP REQUEST报文,该报文中包含客户端想选择的

DHCP服务器标识符(即Option54)和客户端IP地址(即Option50,填充了接收的DHCP OFFER报文中yiaddr字段的IP地址)。

DHCP客户端广播发送DHCP REQUEST报文通知所有的DHCP服务器,它将选择某个DHCP服务器提供的IP地址,其他DHCP服务器可以重新将曾经分配给客户端的IP地址分配给其他客户端。

第四步:确认阶段

当DHCP服务器收到DHCP客户端发送的DHCP REQUEST报文后,DHCP服务器回应DHCP ACK报文,表示DHCP REQUEST报文中请求的IP地址(Option50填充的)分配给客户端使用。

DHCP客户端收到DHCP ACK报文,会广播发送免费ARP报文,探测本网段是否有其他终端使用服务器分配的IP地址,如果在指定时间内没有收到回应,表示客户端可以使用此地址。如果收到了回应,说明有其他终端使用了此地址,

客户端会向服务器发送DHCP DECLINE报文,并重新向服务器请求IP地址,同时,服务器会将此地址列为冲突地址。当服务器没有空闲地址可分配时,再选择冲突地址进行分配,尽量减少分配出去的地址冲突。

当DHCP服务器收到DHCP客户端发送的DHCP REQUEST报文后,如果DHCP服务器由于某些原因(例如协商出错或者由于发送REQUEST过慢导致服务器已经把此地址分配给其他客户端)无法分配

DHCP REQUEST报文中Option50填充的IP地址,则发送DHCP NAK报文作为应答,通知DHCP客户端无法分配此IP地址。DHCP客户端需要重新发送DHCP DISCOVER报文来申请新的IP地址。

2)有中继场景时DHCP客户端首次接入网络的工作原理

有DHCP中继的场景中,首次接入网络的DHCP客户端和DHCP服务器的工作原理与无中继场景时DHCP客户端首次接入网络的工作原理相同。

主要差异是DHCP中继在DHCP服务器和DHCP客户端之间转发DHCP报文,以保证DHCP服务器和DHCP客户端可以正常交互。

第一步:发现阶段

DHCP中继接收到DHCP客户端广播发送的DHCP DISCOVER报文后,进行如下处理:

检查DHCP报文中的hops字段,如果大于16,则丢弃DHCP报文;否则,将hops字段加1(表明经过一次DHCP中继),并继续下面的操作。

检查DHCP报文中的giaddr字段。如果是0,将giaddr字段设置为接收DHCP DISCOVER报文的接口IP地址。如果不是0,则不修改该字段,继续下面的操作。

将DHCP报文的目的IP地址改为DHCP服务器或下一跳中继的IP地址,源地址改为中继连接客户端的接口地址,通过路由转发将DHCP报文单播发送到DHCP服务器或下一跳中继。

如果DHCP客户端与DHCP服务器之间存在多个DHCP中继,后面的中继接收到DHCP DISCOVER报文的处理流程同前面所述。

第二步:提供阶段

DHCP服务器接收到DHCP DISCOVER报文后,选择与报文中giaddr字段为同一网段的地址池,并为客户端分配IP地址等参数,然后向giaddr字段标识的DHCP中继单播发送DHCP OFFER报文。

DHCP中继收到DHCP OFFER报文后,会进行如下处理:

检查报文中的giaddr字段,如果不是接口的地址,则丢弃该报文;否则,继续下面的操作。

DHCP中继检查报文的广播标志位。如果广播标志位为1,则将DHCP OFFER报文广播发送给DHCP客户端;否则将DHCP OFFER报文单播发送给DHCP客户端。

第三步:选择阶段

中继接收到来自客户端的DHCP REQUEST报文的处理过程同“第三步:选择阶段”。

第四步:确认阶段

中继接收到来自服务器的DHCP ACK报文的处理过程同“第四步:确认阶段”。

2.DHCP客户端重用曾经使用过的地址的工作原理

DHCP客户端非首次接入网络时,可以重用曾经使用过的地址。如图所示,DHCP客户端与DHCP服务器交互DHCP报文,以重新获取之前使用的IP地址等网络参数,该过程称为两步交互。

第一步:选择阶段

客户端广播发送包含前一次分配的IP地址的DHCP REQUEST报文,报文中的Option50(请求的IP地址选项)字段填入曾经使用过的IP地址。

第二步:确认阶段

DHCP服务器收到DHCP REQUEST报文后,根据DHCP REQUEST报文中携带的MAC地址来查找有没有相应的租约记录,如果有则返回DHCP ACK报文,通知DHCP客户端可以继续使用这个IP地址。

否则,保持沉默,等待客户端重新发送DHCP DISCOVER报文请求新的IP地址。

3. DHCP客户端更新租期的工作原理

 

当租期达到50%(T1)时,DHCP客户端会自动以单播的方式向DHCP服务器发送DHCP REQUEST报文,请求更新IP地址租期。如果收到DHCP服务器回应的DHCP ACK报文,则租期更新成功(即租期从0开始计算);

如果收到DHCP NAK报文,则重新发送DHCP DISCOVER报文请求新的IP地址。

当租期达到87.5%(T2)时,如果仍未收到DHCP服务器的应答,DHCP客户端会自动以广播的方式向DHCP服务器发送DHCP REQUEST报文,请求更新IP地址租期。

如果收到DHCP服务器回应的DHCP ACK报文,则租期更新成功(即租期从0开始计算);

如果收到DHCP NAK报文,则重新发送DHCP DISCOVER报文请求新的IP地址。

如果租期时间到时都没有收到服务器的回应,客户端停止使用此IP地址,重新发送DHCP DISCOVER报文请求新的IP地址。

客户端在租期时间到之前,如果用户不想使用分配的IP地址(例如客户端网络位置需要变更),会触发DHCP客户端向DHCP服务器发送DHCP RELEASE报文,通知DHCP服务器释放IP地址的租期。

DHCP服务器会保留这个DHCP客户端的配置信息,将IP地址列为曾经分配过的IP地址中,以便后续重新分配给该客户端或其他客户端。客户端可以通过发送DHCP INFORM报文向服务器请求更新配置信息。

4.1) 如何保证DHCP客户端选择正确的DHCP服务器?

由于DHCP客户端发送的请求报文(DHCP DISCOVER报文)是广播的,如果同一网段内存在多个DHCP服务器(例如,私自部署的DHCP服务器等),可能会导致客户端从错误的服务器申请IP地址。

通过配置DHCP Snooping功能,使客户端仅从信任的DHCP服务器接收DHCP报文,从而保证客户端从正确的服务器获取IP地址。

2)接口上同时使能DHCP服务器功能和DHCP中继功能时,优先处理哪个流程?

接口上同时使能DHCP服务器功能和DHCP中继功能时,优先处理DHCP服务器的流程,也就是优先使用本地DHCP服务器(即与接口IP地址同网段的DHCP服务器)分配IP地址。

当本地服务器无法分配IP地址时,再通过DHCP中继使用远端服务器分配IP地址。

3.DHCP原理的更多相关文章

  1. Linux DHCP原理

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

  2. DHCP原理

    一台主机的ip地址可用通过两种方式来设置.1 手动输入:2 自动向DHCP服务器获取.手动输入会出现错误,比如输入一个已经分配的ip地址,当内网机器只有几台,十几台还可以忍受,如果是几百台呢,不可能一 ...

  3. DHCP原理及报文格式

    DHCP原理及报文格式 DHCP(Dynamic Host Configuration Protocol,动态主机配置协议)是IETF为实现IP的自动配置而设计的协议,它可以为客户机自动分配IP地址. ...

  4. 第十九章 DHCP原理介绍

    一.为什么使用DHCP 1.手动为局域网中大量主机配置IP地址.掩码.网关等参数的工作繁琐,容易出错 2.DHCP可以自动为局域网中主机完成TCP/IP协议配置 3.DHCP自动配置避免了IP地址冲突 ...

  5. DHCP原理于配置

    DHCP原理于配置                      一.DHCP服务                       1)使用DHCP的好处                       2)DH ...

  6. DHCP原理与LINUX下的配置

    DHCP原理与LINUX下的配置 目录 DHCP原理与LINUX下的配置 一.DHCP工作原理 1.DHCP概述 2.DHCP的优势 3.DHCP的分配方式 (1)自动分配 (2)手动分配 (3)动态 ...

  7. 网络初级篇之DHCP原理与配置(原理与实验)

    一.什么是DHCP DHCP(Dynamic Host Configuration Protocol,动态主机配置协议)通常被应用在大型的局域网络环境中,主要作用是集中的管理.分配IP地址,使网络环境 ...

  8. DHCP原理及配置

    DHCP工作原理 集中的管理.分配IP地址,使client动态的获得IP地址.Gateway地址.DNS服务器地址等信息,并能够提升地址的使用率. 简单来说,DHCP就是一个不需要账号密码登录的.自动 ...

  9. [DHCP服务]——一个验证DHCP原理实验(VMware)

    大致实验拓扑图 DHCP Server端的配置 1. 安装DHCP # yum -y install dhcp 2. 拷贝配置文件 # /dhcpd.conf.sample /etc/dhcp/dhc ...

随机推荐

  1. VRP CommandLines

    <> 用户视图 通过 system-view 进入系统视图 [] 系统视图 通过interface 0/0/0 进入接口视图 CTRL+Z 返回用户视图 CTRL+A 把光标移动到当前命令 ...

  2. ORA-39700: database must be opened with UPGRADE option【转】

    1. 错误 数据库升级后(从11.2.0.1升级到11.2.0.4)启动报错 SQL> startup ORACLE instance started.   Total System Globa ...

  3. springboot异常处理之404

    ps: 推荐一下本人的通用后台管理项目crowd-admin 以及newbee-mall增强版,喜欢的话给个star就好 源码分析 在springboot中默认有一个异常处理器接口ErrorConto ...

  4. 容器编排系统K8s之crd资源

    前文我们了解了k8s节点污点和pod的对节点污点容忍度相关话题,回顾请参考:https://www.cnblogs.com/qiuhom-1874/p/14255486.html:今天我们来聊一下扩展 ...

  5. 【JavaWeb】Cookie&Session

    Cookie&Session Cookie 什么是 Cookie Cookie 即饼干的意思 Cookie 是服务器通知客户端保存键值对的一种技术 客户端有了 Cookie 后,每次请求都发送 ...

  6. Docker学习笔记之查看Docker

    命令: 使用history命令查看镜像历史 使用cp命令复制容器中的文件到主机 使用commit命令把修改过的容器创建为镜像 使用diff命令检查容器文件的修改 使用inspect命令查看容器/镜像详 ...

  7. zabbix的汉化

    1.在windows中找一个自己喜欢的字体(C:\Windows\Fonts)或者去网上下载一个 2.将字体上传到zabbix的web相关目录的fonts目录下 (我的zabbix的web相关的文件都 ...

  8. 【Oracle】add_months()函数介绍

    add_months 函数主要是对日期函数进行操作,举例子进行说明 add_months 有两个参数,第一个参数是日期,第二个参数是对日期进行加减的数字(以月为单位的) 如:3个月以后的时间,可以用下 ...

  9. 02--Docker配置阿里云镜像加速器

    1.登录阿里云控制台,在产品与服务中收索 "容器镜像服务" 2.点击镜像加速器,CentOS 3.在路径 /etc/docker/daemon.json 下配置加速器地址 4.重新 ...

  10. [Usaco2009 Feb]Revamping Trails 道路升级

    题目描述 每天,农夫John需要经过一些道路去检查牛棚N里面的牛. 农场上有M(1<=M<=50,000)条双向泥土道路,编号为1..M. 道路i连接牛棚P1_i和P2_i (1 < ...