• 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
    View Code

      配置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
    View Code

      在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地址

    作者:Linux-1874
    本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利.
  • 相关阅读:
    mysql内置函数,在mysql里面利用str_to_date()把字符串转换为日期格式
    异步httpclient(httpasyncclient)的使用与总结
    spring中Constructor、@Autowired、@PostConstruct的顺序
    面试再问值传递与引用传递,把这篇文章砸给他!
    java float double bigdecimal
    XSD详解一
    Springboot中使用Xstream进行XML与Bean 相互转换
    lombok标签之@Data @AllArgsConstructor @@NoArgsConstructor -如何去除get,set方法。@Data注解和如何使用,lombok
    Spring标签之Bean @Scope
    spring 注解 之 AOP基于@Aspect的AOP配置
  • 原文地址:https://www.cnblogs.com/qiuhom-1874/p/15147870.html
Copyright © 2020-2023  润新知