【Linux网络】DHCP原理与配置


一、DHCP服务的概述

1.DHCP的定义

  DHCP(Dynamic Host Configuration Protocol,动态主机配置协议)是一个局域网的网络协议。指的是由服务器控制一段IP地址范围,客户机登录服务器时就可以自动获得服务器分配的IP地址和子网掩码。担任DHCP服务器的计算机需要安装TCP/IP协议,并为其设置静态IP地址、子网掩码、默认网关等内容。

  DHCP是由IETF(Internet 工作任务小组)开发设计的,于1993年10月成为标准协议,其前身是BOOTP协议。当前的DHCP定义可以在RFC 2131中找到,而基于IPv6的建议标准(DHCPv6)可以在RFC 3315中找到。

2.DHCP的优缺点

优点:

  IP 地址由 DHCP 集中管理,管理员可以验证IP地址和其它配置参数,而不用去检查每个主机,减少管理员的工作量。

  DHCP不会同时租借相同的IP地址给两台主机,避免输入错误的可能。

  DHCP管理员可以约束特定的计算机使用特定的IP地址,避免IP地址冲突。

  当更改lP地址段时,不需要重新配置每个用户的IP地址。

  IP 地址可以重复使用,从而最大限度地减少对 IP 地址总数的要求,提高了IP地址的利用率。

  网络管理员可以使用 DHCP 协议方法从集中区域配置网络,方便客户端的配置。

缺点:

  DHCP不能发现网络上非DHCP客户机已经在使用的IP地址。

  当网络上存在多个DHCP服务器时,一个DHCP服务器不能查出已被其它服务器租出去的IP地址。

  DHCP服务器不能跨路由器与客户机通信,除非路由器允许BOOTP转发。

总结:

  DHCP动态主机配置协议是一项必不可少的关键网络服务,使用它将帮助您作为系统管理员或网络管理员通过分配跟踪和重新分配 IP 来处理客户端。除了管理之外,如果出现任何问题,您只需要保持与服务器的连接并验证设置,而不是在客户端之间运行。

3.DHCP的分配方式

  • 自动分配:分配到一个IP地址后永久使用
  • 手动分配:由DHCP服务器管理员专门制定IP地址
  • 动态分配:使用完后释放该IP,供其它客户机使用

4.DHCP的技术原理

DHCP基本原理

  DHCP是一种C/S模式的网络协议,要想实现DHCP功能,首先主机必须支持DHCP Client功能,其次网络中还必须拥有一台DHCP服务器,并且主机和该服务器之间必须能够正常通信。因为DHCP中有些报文时以广播的形式,因此DHCP Server和DHCP Client一般必须要在一个子网内。

  DHCP服务器,既可以是一台主机,也可以是路由交换设备(华为和思科系列)用来实现DHCP服务器功能。

  DACP协议采用UDP作为传输协议,客户端发送请求消息到DHCP服务器的67号端口,DHC服务器回应应答消息给客户端的68号端口。DHCP作为服务端负责集中给客户端分配各种网络地址参数(主要包括IP地址、子网掩码、广播地址、默认网关地址、DNS服务器地址)。

DHCP实现流程

  DHCP实现流程一共有6个阶段,主要阶段只有4个阶段,具体如下图所示:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-arFogyIt-1681747976825)(C:\Users\86138\AppData\Roaming\Typora\typora-user-images\image-20230417161824050.png)]

发现阶段

  当主机刚刚开机运行,此时他不知道此时网络中是否存在DHCP服务器,DHCP服务器是谁,因此它必须首先确定网络中的DHCP服务器身份。因此,新上线主机会发送DHCP Discover报文, 该报文是一个广播报文,源IP地址为0.0.0.0,目的IP地址为255.255.255.255。源MAC地址为自己的MAC地址,目的MAC地址为ffff-ffff-ffff。该报文会在二层网络中洪泛,因此如果网络中存在DHCP服务器,则DHCP服务器会收到该报文。

