HCNA Routing&Switching之DHCP服务
前文我们了解了STP的端口状态、计时器以及端口状态切换和网络拓扑变化相关话题,回顾请参考https://www.cnblogs.com/qiuhom-1874/p/15140672.html;今天我们来聊一下DHCP相关话题;
DHCP(Dynamic Host Configure Protocol,动态主机配置协议)是应用层协议,使用UDP封装,服务端工作在UDP的67号端口,客户端工作在68号端口;它是BOOTP(Bootstrap Protocol)协议发展而来;主要作用是动态分配TCP/IP信息(ip地址,子网掩码,网关,DNS等等),分配出去的信息是由一个时间使用期限,这个期限我们叫租期;我们知道在大型网络环境中,会有大量的主机和设备需要获取ip地址等网络参数;如果采用手工配置,工作量大且容易出错,导致ip地址冲突;使用DHCP来分配ip地址等网络参数,可以极大减少网络管理员的工作量,同时也用户手动配置网络参数时导致的ip地址冲突等问题;

提示:主机A和主机B要动态获取ip地址等网络参数,首先它会向dhcp服务器发送ip地址分配的请求,服务收到请求,就分配ip地址,然后对应主机就会收到对应的ip地址等网络参数;
DHCP系统组成

提示:DHCP Client (客户端) ,需要动态获取ip地址的主机;DHCP Server(服务器)是能提供DHCP功能的服务器或网络设备;DHCP Relay (中继),一般为路由器或三层交换机等网络设备,中继设备的主要作用是arp代理和dhcp信息转发;
DHCP报文结构
先来看一个实验,如下拓扑主机A和主机B分别使用DHCP动态获取ip地址信息,我们抓包看看对应数据包长什么样?

配置s1

sys
sys s1
vlan batch 10 20
int eth0/0/1
p l a
p d v 10
int eth0/0/2
p l a
p d v 20
int eth0/0/3
p l t
p t a v 10 20

配置s2

sys
sys s2
vlan batch 10 20
dhcp en
int g0/0/1
p l t
p t a v 10 20
int vlanif 10
ip add 192.168.10.254 24
dhcp select interface
int vlanif 20
ip add 192.168.20.254 24
dhcp select interface

在pc1上开启dhcp,并在pc1上抓包


提示:可以看到在pc1开启dhcp以后,对应在pc上就能抓到4个DHCP的包;从上面的抓包信息可以看到,在pc1启动dhcp客户端时,首先它会发送DHCP discover包,该包的员源ip是0.0.0.0(原因是pc1目前没有ip地址)源端口是68,目标ip是255.255.255.255(全网广播),目标端口是67;这种类型的DHCP包主要作用是寻找DHCP服务端;如果有DHCP服务端收到此类消息,那么DHCP服务端会向该客户端发送DHCP offer类型的包,该包主要作用就是给客户端ip地址等网络参数信息;随后,客户端收到服务端的offer以后,又会广播发送dchp request类型的包,该类型包的主要作用是告诉其他服务端(可能不止一个服务端)有服务端给我发offer,你们发的offer我就不要了;除此之外,也告诉发offer服务端,我就要使用这个ip地址等网络信息;最后当服务端收到客户端发送的广播dhcp request包以后,服务端发送ACK,意思就是告诉客户端,服务端已经知晓这个事情,你把地址拿去使用吧;

DHCP报文类型

DHCP工作流程

提示:首先客户端发送DHCP discover类型的包,作用就是寻找DHCP服务端;如果有服务端响应客户端,此时服务端就会发送DHCPoffer类型的包,就是告诉客户端,我是DHCP服务端,我这里有ip地址等等信息;如果没有服务端响应客户端,则客户端会一直发送DHCP discover类型的包;当服务端响应客户端并发送DHCP offer 以后,对应客户端收到服务端发送的offer,此时客户端会发送DHCP request类型的包,其目的是告诉其他dhcp服务端,有服务端给我发offer,你们就不要再发送offer给我了;其次就是告诉服务端,我要用这个ip地址等网络信息;如果其他dhcp服务端收到此类消息,一看报文里的dhcp server identifier 不是自己的ip地址,此时该服务端就不会再回应客户端;只有报文里的dhcp server identifier 是自己ip地址的服务端会发送ack,表示确认客户端信息;
DHCP租期更新

提示:DHCP动态获取的IP 地址等网络信息是有租期的,华为默认是1天;这个租期还剩下50%时,客户端会想服务端请求续租;如果服务端收到,此时服务端就会恢复一个ack,表示同意续租;此后,该客户端的租期就会向后延续对应租期的一半;
实验:如下拓扑,我们把上述拓扑桥接在物理回环网卡上,然后把对应dhcp服务端租期修改为1分钟,在云上抓包,看看对应续租的过程

