![7158333eb227a59de169e50a7b012291.gif](https://i-blog.csdnimg.cn/blog_migrate/42464f552b6b7baf1635cb5991c3edac.gif)
前言
前面介绍了应用层的DNS协议 你知道上网时输入的URL是怎么解析成IP地址的吗?一文带你搞懂DNS,我们知道了DNS可以将域名映射成IP地址。
今天给大家介绍下应用层另一个协议——动态主机配置协议DHCP。
我们的PC在和网络中的其他终端通信时需要获取一个IP地址,这个IP地址可以手动配置,也可以通过DHCP协议动态获取。今天就来看下我们的PC是如何动态获取到IP地址的?
正文
1 为什么需要DHCP动态分配IP地址? DHCP和手动配置IP的优缺点?
手动配置IP地址
操作简单,但是在局域网容易造成IP地址冲突,如果终端数量较多需要一台台配置,工作量大。
使用DHCP动态分配IP地址:
可以减少管理员的工作量,避免用户手工配置网络参数时造成的地址冲突。
2 什么是DHCP协议
DHCP(动态主机配置协议)是应用层的网络协议,可以用于给客户端动态分配IP地址和子网掩码。DHCP基于服务器-客户端的模式进行工作。
3 DHCP的工作原理
DHCP协议是基于客户端-服务器模式的,为了动态获取IP地址和子网掩码配置信息,DHCP客户端需要和DHCP服务器进行报文交互。
1、DHCP客户端发送DHCP Discover广播报文来发现DHCP服务器。(询问谁可以为我分配IP地址。)
2、DHCP服务器在收到DHCP Discover报文后,会选取一个未分配的IP地址,向DHCP客户端发送DHCP提供报文(DHCP Offer),此报文中包含IP地址等配置信息。如果存在多个DHCP服务器,每个DHCP服务器都会响应。(告诉DHCP客户端我可以给你提供服务)
3、如果有多个DHCP服务器向DHCP客户端发送DHCP提供报文,DHCP客户端将会选择收到的第一个DHCP提供报文,然后发送DHCP Request报文,报文中包含请求的IP地址。(告诉所有的DHCP服务器我选择哪个服务器给我分配的地址)
4、DHCP服务器在收到DHCP Request报文后,会回应一个DHCP Ack报文。(告诉DHCP客户端我知道了)
地址冲突检测:
DHCP客户端收到DHCP Ack报文后,会发送免费ARP报文,检查网络中是否有其他主机使用分配的IP地址。
1、如果指定时间内没有收到ARP应答,DHCP客户端会使用这个IP地址。
2、如果有主机使用该IP地址,DHCP客户端会向DHCP服务器发送DHCP拒绝报文,通知服务器该IP地址已被占用。然后DHCP客户端会向服务器重新申请一个IP地址。
DHCP地址续租:
在使用租期超过50%时刻处DHCP Client会以单播形式向DHCP Server发送DHCP Request报文来续租IP地址。
1、如果DHCP Client成功收到DHCP Server发送的DHCP ACK报文,则按相应时间延长IP地址租期;
2、如果没有收到DHCP Server发送的DHCP ACK报文,则DHCP Client继续使用这个IP地址。
在使用租期超过87.5%时刻处,DHCP Client会以广播形式向DHCP Server发送DHCP Request报文来续租IP地址。
1、如果DHCP Client成功收到DHCP Server发送的DHCP ACK报文,则按相应时间延长IP地址租期;
2、如果没有收到DHCP Server发送的DHCP ACK报文,则DHCP Client继续使用这个IP地址,直到IP地址使用租期到期时,DHCP Client才会向DHCP Server发送DHCP Release报文来释放这个IP地址,并开始新的IP地址申请过程。
注意:
从上面我们知道DHCP客户端经历了从DHCP服务器动态获取IP地址,续租IP地址到最后释放IP地址的生命周期。
4 DHCP报文类型和报文格式:
DHCP 协议提供了多种类型的报文,但是基本格式是相同的,不同类型的报文只是报文中的某些字段值不同。
DHCP 报文的基本格式如图所示:
上图中每个字段含义如下:
op:报文的操作类型。分为请求报文和响应报文。客户端发送给服务器的包为请求报文,值为 1;服务器发送给客户端的包为响应报文,值为 2。
htype:DHCP 客户端的 MAC 地址类型。MAC 地址类型其实是指明网络类型,htype 值为 1 时表示为最常见的以太网 MAC 地址类型。
hlen:硬件地址长度。以太网 MAC 地址长度为 6 个字节,即 hlen 值为 6。
hops:跳数,DHCP 报文经过的中继数量。每经过一个路由器,该字段就会增加 1。如果没有经过路由器,则值为 0(同一网内)。
xid:事务 ID。客户端发起一次请求时选择的随机数,用来标识一次地址请求过程。在一次请求中所有报文的 xid 都是一样的。
secs:DHCP 客户端从获取到 IP 地址或者续约过程开始到现在所过去的时间,以秒为单位。在没有获得 IP 地址前,该字段始终为 0。
flags:BOOTP 标志位。只使用第 0 比特位,是广播应答标识位,用来标识 DHCP 服务器应答报文是采用单播还是广播发送。其中,0 表示采用单播发送方式,1 表示采用广播发送方式。其余位尚未使用。
ciaddr:DHCP 客户端的 IP 地址。仅在 DHCP 服务器发送的 ACK 报文中显示,在其他报文中均显示为 0。这是因为在得到 DHCP 服务器确认前,DHCP 客户端还没有分配到 IP 地址。
yiaddr:DHCP 服务器分配给客户端的 IP 地址。仅在 DHCP 服务器发送的 Offer 和 ACK 报文中显示,其他报文中显示为 0。
siaddr:为 DHCP 客户端分配 IP 地址等信息的其他 DHCP 服务器 IP 地址。仅在 DHCP Offer、DHCP ACK 报文中显示,其他报文中显示为 0。
giaddr:转发代理(网关)IP 地址,DHCP 客户端发出请求报文后经过的第一个 DHCP 中继的 IP 地址。如果没有经过 DHCP 中继,则显示为 0。
chaddr:DHCP 客户端的 MAC 地址。在每个报文中都会显示对应 DHCP 客户端的 MAC 地址。
sname:为客户端分配 IP 地址的服务器名称(DNS 域名格式)。只在 DHCP Offer 和 DHCP ACK 报文中显示发送报文的 DHCP 服务器名称,其他报文显示为 0。
file:DHCP 服务器为 DHCP 客户端指定的启动配置文件名称及路径信息。仅在 DHCP Offer 报文中显示,其他报文中显示为空。
options:可选选项,格式为“代码+长度+数据”。
5 DHCP的应用场景:
在大型网络中,会有大量的主机或设备需要获取IP地址等网络参数时,使用DHCP协议动态分配地址。
6 实战:
DHCP地址池
在做实验前先讲下DHCP地址池。
DHCP服务器的地址池是用来定义分配给主机的IP地址范围,DHCP支持配置两种地址池,包括全局地址池和接口地址池。
1、接口地址池为连接到同一网段的主机或终端分配IP地址。
可以在服务器的接口下执行dhcp select interface命令,配置DHCP服务器采用接口地址池的DHCP服务器模式为客户端分配IP地址。
2、全局地址池为所有连接到DHCP服务器的终端分配IP地址。
可以在服务器的接口下执行dhcp select global命令,配置DHCP服务器采用全局地址池的DHCP服务器模式为客户端分配IP地址。
接口地址池的优先级比全局地址池高。配置了全局地址池后,如果又在接口上配置了地址池,客户端将会从接口地址池中获取IP地址。
实验配置:在ENSP模拟器上模拟客户端通过DHCP获取IP地址
1、搭建拓扑图如下:
2、配置PC1的IP地址获取方式为DHCP
3、在R1路由器下做DHCP配置,采用接口地址池分配IP地址:
#
dhcp enable
#
interface Ethernet0/0/0
ip address 10.1.1.1 255.255.255.0
dhcp select interface
dhcp server excluded-ip-address 10.1.1.2
dhcp server lease day 3 hour 0 minute 0
dhcp server dns-list 10.1.1.2
#
dhcp enable命令用来使能DHCP功能。在配置DHCP服务器时,必须先执行dhcp enable命令,才能配置DHCP的其他功能并生效。
dhcp select interface命令用来关联接口和接口地址池,为连接到接口的主机提供配置信息。在本示例中,接口Ethernet 0/0/0被加入接口地址池中。
dhcp server dns-list命令用来指定接口地址池下的DNS服务器地址。
dhcp server excluded-ip-address命令用来配置接口地址池中不参与自动分配的IP地址范围。
dhcp server lease命令用来配置DHCP服务器接口地址池中IP地址的租用有效期限功能。缺省情况下,接口地址池中IP地址的租用有效期限为1天。
4、配置完成后通过ipconfig命令在PC1上查看IP地址获取情况。
可以看到PC1获取了IP地址为10.1.1.254,子网掩码为255.255.255.0,DNS服务器地址为10.1.1.2。
7 Wireshark抓包获取 DHCP 请求 IP 地址时的每种报文。
如下图所示为DHCP的四次握手的交互报文
1、该数据包是客户端向服务器发送的 DHCP Discover 数据包。
在上图中,由于当前客户端还没有 IP 地址,所以源 IP 地址为 0.0.0.0;客户端是向网络中所有服务器进行发送,使用的是广播包,所以目标 IP 地址为 255.255.255.255。
2、该数据包是 DHCP 服务器收到客户端 DHCP Discover 广播包后返回的 DHCP Offer 包。
由于是 DHCP 服务器给 DHCP 客户端发送提供的地址信息。因此,报文中应该包含 DHCP 服务器提供给客户端的 IP 地址信息,这里为 10.1.1.254;提供给客户端的子网掩码信息这里为 255.255.255.0。
3、该数据包是 DHCP 客户端向网络中所有 DHCP 服务器主机发出的 DHCP Request 消息。
由于此时客户端还没有真正拥有IP地址,因此源 IP 地址仍然为 0.0.0.0,该数据包是用来通知所有服务器的,以广播形式发出,因此目标 IP 地址为 255.255.255.255。
4、DHCP ACK 数据包是 DHCP 服务器给客户端发送的确认数据包。
可以看到服务器标识地址为 10.1.1.1,所以捕获的数据包的源 IP 地址为 10.1.1.1。目标地址为提供的 IP 地址 10.1.1.254。