大家好,又见面了,我是你们的朋友全栈君。
DHCP的全名叫什么?
(Dynamic Host configuration Protocol,动态主机配置协议 )是一个局域网的网络协议,使用UDP协议工作;主要有两个用途:
(1)用于内部网或网络服务供应商自动分配IP地址;
(2)给用户用于内部网管理员作为对所有计算机作中央管理的手段。
功能简述:它主要是通过客户端发送广播数据包给整个物理网段内的所有主机,若局域网内有DHCP服务器时,才会响应客户端的IP参数要求。
1.成为一个DHCP的服务器的条件
(1)拥有真实物理网卡,或者连接广播域的真实物理网卡
(2).该接口或者该物理网卡必须有一个合理的ip地址 此IP地址最好手动配置;
2.DHCP 协议中分为两个角色:
DHCP server服务端 和DHCP client客户端。
服务端:负责在所创建的地址池中向申请地址的客户端分发地址;服务端口号67
客户端:接收地址 服务端口号68
DHCP 基于UDP 发送所有的数据包,
在工作过程中依靠广播的形式发送报文信息,
与客户端实现交互,达到成功准确的分发地址。
DHCP工作过程中 重要的相关报文:
DHCP discover报文
DHCP offer 报文
可以发现 offer报文中
源MAC地址为 服务器的MAC地址;目标MAC地址为全F;
源ip地址为 服务器的iP地址;目标ip地址为255.255.255.255 255.255.255.255
源端口 为 67; 目标端口为68。
则可知 offer报文依旧是通过广播的形式发送,但是如果同时有多个客户端申请IP ,为何不出现错误?
因为在offer报文中 实际包含了客户端的MAC地址,则不会出现错误。
但由于 如果多个server存在,先接受到的地址 先生效,会出现DHCP欺骗攻击。
:在一个区域内 可能会有多个server服务器,有因为是DHCP基于UDP传输协议;缺少TCP的四种可靠机制;所以才会产生DHCP的request报文和DHCP ACK 报文。
DHCP request 报文
可以看出request 报文中:
源MAC为 客户端本地MAC地址;目标MAC地址为全F;
源ip地址为 0.0.0.0 0.0.0.0 ;目标ip地址为 255.255.255.255.255 255.255.255.255;
源端口为68 ;目标端口为67。
该报文依旧是以广播的形式发送,
最终接受的是所有的server。
确保使用的是那个服务器下发的地址,
未使用的地址服务器进行回收,继续下发给其他客户端。
(Firstinput firstoutput 先进先出的问题,所以有两台dhcp服务器时使用的是最先用最先配置的dhcp服务器)
DHCP ACK 报文
交换安全中的
DHCP 欺骗 攻击
3.DHCP 的三种分配机制
自动分配方式(Automatic Allocation) | DHCP服务器为主机指定一个永久性的IP地址,一旦DHCP客户端第一次成功从DHCP服务器端租用到IP地址后,就可以永久性的使用该地址。 |
---|---|
动态分配方式(Dynamic Allocation) | DHCP服务器给主机指定一个具有时间限制的IP地址,时间到期或主机明确表示放弃该地址时,该地址可以被其他主机使用。 |
– | – |
手工分配方式(Manual Allocation) | 客户端的IP地址是由网络管理员指定的,DHCP服务器只是将指定的IP地址告诉客户端主机。 |
4.详细的DHCP 工作过程
如下图:
(1)客户端:利用广播数据包发送搜索DHCP服务器
若客户端网络设置使用DHCP协议取得IP,则当客户端开机或者是重新启动网卡时,客户端主机会发送出查找DHCP服务器的UDP数据包(discover)给所有物理网段内的计算机。因为客户端还不知道自己属于哪一个网络,所以该数据包的来源地址会为0.0.0.0,而目的地址则为255.255.255.255。一般主机接收到这个数据包之后会直接丢弃,若局域网内有DHCP服务器,则会开始后续行为。
(2)服务器端:提供客户端网络相关的租约以供选择。(dhcp offer)
DHCP服务器在监听到客户端发出的dhcp discover广播后,会针对这个客户端的硬件地址( MAC)与本身的设置数据进行下列工作:
(1)到服务器的日志文件中查找该用户之前是否曾经租用过某个IP,若有且该IP目前无人使用,则提供此IP给客户端。
(2)若配置文件针对该MAC地址提供特定的固定IP时,则提供该固定的IP给客户端。
(3)若不符合上述两个条件,则随机选取当前没有被使用的IP参数给客户端,并记录下来。
(3)客户端:决定选择DHCP服务器提供的网络参数租约并向服务器确认。
由于局域网内可能并非仅有一台DHCP服务器,但客户端仅能接收一组网络参数租约,因此客户端只会挑选其中一个DHCP offer(通常是最先抵达的那个)。当决定好使用此服务器的网络参数租约后,客户端便开始使用这组网络参数来配置自己的网络环境。此外,客户端会发送一个dhcp request广播数据包给所有物理网段内的主机,告知已经接受该服务器的租约(此时若有两台以上的DHCP服务器,则这些没有被接受的服务器会收回该IP租约。)。同时,客户端还会向网络发送一个ARP封包,查询网络上面有没有其他机器使用该IP地址;如果发现该IP地址已经被占用,客户端则会送出一个DHCPDECLIENT包给DHCP服务器,拒绝接受其DHCP offer,并重新发送DHCP discover信息。
(4)服务器端:记录该次租约行为后并向客户端发送响应数据包信息以确认客户端的使用。
当服务器端收到客户端的确认选择后,服务器会回送确认的dhcp ack响应数据包,并且告知客户端这个网络参数租约的期限,并且开始租约计时。那么该次租约何时会到期而被解约,有以下几种情况:
客户端脱机:关闭网络接口、重新启动、关机等行为,都算是脱机状态,这个时候server端就会将该IP地址收回,并放到server的备用区中,以便日后使用。
客户端租约到期:dhcp server端发放的IP有使用的期限,客户端使用这个IP到达期限规定的时间,而且没有重新提出DHCP的申请时,server端就会将该IP收回,这个时候就会断线。但用户也可以向DHCP服务器再次要求分配IP。
由于目前的DHCP客户端程序大多数会主动依据租约时间去重新申请IP,所以即使有租约期限,也不需要在某个时间点手动去重新申请IP。一般情况下,假设租约时间是T小时,那么客户端程序在0.5T时会主动向DHCP服务器发出重新要求网络参数的数据包。如果这次数据包请求没有成功,那么在0.85T后还会再次发送数据包一次。正因如此,所以服务器端会启动port67监听客户端请求,而客户端会启动port68主动向服务器请求。
5.DHCP 在linux中的相关配置:
以下实验运行环境:redhat 7.2 linux虚拟机
DHCP 需要配置的相关项
地址池
网段
网关
Dns
1.第一步首先需要安装软件
[root@web ~]# yum install dhcp -y
2.DHCP 服务器的主要配置文件 /etc/dhcp/dhcpd.conf
dhcp服务器与客户端租约建立的起始与到期日记录文件:/var/lib/dhcpd/dhcpd.leases
[root@localhost 桌面]# vim /etc/dhcp/dhcpd.conf
示例文件/usr/share/doc/dhcp-4.2.5/dhcpd.conf.example
注意:
- 1
编写DHCP配置文件的规范:
除了括号后面之外,其他的每一行配置最后都要以“;”结尾。
配置项目的语法形式主要是“参数代号 配置内容”。
某些配置项目必须以option来定义,基本形式为“option 参数代码、
配置内容”
dhcp.conf中的配置主要分为两大项目;
一个是服务器运行的全局设置,一个是IP分配设置。
(1) 全局设置:当IP分配设置没有定义到某些设置时,则以全局设置为准。
default-lease-time默认的租约时间(用户的计算机也能够要求一段特定长度的租约时间。但若用户没有特别要求租约时间,默认以此为准。时间单位默认为秒)
max-lease-time最大租约时间(如果用户要求的租约时间超过该值,则以此值为准)
option domain-name 域名(如果在/etc/resolv.conf里面设置了一个search xxx.com的话,这表示当你要查找主机名时,DNS系统会主动帮你在所要查找的主机名后加上这个域名后缀)
option domain-name-servers IP1、IP2(这个设置参数可以修改客户端的/etc/resolv.conf文件)
ddns-update-style 类型(因为dhcp客户端所取得的IP通常是一直变动的,所以此时DHCP可以通过ddns来更新主机名与IP的对应关系)
ignore client-updates(与上一个设置值有关,客户端可通过dhcp服务器来更新DNS相关的信息。设置成ignore为忽略)
option routers 路由器地址(设定路由器的IP地址)
#配置DHCP和dns服务的更新模式,一般不用,但是必须有该项,否则服务无法启动
ddns-update-style interim; DNS互动更新模式
ignore client-updates; 忽略客户端更新
(2) 由于dhcp主要是针对局域网来分配IP参数,因此在设置IP之前,我们需要指定一个局域网(dhcp待分配地址的区域)。指定局域网的方式使用如下参数:
subnet 网络地址 netmask 子网掩码地址 {……}
括号内可有如下的内容:
range IP1 IP2指定IP1到IP2的地址范围给客户端
host 主机名 {……}这个host就是指定固定IP对应到固定MAC的设置值,主机名可以自己给与。在大括号内指定MAC与固定的IP。
hardware ethernet 硬件地址
fixed-address IP地址
#配置DHCP和dns服务的更新模式,一般不用,但是必须有该项,否则服务无法启动
ddns-update-style { interim | ad-hoe | none };
#作用:定义所支持的DNS动态更新类型。
# none:表示不支持动态更新
# interim:表示DNS互动更新模式
# ad-hoc:表示特殊DNS更新模式
ddns-update-style interim; # dns动态更新模式
ignore client-updates; #这个选项是不允许客户机更新 DNS 记录。当然,也可能允许,但会有一点问题。
重点配置:
#子网配置段
#声明网段和掩码
subnet 192.168.40.0 netmask 255.255.255.0 {
#指定地址池范围
range dynamic-bootp 192.168.40.130 192.168.40.254;
#指定网关
option routers 192.168.40.1;
#指定掩码
option subnet-mask 255.255.255.0;
#指定DNS
option domain-name-servers 114.114.114.114;
#默认租约
default-lease-time 21600;
#最大租约
max-lease-time 43200;
}
练习DHCP的配置:
练习题一: 单网段配置
在VMware 界面点击编辑————》点击虚拟网络编辑器————》
将本地DHCP服务关闭
准备工作:
关闭防火墙:[root@localhost ~]# systemctl stop firewalld
关闭selinux: [root@localhost ~]# setenforce 0
检查yum源:vim/etc/yum.repos.d/base.repo
检查挂载:[root@localhost ~]# mount /dev/sr0 /mnt
mount: /dev/sr0 is write-protected, mounting read-only
1.安装DHCP包:
2.进入配置文件 进行地址的编辑配置
[root@localhost ~]# vim /etc/dhcp/dhcpd.conf
保存退出 并重启服务
然后在客户端上进行 获取ip地址的请求
查看IP 为所配置地址池内的地址
练习题二 固定ip配置
[root@localhost ~]# vim /etc/dhcp/dhcpd.conf
重启服务
在指定的主机上获取IP地址
相关介绍
DHCP客户端
在支持DHCP功能的网络设备上将指定的端口作为DHCP Client,通过DHCP协议从DHCP Server动态获取IP地址等信息,来实现设备的集中管理。一般应用于网络设备的网络管理接口上。
DHCP客户端可以带来如下好处:
降低了配置和部署设备时间。
降低了发生配置错误的可能性。
可以集中化管理设备的IP地址分配。
DHCP服务器
DHCP服务器指的是由服务器控制一段IP地址范围,客户端登录服务器时就可以自动获得服务器分配的IP地址和子网掩码。
DHCP中继代理
DHCPRelay(DHCPR)DHCP中继 也叫做DHCP中继代理。DHCP中继代理,就是在DHCP服务器和客户端
之间转发DHCP数据包。当DHCP客户端与服务器不在同一个子网上,就必须有DHCP中继代理来转发DHCP请求和应答消息。DHCP中继代理的数据转发,与通常路由转发是不同的,通常的路由转发相对来说是透明传输的,设备一般不会修改IP包内容。而DHCP中继代理接收到DHCP消息后,重新生成一个DHCP消息,然后转发出去。
在DHCP客户端看来,DHCP中继代理就像DHCP服务器;在DHCP服务器看来,DHCP中继代理就像DHCP客户端。
DHCP的使用情况
什么时候最好使用 DHCP ?
公司内部很多 Laptop计算机使用的场合!因为 Laptop在使用上,当设定为DHCP client 的时候,那么只要它连接上的网域里面有一部可以上网的 DHCP服务器 ,那部Laptop也就可以连接上 Internet 了!
网域内计算机数量相当的多时:另外一个情况就是网域内计算机数量相当庞大时,大到您没有办法一个一个的进行说明来设定他们自己的网络参数,这个时候为了省麻烦,还是架设DHCP 来的方便。
什么情况下不建议使用 DHCP 主机?
Client 在开机的时候会主动的发送讯息给网域上的所有机器,这个时候,如果网域上就是没有DHCP主机呢?那么这部 Client 端计算机会发送四次请求信息,第一次等待时间为 1 秒,其余三次的等待时间分别是 9、13、16 秒。如果还是没有DHCP服务器的响应,那么在5分钟之后,Client端计算机会重复这一动作。
在网域内的计算机,有很多机器其实是做为主机的用途,很少Client 需求,那么似乎就没有必要架设 DHCP。
DHCP的报文格式
- OP:若是client送给server的封包,设为1,反向为2;
- Htype:硬件类别,ethernet为1;
- Hlen:硬件长度,ethernet为6;
- Hops:若数据包需经过router传送,每站加1,若在同一网内,为0;
- Transaction ID:事务ID,是个随机数,用于客户和服务器之间匹配请求和相应消息;
- Seconds:由用户指定的时间,指开始地址获取和更新进行后的时间;
- Flags:从0-15bits,最左一bit为1时表示server将以广播方式传送封包给 client,其余尚未使用;
- Ciaddr:用户IP地址;
- Yiaddr:客户IP地址;
- Siaddr:用于bootstrap过程中的IP地址;
- Giaddr:转发代理(网关)IP地址;
- Chaddr:client的硬件地址;
- Sname:可选server的名称,以0x00结尾;
- File:启动文件名;
- Options:,厂商标识,可选的参数字段
发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/142506.html原文链接:https://javaforall.cn
【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛
【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...