我是靠谱客的博主 阔达羊,最近开发中收集的这篇文章主要介绍DHCP学习记录一、DHCP基础 -- 引用百度百科二、DHCP报文说明三、抓包分析,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

目录

一、DHCP基础 -- 引用百度百科

(1)DHCP简介

(2)工作原理

二、DHCP报文说明

(1)DHCP报文类型

(2)DHCP报文格式

三、抓包分析

(1)正常交互流程报文如下

(2)DHCP Discover报文

(3)DHCP Offer报文

(4)DHCP Request报文

(5)DHCP ACK报文

(6)续约,超过50%

(7)续约,超过87.5%


一、DHCP基础 -- 引用百度百科

(1)DHCP简介

DHCP(Dynamic Host Configuration Protocol,动态主机配置协议)通常被应用在大型的局域网络环境中,主要作用是集中的管理、分配IP地址,使网络环境中的主机动态的获得IP地址、Gateway地址、DNS服务器地址等信息,并能够提升地址的使用率。

DHCP协议采用客户端/服务器模型,主机地址的动态分配任务由网络主机驱动。当DHCP服务器接收到来自网络主机申请地址的信息时,才会向网络主机发送相关的地址配置等信息,以实现网络主机地址信息的动态配置。DHCP具有以下功能:

1. 保证任何IP地址在同一时刻只能由一台DHCP客户机所使用。

2. DHCP应当可以给用户分配永久固定的IP地址。

3. DHCP应当可以同用其他方法获得IP地址的主机共存(如手工配置IP地址的主机)。

4. DHCP服务器应当向现有的BOOTP客户端提供服务。

DHCP有三种机制分配IP地址:

1) 自动分配方式(Automatic Allocation),DHCP服务器为主机指定一个永久性的IP地址,一旦DHCP客户端第一次成功从DHCP服务器端租用到IP地址后,就可以永久性的使用该地址。 

2) 动态分配方式(Dynamic Allocation),DHCP服务器给主机指定一个具有时间限制的IP地址,时间到期或主机明确表示放弃该地址时,该地址可以被其他主机使用。 [2] 

3) 手工分配方式(Manual Allocation),客户端的IP地址是由网络管理员指定的,DHCP服务器只是将指定的IP地址告诉客户端主机。 

三种地址分配方式中,只有动态分配可以重复使用客户端不再需要的地址。 

DHCP消息的格式是基于BOOTP(Bootstrap Protocol)消息格式的,这就要求设备具有BOOTP中继代理的功能,并能够与BOOTP客户端和DHCP服务器实现交互。BOOTP中继代理的功能,使得没有必要在每个物理网络都部署一个DHCP服务器。RFC 951和RFC 1542对BOOTP协议进行了详细描述。

(2)工作原理

DHCP协议采用UDP作为传输协议,主机发送请求消息到DHCP服务器的67号端口,DHCP服务器回应应答消息给主机的68号端口。详细的交互过程如图

1、DHCP Client以广播的方式发出DHCP Discover报文。

2、所有的DHCP Server都能够接收到DHCP Client发送的DHCP Discover报文,所有的DHCP Server都会给出响应,向DHCP Client发送一个DHCP Offer报文。 

DHCP Offer报文中“Your(Client) IP Address”字段就是DHCP Server能够提供给DHCP Client使用的IP地址,且DHCP Server会将自己的IP地址放在“option”字段中以便DHCP Client区分不同的DHCP Server。DHCP Server在发出此报文后会存在一个已分配IP地址的纪录。 

3、DHCP Client只能处理其中的一个DHCP Offer报文,一般的原则是DHCP Client处理最先收到的DHCP Offer报文。 

DHCP Client会发出一个广播的DHCP Request报文,在选项字段中会加入选中的DHCP Server的IP地址和需要的IP地址。 

