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角色组成
DHCP Cilent 客户端
|
请求网络信息的用户
|
DHCP Server 服务器
|
能够提供DHCP功能的设备
|
DHCP Relay 中继
|
一般为路由器或三层交换机等设备
|
DHCP是通过广播发送的;
DHCP客户端和服务端可能不属于同一个广播域,导致服务端收不到;
因此需要通过DHCP中继转发;
终端设备可以通过DHCP服务器获取ip地址;
家庭网络经常使用网关路由器作为DHCP服务器;

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)数据包结构
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服务器:成交,这地址给你了)

注: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服务器发续租请求; (是租期的一半)

2)续租流程
在租期时间过50%后,主机会自动发送DHCP Request报文请求DHCP服务器重新续租;
如果DHCP服务器在,就会回一条DHCP ACK;

可以配置租期:(在三层交换机的接口)
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服务器分配网络信息 (注:是以广播的形式发送)

4)自动保留IP
无法获取到DHCP服务器分配的网络信息时,Windows客户端会自动使用169.254.0.0/16地址,供临时通信
6.DHCP地址池
接口地址池:
如图,网关路由器作为DHCP服务器;
主机A给DHCP服务器的左接口发送DHCP请求,DHCP服务器(这里是网关路由器)就给主机A分配其左接口所在网段的地址;

全局地址池:
如图,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
|
验证全局地址池的信息
|