2024年1月18日发(作者:)

DHCP协议分析

一、 DHCP协议简介

DHCP,全称是 Dynamic Host Configuration Protocol﹐中文名为动态主机配置协议,是一种局域网的网络协议,基于UDP协议工作。

DHCP有客户端和服务器模式,请求配置信息的计算机叫做DHCP客户端,而提供信息的叫做DHCP的服务器。DHCP有3个端口,其中67和68为正常的DHCP服务端口,分别作为DHCP Server和DHCP Client的服务端口;546号端口用于DHCPv6 Client,而不用于DHCPv4。

DHCP为客户端分配地址的方法有三种:手工配置、自动配置、动态配置。DHCP最重要的功能就是动态分配。除了IP地址,DHCP分组还为客户端提供其他的配置信息,比如子网掩码。这使得客户端无需用户动手就能自动配置连接网络。

1. DHCP的工作流程

Discover发现阶段:即DHCP客户机寻找DHCP服务器的阶段。此时客户端没有IP地址,也不知道服务器的IP地址,DHCP客户机以广播方式(即向地址255.255.255.255)发送DHCP discover报文来寻找DHCP服务器。网络上每一台安装了TCP/IP协议的主机都会接收到这种广播信息,但只有DHCP服务器才会做出响应。

Offer提供阶段: 即DHCP服务器提供IP地址的阶段。接收到DHCP discover报文的DHCP服务器都会做出响应,即向DHCP客户机发送一个包含还未出租的IP地址和其他设置的DHCP offer报文信息。

Request选择阶段:即DHCP客户机选择某台DHCP服务器提供的IP地址的阶段。如果有多台DHCP服务器发来DHCP offer,则客户机只接受第一个,然后就以广播方式回答一个DHCP request请求信息,该信息中包含了它所选定的DHCP服务器的IP地址和服务器提供给客户端的IP地址等内容。之所以要以广播方式回答,是为了通知所有的DHCP服务器,他将选择某台DHCP服务器所提供的IP地址。

ACK确认阶段:即DHCP服务器对客户机的应答,确认提供IP地址。当服务器收到DHCP request之后,便向DHCP客户机发送一个包含它所提供的IP地址和其他设置的DHCP ACK报文,告诉DHCP客户机可以使用该IP地址。然后DHCP客户机便将其TCP/IP协议与网卡绑定,另外,除DHCP客户机选中的服务器外,

其他的DHCP服务器将收回曾提供的IP地址。

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

更新租约,DHCP服务器向DHCP客户机出租的IP地址一般都有一个租借期限,期满后DHCP服务器便会收回出租的IP地址。如果DHCP客户机要延长其IP租约,则必须更新其IP租约。DHCP客户机启动时和IP租约期限过一半时,DHCP客户机都会自动向DHCP服务器发送更新其IP租约的信息。

2、DHCP协议报文

DHCP协议报文的格式如图1所示,括号内为长度。

OP(1) Htype(1) Hlen(1) Hops(1)

Transaction ID(4)

Seconds(2)

Ciaddr(4)

Yiaddr(4)

Siaddr(4)

Giaddr(4)

Chaddr(16)

Sname(64)

File(128)

Options(variable)

图一 DHCP协议报文格式

Flags(2)

报文解析:

1)Op(1):DHCP报文的操作类型,“1”为客户端向服务器发送请求的报文,“2”为服务器响应客户端的报文;

2)Htype(1):客户端网络硬件地址类型,“1”表示客户端的网络硬件是10MB的以太网类型(Ethernet);

3)Hlen(1):客户端的网络硬件地址长度。“6”表示Client 的网络硬件地址长度是6bytes(即以太网类型的6 bytes的MAC地址);

注:MAC地址,也叫硬件地址,是由48比特/bit长(6字节/byte,1byte=8bits),16进制的数字组成.0-23位叫做组织唯一标志符(organizationally unique,是识别LAN(局域网)节点的标识。24-47位是由厂家自己分配.其中第40位是组播地址标志位。

4)Hops(1):跳数,即DHCP报文经过的DHCP RELAY(中继)数,每经过一个DHCP RELAY该字段就加一,此字段的作用是限制DHCP报文不要经过太多的DHCP

RELAY,协议规定,当“hops”大于4(现在也有规定为16)时,这个DHCP报文就不能再进行处理,而是丢弃;

5)Xid(4):客户端发起依稀请求时选择的随机数,用来标识一次地址请求过程;

6)Secs(2):DHCP客户端开始DHCP请求后经过的时间;

