概述
IETF于1993年发布了DHCP(Dynamic Host Configuration Protocol,动态主机配置协议)。DHCP实现了网络参数配置的自动化,降低客户端的配置和维护成本。
DHCP采用C/S(Client/Server,客户端/服务器)通信模式,协议报文基于UDP的方式进行交互,采用67(DHCP服务器)和68(DHCP客户端)两个端口号。
相关命令
开启DHCP功能
[R1]dhcp enable
创建全局DHCP地址池
[R1]ip pool dhcp1
配置全局DHCP地址池范围
[R1-ip-pool-dhcp1]network 192.168.1.0 mask 24
配置全局DHCP网关
[R1-ip-pool-dhcp1]gateway-list 192.168.1.254
配置全局DHCP地址池中不参与分配的地址范围
[R1-ip-pool-dhcp1]excluded-ip-address 192.168.1.1 192.168.1.99
[R1-ip-pool-dhcp1]excluded-ip-address 192.168.1.201 192.168.1.253
配置全局DHCP可分配地址范围中为指定客户端分配固定IP地址
[R1-ip-pool-dhcp1]static-bind ip-address 192.168.1.101 mac-address 5489-987d-4e8f
在接口下应用全局DHCP配置
[R1-GigabitEthernet0/0/0]dhcp select global
在接口下启用接口的DHCP配置
[R1-GigabitEthernet0/0/1]dhcp select interface
配置接口DHCP地址池范围和网关
[R1-GigabitEthernet0/0/1]ip address 192.168.1.254 24
配置接口DHCP地址池中不参与分配的地址范围
[R1-GigabitEthernet0/0/1]dhcp server excluded-ip-address 192.168.1.1 192.168.1.99
配置接口DHCP可分配地址范围中为指定客户端分配固定IP地址
[R1-GigabitEthernet0/0/1]dhcp server static-bind ip-address 192.168.1.101 mac-address 5489-987d-4e8f
DHCP客户端首次接入网络的工作原理
1 发现阶段,即DHCP客户端发现DHCP服务器的阶段。
DHCP客户端发送DHCP DISCOVER报文来发现DHCP服务器。DHCP DISCOVER报文中携带了客户端的MAC地址、需要请求的参数列表选项、广播标志位等信息。
2 提供阶段,即DHCP服务器提供网络配置信息的阶段。
服务器接收到DHCP DISCOVER报文后,选择跟接收DHCP DISCOVER报文接口的IP地址处于同一网段的地址池,并且从中选择一个可用的IP地址(给客户端分配IP地址前会发送Ping探测,如果能Ping通则标识该地址不可用,并选择其他IP地址分配给客户端),然后通过DHCP OFFER报文发送给DHCP客户端。
3 选择阶段,即DHCP客户端选择IP地址的阶段。
如果有多个DHCP服务器向DHCP客户端回应DHCP OFFER报文,则DHCP客户端一般只接收第一个收到的DHCP OFFER报文,然后以广播方式发送DHCP REQUEST报文,该报文中包含客户端想选择的DHCP服务器标识符和客户端IP地址。
4 确认阶段,即DHCP服务器确认所分配IP地址的阶段。
DHCP客户端收到DHCP ACK报文,会广播发送免费ARP报文,探测本网段是否有其他终端使用服务器分配的IP地址(如果收到响应,则发送DHCP DECLINE报文通知DHCP服务器该IP地址冲突,DHCP服务器标识该地址不可用,客户端发送DHCP DISCOVER报文重新申请IP地址)。
用找工作比喻DHCP工作原理
笔者发现可以用找工作来比喻DHCP的工作原理。
1 发现阶段
求职者海投简历给所有用人单位,简历中包含了个人信息和期望就职的职能范围。
2 提供阶段
用人单位确认相应职能的岗位有空缺,需要招人,于是发送offer给求职者,offer中包含了可提供的岗位信息。
3 选择阶段
求职者选择了第一个收到的offer中的期望岗位,选择其中的期望岗位并发送信息给用人单位。
4 确认阶段
用人单位给求职者发送确认需求的信息,求职者到用人单位后确认该岗位是否真的空缺,如果有人、就重新开始投简历。
预知两个术语概念
DHCP Relay
DHCP Relay指DHCP中继。当DHCP服务器和客户端在不同的三层网络中时,报文无法通过广播到达,此时就需要有设备作为DHCP中继,确保DHCP服务器和客户端之间的正常通信。
DHCP Snooping
DHCP Snooping是在DHCP协议的安全机制。用于在DHCP服务器和客户端之间建立一道防火墙,以抵御网络中针对DHCP的各种攻击。例如当网络中出现另一个DHCP服务器,会造成客户端频繁切换网关地址等现象,导致客户端的网络瘫痪,如果启用了DHCP Snooping,就可以避免发生这种情况。
DHCP报文格式
Op(op code):表示报文的类型,取值为1(客户端请求报)或者2(服务器响应报文)
Htype (hardware type): 表示硬件地址的类型。
Hlen(hardware length): 表示硬件地址的长度。
Hops(hops): 表示当前DHCP报文经过的DHCP Relay数目。该字段由客户端设置为0,每经过一个DHCP Relay时,该字段加1。此字段的作用是限制DHCP报文所经过的DHCP Relay数目。服务器和客户端之间的DHCP中继数目不能超过16个,也就是Hops值不能大于16,否则DHCP报文将被丢弃。
Xid:表示DHCP客户端选取的随机数,使DHCP服务器的回复与DHCP客户端的报文相关联。
Secs(seconds):由客户端填充,表示从客户端开始获得IP地址或IP地址续借后所使用了的秒数,缺省值为3600s。
Flags:客户端请求服务器发送响应报文的形式,只有最高位有意义,其余15位置0。最高位为0时请求发送单播响应,最高位为1时请求发送广播响应。
Yiaddr(your client ip address):表示服务器分配给客户端的IP地址。当服务器进行DHCP响应时,将分配给客户端的IP地址填入此字段。
Siaddr(server ip address):DHCP服务器的IP地址。
Giaddr(gateway ip address):表示第一个DHCP中继的IP地址。当客户端发出DHCP请求时,第一个DHCP中继在将DHCP请求报文转发给DHCP服务器时,会把自己的IP地址填入此字段。DHCP服务器会根据此字段来判断出客户