1. DHCP概述
DHCP(Dynamic Host Configuration Protocol,动态主机配置协议),由Internet工作任务小组设计开发,专门用于为TCP/IP网络中计算机自动分配TCP/IP参数的协议。
DHCP是一个局域网的网络协议。指的是由服务器控制一段IP地址范围,客户机登录服务器时就可以自动获得服务器分配的IP地址和子网掩码。 默认情况下,DHCP作为Windows Server的一个服务组件不会被系统自动安装,还需要管理员手动安装并进行必要的配置。
DHCP采用C/S架构,C-client(客户机),S-server(服务器),客户机/服务器架构
DHCP服务采用传输层UDP协议,客户机使用UDP协议的68端口,服务器使用UDP的67端口。
1.2. DHCP好处
- 减少管理员的工作量
- 避免输入错误的可能
- 避免IP地址冲突
- 当更改lP地址段时,不需要重新配置每个用户的IP地址
- 提高了IP地址的利用率
- 方便客户端的配置
1.3. DHCP的分配方式
-
DHCP的典型应用模式
- 在网络中假设一台专用的DHCP服务器,负责集中分配各种网络地址参数(主要包括IP地址,子网掩码,广播地址,默认网关地址,DNS服务器地址)
- 其他主机作为DHCP客户机,将网卡配置为自动获取地址,即可与DHCP服务器进行通信,完成自动配置过程
- 这就产生了三种分配方式:自动分配,手动分配,动态分配
自动分配
- 分配到一个IP地址后永久使用
- 当DHCP客户机第一次成功的从DHCP服务器获取到一个IP地址后,就永久的使用这个IP地址
- 例如:局域网中的打印机,局域网中的座机
手动分配
- 由DHCP服务器管理员专门指定IP地址
动态分配
- 使用完后释放该IP,供其他客户机使用
- 当DHCP客户机第一次从DHCP服务器获得IP地址后,并非永久的使用该地址,而是在每次使用完后,DHCP客户机就会释放这个IP地址,供其他客户机使用
IP地址的获取和释放的命令
Windows 获取IP地址命令: ipconfig
释放IP地址命令: release
Linux 获取IP地址命令: ifconfig
重新获得IP地址命令: renew
1.4. DHCP 工作原理
第一步:客户端在网络中搜索服务器
- 客户端通过广播发送DHCP Discover报文寻找服务器端
第二步:服务器向客户端响应服务
- 服务器端通过单播发送DHCP Offer报文向客户端提供IP地址等网络信息,从IP地址池中挑选一个尚未分配的IP分配给客户端
第三步:客户端向服务器发出服务请求
- 如果有多台DHCP服务器向该客户端发来DHCP-offer报文,客户端只接受第一个收到的DHCP-offer报文并提取IP地址,然后客户端通过广播发送DHCP Request报文告知服务器端本地选择使用该IP地址。
第四步:服务器向客户端提供服务
- 服务器通过单播发送DHCP Ack报文告知客户端IP地址是合法可用的,并在选项字段中增加IP地址的使用租期信息
DHCP中继原理
DHCP中继原理: DHCP客户使用IP广播来寻找同一网段上的DHCP服务器。 当服务器和客户段处在不同网段,即被路由器分割开来时,路由器是不会转发这样广播包的。 因此可能需要在每个网段上设置一个DHCP服务器,虽然DHCP只消耗很小的一部分资源的,但多个 DHCP服务器,毕竟要带来管理上的不方便。 DHCP中继的使用使得一个DHCP服务器同时为多个网段服务成为可能。
两种解决办法:
- 为每个网段安装一台DHCP服务器,但这种方式存在资源上的浪费,而且不利于集中管理。
- 在连接不同网段的设备上开启DHCP中继功能,将DHCP这种特殊的广播信息在VLAN之间转发,让其他VLAN的客户机也能从DHCP服务器获得IP地址。
2. DHCP租约过程概述
- 客户机从DHCP服务器获得IP地址的过程称为DHCP的租约过程
- 租约过程分为四个步骤
2.1. DHCP的租约过程
- 1.客户端在网络中发送discover广播,以此来搜索DHCP服务器
- 2.DHCP服务器接收到广播后,因不知道客户端的IP地址,所以同样以广播的形式将offer发送,来响应主机
- 3.客户机收到offer后,开始发出request广播
- 4.DHCP收到广播后,依旧不知道客户机IP地址,发送回复request的ACK确认广播
1、客户机请求IP地址(DHCP Discover)
-
当一个DHCP客户机启动时,客户机还没有IP地址,客户机要通过DHCP获取一个合法的地址。
-
此时DHCP客户机以广播方式发送
DHCP Discover报文发现信息来寻找DHCP服务器。 -
因为自己没有IP地址,所以源IP地址为:0.0.0.0
同时也不知道DHCP服务器地址,所以发送广播255.255.255.255
2、服务器响应(DHCP Offer)
- 当DHCP服务器接收到来自客户机请求IP地址的信息时,他就在自己的IP地址池中查找是否有合法的IP地址提供给客户机,如果有,DHCP服务器就将此IP地址做上标记,加入到DHCP offer的消息中,然后DHCP服务器就广播一则DHCP offer消息
- 客户机仍没有IP地址,所以发送广播
3、客户机选择IP地址(DHCP Request)
- DHCP客户机从接收到的第一个DHCP offer消息中提取IP地址,发出IP地址的DHCP服务器将该地址保留,这样该地址就不能再分配给另一个DHCP客户机
- 第一个DHCP offer表示:若局域网中同时存在两个DHCP,那么客户机根据收到DHCP offer的顺序来确定使用哪个DHCP服务器的地址
- 客户机发送DHCP request 广播,选择IP地址,并附上租约期限信息(默认8天)
4、服务器确定租约(DHCP Ack)
- DHCP服务器接收到DHCP request消息后,以DHCP ACK消息的形式向客户机广播成功确认,该消息包含有IP地址的有效租约和其他可配置的消息
- 当客户机收到DHCP ACK消息时,他就配置了IP地址,完成TCP/IP的初始化
- 此时服务器发出的仍旧是广播,因为客户机还没有IP地址
重新登录
-
DHCP客户机每次重新登录网络时,不需要在发送DHCP的discover信息,而是直接发送包含前一次所分配的IP地址的DHCP request请求信息
-
DHCP服务器收到请求后,检查IP地址资源池
1.发现客户机请求中的IP地址仍旧存在,便发送ACK,将IP地址分配给客户机
2.发现客户机请求中的IP地址已被占用,便返回一个Nack否认信息,然后客户机重新开始请求IP地址的步骤。
更新租约:
- 当DHCP服务器向客户机出租的IP地址租期达到50%时,就需要更新租约;
- 客户机直接向提供租约的服务器发送
DHCP Request包,要求更新现有的地址租约。 - 当租约到期前,DHCP服务器还没有收到客户机的请求,就会释放该IP地址。
3. DHCP服务器的配置
3.1. DHCP服务优点
- 为大量客户机自动分配地址,提供集中管理
- 减轻管理和维护成本、提高网络配置效率
3.2. 可分配的地址信息主要包括
- 网卡的IP地址、子网掩码
- 对应的网络地址、广播地址
- 默认网关地址
- DNS服务器地址
3.3. 安装DHCP服务器
DHCP服务器软件
- centos镜像中的dhcp…rpm
dhcp软件包的主要文件
- 主配置文件:/etc/dhcpd.conf
- 执行程序:/usr/sbin/dhcpd,/usr/sbin/dhcrelay
- 执行参数配置:/etc/sysconfig/dhcpd
3.4. DHCP共有八种报文
| 报文 | 含义 |
|---|---|
| DHCP Discover | 这是客户机首次登录网络时进行 DHCP 过程的第一个报文,用来寻找 DHCP 服务器。 |
| DHCP Offer | DHCP服务器用来响应DHCP DISCOVER报文,此报文携带了各种配置信息。 |
| DHCP Request | 客户端初始化后,发送广播的 DHCP REQUEST 报文来回应服务器的 DHCP OFFER 报文。 客户端重启初始化后,发送广播的 DHCP REQUEST 报文来确认先前被分配的 IP 地址等配置信息。 当客户端已经和某个 IP 地址绑定后,发送 DHCP REQUEST 报文来延长 IP 地址的租期。 |
| DHCP ACK | 服务器对客户端的 DHCP REQUEST 报文的确认响应报文,客户端收到此报文后,才真正获得了 IP 地址和相关的配置信息。 |
| DHCP NAK | 服务器对客户端的DHCP REQUEST报文的拒绝响应报文,通知客户端无法分配合适的 IP 地址。 |
| DHCP Decline | 客户端发送给服务器,指示地址已被使用,并且会重新向服务器申请地址。 |
| DHCP Release | 客户端发送给服务器,主动释放服务器分配给它的IP地址,取消剩余租约时间。 |
| DHCP Inform | 客户端发送给服务器,客户端已经获得了 IP 地址,发送此报文的目的是为了从服务器获得其他的一些网络配置信息,比如网关地址、DNS 服务器地址等。极少用到。 |
4. DHCP配置文件
DHCP服务的配置文件为/etc/dhcp/dhcpd.conf。
# 设置全局配置参数
option domain-name "example.org"; //指定默认域名
option domain-name-servers 202.106.0.20,202.106.148.1; //指定DNS服务器地址
default-lease-time 600; //默认租约600秒(10分钟)
max-lease-time 7200; //最大租约为7200秒(2小时)
ddns-update-style none; //禁用DNS动态更新
# subnet网段声明(作用于整个子网段,部分配置参数优先级高于全局配置参数)
subnet 192.168.100.0 netmask 255.255.255.0 { //声明要分配的网段地址
range 192.168.100.128 192.168.100.200; //设置地址池
option routers 192.168.100.10; //指定默认网关地址
# host主机声明(给单机分配固定的IP地址)
host hgstname{ //指定需要分配固定IP地址的客户机名称
hardware ethernet 00:c0:c3:22:46:81; //指定该主机的MAC地址
fixed-address 192.168.4.100; //指定保留给该主机的IP地址
设置DHCP服务器并分配地址
关闭防火墙selinux
[root@localhost ~]# systemctl stop firewalld.service
[root@localhost ~]# setenforce 0
安装 dhcp 软件包,并查看配置文件。
[root@localhost ~]#yum install dhcp -y
[root@localhost ~]# rpm -qc dhcp
/etc/dhcp/dhcpd.conf
/etc/dhcp/dhcpd6.conf
/etc/openldap/schema/dhcp.schema
/etc/sysconfig/dhcpd
/var/lib/dhcpd/dhcpd.leases
/var/lib/dhcpd/dhcpd6.leases
[root@localhost ~]#cat /etc/dhcp/dhcpd.conf /查看配置文件,为空文件
#
# DHCP Server Configuration file.
# see /usr/share/doc/dhcp*/dhcpd.conf.example //系统提示可以参考该文件的设置
# see dhcpd.conf(5) man page
#
修改网卡配置文件/etc/sysconfig/network-scripts/ifcfg-ens33,之后重启网络服务。
[root@localhost ~]# vim /etc/sysconfig/network-scripts/ifcfg-ens33
[root@localhost ~]# systemctl restart network
[root@localhost ~]# ifconfig ens33
ens33: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
inet 192.168.85.50 netmask 255.255.255.0 broadcast 192.168.85.255
inet6 fe80::c3fc:353a:c5c:5e66 prefixlen 64 scopeid 0x20<link>
ether 00:0c:29:7e:55:67 txqueuelen 1000 (Ethernet)
RX packets 124154 bytes 184991531 (176.4 MiB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 22438 bytes 1402018 (1.3 MiB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
编辑dhcp服务的配置文件/etc/dhcp/dhcpd.conf,设置网段(要和虚拟网络编辑器中的保持一致)、地址池、网关地址。之后重启dhcp服务。
[root@localhost ~]# cd /usr/share/doc/dhcp-4.2.5/
[root@localhost dhcp-4.2.5]# ls
dhcpd6.conf.example dhcpd.conf.example ldap
[root@localhost dhcp-4.2.5]# cp dhcpd.conf.example /etc/dhcp/dhcpd.conf
cp:是否覆盖"/etc/dhcp/dhcpd.conf"? yes
# 编辑dhcp配置文件
[root@localhost dhcp-4.2.5]# vim /etc/dhcp/dhcpd.conf
27 subnet 192.168.85.0 netmask 255.255.255.0 {
28 range 192.168.85.20 192.168.85.50;
29 option routers 192.168.85.50;
[root@localhost dhcp-4.2.5]# systemctl restart dhcpd
[root@localhost dhcp-4.2.5]# systemctl status dhcpd
● dhcpd.service - DHCPv4 Server Daemon
Loaded: loaded (/usr/lib/systemd/system/dhcpd.service; disabled; vendor preset: disabled)
Active: active (running) since 四 2022-09-22 15:40:49 CST; 8s ago
Docs: man:dhcpd(8)
man:dhcpd.conf(5)
Main PID: 17418 (dhcpd)
Status: "Dispatching packets..."
CGroup: /system.slice/dhcpd.service
└─17418 /usr/sbin/dhcpd -f -cf /etc/dhcp/dhcpd.conf -user dhcpd -gro...
验证Windows10虚拟机虚拟机能否获取DHCP服务器分配的IP地址。