4、DHCP Server收到DHCP Request报文后,判断选项字段中的IP地址是否与自己的地址相同。如果不相同,DHCP Server不做任何处理只清除相应IP地址分配记录;如果相同,DHCP Server就会向DHCP Client响应一个DHCP ACK报文,并在选项字段中增加IP地址的使用租期信息。 

5、DHCP Client接收到DHCP ACK报文后,检查DHCP Server分配的IP地址是否能够使用。如果可以使用,则DHCP Client成功获得IP地址并根据IP地址使用租期自动启动续延过程;如果DHCP Client发现分配的IP地址已经被使用,则DHCP Client向DHCPServer发出DHCP Decline报文,通知DHCP Server禁用这个IP地址,然后DHCP Client开始新的地址申请过程。 

6、DHCP Client在成功获取IP地址后,随时可以通过发送DHCP Release报文释放自己的IP地址,DHCP Server收到DHCP Release报文后,会回收相应的IP地址并重新分配。 

在使用租期超过50%时刻处,DHCP Client会以单播形式向DHCP Server发送DHCPRequest报文来续租IP地址。如果DHCP Client成功收到DHCP Server发送的DHCP ACK报文,则按相应时间延长IP地址租期;如果没有收到DHCP Server发送的DHCP ACK报文,则DHCP Client继续使用这个IP地址。 

在使用租期超过87.5%时刻处,DHCP Client会以广播形式向DHCP Server发送DHCPRequest报文来续租IP地址。如果DHCP Client成功收到DHCP Server发送的DHCP ACK报文,则按相应时间延长IP地址租期;如果没有收到DHCP Server发送的DHCP ACK报文,则DHCP Client继续使用这个IP地址,直到IP地址使用租期到期时,DHCP Client才会向DHCP Server发送DHCP Release报文来释放这个IP地址,并开始新的IP地址申请过程。 

需要说明的是:DHCP客户端可以接收到多个DHCP服务器的DHCPOFFER数据包,然后可能接受任何一个DHCPOFFER数据包,但客户端通常只接受收到的第一个DHCPOFFER数据包。另外,DHCP服务器DHCPOFFER中指定的地址不一定为最终分配的地址,通常情况下,DHCP服务器会保留该地址直到客户端发出正式请求。  

正式请求DHCP服务器分配地址DHCPREQUEST采用广播包,是为了让其它所有发送DHCPOFFER数据包的DHCP服务器也能够接收到该数据包,然后释放已经OFFER(预分配)给客户端的IP地址。 

如果发送给DHCP客户端的地址已经被其他DHCP客户端使用,客户端会向服务器发送DHCPDECLINE信息包拒绝接受已经分配的地址信息。 

在协商过程中,如果DHCP客户端发送的REQUEST消息中的地址信息不正确,如客户端已经迁移到新的子网或者租约已经过期,DHCP服务器会发送DHCPNAK消息给DHCP客户 端,让客户端重新发起地址请求过程。 

二、DHCP报文说明

(1)DHCP报文类型

由上述流程可知,DHCP报文一共有8种,分别为DHCP Discover、DHCP Offer、DHCP Request、DHCP ACK、DHCP NAK、DHCP Release、DHCP Decline、DHCP Inform。各种类型报文的基本功能如下:

