我们一起谈谈DHCP协议

网络 通信技术
DHCP(DynamicHost ConfigurationProtocol),动态主机配置协议,是一个应用层协议。当我们将客户主机ip地址设置为动态获取方式时,DHCP服务器就会根据DHCP协议给客户端分配IP,使得客户机能够利用这个IP上网。

 [[375124]]

01DHCP协议简介

DHCP(DynamicHost ConfigurationProtocol),动态主机配置协议,是一个应用层协议,具体可以参考《TCP/IP四层模型》文章。当我们将客户主机ip地址设置为动态获取方式时,DHCP服务器就会根据DHCP协议给客户端分配IP,使得客户机能够利用这个IP上网。

DHCP的几个概念:

DHCPClient:DHCP客户端,通过DHCP协议请求IP地址的客户端。DHCP客户端是接口级的概念,如果一个主机有多个以太接口,则该主机上的每个接口都可以配置成一个DHCP客户端。交换机上每个Vlan接口也可以配置成一个DHCP客户端。

DHCPServer:DHCP服务端,负责为DHCP客户端提供IP地址,并且负责管理分配的IP地址。

DHCPRelay:DHCP中继器,DHCP客户端跨网段申请IP地址的时候,实现DHCP报文的转发功能。

DHCPSecurity:DHCP安全特性,实现合法用户IP地址表的管理功能。

DHCPSnooping:DHCP监听,记录通过二层设备申请到IP地址的用户信息。

02DHCP工作原理

DHCP使用UDP协议工作,采用67(DHCP服务器端)和68(DHCP客户端)两个端口号。546号端口用于DHCPv6Client,而不用于DHCPv4,是为DHCPfailover服务。DHCP客户端向DHCP服务器发送的报文称之为DHCP请求报文,而DHCP服务器向DHCP客户端发送的报文称之为DHCP应答报文。

DHCP交互过程共分为4步

第一步

Client端在局域网内发起一个DHCP Discover包,目的是想发现能够给它提供IP的DHCPServer。

第二步

可用的DHCPServer接收到Discover包之后,通过发送DHCPOffer包给予Client端应答,意在告诉Client端它可以提供IP地址。

第三步

Client端接收到Offer包之后,发送DHCPRequest包请求分配IP。

第四步

DHCPServer发送ACK数据包,确认信息。

03Wireshark抓包分析

要想抓取到DHCP包,先要保证有可用的DHCP服务器,然后将主机IP地址获取方式设置为自动获取。我们的测试环境是,笔记本设置为DHCP模式,路由开启DHCP服务。由于笔记本在开机时想路由DHCP去获取IP,开机时无法迅速打开wireshark软件进行抓包,我们使用以下命令先断开主机的网络连接,然后再连接网络。

  1. ipconfig /release 
  2. ipconfig /renew 

在cmd中可以使用ipconfig/?查看各参数的含义:

命令详解:

(1)ipconfig /release

断开当前的网络连接,主机IP变为0.0.0.0,主机与网络断开,不能访问网络。

(2)ipconfig /renew

更新适配器信息,请求连接网络,这条命令结束之后,主机会获得一个可用的IP,再次接入网络。

抓取的数据包如下,注意使用dhcp过滤条件。

wireshark抓包文件

链接:https://pan.baidu.com/s/1RzvISOkzkVoWOzJDRi5NwQ

提取码:lpg9

(提示:公众号不支持外链接,请复制链接到浏览器下载)

可以清楚看到DHCP的四个步骤。

DHCP Discover数据包

在Discover阶段,可以看出客户端发出的是广播复制,MAC地址广播相关内容请看《802.3以太网帧》,IP地址广播相关内容请看《IP协议详解》。从下图也可以看出DHCP是基于UDP协议的,采用67(DHCP服务器端)和68(DHCP客户端)两个端口号,这个上文讲过了,在抓包文件中证实了。DHCP报文格式基于BOOTP的报文格式,DHCP具体的报文格式并不是本文重点,本文并不会详细讲解DHCP报文中每个字节的含义。

DHCP Offer包

当DHCP服务器收到一条DHCPDiscover数据包时,用一个DHCPOfferr包给予客户端响应。 这一数据报中客户客户端获取到了最重要的IP地址信息。除此之外,服务器还发送了子网掩码,路由器,DNS,域名,IP地址租用期等信息。

DHCP服务器仍然使用广播地址作为目的地址,因为此时请求分配IP的Client并没有自己ip,而可能有多个Client在使用0.0.0.0这个IP作为源IP向DHCP服务器发出IP分配请求,DHCP也不能使用0.0.0.0这个IP作为目的IP地址,于是依然采用广播的方式,告诉正在请求的Client们,这是一台可以使用的DHCP服务器。

DHCP Request包

当Client收到了DHCPOffer包以后(如果有多个可用的DHCP服务器,那么可能会收到多个DHCPOffer包),确认有可以和它交互的DHCP服务器存在,于是Client发送Request数据包,请求分配IP。

此时的源IP和目的IP依然是0.0.0.0和255.255.255.255。

DHCP ACK包

服务器用DHCPACK包对DHCP请求进行响应。 

04DHCP缺点

DHCP可以很好的进行IP地址的分配,但是DHCP协议已存在一些缺点,如:

1、DHCP协议不支持跨网段进行地址分配

2、DHCP协议不能获取非DHCP客户端的IP地址,在地址池设置不合理的情况下可能会造成地址冲突。

基于上述的缺陷,我们需要合理对IP地址池进行设置,并预留一些IP地址,分配给需要固定IP的服务器。

本文转载自微信公众号「 知晓编程」,可以通过以下二维码关注。转载本文请联系 知晓编程公众号。

 

责任编辑:武晓燕 来源: 知晓编程
相关推荐

2021-12-16 12:01:21

区块链Libra货币

2022-02-23 08:41:58

NATIPv4IPv6

2022-11-02 08:41:40

2022-04-07 11:43:24

UPnPDLNA协议

2022-03-31 18:59:43

数据库InnoDBMySQL

2023-08-04 08:20:56

DockerfileDocker工具

2021-08-27 07:06:09

DubboDocker技术

2023-06-30 08:18:51

敏捷开发模式

2022-10-18 07:33:57

Maven构建工具

2023-08-10 08:28:46

网络编程通信

2022-05-24 08:21:16

数据安全API

2023-09-10 21:42:31

2024-02-20 21:34:16

循环GolangGo

2021-08-27 07:06:10

IOJava抽象

2022-01-17 06:59:40

Grep指令linux

2021-07-28 07:53:20

Github ActiDotnet 应用

2021-12-29 08:27:05

ByteBuffer磁盘服务器

2022-03-08 17:52:58

TCP格式IP

2021-07-02 20:46:06

Go接口动态

2022-12-07 09:01:14

布局容器VStack​
点赞
收藏

51CTO技术栈公众号