「DHCP」- 报文格式

协议报文基于 UDP 的方式进行交互,采用67(DHCP Server)和 68(DHCP Client)两个端口号;

报文格式

Op(op code):表示报文的类型,含义:1,客户端请求报;2,服务器响应报文;

Htype(Hardware Type):表示硬件地址的类型;

Hlen(Hardware Length):表示硬件地址的长度;

Hops(hops):表示当前 DHCP 报文经过的 DHCP Relay 数目;
此字段的作用是限制 DHCP 报文所经过的 DHCP Relay 数目;不能超过 16,也就是 Hops 值不能大于16,否则DHCP报文将被丢弃。
该字段由 DHCP Client 设置为 0;每经过一个 DHCP Relay 时,该字段加 +1;

Xid:表示 DHCP Client 选取的随机数,使 DHCP Server 的回复与 DHCP Client 的报文相关联。

Secs(seconds):由 DHCP Client 填充,表示从 DHCP Client 开始获得(或续借)IP Address 后,已使用了的秒数(默认 3600s)

Flags:16-bit,客户端请求服务器发送响应报文的形式,
1)只有最高位有意义:为 0 时,要求 Server 以 Unicast 响应;为 1 时,要求 Server 以 Broadcast 响应;
2)其余 15-bit 为零,保留;

Ciaddr:

Yiaddr(your client ip address):
表示 DHCP Server 分配给 DHCP Client 的 IP-Address;
当 DHCP Server 进行 DHCP 响应时,将分配给 DHCP Client 的 IP-Address 填入此字段;

Siaddr(server ip address):
表示 DHCP Server 的 IP Address(客户端选择使用的地址)。

Giaddr(gateway ip address):
表示首个 DHCP Relay 的 IP-Address;首个 DHCP Relay 会把自己的 IP-Address 填入此字段,且不会再变更;
DHCP Server 会根据此字段来判断出 DHCP Client 所在的网段地址,从而选择合适的地址池,为 DHCP Client 分配该网段的 IP-Address;
DHCP Server 还会根据此地址将响应报文发送给此 DHCP Relay,再由 DHCP Relay 将此报文转发给 DHCP Client;

CHAddr(Client Hardware Address):表示 Client 的 MAC Address;
该字段是由 DHCP Client 填写的,表示的是客户端的硬件地址(也就是客户端的MAC地址)。DHCP Server 是针对 CHADDR来分配IP地址的,对于不同的CHADDR,DHCP Server会分配不同的IP地址;DHCP Server无法区分什么样的CHADDR是合法的,什么样的CHADDR是非法的。利用这个漏洞,攻击者每申请一个IP地址时,就在DHCP消息的CHADDR字段中填写一个不同的值,以此来冒充是不同的用户在申请网络地址。

Sname(server host name):
表示 Client 获取配置信息的服务器名字。
此字段由 DHCP Server 填写,是可选的。如果填写,必须是一个以0结尾的字符串。

File(file name):
表示 Client 启动 DHCP 相关配置的文件名。
此字段由 DHCP Server 填写,随着 DHCP 地址分配的同时下发至客户端。
本字段是可选的,如果填写,必须是一个以 0 结尾的字符串。

Options

通过此字段,DHCP Server 为 DHCP Client 提供各种配置信息。

对于 DHCP.Options 整体:
1)为可变长度字段(即长度不固定),最多为 312 字节;
2)在此字段中,包含 DHCP 报文类型、服务器分配给终端的配置信息(例如 网关地址、DNS 服务器地址、客户端可以使用网络地址的有效租期等信息)

对于 DHCP.Options 细节:
1)包含多个 TLV 结构(即 Type、Length、Value 三部分)
1)Type,取值范围 1~255;Length 表示长度;

常见的 Options 如下表所示:

Type	Length (Byte)	Value					作用
1		4				Subnet Mask				设置子网掩码选项。
3		4				Router(网关)				设置网关地址选项。
50		4				Requested IP Address	设置请求网络地址选项。
51		4				IP Address Lease Time	设置网络地址租约时间选项。
53		1				Message Type			设置 DHCP 消息类型。
54		4				DHCP Server Identifier	设置服务器标识。
55		9				Parameter Request List	设置请求选项列表。客户端利用该选项指明需要从服务器获取哪些网络配置参数。
58		4				Rebinding Time Value	设置续约 T1 时间,一般是租期时间的 50.0%;
59		4				Renewal Time Value		设置续约 T2 时间。一般是租期时间的 87.5%;

