什么时DHCP

功能简介

DHCP(Dynamic Host Configuration Protocol,动态主机配置协议),它是一个局域网的协议,使用UDP协议工作。DHCP采用客户端/服务器模型,其中服务器使用UDP的67端口、客户端使用UDP的68端口。DHCP具有以下功能:
1)保证任何IP地址在同一时刻只能由一台DHCP客户端使用;
2)DHCP可以给客户端分配永久的、固定的地址信息;
3)DHCP可以和通过其他方式获取的地址信息的客户端共存;
4)DHCP服务器应该想bootp客户端提供服务。

DHCP工作原理详解分析

应用场景

在大型网络中,由于客户端设备很多,不可能一台一台的给客户端设备配置静态IP地址、网关、DNS等信息;并且随着移动办公的需求,我们的终端不可能一直在某个固定的位置,我们希望终端随处即插即用而不需要每次都修改终端的IP、网关等信息才能上网。因此产生了DHCP协议。

DHCP的报文格式


DHCP的报文格式介绍

字段 长度 含义
OP 1字节 表示报文的类型:
  • 1:客户端请求报文
  • 2:服务器响应报文
htype 1字节 表示硬件地址的类型。对于以太网,该类型的值为“1”。
hlen 1字节 表示硬件地址的长度,单位是字节。对于以太网,该值为6。
Hops 1字节 跳数。客户端设置为0,也能被一个代理服务器设置,经过一个代理服务器,则该值+1。
xid 4字节 事务ID,由客户端选择的一个随机数,被服务器和客户端用来在它们之间交流请求和响应,客户端用它对请求和应答进行匹配。该ID由客户端设置并由服务器返回,为32位整数。
secs 2字节 由客户端填充,表示从客户端开始获得IP地址或IP地址续借后所使用了的秒数。
flags 2字节 此字段在BOOTP中保留未用,在DHCP中表示标志字段。
图2 Flags字段格式 
 
只有标志字段的最高位才有意义,其余的位均被置为0。
最左边的字段被解释为广播响应标志位,内容如下所示:
  • 0:客户端请求服务器以单播形式发送响应报文
  • 1:客户端请求服务器以广播形式发送响应报文
ciaddr 4字节 客户端的IP地址。只有客户端是Bound、Renew、Rebinding状态,并且能响应ARP请求时,才能被填充。
yiaddr 4字节 "你自己的"或客户端的IP地址。
siaddr 4字节 表明DHCP协议流程的下一个阶段要使用的服务器的IP地址。
giaddr 4字节 该字段表示第一个DHCP中继的IP地址(注意:不是地址池中定义的网关)。当客户端发出DHCP请求时,如果服务器和客户端不在同一个网络中,那么第一个DHCP中继在转发这个DHCP请求报文时会把自己的IP地址填入此字段。服务器会根据此字段来判断出网段地址,从而选择为用户分配地址的地址池。服务器还会根据此地址将响应报文发送给此DHCP中继,再由DHCP中继将此报文转发给客户端。若在到达DHCP服务器前经过了不止一个DHCP中继,那么第一个DHCP中继后的中继不会改变此字段,只是把Hops的数目加1。
chaddr 16字节 该字段表示客户端的MAC地址,此字段与前面的“Hardware Type”和“Hardware Length”保持一致。当客户端发出DHCP请求时,将自己的硬件地址填入此字段。对于以太网,当“Hardware Type”和“Hardware Length”分别为“1”和“6”时,此字段必须填入6字节的以太网MAC地址。
sname 64字节 该字段表示客户端获取配置信息的服务器名字。此字段由DHCP Server填写,是可选的。如果填写,必须是一个以0结尾的字符串。
file 128字节 该字段表示客户端的启动配置文件名。此字段由DHCP Server填写,是可选的,如果填写,必须是一个以0结尾的字符串。
options 可变 该字段表示DHCP的选项字段,至少为312字节,格式为"代码+长度+数据"。DHCP通过此字段包含了服务器分配给终端的配置信息,如网关IP地址,DNS服务器的IP地址,客户端可以使用IP地址的有效租期等信息。




