前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >DHCP协议浅析

DHCP协议浅析

作者头像
全栈程序员站长
发布2022-08-25 12:27:16
1.4K0
发布2022-08-25 12:27:16
举报
文章被收录于专栏:全栈程序员必看

大家好,又见面了,我是你们的朋友全栈君。

定义:动态主机配置协议,主要在一些大型局域网络环境中,集中管理和分配IP地址,提升地址的使用效率。

DHCP协议采用CLIENT-SERVER方式实现,而且DHCP 协议是基于UDP层之上的应用,DHCP CLIENT将采用端口号68,DHCP SERVER采用端口号67进行交互。

DHCP的三种分配IP机制:

  1. 自动分配方式:DHCP服务器为主机指定一个永久性的IP地址。客户端一旦第一次成功租用IP过后,后面即可永久性使用次IP地址。
  2. 动态分配方式:DHCP服务器为主机指定一个具有时间期限的IP地址,到期或者客户端主动放弃该地址之后,即可被其他主机使用。
  3. 手工分配方式:IP地址是由网络管理员指定的,DHCP服务器只是将指定的IP地址告诉客户端主机。

DHCP与BOOTP之间的关系:

DHCP消息的格式是基于BOOTP消息格式的,但是BOOTP要求主机的硬件地址必须被手工输入到BOOTP表中。可以讲DHCP看成一个动态的BOOTP。

DHCP协议报文的种类:

1:DHCPDISCOVER:client客户端开始DHCP过程的第一个报文

2:DHCPOFFER:server服务器对DHCPDISCOVER报文的响应

3:DHCPREQUEST:client客户端开始DHCP过程中对server的DHCPOFFER报文的回应,或者是client续延IP地址租期时发出的报文

4:DHCPDECLINE:当client发现server分配给它的IP地址无法使用,如IP地址冲突时,将发出此报文,通知server禁止使用IP地址

5:DHCPACK:server对client的DHCPREQUEST报文的确认响应报文,Client收到此报文后,才真正获得了IP地址和相关的配置信息。

6:DHCPNAK:server对client的DHCPREQUEST报文的拒绝响应报文,Client收到此报文后,一般会重新开始新的DHCP过程。

7:DHCPRELEASE:client主动释放server分配给它的IP地址的报文,当Server收到此报文后,就可以回收这个IP地址,能够分配给其他的client。

8:DHCPINFORM:client已经获得了IP地址,发送此报文,只是为了从DHCP SERVER处获取其他的一些网络配置信息,如route IP,DNS IP等,这种报文的应用非常少见。

流程如下图(学习他人jpg)

DHCP协议浅析
DHCP协议浅析

图1 DHCP的工作过程图

流程解析:

1. DHCPDISCOVER寻找服务器

客户端开机或第一次登录网络时,设备发现本机没有IP设定,就会广播寻找DHCP服务器客户端此时还不知道自己属于哪一个网路﹐所以封包的来源地址会为0.0.0.0,目的地址则为255.255.255.255,然后再附上DHCP discover的信息(mac地址),向网路进行广播。 网络上每一台安装了TCP/IP协议的主机都会接收到这种广播信息,但只有DHCP服务器才会做出响应。

2. DHCPOFFER分配IP

DHCP服务器监听到客户端发出的DHCP Discover广播后, 会针对这个客户端的硬件地址 (MAC)与本身的设定数据来进行下列工作:

a. 到服务器的登录文件中寻找该用户之前是否曾经用过某个 IP ,若有且该 IP 目前无人使用,则提供此 IP 给客户机;

b. 若配置文件针对该 MAC 提供额外的固定 IP (static IP) 时,则提供该固定 IP 给客户机;

c. 若不符合上述两个条件, 则随机取用目前没有被使用的 IP 参数给客户端,记录下来并回应给客户端一个DHCP OFFER封包,由于客户端在开始的时候还没有IP地址﹐所以在其DHCP Discover封包内会带有其MAC地址信息﹐并且有一个XID编号来辨别该封包﹐DHCP服务器回应的DHCP Offer封包则会根据这些资料传递给要求租约的客户。