常见消息类型

标准协议规定选项

DHCP.Options.Option.Type=53,表示 DHCP 报文类型。

如下图所示,当 Type=53,Length=1,Value=[01,08] 时,分别表示不同的 DHCP 报文类型。

Value=1,DHCP DISCOVER:客户端发送,广播报文,寻找 DHCP 服务器;DHCP Client 首次登录网络时进行 DHCP 交互过程发送的第一个消息,用来寻找 DHCP Server 。

Value=2,DHCP OFFER:服务器响应,单播报文,回复 DISCOVER 报文,并携带各种配置信息;DHCP Server 用来响应 DHCP DISCOVER 消息,此消息携带各种配置信息。

Value=3,DHCP REQUEST:客户端请求,确认配置,或者续借租期;DHCP Client 广播请求回应 DHCP Server 的 OFFER 消息;DHCP Client 重启广播确认之前的IP地址等配置信息;续租;

Value=4,DHCP DECLINE:当 DHCP Client 发现 Server 分配给它的网络地址发生冲突时,会通过发送此消息来通知服务器。

Value=5,DHCP ACK:服务端响应,确认收到 REQUEST 报文;DHCP Server 对 DHCP Client 的 DHCP REQUEST 消息的确认响应消息。

Value=6,DHCP NAK:服务端响应,拒绝收到 REQUEST 报文;DHCP Server 对 DHCP Client 的 DHCP REQUEST 消息的拒绝响应消息。

Value=7,DHCP RELEASE:客户端发送,来通知服务器,要释放该地址;DHCP Client 可通过发送此消息主动释放 DHCP Server 分配给它的网络地址。

Value=8,DHCP INFORM:当 DHCP Client 获取网络地址后,如果需要向 DHCP Server 获取更为详细的配置信息(网关地址、DNS服务器地址),则向 DHCP Server 发送 DHCP INFORM 请求消息。

用户(厂商)自定义选项

除了标准协议中规定的字段选项外,还有部分选项内容没有统一规定,统称为用户自定义选项,例如 Option 82 和 Option 43;

Option 82,称为中继代理信息选项;能够包含最多 255 个 Sub-Option;若定义 Option 82,至少要定义一个Sub-Option;
当 DHCP Relay 或 DHCP Snooping 设备接收到 DHCP Client 发送给 DHCP Server 的请求报文后,在该报文中添加 Option 82,并转发给 DHCP Server。管理员可以从 Option 82 中获得 DHCP Client 的信息,例如 DHCP Client 所连接交换机端口的VLAN ID、二层端口号、中继设备的MAC地址等。

在 option 82 中,目前常用的Sub-Option如下:
1)Sub-Option 1:为代理电路id(即circuit id)子项。子选项通常在 DHCP Relay 设备上配置,定义了在传输报文的时候要携带 DHCP Client 所连接交换机端口的vlan-id及二层端口号。通常Sub-Option 1与Sub-Option 2子选项要共同使用来标识DHCP源端的信息。
2)Sub-Option 2:代理远程id(即remote id)子项。该子选项也通常在 DHCP Relay 设备上配置,定义了在传输报文的时候要携带 DHCP Realy 设备的mac地址信息。
3)Sub-Option 5:为链路选择(link selection)子项,该选项中包含了 DHCP Relay 添加的ip地址。这样 DHCP Server 在分配网络地址给 DHCP Client 的时候就可以分配与该地址同网段的ip地址。

Option 43,称为厂商特定信息选项;DHCP Server 和 DHCP Client 通过 Option 43 交换厂商特定的信息;
当 DHCP Server 接收到请求 Option 43 信息的 DHCP 请求报文(在 Option 55 中带有 Option 43 参数)后,厂商设备将在回复报文中携带 Option 43,来为 DHCP Client 分配厂商指定的信息。

Option 43 即为 Type=43(0x2B)的 Option字段,又称为厂商特定信息选项,DHCP Server 和 DHCP Client 通过 Option43 交换厂商特定的信息。当 DHCP Server 接收到请求 Option 43 信息的 DHCP 请求报文后,将在回复报文中携带 Option 43,为 DHCP Client 分配厂商指定的信息。

例如,在华为 WLAN 组网中,AP 作为 DHCP Client 角色,DHCP Server 可以为 AP 指定 AC 的网络地址,以方便 AP 与 AC 建立连接。