随着网络规模的不断扩大,网络复杂度不断提升,网络中的终端设备例如主机、手机、平板等,位置经常变化。终端设备访问网络时需要配置IP地址、网关地址、DNS服务器地址等。采用手工方式为终端配置这些参数非常低效且不够灵活。然后出现了DHCP(Dynamic Host Configuration Protocol,动态主机配置协议)。DHCP实现了网络参数配置的自动化,降低客户端的配置和维护成本。
可以想象如果需要手动配置1000台主机是什么感受?
DHCP是一种用于集中对用户IP地址进行动态管理和配置的协议。DHCP采用C/S(Client/Server,客户端/服务器)通信模式,协议报文基于UDP的方式进行交互,采用67(DHCP服务器)和68(DHCP客户端)两个端口号:
DHCP相对于手工配置有如下优点:
DHCP客户端发送DHCP DISCOVER报文来发现DHCP服务器。DHCP DISCOVER报文中携带了客户端的MAC地址、需要请求的参数列表选项、广播标志位等信息。
2、提供阶段,即DHCP服务器提供网络配置信息的阶段。
服务器接收到DHCP DISCOVER报文后,选择跟接收DHCP DISCOVER报文接口的IP地址处于同一网段的地址池,并且从中选择一个可用的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地址。
在确认阶段,两种情况可能出现IP地址的冲突:
简单概括:客户端广播查找DHCP服务器,服务器接收到广播进行回应,客户端知道服务器信息然后请求分配IP地址,服务器先广播看下地址是否被使用,如果没有被使用则回复客户端使用该地址。
重要字段说明:
1、Op(op code):表示报文的类型,取值为1或2,含义如下:
2、Secs(seconds):由客户端填充,表示从客户端开始获得IP地址或IP地址续借后所使用了的秒数,缺省值为3600s。
3、Flags:客户端请求服务器发送响应报文的形式,只有最高位有意义,其余15位置0。
4、Yiaddr(your client ip address):表示服务器分配给客户端的IP地址。当服务器进行DHCP响应时,将分配给客户端的IP地址填入此字段。
5、Siaddr(server ip address):DHCP服务器的IP地址。
6、Chaddr(client hardware address):客户端的MAC地址。
7、Options:DHCP通过此字段包含了服务器分配给终端的配置信息。 Options预定义选项字段介绍:
DHCP报文中Options字段为可变长度字段,最多为312Byte,此字段包含了DHCP报文类型,服务器分配给终端的配置信息,如网关IP地址,DNS服务器的IP地址,客户端可以使用IP地址的有效租期等信息。
Options字段由Type、Length和Value三部分组成。其中Type字段取值范围1~255。常见的Options如下表所示:
Type | Length (Byte) | Value | 作用 |
---|---|---|---|
1 | 4 | Subnet Mask | 设置子网掩码选项。 |
3 | 4 | Router(网关) | 设置网关地址选项。 |
50 | 4 | Requested IP Address | 设置请求IP地址选项。 |
51 | 4 | IP Address Lease Time | 设置IP地址租约时间选项。 |
53 | 1 | Message Type | 设置DHCP消息类型。 |
54 | 4 | DHCP Server Identifier | 设置服务器标识。 |
55 | 9 | Parameter Request List | 设置请求选项列表。客户端利用该选项指明需要从服务器获取哪些网络配置参数。 |
58 | 4 | Rebinding Time Value | 设置续约T1时间,一般是租期时间的50%。 |
59 | 4 | Renewal Time Value | 设置续约T2时间。一般是租期时间的87.5%。 |
DHCP消息类型:通过options的Type=53指定消息类型。
Value | 报文类型 | 说明 |
---|---|---|
01 | DHCP DISCOVER | DHCP客户端首次登录网络时进行DHCP交互过程发送的第一个消息,用来寻找DHCP服务器。 |
02 | DHCP OFFER | DHCP服务器用来响应DHCP DISCOVER消息,此消息携带了各种配置信息。 |
03 | DHCP REQUEST | DHCP客户端广播请求回应DHCP服务器OFFER消息;DHCP客户端重启广播确认之前的IP地址等配置信息;续租。 |
04 | DHCP DECLINE | 当客户端发现服务器分配给它的IP地址发生冲突时会通过发送此消息来通知服务器。 |
05 | DHCP ACK | DHCP服务器对客户端的DHCP REQUEST消息的确认响应消息。 |
06 | DHCP NAK | 服务器对客户端的DHCP REQUEST消息的拒绝响应消息。 |
07 | DHCP RELEASE | 客户端可通过发送此消息主动释放服务器分配给它的IP地址。 |
08 | DHCP INFORM | DHCP客户端获取IP地址后,如果需要向DHCP服务器获取更为详细的配置信息(网关地址、DNS服务器地址),则向DHCP服务器发送DHCP INFORM请求消息。 |
就像我们租房子一样,DHCP服务器分配时指定了一个租期时间,到期前需要客户端找服务器续约。如果服务器没有回应则要重新找房子。
DHCP服务器给每个分配给客户端的IP地址定义一个使用期限,该使用期限被称为租期。在租期到期前,DHCP客户端如果仍需要使用该IP地址,可以请求延长租期;如果不需要,可以主动释放该IP地址。在没有其他空闲地址可用的情况下,DHCP服务器会把客户端主动释放的IP地址分配给其他客户端。
DHCP客户端根据IP地址的剩余租期的不同而产生不同形式的续租请求:
DHCP服务器会有一个缓存记录曾经分配过的地址和MAC地址,如果缓存没有过期然后测试这个地址是否被使用,如果没有则继续分配重用。
简单来说就是手动配置绑定最优先,然后之前有申请过地址地址重用,如果都没有就从空闲地址随机分配,如果空闲地址都了则将过期的IP回收再分配,最后实在没有地址了再分配冲突的IP,但一般会提前规划,否则可能影响网络。华为设备默认从数字大的IP地址往前分配。
一般使用网关设备作为DHCP作为服务器,然后基于物理接口地址或者VLAN进行自动分配。
DHCP配置有两种方式:基于接口的地址池和基于全局的地址池。
1、基于接口的地址池:
进入三层接口配置,网关默认为接口地址,不能再配置网关地址,从该接口接入的终端可以获取该地址池。
2、基于全局的地址池:
全局生效,需要手动配置网关、掩码、DNS等,会自动匹配到该IP地址进行地址池创建和匹配。
接口DHCP配置
# 全局开启DHCP
[AR1]dhcp enable
# 配置基于接口方式的地址池
[Huawei]interface interface-type interface-number [subinterface-number ]
[Huawei-GigabitEthernet0/0/1]ip address ip-address { mask | mask-length }
# 配置DHCP的类型(全局|接口|中继)
[AR1-GigabitEthernet0/0/0]dhcp select interface
# 配置为指定DHCP Client分配固定IP地址(静态绑定)
[Huawei-GigabitEthernet0/0/1]DHCP server static-bind ip-address ip-address mac-address mac-address [ description description ]
# 配置地址池中不参与自动分配的IP地址
[Huawei-GigabitEthernet0/0/1]DHCP server excluded-ip-address start-ip-address [ end-ip-address ]
# 配置地址池的地址租期
[Huawei-GigabitEthernet0/0/1]DHCP server lease { day day [ hour hour [ minute minute ] ] | unlimited }
# 配置DNS服务器列表
[Huawei-GigabitEthernet0/0/1]dhcp server dns-list 8.8.8.8 114.114.114.114
# 示例
interface GigabitEthernet0/0/0 # 进入接口
ip address 192.168.1.254 255.255.255.0 # 配置接口地址
dhcp select interface # 配置接口地址池
dhcp server static-bind ip-address 192.168.1.1 mac-address 5489-989d-74b3 # 静态地址绑定
dhcp server excluded-ip-address 192.168.1.252 # 排除地址
dhcp server lease day 0 hour 8 minute 0 # 地址租期
dhcp server dns-list 8.8.8.8 114.114.114.114 # DNS服务器地址
全局DHCP配置:
# 全局开启DHCP
[Huawei]dhcp enable
# 创建全局地址池
[Huawei]ip pool ip-pool-name
# 配置DHCP客户端的网关地址
[Huawei-ip-pool-HW]gateway-list ip-address
# 配置全局地址池可动态分配的IP地址范围
[Huawei-ip-pool-HW]network ip-address [ mask { mask | mask-length } ]
# 配置地址池中不参与自动分配的IP地址
[Huawei-ip-pool-HW]excluded-ip-address start-ip-address [ end-ip-address ]
# 配置地址池的地址租期
[Huawei-ip-pool-HW] lease { day day [ hour hour [ minute minute ] ] | unlimited }
# 配置为指定DHCP Client分配固定IP地址
[Huawei-ip-pool-HW] static-bind ip-address ip-address mac-address mac-address [ option-template template-name | description description ]
# 接入接口
# 配置DHCP的类型(全局|接口|中继)
[AR1-GigabitEthernet0/0/0]dhcp select global
# 示例
# 地址池配置
ip pool ippool
gateway-list 192.168.1.254
network 192.168.1.0 mask 255.255.255.0
static-bind ip-address 192.168.1.1 mac-address 5489-989d-74b3
excluded-ip-address 192.168.1.253
lease day 0 hour 8 minute 0
dns-list 8.8.8.8 114.114.114.114
# 接口配置,使用全局地址池
interface GigabitEthernet0/0/0
ip address 192.168.1.254 255.255.255.0
dhcp select global
总结:DHCP可以基于接口或者全局地址池进行自动分配,实现自动地址管理。大概工作原理是客户端向服务器寻找服务器,服务器回复客户端信息,客户端请求地址,服务器端先确认地址没有被使用然后分配给客户端使用,客户端在租约到期前找服务器续约。DHCP优先分配用过的地址和手动绑定的地址,然后从空闲地址分配。简单介绍了DHCP的配置。
本文由 mdnice 多平台发布