DHCP Discover:DHCP 客户端在请求 IP 地址时并不知道 DHCP 服务器的位置,因此 DHCP 客户端会在本地网络内以 广播方式发送 Discover 请求报文,以发现网络中的 DHCP 服务器。所有收到 Discover 报文的 DHCP 服务 器都会发送应答报文, DHCP 客户端据此可以知道网络 中存在的 DHCP 服务器的位置。
DHCP Offer:DHCP 服务器收到 Discover 报文后,就会在所配置的 地址池中查找一个合适的 IP 地址,加上相应的租约期 限和其他配置信息(如网关、 DNS 服务器等),构造一 个 Offer 报文,发送给 DHCP 客户端,告知用户本服务器可以为其提供 IP 地址。但这个报文只是告诉 DHCP 客户端可以提供 IP 地址,最终还需要客户端通过 ARP 来 检测该 IP 地址是否重复。
DHCP Request:DHCP 客户端可能会收到很多 Offer 请求报文,所以必 须在这些应答中选择一个。通常是选择第一个 Offer 应答 报文的服务器作为自己的目标服务器,并向该服务器发 送一个广播的 Request 请求报文,通告选择的服务器, 希望获得所分配的 IP 地址。另外, DHCP 客户端在成 功获取 IP 地址后,在地址使用租期达到50% 时,会向 DHCP 服务器发送单播 Request 请求报文请求续延租约, 如果没有收到 ACK 报文,在租期达到87.5% 时,会再次发送 广播的 Request 请求报文以请求续延租约。
DHCP ACK:DHCP 服务器回复收到 Request 请求报文。
DHCP NAK:如果 DHCP 服务器收到 Request 请求报文后,没有发现有相 应的租约记录或者由于某些原因无法正常分配 IP 地址,则向 DHCP 客户端发送 NAK 应答报文,通知用户无法分配合适的 IP 地址。
DHCP Release:当 DHCP 客户端不再需要使用分配 IP 地址时,就会主动向 DHCP 服务器发送 RELEASE 请求报文,告知服务器用户不 再需要分配 IP 地址,请求 DHCP 服务器释放对应的 IP 地址。
DHCP Decline:DHCP 客户端收到 DHCP 服务器 ACK 应答报文后,通过地址 冲突检测发现服务器分配的地址冲突或者由于其他原因导致 不能使用,则会向 DHCP 服务器发送 Decline 请求报文,通知 服务器所分配的 IP 地址不可用,以期获得新的 IP 地址。
DHCP Inform:DHCP 客户端如果需要从 DHCP 服务器端获取更为详细的配 置信息,则向 DHCP 服务器发送 Inform 请求报文; DHCP 服 务器在收到该报文后,将根据租约进行查找到相应的配置信 息后,向 DHCP 客户端发送 ACK 应答报文。目前基本上不用了。

(2)DHCP报文格式

DHCP服务的8种报文的格式是相同的,不同类型的报文只是报文中的某些字段取值不同。DHCP报文格式基于BOOTP的报文格式。下面是各字段的说明。

OP:报文的操作类型。分为请求报文和响应报文。1:请求报文,2:应答报文。即client送给server的封包,设为1,反之为2。