3. DHCPREQUEST请求使用

如果客户端收到网路上多台DHCP服务器的回应﹐只会挑选其中一个DHCP Offer(通常是最先抵达的那个)并且向网路发送一个DHCP Request广播封包,告诉所有DHCP服务器它将指定接受哪一台服务器提供的IP位址。同时,客户端还会发送一个ARP封包, 查询网络上有没有其他机器使用该IP地址, 如果发现该IP被其他客户端占用, 客户端会发送一个DHCP Decline封包给DHCP服务器, 拒绝接受其DHCP Offer,并重新开始发送DHCP Discover信息。

4. DHCPACK分配确认

当DHCP服务器收到DHCP客户机回答的DHCP Request请求信息之后, 便向DHCP客户机发送一个包含它所提供的IP地址和其他设置的DHCP Ack确认信息。以确认IP地址的正式生效。然后DHCP客户机便将其TCP/IP协议与网卡绑定,另外,除DHCP客户机选中的服务器外,其他的DHCP服务器都将收回曾提供且不被使用的IP地址。

更新IP租约:

当client客户端获得一个具有时间期限的IP地址之后,将会自动维护一个定时器,在IP地址使用期限的50%的时刻,自动启动单播续延IP地址租期的过程,如若续延成功,则使用租期相应向前延长,否则,在IP地址使用期限的87.5%的时刻,自动启动广播续延IP地址租期的过程,如若续延成功,则使用租期相应向前延长,否则在IP地址使用期限到期时,DHCP CLIENT将不再使用此IP地址,而是开始新的DHCP过程再次申请IP地址。

DHCP报文格式解析(学习他人jpg)

DHCP协议浅析
DHCP协议浅析

图2 DHCP报文格式图

“op”字段:表示当前报文是client的请求还是server的应答,“1”时为表示是client的请求,“2”时表示是server的应答。

“htype”,“hlen”字段:分别表示client 的网络硬件地址类型、长度。

“HOPS跳数”字段:表示当前的DHCP报文经过的DHCP RELAY的次数,此字段初始化为0,每经过一个DHCP RELAY,此字段就会加1,作用是限制DHCP报文不要经过太多的DHCP RELAY,协议规定,当“hops”大于4(现在也有规定为16)时,这个DHCP报文就不能再进行处理,而是丢弃。

“事务ID”字段:client每次发送DHCP请求报文时选择的随机数xid,用来匹配server的响应报文是对哪个请求报文的响应。client会丢弃“xid”不匹配的响应报文。

“客户机IP地址”字段:表示client自己的IP地址。可以是server分配给client的IP地址,也可以是client已有的IP地址。此字段不为0的原则就是client能够使用此IP地址接收IP报文。DHCP SERVER发现此字段不为0时,可以直接将响应报文单播给client。

“你的IP地址”字段:表示server分配给client的IP地址。当DHCP SERVER响应client的DHCP请求时,将把分配给client的IP地址填入此字段。

“服务器IP地址”字段:表示client 获取启动配置信息的服务器IP地址,一般是TFTP SERVER 的IP地址

“中继代理IP地址”字段:记录第一个DHCP RELAY [中继] agent的IP地址。当client发出DHCP请求报文后,如果网络中存在DHCP RELAY,则第一个DHCP RELAY转发这个DHCP请求报文时,就会把自己的IP地址填入此字段(随后的DHCP RELAY将不再改写此字段,只是把“hops”加1)。DHCP 将会根据此字段为用户分配IP地址,并把响应报文转发给此DHCP RELAY agent代收,再由DHCP RELAY agent转发给client。

“客户机硬件地址”字段:记录client的实际硬件地址内容。当client发出DHCP请求报文时,将把自己的网卡硬件地址填入此字段,DHCP SERVER一般都会使用此字段来唯一标识一个client。而且此字段与前面的“htype”“hlen”字段必须一致。

