DHCP
DHCP
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端口。
DHCP好处
- 减少管理员的工作量
- 避免输入错误的可能
- 避免IP地址冲突
- 当更改lP地址段时,不需要重新配置每个用户的IP地址
- 提高了IP地址的利用率
- 方便客户端的配置
DHCP的分配方式
- 自动分配:分配到一个IP地址后永久使用
- 手动分配:由DHCP服务器管理员专门指定IP地址
- 动态分配:使用完后释放该IP,供其它客户机使用
注:
一般在公司中,邮件服务器、打印机、扫描仪需要固定IP地址。
1、客户机请求IP地址(DHCP Discover)
- 当一个DHCP客户机启动时,客户机还没有IP地址,客户机要通过DHCP获取一个合法的地址。
- 此时DHCP客户机以广播方式发送
DHCP Discover
报文发现信息来寻找DHCP服务器。
2、服务器响应(DHCP Offer)
- DHCP服务器接收到来自客户机请求lP地址的信息时,在自己的IP地址池中查找是否有合法的IP地址提供给客户机。
- 如果有,DHCP服务器将此IP地址做上标记,加入到
DHCP Offer
的消息中,然后广播一则DHCP Offer
消息(包含IP地址、子网掩码、DNS、租期等)。
3、客户机选择IP地址(DHCP Request)
- DHCP客户机从接收到的第一个DHCP Offer消息中提取IP地址, 之后广播发送
DHCP Request
消息,通告给局域网中所有的DHCP服务器,它选择了哪个DHCP服务器的哪个IP以及租约期限。 - 让未被选中的DHCP服务器,把未使用的地址收回。同时发出IP地址的DHCP服务器将该地址保留,该地址就不能再分配给另一个DHCP客户机。
4、服务器确定租约(DHCP Ack)
- DHCP服务器接收到DHCP Request消息后,以
DHCP ACK
消息的形式向客户机广播成功确认,该消息包含有IP地址的有效租约和其他可配置的信息。 - 当客户机收到DHCP ACK消息时,配置IP地址,完成TCP/IP的初始化。
重新登录:
- DHCP客户机每次重新登录网络时,不需要再发送DHCP Discover信息,而是直接发送包含前一次所分配的IP地址的
DHCP Request
请求信息。
更新租约:
- 当DHCP服务器向客户机出租的IP地址租期达到50%时,就需要更新租约;
- 客户机直接向提供租约的服务器发送
DHCP Request
包,要求更新现有的地址租约。 - 当租约到期前,DHCP服务器还没有收到客户机的请求,就会释放该IP地址。
使用 DHCP动态配置主机地址
DHCP服务优点
- 为大量客户机自动分配地址,提供集中管理
- 减轻管理和维护成本、提高网络配置效率
可分配的地址信息主要包括
- 网卡的IP地址、子网掩码
- 对应的网络地址、广播地址
- 默认网关地址
- DNS服务器地址
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 服务器地址等。极少用到。 |
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服务器并分配地址
实验要求:
将Linux虚拟机设置成DHCP服务器,自动分配IP地址给Windows10 虚拟机。
实验思路:
- Linux虚拟机关闭防火墙和selinux。
- 安装 dhcp 软件包,并查看配置文件。
- 将Linux虚拟机的网络模式改成仅主机模式。修改网卡配置文件,之后重启网络服务。
- 编辑dhcp服务的配置文件/etc/dhcp/dhcpd.conf,设置网段、地址池、网关地址。之后重启dhcp服务。
- 验证Windows10虚拟机虚拟机能否获取DHCP服务器分配的IP地址。
实验步骤:
步骤1、Linux虚拟机关闭防火墙和selinux。
[root@localhost ~]# systemctl stop firewalld.service [root@localhost ~]# setebforce 0 [root@localhost ~]# setenforce 0
步骤2、安装 dhcp 软件包,并查看配置文件。

[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 #
步骤3、将Linux虚拟机的网络模式改成仅主机模式。

步骤4、修改网卡配置文件/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.64.100 netmask 255.255.255.0 broadcast 192.168.64.255 inet6 fe80::c14a:1a88:2f5d:28bb prefixlen 64 scopeid 0x20<link> ether 00:0c:29:6f:9d:ba txqueuelen 1000 (Ethernet) RX packets 4265 bytes 2811753 (2.6 MiB) RX errors 6 dropped 0 overruns 0 frame 0 TX packets 1931 bytes 168918 (164.9 KiB) TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0 device interrupt 19 base 0x2000
步骤5、编辑dhcp服务的配置文件/etc/dhcp/dhcpd.conf,设置网段(要和虚拟网络编辑器中的保持一致)、地址池、网关地址。之后重启dhcp服务。

步骤5、编辑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 ~]# vim /etc/dhcp/dhcpd.conf ------------------------------------ 27 subnet 192.168.187.0 netmask 255.255.255.0 { //设置子网IP、子网掩码 28 range 192.168.187.20 192.168.187.80; //设置地址池 29 option routers 192.168.19.2; //设置网关地址 30 } # 重启dhcp服务 [root@localhost ~]# systemctl restart dhcpd //重启dhcp服务 [root@localhost ~]# systemctl status dhcpd //查看dhcp状态,已启动 ● dhcpd.service - DHCPv4 Server Daemon Loaded: loaded (/usr/lib/systemd/system/dhcpd.service; disabled; vendor preset: disabled) Active: active (running) since 三 2022-03-16 22:17:19 CST; 5s ago Docs: man:dhcpd(8) man:dhcpd.conf(5) Main PID: 87982 (dhcpd) Status: "Dispatching packets..." CGroup: /system.slice/dhcpd.service └─87982 /usr/sbin/dhcpd -f -cf /etc/dhcp/dhcpd.conf -user dhcpd -group ...
步骤6、验证Windows10虚拟机虚拟机能否获取DHCP服务器分配的IP地址。
Windows10虚拟机,将网络类型修改成“仅主机模式”。
释放IP地址,之后重新获取IP地址。
windows命令: ipconfig #查看网卡信息 ipconfig /release #释放地址 ipconfig /renew #重新获取地址 ipconfig /all #可以看到详情信息