请求报文: DHCP Discover、DHCP Request、DHCP Release、DHCP Inform和DHCP Decline。
应答报文: DHCP Offer、DHCP ACK和DHCP NAK。
Htype: DHCP客户端的MAC地址类型。 MAC地址类型其实是指明网络类型 ,Htype值为1时表示为最常见的以太网MAC地址类型。
Hlen: DHCP客户端的MAC地址 长度。以太网MAC地址长度为6个字节,即以太网时Hlen值为6。
Hops:DHCP报文经过的DHCP中继的数目,默认为0。DHCP请求报文每经过一个DHCP中继,该字段就会增加1。没有经过DHCP中继时值为0。( 若数据包需经过router传送,每站加1,若在同一网内,为0。 )
Xid:客户端通过DHCP Discover报文发起一次IP地址请求时选择的随机数,相当于请求标识。用来标识一次IP地址请求过程。在一次请求中所有报文的Xid都是一样的。
Secs:DHCP客户端从获取到IP地址或者续约过程开始到现在所消耗的时间,以秒为单位。在没有获得IP地址前该字段始终为0。( DHCP客户端开始DHCP请求后所经过的时间。目前尚未使用,固定为0。)
Flags:标志位,只使用第0比特位,是广播应答标识位,用来标识DHCP服务器应答报文是采用单播还是广播发送,0表示采用单播发送方式,1表示采用广播发送方式。其余位 尚未使用 。(即 从0-15bits,最左1bit为1时表示server将以广播方式传送封包给client。 )
【注意】在客户端正式分配了IP地址之前的第一次IP地址请求过程中,所有DHCP报文都是以广播方式发送的,包括客户端发送的DHCP Discover和DHCP Request报文,以及DHCP服务器发送的DHCP Offer、DHCP ACK和DHCP NAK报文。当然,如果是由DHCP中继器转的报文,则都是以单播方式发送的。另外,IP地址续约、IP地址释放的相关报文都是采用单播方式进行发送的。
Ciaddr:DHCP客户端的IP地址。仅在DHCP服务器发送的ACK报文中显示,在其他报文中均显示0,因为在得到DHCP服务器确认前,DHCP客户端是还没有分配到IP地址的。只有客户端是Bound、Renew、Rebinding状态,并且能响应ARP请求时,才能被填充。
Yiaddr:DHCP服务器分配给客户端的IP地址。仅在DHCP服务器发送的Offer和ACK报文中显示,其他报文中显示为0。
Siaddr:下一个为DHCP客户端分配IP地址等信息的DHCP服务器IP地址。仅在DHCP Offer、DHCP ACK报文中显示,其他报文中显示为0。( 用于bootstrap过程中的IP地址)
Giaddr:DHCP客户端发出请求报文后经过的第一个DHCP中继的IP地址。如果没有经过DHCP中继, 则显示为0。( 转发代理(网关)IP地址 )
Chaddr:DHCP客户端的MAC地址。在每个报文中都会显示对应DHCP客户端的MAC地址。
Sname:为DHCP客户端分配IP地址的DHCP服务器名称(DNS域名格式)。在Offer和ACK报文中显示发送报文的DHCP服务器名称,其他报文显示为0。
File:DHCP服务器为DHCP客户端指定的启动配置文件名称及路径信息。仅在DHCP Offer报文中显示,其他报文中显示为空。
Options: 可选项字段,长度可变,格式为"代码+长度+数据"。详见:BOOTP / DHCP options;下表对部分option做解释。

MAC headerIP headerUDP headerDHCP  heradr

DHCP option

CodeData lengthDescriptionDHCP option
0(Pad)0此选项可用作字节填充,以使后续选项记录在字边界上对齐。Code  8bits   0
1(Subnet Mask)4指定客户端的子网掩码。如果在 DHCP 回复中同时指定了子网掩码和路由器选项,则该选项必须是第一个。Code  8bits   1Length. 8 bits    4Mask ::: (32 bits)
2(Time Offset)4指定客户端子网与协调世界时 (UTC) 之间的偏移量(以秒为单位)Code. 8 bits  2Length. 8 bits    4Offset :::(32 bits,二进制补码 32 位整数,正偏移指示零子午线以东的位置,负偏移指示零子午线以西的位置)
3(Router)4+指定客户端子网上的路由器的 32 位 IP 地址列表。路由器应该按优先顺序列出。Code. 8 bits  3Length. 8 bits   4的倍数IP address [] ::: (32 bits) 一个或多个 IPv4 地址
4(Time Server)4+指定客户端可用的 时间 服务器列表。服务器应该按优先顺序列出Code. 8 bits  4Length. 8 bits   4的倍数IP address [] ::: (32 bits) 一个或多个 IPv4 地址
5(Name Server)4+指定客户端可用的 名称服务器列表。服务器应该按优先顺序列出Code. 8 bits  5Length. 8 bits   4的倍数IP address [] ::: (32 bits) 一个或多个 IPv4 地址
6(Domain Name Server)4+指定客户端可用的 DNS服务器列表。服务器应该按优先顺序列出。Code. 8 bits  6Length. 8 bits   4的倍数IP address [] ::: (32 bits) 一个或多个 IPv4 地址
12(Host Name)1+指定主机的名称。该名称可能会或可能不会使用本地域名进行限定。Code. 8 bits  12Length. 8 bits   Host Name ::: 可变长度
15(Domain name)1+指定客户端在通过DNS解析主机名时应使用的 域名Code. 8 bits  15Length. 8 bits   Domain name ::: 可变长度
33(IP address pair)8+指定客户端应安装在其路由缓存中的静态路由列表。如果指定了到同一目的地的多条路线,它们将按优先级降序排列。路由由 IP 地址对列表组成。第一个地址是目的地址,第二个地址是目的路由器。默认路由 (0.0.0.0) 是静态路由的非法目的地。Code. 8 bits  33Length. 8 bits   IP address pair [] ::: 
44(NetBIOS over TCP/IP name server)4+WINS服务器(可以是一个WINS服务器IP列表)Code. 8 bits  44Length. 8 bits   IP address [] ::: (32 bits) 一个或多个 IPv4 地址
50(Requested IP Address)4已请求的 ip 地址Code. 8 bits  50Length. 8 bits   Requested IP Address(32 bits) 一个 IPv4 地址
51(IP address lease time)4有效租约期(以秒为单位)Code. 8 bits  51Length. 8 bits   IP address lease time (4bits)
53(DHCP message type)1报文类型
1: DHCP Discover