桥接cloud1到本地loop网卡

把s1的eth0/0/4口加入到vlan 20里

修改DHCP服务端的租期为1分钟

提示:租期最小单位是分钟,如果租期是day 0 hour 0 minute 0 表示无限期;
验证:查看loop网卡的是否获取到ip地址,看看租期是多少?

提示:可以看到对应物理loop网卡获取到对应的ip地址,并且租期也是一分钟;
在云上抓包

提示:可以看到在云上抓包,可以抓到很多dhcp requset和ack的包;这些包就是客户端向服务端申请续租的报文,每当租期还剩下租期的一半时,客户端就会向服务端发起续租请求,只有服务端回复确认ack,对应租期又会往后延期租期的一半;
验证:再次查看loop网卡的租期情况

提示:可以看到经过一段时间以后,租期结束时间从14:26:11变成了14:31:12,这意味着客户端续租了的;
DHCP重绑定

提示:如果在租期还剩下50%时,客户端向服务端发送续租请求,如果服务端没有响应,此时对于客户端来说,它的ip地址等网络信息还是可以正常使用的;如果租期还剩下租期的1/8时,如果此时还是没有服务端响应,此时客户端就会申请重新绑定ip地址;重新绑定ip地址,客户端又会发送dhcp discover报文,和最开始的流程一样;
IP地址释放

提示:如果ip租约到期前都没有服务端响应客户端的续租请求,客户端会停止使用此ip地址;如果DHCP客户端不再使用分配的ip地址,也可以主动向DHCP服务端发送DHCP RELEASE报文,告诉服务端释放该ip地址;这里注意一点主动释放ip地址是客户端告知服务端,让服务端做好记录对于ip地址已经释放,可再分配给其他客户端;服务端并不会发送什么报文给客户端;
DHCP地址池(Pool)
什么是地址池?所谓地址池就是所有能分配地址的集合;在DHCP中我们可以建立地址池,让DHCP客户端,在地址池中获取任意ip地址进行使用;

提示:接口地址池的优先级高于全局地址池;默认接口地址池会把对应接口地址当作网关信息发送给客户端;全局地址池一般用于对应网关不是自己接口地址的场景,比如专用的DHCP服务器;
DHCP配置命令
1、全局开启dhcp功能
[s2]dhcp en
Info: The operation may take a few seconds. Please wait for a moment.done.
[s2]
2、关联接口和接口地址池

提示:DHCP必须在三层接口上关联地址池;
3、配置接口地址池的DNS服务器地址

提示:dns可以是多个;
4、配置接口地址池的租期,默认1天

提示:租期最小时长单位为秒;配置永不过期就是0天0小时0秒;
5、配置接口地址池的排除地址范围

提示:如果要排除一个范围的ip地址,必须前边开始地址小于后面结束地址;该命令可以运行多次,如果排除单个ip地址,直接后面接ip地址即可;
6、创建全局地址池

7、配置全局地址池的可分配的网段地址

8、配置全局地址池的网关地址

9、配置全局地址池的DNS服务器地址

10、配置全局地址池下的租期,默认1天

11、配置全局地址池下的排除地址范围

12、关联接口和全局地址池

提示:对应三层接口必须要有一个同dhcp分配地址里同网段的地址;否则对应三层接口起不来;
13、查看地址池的属性

提示:该命令用于查看一个设备上的所有地址池信息,不区分接口地址池和全局地址池;
14、查看指定接口地址池信息

查看指定全局地址池信息

提示:不管是查看接口地址池还是全局地址池,后面都可以跟过滤条件,如下

提示:如果后面接一个ip地址,是用于查询对应地址所属地址池相关信息;all表示显示对应地址池所有ip地址分配情况;expired用于过滤过期的ip地址,used用于过滤已经使用的ip地址;conflict用于过滤冲突的ip地址;
15、在接口地址池下静态绑定ip地址

提示:后面的mac地址必须是4位一组;这样绑定以后,对应mac地址的设备来拿ip,此时就会把对于ip地址分配出去况且没有租期限制;
16、在全局地址池下静态绑定ip地址

