DHCP的8类报文抓包以及option详解

发布时间 2023-06-02 07:42:25作者: 熊猫爱旅行
title: DHCP的8类报文抓包以及option详解
date: 2022-02-09T19:57:23Z
lastmod: 2023-06-01T20:38:50Z
tags: [DHCP]

DHCP的8类报文抓包以及option详解

DHCP#(Dynamic Host Configuration Protocol﹐中文名为动态主机配置协议)它的前身是 BOOTP,它工作在OSI的应用层,是一种帮助计算机从指定的DHCP服务器获取它们的配置信息的自举协议。

DHCP使用客户端/服务器模式,请求配置信息的计算机叫做DHCP客户端,而提供信息的叫做DHCP的服务器。

DHCP为客户端分配地址的方法有三种:手工配置、自动配置、动态配置。

DHCP最重要的功能就是动态分配。除了IP地址,DHCP分组还为客户端提供其他的配置信息,比如子网掩码、域名、网关、DNS、租期等。这使得客户端无需用户动手就能自动配置连接网络。

  • DHCP的工作流程

wKiom1bwDYmhNdo4AACJfjOzxOM611.pnghttps://s1.51cto.com/wyfs02/M00/7D/CB/wKiom1bwDYmhNdo4AACJfjOzxOM611.png

DHCP8类报文

报文类型 含义
DHCP DISCOVER 客户端用来寻找DHCP服务器。
DHCP OFFER DHCP服务器用来响应DHCP DISCOVER报文,此报文携带了各种配置信息。
DHCP REQUEST 客户端请求配置确认,或者续借租期。
DHCP ACK 服务器对REQUEST报文的确认响应。
DHCP NAK 服务器对REQUEST报文的拒绝响应。(广播)
DHCP RELEASE 客户端要释放地址时用来通知服务器。(单播)
DHCP DECLINE PC收到DHCP服务器的地址后,发送分配地址免费ARP,如果有回应,会发送DHCP DECLINE报文
DHCP INFORM PC单独请求域名、DNS这些参数的时候

具体流程:

发现阶段:

即DHCP客户机寻找DHCP服务器的阶段。DHCP客户机以广播方式(因为DHCP服务器的IP地址对于客户机来说是未知的)、基于UDP的源端口号68,目的端口号67来发送DHCP DISCOVERr发现信息来寻找DHCP服务器,即向地址255.255.255.255发送特定的广播信息。网络上每一台安装了TCP/IP协议的主机都会接收到这种广播信息,但只有DHCP服务器才会做出响应。

预提供阶段:

(可以单播可以广播,取决于DHCP报文中的flag位)即DHCP服务器提供IP地址的阶段。在网络中接收到DHCP discover发现信息的DHCP服务器都会做出响应,它从尚未出租的IP地址中挑选一个分配给DHCP客户机,在本地形成一个绑定。向DHCP客户机发送一个包含出租的IP地址和其他设置的DHCP OFFER提供信息。【服务器在分配这个地址之间会ping一下这个分配的ip地址,如果没有Response就才会预分配这个地址】

选择阶段

即DHCP客户机选择某台DHCP服务器提供的IP地址的阶段。如果有多台DHCP服务器向DHCP客户机发来的DHCP offer提供信息,则DHCP客户机只接受第一个收到的DHCP offer提供信息,然后它就以广播方式回答一个DHCP REQUEST请求信息,该信息中包含向它所选定的DHCP服务器(option 54中有所选DHCP服务器的ip地址)。报文之所以要以广播方式回答,一是为了通知所选DHCP服务器,二是请其他服务器收回分配的地址。

确认阶段:

(可以单播可以广播,取决于DHCP报文中的flag位)即DHCP服务器确认所提供的IP地址的阶段。当DHCP服务器收到DHCP客户机回答的DHCP request请求信息之后,检测之前在预分配阶段所绑定的信息,如若MAC地址一致,它便向DHCP客户机发送一个包含它所提供的IP地址和其他设置的DHCP ACK确认信息,告诉DHCP客户机可以使用它所提供的IP地址。然后DHCP客户机便将其TCP/IP协议与网卡绑定,如果此时request报文的MAC地址与之前的绑定不符合,服务器不会回复DHCP ACK报文,那么服务器会回复一个DHCP NAK 报文,通知你这个地址你用不了。
  • 重新登录:以后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租约期限过一半时,DHCP客户机都会自动向DHCP服务器发送单播DHCP REQUEST更新其IP租约的信息,当DHCP客户机启动时和IP租约期限过87.5%时,DHCP客户机都会自动向DHCP服务器发送广播DHCP REQUEST更新其IP租约的信息。收到DHCP ACK就续期,收到DHCP NAK就直接发送DHCP RELESE报文释放IP地址,然后开始重新一轮的DHCP

DHCP报文格式

* OP:若是client送给server的封包,设为1,反向为2;
* Htype:硬件类别,ethernet为1;
* Hlen:硬件长度,ethernet为6;
* Hops:若数据包需经过router传送,每站加1,若在同一网内,为0;
* Transaction     ID:事务ID,是个随机数,用于客户和服务器之间匹配请求和相应消息;
* Seconds:由用户指定的时间,指开始地址获取和更新进行后的时间;
* Flags:从0-15bits,最左一bit为1时表示server将以广播方式传送封包给 client,其余尚未使用;
* Ciaddr:用户IP地址;
* Yiaddr:客户IP地址;
* Siaddr:用于bootstrap过程中的IP地址;
* Giaddr:转发代理(网关)IP地址;
* Chaddr:client的硬件地址;
* Sname:可选server的名称,以0x00结尾;
* File:启动文件名;
* Options:,厂商标识,可选的参数字段

常用的option:

1 netmask

3  router

6  DNS

12 host name

51 ip address lease time

53 message type (dhcp报文8种类型)

54 server identification

55 parameter request list (需要服务器给你提供哪些东西:ip地址,域名,网关)

61 client identification

82 relay agent [http://network.51cto.com/art/201008/223009.htm](http://network.51cto.com/art/201008/223009.htm)

255 end

DHCP中继:在网关接口上: ip helper-address X.X.X.X,将广播的DHCP报文变成单播报文,进行跨越网段的DHCP

至于报文的各种抓包(包括中继),我放在附件里面了,需要的可以下载下,用Wireshark打开看看

转载于:https://blog.51cto.com/yaotongshaonian/1753696