前文我们了解了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地址