DHCP工作原理

DHCP的工作流程


DHCP的工作流程图
1)Client以广播的形式向网络中发出DHCP Discover报文。
2)该网络中所有的DHCP Server都会接收和处理该DHCP Discover报文,并且都响应一个DCHP Offer报文。该报文中会下发一个可用的地址给client端,并且在option54字段中标注自己的地址。并记录已经分配的该地址,这个地址可能不是Client端最后获取的地址。

DHCP Server接收和处理报文

3)Client端会收到所有的Offer报文,但是只会处理一个Offer报文,一般是处理最先到达的。处理该报文后,需要发送广播的DHCP Reques报文给所有的DHCP Server。该报文的option 54报文和option 50报文,会告诉所有DHCP Server,客户端将使用哪一个Server服务器,已经自己的地址。

DHCP Client端报文处理

4)DHCP Server收到DHCP Request报文后,判断字段中的option保证报文中的地址是否为自己的地址。
①如果不是自己的地址,则Server不做任何处理并且清除自己给该客户端分配的IP地址记录;
②如果是自己的地址,Server会通过广播的形式给Client放回一个DHCP ACK报文,并且会刷新地址租期、真实分配的IP、网关等信息。
5)Client端收到DHCP ACK报文后,检查该报文中分配给自己的真实地址是否能够使用。
①如果该地址已经被使用,Client会向Server发送一个DHCP Decline报文,使得Server禁用这个IP地址,并且重新进行地址申请过程,直到获取到可用地址;
②如果可以使用,则Client获取IP地址成功,并且根据该IP地址租期自动启动延续过程。

DHCP的租期续约

1)在地址的租约在0~50%之前,不会发生地址租期续约的情况;
2)当地址的租约时间在50%~87.5%之间时,Client会以单播的形式,向自己当前的DHCP Server发送DHCP Request报文来进行地址续租行为。
①如果Client收到Server返回的DHCP ACK报文,则Client的地址租期刷新,并且可以继续使用这个地址;
②如果没有收到Server回复的DHCP ACK报文,Client端依旧继续使用改地址,地址租期不会刷新;
3)当前地址的租约在87.5%以上,但未到100%时,Client会以广播的形式来向自己的所有DHCP Server发送DHCP Request报文,进行续租行为。(因为你的Server可能不止一个)
①如果Client收到Server回复的ACK报文,则地址租期刷新,并且继续使用改地址;
②如果没有收到Server回复的ACK报文,那么地址租期不会刷新,并且依旧使用改地址,直到租期到期后,Client发送给Server发送一个DHCP Release报文来释放该地址,并且重新开始IP地址申请的流程。

DHCP配置

1、Server端配置

Router(config)# server dhcp
开启DHCP功能,Cisco设备默认开启
Router(config)# ip dhcp pool pool-name
配置一个名字为pool-name的DHCP地址池,一个地址池只能配置一个网段
Router(config-config)# network network-address subnet-mask
定义地址池关联的网段
Router(config-config)# default-router gateway-address
定义分配给客户端的网关地址
Router(config)# ip dhcp excluded-address A.A.A.A
将A.A.A.A这个地方排除在地址池之外,改地址不分配给客户端使用。

2、客户端

开启DHCP获取地址即可

DHCP中继



DHCP中继
当Server和Client不在一个广播域内时,需要使用DHCP Relay,即DHCP中继。中继会将Client的广播转换为单播发送给Server。
需要注意的是:在LAN中,中继是配置在前往DHCP Server的沿途上,第一阻碍该广播报文的接口下
Router(config-if)# ip helper-address A.A.A.A
其中A.A.A.A表示服务器地址,或者服务器所在设备的可达地址。