大家好,又见面了,我是你们的朋友全栈君。
定义:动态主机配置协议,主要在一些大型局域网络环境中,集中管理和分配IP地址,提升地址的使用效率。
DHCP协议采用CLIENT-SERVER方式实现,而且DHCP 协议是基于UDP层之上的应用,DHCP CLIENT将采用端口号68,DHCP SERVER采用端口号67进行交互。
DHCP的三种分配IP机制:
- 自动分配方式:DHCP服务器为主机指定一个永久性的IP地址。客户端一旦第一次成功租用IP过后,后面即可永久性使用次IP地址。
- 动态分配方式:DHCP服务器为主机指定一个具有时间期限的IP地址,到期或者客户端主动放弃该地址之后,即可被其他主机使用。
- 手工分配方式: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)
图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)
图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抓包结果。截图如下:
图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寻找服务器
图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
图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
图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确认
图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
图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。
网关配置信息如下:
图9 DHCP服务器配置截图
续约流程
图10 DHCP主机50%续约截图
如果在租期到达50%的时候续约不成功,则会在租期87.5%继续请求续约。
图11 DHCP主机87.5%续约截图
如果在租期到达50%和87.5%的时候都没有续约成功,则主机将不再使用此IP地址,而是开始新的DHCP过程重新开始Discover过程开始申请IP地址。
图12 DHCP主机三次续约失败截图
发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/142249.html原文链接:https://javaforall.cn
【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛
【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...