DHCP全称为Dynamic Host Configuration Protocol,中文含义为“动态主机配置协议”,通常被应用在大型的局域网络环境中,主要作用是集中管理、分配IP地址,使网络环境中的主机动态获得IP地址、Gateway地址、DNS服务器地址等信息,并能够提升地址的使用率。
DHCP划分IP地址的过程
DHCP报文共有8个类型,具体如下:
DHCP DISCOVER:这是DHCP客户端首次登录网络时进行DHCP过程的第一个报文,用来寻找DHCP服务器。
DHCP OFFER:服务器用来响应客户端的DHCPDISCOVER报文,并指定相应的配置参数。
DHCP REQUEST:由客户端发送给服务器来请求配置参数或者请求配置确认或者续借租期。此报文用于以下三种用途。
客户端初始化后,发送广播的DHCPREQUEST报文来回应服务器的DHCPOFFER报文。
客户端重启初始化后,发送广播的DHCPREQUEST报文来确认先前被分配的IP地址等配置信息。
当客户端已经和某个IP地址绑定后,发送单播的DHCPREQUEST报文来延长IP地址的租期。
DHCP ACK:服务器对客户端的DHCPREQUEST报文的确认响应报文,客户端收到此报文后,才真正获得了IP地址和相关的配置信息。
DHCP报文的另外4个类型:
DHCP DELINE:当客户端发现服务器分配给它的IP地址发生冲突时会通过发送此报文来通知服务器,并且会重新向服务器申请地址。
DHCP NAK:服务器对客户端的DHCP REQUEST报文的拒绝响应报文,比如服务器对客户端分配的IP地址已超过使用租借期限或者客户端移到了另一个新的网络。 DHCP INFORM:客户端已经获得了IP地址,发送此报文的目的是为了从服务器获得其他的一些网络配置信息,比如网关地址、DNS服务器地址等。
DHCP RELEASE:客户端可通过发送此报文主动释放服务器分配给它的IP地址,当服务器收到此报文后,可将这个IP地址分配给其它的客户端。
当每个动态划分的IP地址都是存在租期的,当地址的租期到达50%时,会单播发出REQUSET报文,向DHCP服务器发出更新请求,如果服务器接收到并对计算机进行单播回复,则更新成功,租期重新计时。
当50%时的请求服务器为回复,可以继续使用IP地址,当达到80%的时候,计算机就会进行广播发送RQUEST报文,如果时原DHCP服务器进行了回复(ACK报文),则租期重新计时,如果是其他DHCP服务器收到了,并对其进行了回复,则计算机与新DHCP服务器重新进行IP地址请求。
如果租期彻底结束,都为收到DHCP服务器的回复,规划的IP地址失效。
计算机可以通过主动发送DHCP RELEASE报文,向服务器主动申请释放自身IP地址,服务器收到后,就会将该IP地址重新放回IP地址池中。
自动分配方式(Automatic Allocation)
DHCP服务器为主机指定一个永久性的IP地址,一旦DHCP客户端第一次成功从DHCP服务器端租用到IP地址后,就可以永久性的使用该地址。
动态分配方式(Dynamic Allocation)
DHCP服务器给主机指定一个具有时间限制的IP地址,时间到期或主机明确表示放弃该地址时,该地址可以被其他主机使用。
手工分配方式(Manual Allocation)
客户端IP地址是由网络管理员指定的,DHCP服务器只是将指定的IP地址划分给客户端主机(主要通过mac地址与IP进行绑定,即可做的指定设备获得指定IP的地址)
手动配置可能由于人为因素错误率高,DHCP基本不会出错。
在网络环境较大,环境复杂的网络中,由于可能随时有新PC的接入,和大量的PC需要配置,人为手动配置效率低,而DCHP可以根据实际情况,实时配置IP地址。
对于dhcp,可以指定划分一定区域和可以控制网络接入设备数量,所以管理性比手动配置高。
DHCP服务配置文件路径是/etc/dhcp/dhcpd.conf,在初始状态下dhcpd.conf配置文件时空文件。
为了方便配置,dhpcd安装包在/usr/share/doc/dhcp-4.2.5/dhcpd.conf.example,
dhcp的模板如下:
option domain-name "example.org"; //指定默认域名
option domain-name-servers 114.114.144.144,8.8.8.8; // 指定DNS服务器地址
default-lease-time 600; //默认租期,客户机通过dhcp获取IP地址后使用这个IP的时间,单位秒(s)。
max-lease-time 7200; //最大租期,正常情况下,客户机在默认租期期间会通过续租来刷新租期,当如果在客户机突然宕机,DHCP服务器并不会立即知晓,会保留这个IP地址,会等到最大租约时间过了,才会将IP地址收回到地址中。
ddns-update-style none; //禁用DNS动态更新
//注以上是配置均是全局配置,作用是如果针对网段声明时,如果网段声明中没有,则会使用全局配置。
subnet 192.168.100.0 netmask 255.255.255.0 { //作用用声明的整网段,部分配置参数优先级高于全局配置
range 192.168.100.10 192.168.100.20; //声明IP地址池范围
option domain-name-servers 192.168.100.2 //声明网段指定dns服务器地址
option domain-name "internal.example.org"; //声明网段指定dns域名
option routers 10.5.5.1; // 指定网关
option broadcast-address 10.5.5.31; // 指定广播地址
default-lease-time 600; //指定声明网段默认租期
max-lease-time 7200; //指定声望的的最大租期
}
host pc1 { //主机声明,指定主机的主机名
hardware ethernet 54:89:98:3E:67:EB ; //指定需要分配固定IP的mac地址
fixed-address 192.168.100.15; // 指定给主机的IP地址
}
首先需要安装好VMware和华为的ensp模拟器,并装好Linux系统,这里以CentOS为例。
第一步配置VMware虚拟网卡
配置esnp
关闭防火墙和核心防护
配置服务器IP:IP地址为192.168.20.20,子网掩码24,网关为192.168.20.1
vim /etc/dhcp/dhcpd.conf 进入配置文件,进行配置,配置内容如下:
配置三个IP地址池,192.168.10.0、192.168.20.0、192.168.100.0地址池,为pc1、pc2、pc3指定使用地址池的.15IP地址。
开启dhcp服务
ensp拓扑图:
交换机1配置如下:
sysname SW1
vlan batch 10 20 100
dhcp enable
interface Vlanif10
ip address 192.168.10.1 255.255.255.0
dhcp select relay
dhcp relay server-ip 192.168.20.20
interface Vlanif20
ip address 192.168.20.1 255.255.255.0
dhcp select relay
dhcp relay server-ip 192.168.20.20
interface Vlanif100
ip address 192.168.100.1 255.255.255.0
dhcp select relay
dhcp relay server-ip 192.168.20.20
interface GigabitEthernet0/0/1
port link-type trunk
port trunk allow-pass vlan 2 to 4094
交换机2配置如下:
sysname SW2
vlan batch 10 20 100
interface Ethernet0/0/1
port link-type access
port default vlan 10
interface Ethernet0/0/2
port link-type access
port default vlan 20
interface Ethernet0/0/3
port link-type access
port default vlan 100
interface GigabitEthernet0/0/1
port link-type trunk
port trunk allow-pass vlan 2 to 4094
interface GigabitEthernet0/0/2
port link-type access
port default vlan 20
各pc机配置:
DHCP并不难理解,首先就是DHCP的模式是典型的C/S模式,所以就可以将配置DHCP进行分开,主要配置在DHCP服务器上,DHCP服务器的主要参数有default-lease-time(默认租期),max-lease-time(最大租期)、option domain-name(指定dns域名)、option domain-name-servers(指定dns域名服务器)、subnet x.x.x.x netmask x.x.x.x { }(什么IP地址池),地址池中配置有range(地址池范围)、option routers(指定网关)等。
当开启dhcp过程中,会对dhcp服务的配置进行读取,如果遇到错误会提示错误,详细错误可以通过,systemctl status dhcpd查看详细报错。