7)Flags(2):标识DHCP服务器响应报文是单播还是广播发送,只用第一个比特;

8)Cliaddr(4):DHCP客户端IP地址;

9)Yiaddr(4):DHCP服务器分配给客户端的IP地址;

10)Siaddr(4):DHCP客户端获取IP地址等信息的服务器IP地址;

11)Giaddr(4):DHCP客户端发出请求报文后经过的第一个DHCP中继IP;

12)Chaddr(4):DHCP客户端的硬件地址,即MAC地址;

13)Sname(64):DHCP客户端获取IP地址等信息的服务器名称;

14)file(128):服务器客户端指定的启动配置的名称;

15)option(variable):可选变长选项字段,包含报文的类型、有效租期、DNS(domain name system,域名系统)、服务器的IP地址等配置信息。

二、wireshark抓包分析:

1、在windows下面进行抓包的步骤:

1)首先打开wireshark,开始抓包;

2)在cmd中执行ipconfig /release,该命令的作用是用来释放IP,如果出现如下提示信息,表明本地连接没有设置成自动获取;

在网络连接中将本地连接设成自动获取,再次执行ipconfig /release,释放IP成功。

Wireshark抓包如图:

3)执行命令ipconfig /renew,发起一个DHCP过程,分析从这里开始。

从Wireshark抓包可以看到DHCP过程中的4种报文,即DHCP Discover、DHCP Offer、DHCP Request、DHCP ACK。

2、报文详细分析:

1)DHCP Discover发现阶段:

Bootstrap Protocol(Discover) 表明发送的是Discover报文。

Message type(opt):消息类型,为1时表示是Client的请求;

Hardware type(Htype):Client 的网络硬件地址类型,0x01表示Client 的网络硬件是10MB的以太网类型(Ethernet);

Hardware address length(Hlen):Client 的网络硬件地址长度;

HOPS:跳数;

Transaction ID(Xid):事务ID,随机数;

Seconds elapsed(Seconds):秒数;

Bootp flags(Flags):标志,广播形式;

Client IP address(Cliaddr):客户机IP地址,当前还没有;

Your (client)IP address(Yiaddr):客户端要申请的IP地址;

Next Server IP address(Siaddr):服务器IP地址,此时还不知道;

Relay Agent IP address(Giaddr):中继代理IP地址;

Client MAC address(Chaddr):客户机硬件地址MAC;

Client hardware address padding:客户机硬件MAC填充地址;

Host name(Sname): 服务器的主机名;

Boot file name(File):Client的启动配置文件名;

Magic cookie:是魔术使用cookie是服务器可以知道该用户是否合法用户以及是否需要重新登录;

Options选项:括号内的值是该选项的注册code,用来标识一个选项。如果用户想要在发送或接收的报文中添加选项,则需在程序中给选项特有的code值。

Dhcp message typecode = 53, length = 1, value= 1,此字段表示DHCP报文类型。

Discover过程中包括的选项有:

消息类型:

client MAC:

Request IP Address:申请的IP地址

Host name:

,即客户机主机名称;

Parameter Request List:

等信息。

DHCP是基于UDP的过程,客户端发启的bootpc端口是68,目标端口是67

2)所有被广播到的服务器收到DHCP DISCOVER报文后都会发送DHCP offer报文,向客户机提供IP地址供其选择 (cisco用单播来实现),Tp-link使用的是组播实现;

报文Offer:

Message type:为2,即服务器回复客户端;

Your (client)IP address:即服务器给客户端提供的IP地址;

Client MAC address:表示客户端的MAC地址;

选项也和Discover报文中的有所不同,包括:

Message type:

Renewal Time Value:,即想要继续租约原来分配的IP地址,则提出续约申请的期限为4天;

Rebinding Time Value:,即如果上次申请续约失败,再次申请绑定原来分配到的IP地址的期限为7天;

IP Address Lease Time:,即租约时间;

DHCP Server Identifier:即服务器IP地址;

Router:,即跳数;

服务器发启的bootpc端口是67,目标端口是68.

3)客户端选择服务器提供的IP地址后广播发送DHCP request报文,告诉服务器选择了某台服务器提供的IP地址。客户端还没有IP地址故采用广播发送。

值得注意的是这个报文的选项中增加了选项Server IP:表明选择了该服务器提供的IP地址

4)服务器收到DHCP REQUEST数据报之后也会回答客户机,即发送DHCP ACK报文,确认客户端租用IP地址成功。没有被选中的服务器就将自己提供的IP地址收回。cisco用得也是广播。