“服务器的主机名”字段:记录client 获取启动配置信息的服务器名字。此字段由DHCP SERVER填写,而且是可选的,如果填写,必须是一个以0结尾的字符串。

“启动文件名”字段:记录client 的启动配置文件名。 此字段由DHCP SERVER填写,而且是可选的,如果填写,必须是一个以0结尾的字符串。

选项字段:可选字段,它是变长的,DHCP Options选项的取值范围为1~255,其中option 3 为设置网关地址选项;option 12 为设置客户端的主机名选项,option 60设置厂商分类信息选项,用于标识DHCP客户端的类型和配置。 ; option 125功能是对标准DHCP协议一个补充标准,该功能的标准定义在RFC 3925中。DHCP server在完毕验证将client的IP地址等信息封装成DHCP OFFER包的时候,将OPTION 125信息封装DHCP OFFER包中再发送给client。 client收到OFFER包以后,首先查看该OFFER包所带的OPTION 125的“Option-data 1”字段中所填写的特征值,并与预先存储的信息进行比对。比对结果为同样则使用此OFFER,假设比对结果不同或OFFER包中不带OPTION 125,则将此OFFER丢弃。

WireShark抓包测试分析

在wireshark过滤器里输入bootp进行对DHCP包的过滤,在windows命令行里输入ipconfig /renew来重新获取ip,获取ip成功后查看wireshark抓包结果。截图如下:

DHCP协议浅析
DHCP协议浅析

图3 Wire Shark抓包结果图

wireshark捕获了5个DHCP包,分别是discover、offer、request、ack、release(ipconfig /release),刚好对应主机向DHCP服务器请求IP的四个过程。DHCP服务器寻找、DHCP服务器提供、DHCP请求使用、DHCP分配IP确认 、DHCP的IP释放。

1. DHCP Discover寻找服务器

DHCP协议浅析
DHCP协议浅析

图4 Discover报文截图

解析:从包的信息可以看出,DHCP包的传输层协议是UDP,源端口是68,目的端口号是67。因为此时主机不知道自己的IP地址,也不知道DHCP服务器的地址,所以使用源地址0.0.0.0和广播目的地址255.255.255.255。网络上每一台安装了TCP/IP协议的主机都会接收到这种广播信息,但只有DHCP服务器才会做出响应。Client Mac address携带着自己的硬件地址信息e0:db:55;95;9f;2d,以便后面服务器分配IP的查找。

选项Option 53 DHCP报文类型Discover

选项Option 54 DHCP服务器身份Identifier:192.168.1.1

选项Option 61 DHCP设置客户端标识Client Identifier:e0:db:55;95;9f;2d

2. DHCP Offer 分配IP

DHCP协议浅析
DHCP协议浅析

图5 Offer报文截图

解析:此时DHCP服务器收到一个DHCP发现报文后,用一个DHCP Offer提供报文进行响应。从包中可以看出服务器IP地址为192.168.1.1,广播目的地址255.255.255.255,分配给主机的IP地址是192.168.1.4,然后找到硬件地址为e0:db:55;95;9f;2d的主机。

选项Option 53 DHCP报文类型Offer

选项Option 54 DHCP服务器身份Identifier:192.168.1.1

选项Option 51 DHCP设置IP地址租约时间选项。

选项Option 3 Router:192.168.1.1

选项Option 125 是对标准DHCP协议一个补充标准,作用就是让客户端对DHCP服务器也进行认证,防止DHCP服务器伪造。option 125 是为了让client 用来验证server 的,client 不需要发送option 125,而是server在分配IP地址等信息时,将验证信息封装在option 125,然后添加到Offer 包和ACK包里面。

3. DHCP Request 收到Offer请求使用IP

DHCP协议浅析
DHCP协议浅析

图6 Request报文截图

