29-应用层,DHCP协议


1.DHCP的技术背景 终端设备,如pc、手机等,需要联网; 联网需要给网卡配置ip地址; ip地址的配置有两种方式:静态、动态; 为了方便,经常使用动态方式配置ip地址; 动态ip地址就来自于DHCP协议;   查看交换机ip地址信息的命令:
dis ip pool
可以看到:     交换机提供了1265个理论上可分配的地址;         计算方式:子网掩码=24,有254个可用地址(0~255共256个ip地址,首尾两个地址不可用【网络地址和广播地址】,1~254,共254个地址);         交换机有5个vlan,每个vlan都有254个可用地址; 254 * 5 = 1270个可用地址;         每个vlan各需要一个网关地址(也就是说作为网关的交换机自己也得分配一个该网段的地址),可用地址 = 1270 - 5 = 1265 ;     使用了44个地址;     剩余723个地址;     过期209个;     冲突2个;     禁用了496个地址;   查看三层交换机可以分配的地址:
dis ip pool interface vlanif108
    2.DHCP:Dynamic Host Configure Protocol 动态主机配置协议
  • 从BOOTP(Bootstrap Protocol)协议发展而来(DHCP是基于BOOTP的,抓包时用BOOTP为关键字过滤来找到DHCP的包)
  • UDP封装,服务器使用端口67,客户端使用端口68
  • 动态分配网络信息(IP地址、子网掩码、网关、DNS服务器等)
  • 分配给客户端的网络信息是有租约的
  1)关于租约 租约是从小到大的累计的; 如图:地址192.168.108.200快过期了,因为租期是1天=86400s,这个地址从拿到开始共使用了81282s,距租期到期只有几千s了;     windows系统的pc查看租约:
ipconfig /all
  也可以在网络连接详细信息中看到:   2)DHCP角色组成 0
DHCP Cilent  客户端 请求网络信息的用户
DHCP Server 服务器 能够提供DHCP功能的设备
DHCP Relay  中继 一般为路由器或三层交换机等设备
DHCP是通过广播发送的; DHCP客户端和服务端可能不属于同一个广播域,导致服务端收不到; 因此需要通过DHCP中继转发;   终端设备可以通过DHCP服务器获取ip地址; 家庭网络经常使用网关路由器作为DHCP服务器; 0   3)开启DHCP DHCP是应用层协议,基于UDP协议; DHCP服务提供在三层接口上;要开启DHCP服务需要在三层接口上输入命令;
dhcp enable        #交换机允许DHCP
sys
int vlanif 10      #进入交换机的三层接口  
dhcp select interface    #开启DHCP
    3.DHCP报文 1)抓包 将终端设备的地址配置成DHCP时,可以用wireshark抓到DHCP的包;(用BOOTP为关键字过滤)   DHCP数据包的类型:
