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用得也是广播。


发布评论