DHCP协议原理及抓包分析

版权声明:本文为博主原创文章,如若转载请注明本人原始地址。 https://blog.csdn.net/Andy_93/article/details/78238931

DHCP作用:

DHCP 全称Dynamic Host configuration protocol 动态主机配置协议。 可以为客户机自动分配IP地址、子网掩码以及缺省网DNS服务器的IP地址等TCP/IP参数 简单来说 就是DHCP服务器上有一个数据库, 存放着IP地址、网关、DNS等参数。 客户端请求使用时, 服务器则负责将相应的参数分配个客户端,避免客户端手动指定IP地址等。特别是在一些大规模的网络中。客户端数目较多,使用DHCP可以方便对这些机器进行管理,为客户机提供TCP/IP参数配置,如IP地址、网关地址和DNS服务器等,不仅效率高,而且不存在IP地址冲突的情况现在的无线路由器默认都带有DHCP功能,也就是说一个无线路由器同时也是一个DHCP服务器。

DHCP工作过程

DHCP大致流程下图所示

 

DHCP DISCOVER: 寻找服务器

当DHCP客户端第一次登录网络的时候或者是开机的时候, 此设备本机上没有任何IP设定,就会网络广播寻找DHCP服务器 由于客户端此时还不知道自己属于哪一个网路﹐所以封包的来源地址会为0.0.0.0, 目的地址则为255.255.255.255,然后再附上DHCP discover的信息﹐向网路进行广播。 网络上每一台安装了TCP/IP协议的主机都会接收到这种广播信息,但只有DHCP服务器才会做出响应。

DHCP OFFER分配IP地址

DHCP服务器监听到客户端发出的DHCP Discover广播后 会针对这个客户端的硬件地址 (MAC)与本身的设定数据来进行下列工作:

1 到服务器的登录文件中寻找该用户之前是否曾经用过某个 IP ,若有且该 IP 目前无人使用,则提供此 IP 给客户机;

2若配置文件针对该 MAC 提供额外的固定 IP (static IP) 时,则提供该固定 IP 给客户机;

3若不符合上述两个条件, 则随机取用目前没有被使用的 IP 参数给客户端,并记录下来。回应给客户端一个DHCP OFFER封包由于客户端在开始的时候还没有IP址﹐所以在其DHCP Discover封包内会带有其MAC地址信息﹐并且有一个XID编号来辨别该封包﹐DHCP服务器回应的DHCP Offer封包则会根据这些资料传递给要求租约的客户。根据服务器端的设定﹐DHCP Offer封包会包含一个租约期限的信息。但这里仅仅是分配, 客户端还没有真正的使用

DHCP REQUEST 请求使用

如果客户端收到网路上多台DHCP服务器的回应﹐只会挑选其中一个DHCP Offer(通常是最先抵达的那个)并且向网路发送一个DHCP Request广播封包,告诉所有DHCP服务器它将指定接受哪一台服务器提供的IP位址。之所以要以广播方式回答,是为了通知所有的DHCP服务器,他将选择某台DHCP服务器所提供的IP地址, 同时,客户端还会发送一个ARP封包, 查询上有没有其他机器使用该IP地址, 如果发现该IP被占用, 客户端会发送一个DHCP Decline封包DHCP服务器 拒绝接受其DHCP Offer,并重开始发送DHCP Discover信息

 

DHCP ACK  IP地址分配确认

DHCP服务器收到DHCP客户机回答的DHCP Request请求信息之后, 它便向DHCP客户机发送一个包含它提供的IP地址和其他设置的DHCP Ack确认信息。以确认IP地址的正式生效。然后DHCP客户机便将其TCP/IP协议与网卡绑定,另外,除DHCP客户机选中的服务器外,其他的DHCP服务器都将收回曾提供的IP地址

重新登录

当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租约, 则必须更新其IPDHCP客户机启动时和IP租约期限一半时, DHCP客户机都会自动向DHCP服务器发送其IP租约的信息 DHCP客户机除了在开机的时候发出DHCP Request请求在外, 在使用租期超过50%时刻处,DHCP 客户机会以单播形式向DHCP Server发送DHCP Request报文来续租IP地址。如果DHCP 客户机成功收到DHCP 服务器发送的DHCP ACK报文,则按相应时间延长IP地址租期;如果没有收到DHCP 服务器发送的DHCP ACK报文,则DHCP 客户机继续使用这个IP地址。在使用租期超过87.5%时刻处,DHCP 客户机会以广播形式向DHCP Server发送DHCP Request报文来续租IP地址。如果DHCP 客户机成功收到DHCP 服务器发送的DHCP ACK报文,则按相应时间延长IP地址租期;如果没有收到DHCP 服务器发送的DHCP ACK报文,则DHCP 客户机继续使用这个IP地址,直到IP地址使用租期到期时,DHCP Client才会向DHCP Server发送DHCP Release报文来释放这个IP地址 客户想提前退 可以随时发送DHCP Release命令解约

DHCP报文解析