报文类型 备注
DHCP Discover 发现 客户端寻找DHCP服务器
DHCP Office 提供 服务器响应DHCP Discover报文,该报文也携带了网络信息(地址、网关、掩码、租期)
DHCP Request 请求 客户端请求服务器对网络信息确认,或者续约租期
DHCP ACK 确认 服务器对DHCP Request报文确认响应
DHCP NAK 不确认 服务器对DHCP Request报文的拒接响应
DHCP Release 释放 客户端释放网络信息通知服务器
2)数据包结构 0   0     4.DHCP工作流程: 1)工作流程 终端设备通过DHCP协议得到ip地址时,必然会经历4个过程:     1】主机A发送DHCP Discover广播(主机A:我要ip地址,谁有);     2】DHCP服务器收到广播后,给主机A回复一条DHCP Offer包;(DHCP服务器:我有,这是ip地址的信息,地址、掩码、租期等)     3】主机A收到DHCP Offer包后,发送DHCP Request广播,用来请求使用DHCP服务器提供的ip地址;(主机A:这个地址我要了)     4】DHCP服务器收到广播后,给主机A发送一条DHCP ACK包,用来确认主机A的请求;(DHCP服务器:成交,这地址给你了) 0 注:Offer和ACK报文也可以说是广播包,因为服务器只是根据MAC地址回应,根本没有看三层         (这时主机A还没ip地址,三层ip协议头中封装的目标地址是服务器提供的地址;在ACK确认之后才是真正的使用地址)   2)为何终端设备发送的DHCP包是广播:     可能有多个DHCP服务器;     主机A发送DHCP Discover包后,可能收到多个DHCP服务器的DHCP Offer;     A会选择其中一个服务器提供的ip地址,选取规则是先到先得;     然后A给所有的服务器发送DHCP Request,告诉这些服务器,我选了服务器1的ip地址,其它的地址不要了;(其它服务器就知道了自己提供的地址没被需求,因可以把这个地址提供给别人)     DHCP 服务器提供的 DHCP Offer 、DHCP ACK可能是单播,也可能是广播,根据平台环境决定;   3)安全隐患:     1】伪造DHCP服务器         2】饿死攻击    ->不停给DHCP服务器发DHCP Discover,并且不给DHCP服务器发DHCP Request,导致DHCP服务器提供的地址全部被占用;   4)DHCP Release包 如果不想要ip地址了,可以退掉; 退掉ip地址的命令:
ipconfig /release
  此时抓包,可以看到终端设备给DHCP服务器发送的DHCP Release包:(终端设备告诉DHCP服务器:这个ip地址我不要了还给你,地址的信息是xxx) DHCP服务器收到后,修改该地址的状态(这个地址没使用了,可以分配给其它人)   5)DHCP NAK包 DHCP服务器对DHCP Request的拒绝; NAK报文出现:     1.IP地址可能已经被使用     2.租期未到网络信息还存在,换了DHCP服务器 (请求续约,但是服务器根本不存在该网络信息)      5.DHCP租期更新 1)租期相关字段  在DHCP包中,有租期相关的字段;     Lease Time    ->租期,表示地址多久过期;     Rebinding Time    ->重绑定时间,表示续租失败的情况下,多久发广播重新绑定ip地州;     Renewal Time    ->续租时间,表示过多久之后给DHCP服务器发续租请求; (是租期的一半)    0   2)续租流程 在租期时间过50%后,主机会自动发送DHCP Request报文请求DHCP服务器重新续租; 如果DHCP服务器在,就会回一条DHCP ACK; 0     可以配置租期:(在三层交换机的接口)
sys
int vlanif 10
dhcp server lease day 10 hour 1 minute 1    #将租期改为10天1小时1分钟,最小单位是分
dhcp server lease unlimited    #将租期改为无限,无限 = 2的32次方 - 1 = 4294967295秒
   3)DHCP重绑定 在租期时间过50%一直请求服务器,如果服务器在会发送一条DHCP ACK; 如果服务器不在,也就是DHCP服务器没响应时;客户端在87.5%租期时会发送DHCP Request报文请求所有DHCP服务器分配网络信息 (注:是以广播的形式发送) 0   4)自动保留IP 无法获取到DHCP服务器分配的网络信息时,Windows客户端会自动使用169.254.0.0/16地址,供临时通信 0      6.DHCP地址池
  • 所分配地址的集合
 
  • 地址池有两种:
    • 接口地址池  
    • 全局地址池  
  • 同时配置,接口地址池生效
  接口地址池:     如图,网关路由器作为DHCP服务器;     主机A给DHCP服务器的左接口发送DHCP请求,DHCP服务器(这里是网关路由器)就给主机A分配其左接口所在网段的地址; 0   全局地址池:     如图,DHCP服务器不作为网关时;     设备向DHCP服务器请求地址,DHCP服务器就不能将自己接口所在网段的地址分给设备;     需要分配的设备网关所在网段的地址;     这时就需要使用全局地址池;       7.DHCP配置:
命令 备注
Dhcp enable 开启DHCP功能
 dhcp selcet interface 地址池关联接口(在三层接口配置vlanif、路由器接口)
 dhcp server dns-list 114.114.114.114 223.5.5.5 配置接口地址池的DNS服务器
 dhcp server lease day 1 hour 12  配置接口地址池的租期,默认1天
 dhcp server excluded-ip-address 192.168.10.100 配置接口地址池排除的地址
 dhcp server static-bind-ip-address 192.168.10.100 mac-address 0000.0000.0001 配置静态绑定
 dhcp select global 关联接口和全局地址池绑定
 dhcp select relay 关联接口开启中继代理
 dhcp relay server-ip 192.168.10.254 指定DHCP服务器的地址
 display ip pool interface vlanif10 验证接口地址池的信息
 display ip pool name huawei used 验证全局地址池的信息