提供阶段

  当网络中的DHCP服务器收到了DHCP Client发送的DHCP报文后,DHCP就进入了提供阶段。在这个阶段,DHCP Server会根据管理员的相关配置,给DHCP Client提供一个可用的IP地址,同时给其提供DNS、子网掩码等信息。

  DHCP Server会发送DHCP Offer信息给DHCP Client提供上述信息,该报文也是一个广播报文,源IP地址为DHCP Server的IP地址,目的IP地址为DHCP Server给该DHCP Client分配的IP地址,源MAC地址为DHCP Server的MAC地址,目的MAC地址为DHCP Client的MAC地址。(注:在这里有的设备上DHCP Offer报文也是广播,其实也能够实现DHCP的功能

请求阶段

  在DHCP Client收到DHCP Server发送的DHCP Offer报文后,就进入了DHCP请求阶段,在DHCP请求阶段,DHCP已经得到了DHCP Server分配给它的IP地址,DHCP Client在得到该IP地址后,却不会马上使用,DHCP Client会向DHCP Server发送DHCP Request报文,正式向DHCP Server申请使用该IP地址。

  DHCP Request报文,源IP地址为0.0.0.0(因为这时还没有得到DHCP服务器的回应,因此此时这个IP地址还不能正常使用,因此在这里源IP地址还是0.0.0.0)。目的地址为255.255.255.255。(注:在这里其实DHCP Client其实已经知道了DHCP Server的IP地址,因此其实这里使用DHCP Server的IP地址其实也是可以的,因此,有些设备对此做了优化,因为这样可以减少网络中的广播洪范流量)源MAC和目的MAC地址分别是DHCP Client的和DHCP Server的MAC地址。

确认阶段

  当DHCP Server收到DHCP Client发送的DHCP Request报文后,DHCP进入确认阶段。DHCP Server会向DHCP Client发送DHCP ACK报文,表示同意DHCP Client使用该IP地址。

  DHCP ACK报文,源IP地址为DHCP Server的IP地址,目的IP地址为DHCP Client的IP地址,源目MAC为DHCP Server和Client的MAC地址。

重启PC后的DHCP过程

  目前,PC机对于DHCP有记忆功能,会记住当前网络中DHCP服务器的IP地址和上次分配给自己的IP地址。因此,当PC重启后,通常不会按照上述的4个步骤按部就班的申请IP地址,而是通常会直接进入第三个阶段,直接向DHCP Server发送DHCP Request报文,请求自己上一次获得的IP地址。如果DHCP同意,则会回应DHCP Reply报文,如果该IP地址已经被占用,或者其他情况造成DHCP Server不把该IP地址分配给DHCP Client,则DCHP Server会回应DHCP NACK报文,表示拒绝。这时,PC就必须重新进行DHCP四个阶段。

DHCP续约机制

  DHCP存在租约和续约机制,在默认情况下,当PC机申请到一个DHCP地址后,使用时间为一天,管理员也可以手动修改该时间,最短为1小时。当PC申请的DHCP IP地址到达租约时间后,该IP地址就不可以继续使用,因此PC会在租约到期之前进行续约。

  通常情况下,DHCP Client会进行两次续约,一次是在租约期的50%时候,DHCP Cient会向DHCP Server发送DHCP Reqruest报文,如果收到DHCP Server的回应,则续约成功。第二次续约是在租约期的87.5%的时候,DHCP会再次向DHCP Server发送DHCP Request报文,申请租约。如果此时仍为收到DHCP响应的DCHP ACK报文,则就必须要重新进行DHCP的四个阶段,重新申请IP地址。

总结

第一阶段:客户端在网络中搜索服务器。

  客户端通过广播发送DHCP-Discover报文寻找服务器端。

第二阶段:服务器向客户端响应服务。

  服务器端通过广播/单播(华为设备是单播,其他设备都是广播)发送DHCP-Offer报文向客户端提供IP地址等网络信息,从IP地址池中挑选一个尚未分配的IP地址分配给客户端。

第三阶段:客户端向服务器发出服务请求。

  如果有多台DHCP服务器向该客户端发来DHCP-Offer报文,客户端只接受第一个收到的DHCP-Offer报文并提取地址,然后客户端通过广播发送DHCP-Request报文告知服务器端本地选择使用该IP地址。

第四阶段:服务器向客户端提供服务。

  服务器通过广播/单播(华为设备是单播,其他设备都是广播)发送DHCP-Ack报文告知客户端IP地址是合法可用的,并在选项字段中增加IP地址的使用租期信息。

第五阶段:重新登录

  DECP客户机每次重新登录网络时,不需要再发送DHCP-Discover信息,而是直接发送包含前一次所分配的 IP地址的DHCP-Request请求信息。

第六阶段:更新租约

  当DHCP服务器向客户机出租的IP地址租期达到50%时,就需要更新租约。客户机直接向提供租约的服务器发送DHCP-Request包,要求更新现有的地址租约。

二、使用DHCP动态配置主机地址

1.DHCP服务

  • 为大量客户机自动分配地址,提供集中管理。
  • 减轻管理和维护成本、提高网络配置效率。

2.可分配的地址信息

  • 网卡的ip地址、子网掩码
  • 对应的网络地址、广播地址
  • 默认网关地址
  • DNS服务器地址

3.配置DHCP服务器

  现在有两台Linux系统的虚拟机和两台Windows系统的虚拟机。其中一台Linux系统的虚拟机Centos7-2作为DHCP服务器,它包含了两张网卡,一个对外通信的网卡和一个对内通信的网卡。另外三台虚拟机作为客户端。

第一步:在服务器上安装dhcp

[root@host ~]# yum install -y dhcp

第二步:设置VMware的虚拟网络编辑,添加两个新的VMnet,都为仅主机模式,都把选项使用本地DHCP服务将IP地址分配给虚拟机取消掉

在这里插入图片描述

第三步:对四台虚拟机做配置更改

  其中Centos7-2作为DHCP服务器,它包含了两张网卡,一个对外通信的网卡和一个对内通信的网卡。另外三台虚拟机作为客户端,其中win10作为boss机,IP地址绑定物理地址。

在这里插入图片描述

第四步:配置DHCP服务器网路设置

  查看添加网卡后的网卡配置情况,并对新网卡(ens33)添加IP地址和子网掩码,将其设置的外网地址,将原网卡(ens32)作为内网地址。

[root@host ~]# ifconfig
ens32: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 192.168.223.100  netmask 255.255.255.0  broadcast 192.168.223.255
        inet6 fe80::e60f:ae87:40b7:a144  prefixlen 64  scopeid 0x20<link>
        ether 00:0c:29:20:88:32  txqueuelen 1000  (Ethernet)
        RX packets 1187  bytes 621997 (607.4 KiB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 625  bytes 60116 (58.7 KiB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

ens33: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet6 fe80::98ae:b0d5:1feb:cbf4  prefixlen 64  scopeid 0x20<link>
        ether 00:0c:29:20:88:3c  txqueuelen 1000  (Ethernet)
        RX packets 456  bytes 43988 (42.9 KiB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 158  bytes 27652 (27.0 KiB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0
        
[root@host ~]# ifconfig ens33 12.0.0.100/24
[root@host ~]# ifconfig
ens32: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 192.168.223.100  netmask 255.255.255.0  broadcast 192.168.223.255
        inet6 fe80::e60f:ae87:40b7:a144  prefixlen 64  scopeid 0x20<link>
        ether 00:0c:29:20:88:32  txqueuelen 1000  (Ethernet)
        RX packets 1201  bytes 625539 (610.8 KiB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 637  bytes 60836 (59.4 KiB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

ens33: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 12.0.0.100  netmask 255.255.255.0  broadcast 12.0.0.255
        ether 00:0c:29:20:88:3c  txqueuelen 1000  (Ethernet)
        RX packets 464  bytes 45984 (44.9 KiB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 169  bytes 29624 (28.9 KiB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

第五步:配置dhcpd配置文件

  yum安装完后在/etc/目录下生成的目录和配置文件, 查看/etc/dhcp/dhcpd.conf文件,可以看到另外一个目录里的样本文件,其余都是空的,将另一个目录里的样本文件复制过来,覆盖该文件,并对文件进行相应的配置,其中,boss机设置时需要对应客户机的物理地址,可通过ipconfig /all来查看。

[root@host dhcp]# rpm -qa | grep dhcp
dhcp-4.2.5-83.el7.centos.1.x86_64
dhcp-libs-4.2.5-83.el7.centos.1.x86_64
dhcp-common-4.2.5-83.el7.centos.1.x86_64
[root@host ~]# cd /etc/dhcp/
[root@host dhcp]# ls
dhclient.d  dhclient-exit-hooks.d  dhcpd6.conf  dhcpd.conf  scripts
[root@host dhcp]# vim dhcpd.conf 
#
# DHCP Server Configuration file.
#   see /usr/share/doc/dhcp*/dhcpd.conf.example
#   see dhcpd.conf(5) man page
#
[root@host dhcp]# cp  /usr/share/doc/dhcp*/dhcpd.conf.example /etc/dhcp/dhcpd.conf 
cp:是否覆盖"/etc/dhcp/dhcpd.conf"? yes


[root@host dhcp]# vim dhcpd.conf 
# option definitions common to all supported networks...
//设置默认租约的时间为7天,单位为秒。初始设置值为21600。
default-lease-time 604800;
//设置最大租约时间为10天,单位为秒。初始设置值为43200。
max-lease-time 864000;

# This is a very basic subnet declaration.
//设置内网地址相关配置
subnet 192.168.223.0 netmask 255.255.255.0 {
  range 192.168.223.100 192.168.223.200;
  option routers 192.168.223.254;
}
//设置外网地址相关配置
subnet 12.0.0.0 netmask 255.255.255.0 {
  range 12.0.0.110 12.0.0.210;
  option routers 12.0.0.254;
}

# set.
//设置boss机配置,其中物理地址的-需要改成:
host fantasia {
  hardware ethernet 00:0C:29:09:9E:A3;
  fixed-address 192.168.223.188;
}

  boss机设置时需要对应客户机的物理地址

C:\Users\Tang>ipconfig /all

Windows IP 配置

   主机名  . . . . . . . . . . . . . : DESKTOP-RKBNBBN
   主 DNS 后缀 . . . . . . . . . . . :
   节点类型  . . . . . . . . . . . . : 混合
   IP 路由已启用 . . . . . . . . . . : 否
   WINS 代理已启用 . . . . . . . . . : 否
   DNS 后缀搜索列表  . . . . . . . . : example.org

以太网适配器 Ethernet0:

   连接特定的 DNS 后缀 . . . . . . . : example.org
   描述. . . . . . . . . . . . . . . : Intel(R) 82574L Gigabit Network Connection
   物理地址. . . . . . . . . . . . . : 00-0C-29-09-9E-A3
   DHCP 已启用 . . . . . . . . . . . : 是
   自动配置已启用. . . . . . . . . . : 是
   本地链接 IPv6 地址. . . . . . . . : fe80::9de4:a09e:3949:b38b%11(首选)
   IPv4 地址 . . . . . . . . . . . . : 192.168.223.102(首选)
   子网掩码  . . . . . . . . . . . . : 255.255.255.0
   获得租约的时间  . . . . . . . . . : 2023年4月17日 23:47:06
   租约过期的时间  . . . . . . . . . : 2023年4月24日 23:47:05
   默认网关. . . . . . . . . . . . . : 192.168.223.254
   DHCP 服务器 . . . . . . . . . . . : 192.168.223.100
   DHCPv6 IAID . . . . . . . . . . . : 100666409
   DHCPv6 客户端 DUID  . . . . . . . : 00-01-00-01-2B-98-A1-CF-00-0C-29-09-9E-A3
   DNS 服务器  . . . . . . . . . . . : fec0:0:0:ffff::1%1
                                       fec0:0:0:ffff::2%1
                                       fec0:0:0:ffff::3%1
   TCPIP 上的 NetBIOS  . . . . . . . : 已启用

以太网适配器 蓝牙网络连接:

   媒体状态  . . . . . . . . . . . . : 媒体已断开连接
   连接特定的 DNS 后缀 . . . . . . . :
   描述. . . . . . . . . . . . . . . : Bluetooth Device (Personal Area Network)
   物理地址. . . . . . . . . . . . . : F8-A2-D6-B0-D8-86
   DHCP 已启用 . . . . . . . . . . . : 是
   自动配置已启用. . . . . . . . . . : 是

第六步:重启dhcp服务,读取新的配置,查看dhdcp服务的状态是否为开启

//重启服务
[root@host dhcp]# systemctl restart dhcpd.service 
//查看状态
[root@host dhcp]# systemctl status dhcpd.service 
● dhcpd.service - DHCPv4 Server Daemon
   Loaded: loaded (/usr/lib/systemd/system/dhcpd.service; disabled; vendor preset: disabled)
   Active: active (running) since 一 2023-04-17 22:51:05 CST; 12s ago
     Docs: man:dhcpd(8)
           man:dhcpd.conf(5)
 Main PID: 59373 (dhcpd)
   Status: "Dispatching packets..."
    Tasks: 1
   CGroup: /system.slice/dhcpd.service
           └─59373 /usr/sbin/dhcpd -f -cf /etc/dhcp/dhcpd.conf -user dhcpd -group dh...

4月 17 22:51:05 host dhcpd[59373]: Listening on LPF/ens33/00:0c:29:20:88:3c/12.0.../24
4月 17 22:51:05 host dhcpd[59373]: Sending on   LPF/ens33/00:0c:29:20:88:3c/12.0.../24
4月 17 22:51:05 host dhcpd[59373]: Listening on LPF/ens32/00:0c:29:20:88:32/192..../24
4月 17 22:51:05 host dhcpd[59373]: Sending on   LPF/ens32/00:0c:29:20:88:32/192..../24
4月 17 22:51:05 host dhcpd[59373]: Sending on   Socket/fallback/fallback-net
4月 17 22:51:05 host systemd[1]: Started DHCPv4 Server Daemon.
4月 17 22:51:07 host dhcpd[59373]: DHCPDISCOVER from 00:0c:29:4a:22:26 via ens33
4月 17 22:51:07 host dhcpd[59373]: ICMP Echo reply while lease 12.0.0.100 valid.
4月 17 22:51:07 host dhcpd[59373]: Abandoning IP address 12.0.0.100: pinged befo...fer
4月 17 22:51:12 host dhcpd[59373]: DHCPDISCOVER from 00:0c:29:4a:22:26 via ens33
Hint: Some lines were ellipsized, use -l to show in full.

第七步:重新配置contos7-1的网卡配置,改为自动获取

  此时所有配置完成后,进入到客户机Centos7-1中查看网卡配置,此时的IP地址还是原来的静态获取的,想要用DHCP来自动获取分配的IP地址,需要先修改网卡配置,改为dhcp自动获取后,重启网卡,就可以查看到已经自动获取了之前所设置的地址池中的地址

[root@host ~]# ifconfig
ens32: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        ether 00:0c:29:97:ff:e9  txqueuelen 1000  (Ethernet)
        RX packets 2796  bytes 204884 (200.0 KiB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 0  bytes 0 (0.0 B)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0
...
[root@host ~]# vim /etc/sysconfig/network-scripts/ifcfg-ens32
TYPE=Ethernet
PROXY_METHOD=none
BROWSER_ONLY=no
BOOTPROTO=dhcp
DEFROUTE=yes
IPV4_FAILURE_FATAL=no
IPV6INIT=yes
IPV6_AUTOCONF=yes
IPV6_DEFROUTE=yes
IPV6_FAILURE_FATAL=no
IPV6_ADDR_GEN_MODE=stable-privacy
NAME=ens32
UUID=a80fcaec-6f34-4742-af33-f17dc432201b
DEVICE=ens32
ONBOOT=yes
[root@host ~]# systemctl restart network
[root@host ~]# ifconfig
ens32: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 192.168.223.101  netmask 255.255.255.0  broadcast 192.168.223.255
        inet6 fe80::b241:5ba7:6f89:6bc6  prefixlen 64  scopeid 0x20<link>
        ether 00:0c:29:97:ff:e9  txqueuelen 1000  (Ethernet)
        RX packets 2825  bytes 207678 (202.8 KiB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 27  bytes 4670 (4.5 KiB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0
...

第八步:继续验证两台windows客户机的DHCP是否成功

  先打开命令提示符软件,输入ipconfig查看当前网卡配置,发现是没有IP地址的,输入ipconfig /renew获取新的IP地址,完成后发现IP地址与设置的boss机地址和地址池中的外网地址一样则成功,若已有IP地址,先ipconfig /release释放已经获取的地址后,再输入ipconfig /renew获取新的IP地址即可

boss机win10内网地址

C:\Users\Tang>ipconfig 

Windows IP 配置


以太网适配器 Ethernet0:

   连接特定的 DNS 后缀 . . . . . . . :
   本地链接 IPv6 地址. . . . . . . . : fe80::9de4:a09e:3949:b38b%11
   默认网关. . . . . . . . . . . . . :
C:\Users\Tang>ipconfig /renew

Windows IP 配置

以太网适配器 Ethernet0:

   连接特定的 DNS 后缀 . . . . . . . : example.org
   本地链接 IPv6 地址. . . . . . . . : fe80::9de4:a09e:3949:b38b%11
   IPv4 地址 . . . . . . . . . . . . : 192.168.223.188
   子网掩码  . . . . . . . . . . . . : 255.255.255.0
   默认网关. . . . . . . . . . . . . : 192.168.223.254

客户机win10-1内网地址

C:\Users\Tang>ipconfig 

Windows IP 配置


以太网适配器 Ethernet0:

   连接特定的 DNS 后缀 . . . . . . . :
   本地链接 IPv6 地址. . . . . . . . : fe80::1987:a47b:9572:41c3%11
   默认网关. . . . . . . . . . . . . :
C:\Users\Tang>ipconfig /renew

Windows IP 配置

以太网适配器 Ethernet0:

   连接特定的 DNS 后缀 . . . . . . . : example.org
   本地链接 IPv6 地址. . . . . . . . : fe80::1987:a47b:9572:41c3%11
   IPv4 地址 . . . . . . . . . . . . : 12.0.0.110
   子网掩码  . . . . . . . . . . . . : 255.255.255.0
   默认网关. . . . . . . . . . . . . : 12.0.0.254
  • 0
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

我的宝贝大唐

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值