解析:主机收到Offer报文后,用一个DHCP请求报文进行响应,此时和DHCP发现报文一样,都是使用源地址0.0.0.0和广播目的地址255.255.255.255,告诉所有DHCP服务器它将指定接受哪一台服务器提供的IP位址。

服务器的信息在Option 54的DHCP Server Identifier:192.168.1.1

4. DHCP Ack分配IP确认

DHCP协议浅析
DHCP协议浅析

图7 Ack报文截图

解析:服务器用DHCP ACK报文对DHCP Request请求报文进行响应,使用Src源地址192.168.1.1和Dst广播目的地址255.255.255.255,分配给主机的IP地址是Your(client) IP address:192.168.1.4,硬件地址为e0:db:55;95;9f;2d的主机。

选项Option 51 DHCP设置IP地址租约时间选项。

选项Option 53 DHCP报文类型ACK

选项Option 54 DHCP服务器身份Identifier:192.168.1.1

选项Option 125 是对标准DHCP协议一个补充标准,作用就是让客户端对DHCP服务器也进行认证,防止DHCP服务器伪造。option 125 是为了让client 用来验证server 的,client 不需要发送option 125,而是server在分配IP地址等信息时,将验证信息封装在option 125,然后添加到Offer 包和ACK包里面。

5. DHCP Release 释放IP

DHCP协议浅析
DHCP协议浅析

图8 Release报文截图

解析:客户端可通过发送此报文主动释放服务器分配给它的 IP 地址,当服务器收到此报文后,可将这个 IP 地址分配给其它的客户端。Src源地址192.168.1.4Dst广播目的地址192.168.1.1

选项Option 53 DHCP报文类型Release

选项Option 54 DHCP服务器身份Identifier:192.168.1.1

选项Option 61 DHCP设置客户端标识Client Identifier:e0:db:55;95;9f;2d

重新登录:以后DHCP主机每次重新登录网络时,就不需要再发送DHCP Discover发现信息了,而是直接发送包含前一次所分配的IP地址的DHCP Request请求信息。当DHCP服务器收到这一信息后,它会尝试让DHCP客户机继续使用原来的IP地址,并回答一个DHCP ACK确认信息。 如果此IP地址已无法再分配给原来的DHCP主机使用时(比如此IP地址已分配给其它DHCP主机使用),则DHCP服务器给DHCP主机回答一个DHCP NAK否认信息。当原来的DHCP主机收到此DHCP NAK否认信息后,它就必须重新发送DHCP Discover发现信息来请求新的IP地址。

更新租约:DHCP服务器向DHCP主机出租的IP地址一般都有一个租借期限,期满后DHCP服务器便会收回出租的IP地址。本次测试设定租借期限一分钟。

如果DHCP客户机要延长其IP租约,则必须更新其IP租约。当DHCP客户机启动时和IP租约期限过一半50%时,DHCP客户机都会自动向DHCP服务器发送单播DHCP REQUEST更新其IP租约的信息,当DHCP客户机启动时和IP租约期限过87.5%时,DHCP客户机都会自动向DHCP服务器发送广播DHCP REQUEST更新其IP租约的信息。收到DHCP ACK就续期,收到DHCP NAK就直接发送DHCP RELESE报文释放IP地址,然后开始重新一轮的DHCP。

网关配置信息如下:

DHCP协议浅析
DHCP协议浅析

图9 DHCP服务器配置截图

续约流程

DHCP协议浅析
DHCP协议浅析

图10 DHCP主机50%续约截图

如果在租期到达50%的时候续约不成功,则会在租期87.5%继续请求续约。

DHCP协议浅析
DHCP协议浅析

图11 DHCP主机87.5%续约截图

如果在租期到达50%和87.5%的时候都没有续约成功,则主机将不再使用此IP地址,而是开始新的DHCP过程重新开始Discover过程开始申请IP地址。

DHCP协议浅析
DHCP协议浅析

图12 DHCP主机三次续约失败截图

发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/142249.html原文链接:https://javaforall.cn

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2022年5月1,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档