2: DHCP Offer

3: DHCP Request

4: DHCP Decline

5: DHCP ACK

6: DHCP NAK

7: DHCP Release

8: DHCP Inform
Code. 8 bits  53Length. 8 bits   DHCP message type (1bits)
58(Renew time value)4续约时间Code. 8 bits  58Length. 8 bits   Renew time value (4bits)
60(Class-identifier)1+不同操作系统,值不同,例 windows为MSFT 5.0Code. 8 bits  60Length. 8 bits   Class-identifier ::: 可变长度
61(Client-identifier)2+一般为客户端macCode. 8 bits  60Length. 8 bits   Client-identifier ::: 2的倍数

三、抓包分析

(1)正常交互流程报文如下

(2)DHCP Discover报文

客户端发送的广播包,UDP协议,源端口68,目的端口67;重点信息是:

Bootp flags为0,表示客户端的TCP/IP协议栈没有完成IP地址的配置前,是否可以接受单播(Unicast)报文;所以offer报文时一个单播包。

option 53,告知对方这时discover报文;

option50字段告知上次使用的IP,期望继续使用;

(3)DHCP Offer报文

服务端端发送的单播包,UDP协议,源端口67,目的端口68;重点信息:

Your(client)IP address:192.168.0.101 (Yiaddr);告知客户端可使用的IP

Option 53:说明为offer

Option 51:告知客户端租约时间

(4)DHCP Request报文

客户端发送的广播包,UDP协议,源端口68,目的端口67;重点信息:

Option 53:说明为Request

Option 54:说明使用的是哪个服务器(服务器的IP地址)

(5)DHCP ACK报文

服务端端发送的单播包,UDP协议,源端口67,目的端口68;重点信息:

Your(client)IP address:192.168.0.101 (Yiaddr);告知客户端可使用的IP

Option 53:说明为ACK

Option 51:告知客户端租约时间

(6)续约,超过50%

使用租期超过50%时,DHCP Client会以单播形式向DHCP Server发送DHCPRequest报文来续租IP地址。

(7)续约,超过87.5%

使用租期超过87.5%时,DHCP Client会以广播形式向DHCP Server发送DHCPRequest报文来续租IP地址。

最后

以上就是阔达羊为你收集整理的DHCP学习记录一、DHCP基础 -- 引用百度百科二、DHCP报文说明三、抓包分析的全部内容,希望文章能够帮你解决DHCP学习记录一、DHCP基础 -- 引用百度百科二、DHCP报文说明三、抓包分析所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(42)

评论列表共有 0 条评论

立即
投稿
返回
顶部