DHCP协议浅析

DHCP协议浅析定义:动态主机配置协议,主要在一些大型局域网络环境中,集中管理和分配IP地址,提升地址的使用效率。DHCP协议采用CLIENT-SERVER方式实现,而且DHCP协议是基于UDP层之上的应用,DHCPCLIENT将采用端口号68,DHCPSERVER采用端口号67进行交互。DHCP的三种分配IP机制:自动分配方式:DHCP服务器为主机指定一个永久性的IP地址。客户端一旦第一次成功租用IP过后,后面即可永久性使用次IP地址。 动态分配方式:DHCP服务器为主机指定一个具有时间期限的IP地址…

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

定义:动态主机配置协议,主要在一些大型局域网络环境中,集中管理和分配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协议浅析

                                                                                图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协议浅析

                                                                                  图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协议浅析

                                                                       图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协议浅析

                                                                             图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协议浅析

                                                                      图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协议浅析

                                                                               图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协议浅析

                                                                           图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协议浅析

                                                                                  图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协议浅析

                                                                                图9 DHCP服务器配置截图

    续约流程

DHCP协议浅析

                                                                                图10 DHCP主机50%续约截图

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

DHCP协议浅析

                                                                                图11 DHCP主机87.5%续约截图

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

DHCP协议浅析

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

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

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

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)
blank

相关推荐

  • Flutter一步实现Toast 弹窗(fluttertoast 库)

    Flutter一步实现Toast 弹窗(fluttertoast 库)Flutter一步实现Toast弹窗(fluttertoast库)在Flutter中,想要实现一个Toast弹窗效果,最简单、最直接的方法就是使用fluttertoast库来实现。官网地址:https://pub.flutter-io.cn/packages/fluttertoast如何使用?导入依赖#addthislinetoyourdependenciesfluttertoast:^7.1.6在使用的地方,导入类import’package:f

  • Lamp架构_10个人公司的架构图

    Lamp架构_10个人公司的架构图一:LAMP架构简介LAMP是目前成熟的一种企业网站应用模式之一,指的是协同工作的一套系统和相关软件的整合,可提供PHP动态web站点应用及开发环境,LAMP经过十年的完善各个组件间的兼容性,协作能力,稳定等方面也不断增强(注:Apache服务是一个静态网站,它里面的测试页都是以HTML的格式结尾,以HTML写出的网站都是静态的,没有什么功能,没有办法去关联后台的数据库,所以说他只能做一个展示的页面,LAMP构建出来就是一个动态网页的一个后台,PHP是一种动态网站开发语言,…

    2022年10月16日
  • 手机解锁侧面好用还是屏下指纹好用_侧边指纹怎么锁屏

    手机解锁侧面好用还是屏下指纹好用_侧边指纹怎么锁屏说起手机解锁方式,目前智能手机市场上基本上都采用的是屏下指纹、后置指纹和侧面指纹。不少人觉得在一些表现上侧面指纹不如其他两种解锁方式,其实你低估了侧面指纹,它远远比你想象中的还强大!一、外观一体化相比那些搭载后置指纹解锁技术的手机,手机搭载侧面指纹会更加的美观。它既不破坏手机正面屏幕,也不破坏背面机身的完整性,保证了机身的一体化。二、增大用户的解锁姿势相比后置指纹和屏下指纹解锁,侧面指纹简直…

  • 关于数据存储类型的一点分析

    关于数据存储类型的一点分析

    2021年11月27日
  • Maven学习笔记(十二)-maven打包之resource配置

    Maven学习笔记(十二)-maven打包之resource配置一、简介构建Maven项目的时候,如果没有进行特殊的配置,Maven会按照标准的目录结构查找和处理各种类型文件。●src/main/java和src/test/java这两个目录中的所有*.java文件会分别在comile和test-comiple阶段被编译,编译结果分别放到了target/classes和targe/test-classes目录中,但是这两个目录中的其他文件都

  • Android 串口调试_串口转usb需要驱动吗

    Android 串口调试_串口转usb需要驱动吗本文背景:是真的不喜欢脑子记这些引脚,串口节点,动不动忘记了。1.首先记录一下硬件引脚—-tty节点对应关系2.找一组/dev/ttyHSL1,先测试一下自环,然后写个app,从app里面读写这个节点3.后续,通过串口和单片机通信,和esp8266通信,实现一个androidapp控制单片机硬件平台配置:平台:msm8909默认log串口:Board_KERNEL_CMDLINE.

    2022年10月10日

发表回复

您的电子邮箱地址不会被公开。

关注全栈程序员社区公众号