报文格式



OP: 若是客户送给服务端的封包 设置1 反方向

Htype: 硬件类型, ethernet1

Hlen: 硬件长度, ethernet6

Hops: 若数据包需要经过router发送 没站1若在一网内为0

Transaction ID 事物ID是个随机数,用于客户端和服务器之间匹配请求和相应信息

Seconeds: 由用户指定的时间,开始地址获取和更新进行后的时间

Flags: 从0-15bits 最高位1表示server将以广播方式传递封包给client, 0 表示表示server将以方式传递封包给client,其余尚未使用

Ciaddr 用户IP地址

Siaddr: 用于bootsrtap过程中IP地址(服务器IP地址)

Chaddr:  client的硬件地址

Sname:  可选server的名称 0x00结尾

File: 启动文件名

Options: 厂商标识, 可选的蚕食字段

抓包分析

DHCP discover阶段

 

DHCP offer阶段

 

DHCP request阶段

 

DHCP ack阶段

 

总结

阶段

MAC

目标MAC

IP

目标IP

Discover

PC机的MAC

FF

0.0.0.0

255.255.255.255

Offer

Dhcp服务器或者中继器路由的MAC

Dhcp客户机的MAC

Dhcp服务器或者中继路由器的IP地址

准备分配的IP地址

Request

PC机的MAC

FF

0.0.0.0

255.255.255.255

Ack

Dhcp服务器或者中继器路由的MAC

Dhcp客户机的MAC

Dhcp服务器或者中继路由器的IP地址

准备分配的IP地址

 

3.DHCPTransaction  ID是由客户机产生一个随机数获得,不同MAC地址产生的Transaction ID不同,Transaction  ID是区分不同DHCP请求的标识

ARP 协定

  这里我们要介绍的是 Address Resolution Protocol (ARP)ARP TCP/IP 设计者利用乙太网的广播性质﹐设计出来的位址解释协定。它的主要特性和优点是它的位址对应关系是动态的﹐它以查询的方式来获得 IP 位址和实体位址的对应。它的工作原理非常简单﹕

1. 首先﹐每一台主机都会在 ARP 快取缓冲区 (ARP Cache)中建立一个 ARP 表格﹐用来记录 IP 位址和实体位址的对应关系。这个 Table 的每一笔资料会根据自身的存活时间递减而最终消失﹐以确保资料的真实性。

2. 当发送主机有一个封包要传送给目的主机的时候﹐并且获得目的主机的 IP 位址﹔那发送主机会先检查自己的 ARP 表格中有没有该 IP 位址的实体位址对应。如果有﹐就直接使用此位址来传送框包﹔如果没有﹐则向网路发出一个 ARP Request 广播封包﹐查询目的主机的实体位址。这个封包会包含发送端的 IP 位址和实体位址资料。

3. 这时﹐网路上所有的主机都会收到这个广播封包﹐会检查封包的 IP 栏位是否和自己的 IP 位址一致。如果不是则忽略﹔如果是则会先将发送端的实体位址和 IP 资料更新到自己的 ARP 表格去﹐如果已经有该 IP 的对应﹐则用新资料覆盖原来的﹔然后再回应一个 ARP Reply 封包给对方﹐告知发送主机关于自己的实体位址﹔

4. 当发送端接到 ARP Reply 之后﹐也会更新自己的 ARP 表格﹔然后就可以用此纪录进行传送了。

5. 如果发送端没有得到 ARP Reply ﹐则宣告查询失败。

ARP 的查询过程可参考下图﹕


ARP 的查询过程

  前面说的 ARP 表格﹐只有在 TCP/IP 协定被载入核心之后才会建立﹐如果 TCP/IP 协定被卸载或关闭机器﹐那么表格就会被清空﹔到下次协定载入或开机的时候再重新建立﹐而同时会向网路发出一个 ARP 广播﹐告诉其它机器它的目前位址是什么﹐以便所有机器都能保持最正确的资料。

  然而﹐ARP cache 的大小是有所限制的﹐如果超过了界限﹐那么越长时间没被使用过渡资料就必须清理掉﹐以腾出空间来储存更新的资料。所以﹐当机器收到 ARP equest 封包时﹐如果查询对象不是自己﹐则不会根据发送端位址资料来更新自己的 ARP 表格﹐而是完全忽略该封包。同时﹐每笔存在 cache 中的资料﹐都不是永久保存的﹕每笔资料再更新的时候﹐都会被赋予一个存活倒数计时值﹐如果在倒数时间到达的时候﹐该资料就会被清掉。然而﹐如果该资料在倒数时间到达之前被使用过﹐则计时值会被重新赋予。

  当然了﹐ARP 尚有一套机制来处理当 ARP 表格资料不符合实际位址资料的状况(例如﹐在当前连线尚未结束前﹐收到目的端的位址资料更新讯息)﹔或是目的主机太忙碌而未能回答 ARP 请求等状况。

猜你喜欢

转载自blog.csdn.net/Andy_93/article/details/78238931