HCNA Routing&Switching之DHCP服务的更多相关文章
- HCNA Routing&Switching之访问控制列表ACL
前文我们了解了DHCP服务相关话题,回顾请参考https://www.cnblogs.com/qiuhom-1874/p/15147870.html:今天我们来聊一聊访问控制列表ACL: ACL(ac ...
- HCNP Routing&Switching之DHCP中继
前文我们聊了下BFD相关话题,回顾请参考https://www.cnblogs.com/qiuhom-1874/p/16487842.html:今天来聊一聊DHCP中继相关话题: DHCP的作用 DH ...
- HCNP Routing&Switching之DHCP安全
前文我们了解了MAC地址防漂移技术,回顾请参考https://www.cnblogs.com/qiuhom-1874/p/16632239.html:今天我们来了解下DHCP安全相关话题: 回顾DHC ...
- HCNA Routing&Switching之PPPoE协议
前文我们了解了广域网中的HDLC和PPP协议相关话题,回顾请参考https://www.cnblogs.com/qiuhom-1874/p/15174240.html:今天我们来聊一聊PPPoE协议相 ...
- HCNA Routing&Switching之动态路由协议RIP
前文我们了解了动态路由的基本概念,以及动态路由和静态路由的区别,优缺点,动态路由的分类,回顾请参考https://www.cnblogs.com/qiuhom-1874/p/14995317.html ...
- HCNA Routing&Switching之静态路由
前文我们聊到了路由的相关概念和路由基础方面的话题,回顾请参考https://www.cnblogs.com/qiuhom-1874/p/14947897.html:今天我们聊聊静态路由相关话题: 回顾 ...
- HCNA Routing&Switching之路由基础
在开始聊路由之前,我们首先要明白在网络通讯里,什么是路由?什么是路由表.路由器以及网关的相关术语:路由简单讲就是指网络数据包从源头到目标的路径,主要用来为不同网络间通讯提供数据包转发依据:路由表就是多 ...
- HCNA Routing&Switching之地址转换技术NAT
前文我们了解了包过滤工具ACL相关话题,回顾请参考https://www.cnblogs.com/qiuhom-1874/p/15156308.html:今天我们来聊一聊地址转换技术NAT相关话题: ...
- HCNA Routing&Switching之动态路由基本概念
前文我们了解了静态路由的相关话题,回顾请参考https://www.cnblogs.com/qiuhom-1874/p/14965433.html:今天我们来聊一聊动态路由相关概念: 首先我们要清楚什 ...
随机推荐
- hdu 6050 Funny Function 矩阵快速幂
就算告诉我是矩阵快速幂我也推不出递推式呀!!! 官方题解: 对于任意i>=1,当j>=3时,有通过归纳法可以得到 进而推导出 后来自己重新推导了一遍 #include <iostre ...
- sonarqube 8.9版本配置收邮件提醒
# admin登陆系统后,进入我的账户(每个用户的配置过程类似) sonarqube 8.9版本配置发信请参考我的另一篇博文: 链接如下: https://www.cnblogs.com/cndevo ...
- Collections中的实用方法
总结一下java.util.Collections类内部的静态方法. checkedCollection(Collection<T> , Class<T> type) chec ...
- Docker:Linux离线安装docker-17.03.2-ce,配置开机自启
1. 准备docker离线包 docker官方离线包下载地址 下载需要安装的docker版本,我此次下载的是:docker-17.03.2-ce.tgz 2. 准备docker.service 系统配 ...
- Nacos配置中心功能
目录 Nacos的配置管理模型 命名空间(Namespace) 配置分组(Group) 配置集(Data ID) 配置项 一个最佳实践 命名空间管理 配置管理 参考 Nacos的配置管理模型 对于Na ...
- Kubernetes全栈架构师(二进制高可用安装k8s集群扩展篇)--学习笔记
目录 二进制Metrics&Dashboard安装 二进制高可用集群可用性验证 生产环境k8s集群关键性配置 Bootstrapping: Kubelet启动过程 Bootstrapping: ...
- asp.net web.config数据库连接字符串加密与解密
在WEB网站开发过程中,如果我们将数据库连接字符串封装到.DLL文件中,将会给数据库和程序的迁移带来麻烦,因为万一服务器地址或者数据库发生变更,那么我们就不得不修改源程序并重新将其编译.最好的解决方法 ...
- Rust安装-运行第一个程序-hello_world
Rust官网:https://rust-lang.org/ 安装 点击install,选择版本 选择相对应的版本进行下载 我这里下载的是windows系统,运行下载好的exe文件,根据需要选择选对应的 ...
- Docker与k8s的恩怨情仇(五)——Kubernetes的创新
转载请注明出处:葡萄城官网,葡萄城为开发者提供专业的开发工具.解决方案和服务,赋能开发者. 上节中我们提到了社区生态的发展使得Kubernetes得到了良性的发展和传播.比起相对封闭的Docker社区 ...
- 【学习笔记】pytorch中squeeze()和unsqueeze()函数介绍
squeeze用来减少维度, unsqueeze用来增加维度 具体可见下方博客. pytorch中squeeze和unsqueeze