DHCP消息格式
DHCP是一种运行在客户端和服务器之间的协议,DHCP客户端向DHCP服务器动态地请求网络配置信息,DHCP服务器根据策略返回相应的配置信息(IP地址、子网掩码、缺省网关等网络参数)。客户端和服务器之间交互的消息格式由固定格式的首部和可变的选项格式区域组成。
DHCP报文介绍
字段 |
长度 |
含义 |
---|---|---|
op(op code) |
1字节 |
表示报文的类型,取值为1或2,含义如下:
|
htype(hardware type) |
1字节 |
表示硬件地址的类型。对于以太网,该类型的值为“1”。 |
hlen (hardware length) |
1字节 |
表示硬件地址的长度,单位是字节。对于以太网,该值为“6”。 |
hops |
1字节 |
表示当前DHCP报文经过的DHCP Relay数目。该字段由客户端设置为0,每经过一个DHCP Relay时,该字段加1。此字段的作用是限制DHCP报文所经过的DHCP Relay数目。 说明:
服务器和客户端之间的DHCP Relay数目不能超过16个,也就是Hops值不能大于16,否则DHCP报文将被丢弃。 |
xid |
4字节 |
表示用户选取的随机数,使服务器的回复与用户的报文相关联。 |
secs (seconds) |
2字节 |
表示客户端从开始DHCP请求后所用的时间,单位是秒。 |
flags |
2字节 |
表示标志字段。只有标志字段的最高位才有意义,其余的15位均被置为0。最高位被解释为广播响应标志位,内容如下所示:
|
ciaddr (client ip address) |
4字节 |
表示客户端的IP地址。可以是服务器分配给客户端的IP地址或者客户端已有的IP地址。客户端在初始化状态时没有IP地址,此字段为0.0.0.0。 说明:
IP地址0.0.0.0仅在采用DHCP方式的系统启动时允许本主机利用它进行临时的通信,并且永远不是有效目的地址。 |
yiaddr (your client ip address) |
4字节 |
表示服务器分配给客户端的IP地址。当服务器进行DHCP响应时,将分配给客户端的IP地址填入此字段。 |
siaddr (server ip address) |
4字节 |
DHCP客户端获得启动配置信息的服务器的IP地址。 |
giaddr(gateway ip address) |
4字节 |
表示第一个DHCP Relay的IP地址。当客户端发出DHCP请求时,如果服务器和客户端不在同一个网段,那么第一个DHCP Relay在将DHCP请求报文转发给DHCP服务器时,会把自己的IP地址填入此字段,DHCP服务器会根据此字段来判断出客户端所在的网段地址,从而选择合适的地址池,为客户端分配该网段的IP地址。 服务器还会根据此地址将响应报文发送给此DHCP Relay,再由DHCP Relay将此报文转发给客户端。 说明:
若在到达DHCP服务器前经过了多个DHCP Relay,该字段作为客户端所在的网段的标记,填充了第一个DHCP Relay的IP地址后不会再变更,只是每经过一个DHCP Relay,Hops字段的数值会加1。 |
chaddr(client hardware address) |
16字节 |
表示客户端的MAC地址,此字段与前面的“hardware type”和“hardware length”保持一致。当客户端发出DHCP请求时,将自己的硬件地址填入此字段。对于以太网,当“hardware type”和“hardware length”分别为“1”和“6”时,此字段必须填入6字节的以太网MAC地址。 |
sname(server host name) |
64字节 |
表示客户端获取配置信息的服务器名字。此字段由DHCP服务器填写,是可选的。如果填写,必须是一个以0结尾的字符串。 |
file(file name) |
128字节 |
表示客户端启动DHCP相关配置的文件名。此字段由DHCP服务器填写,随着DHCP地址分配的同时下发至客户端。本字段是可选的,如果填写,必须是一个以0结尾的字符串。 |
options |
可变 |
表示DHCP的选项字段,至少为312字节。DHCP通过此字段包含了DHCP报文类型,服务器分配给终端的配置信息,如网关IP地址,DNS服务器的IP地址,客户端可以使用IP地址的有效租期等信息。 |
DHCP选项字段
DHCP消息类型
目前DHCP定义了如下八种类型消息。表4-2 DHCP消息类型说明消息名称
说明
DHCP DISCOVER
DHCP客户端首次登录网络时进行DHCP交互过程发送的第一个消息,用来寻找DHCP服务器。
DHCP OFFER
DHCP服务器用来响应DHCP DISCOVER消息,此消息携带了各种配置信息。
DHCP REQUEST
此消息用于以下三种用途。- 客户端初始化后,发送广播的DHCP REQUEST消息来回应服务器的DHCP OFFER消息。
- 客户端重启初始化后,发送广播的DHCP REQUEST消息来确认先前被分配的IP地址等配置信息。
- 当客户端已经和某个IP地绑定后,发送DHCP REQUEST消息来更新IP地址的租约。
DHCP ACK
服务器对客户端的DHCP REQUEST消息的确认响应消息,客户端收到此消息后,才真正获得了IP地址和相关的配置信息。
DHCP NAK
服务器对客户端的DHCP REQUEST消息的拒绝响应消息,例如DHCP服务器收到DHCP-REQUEST消息后,没有找到相应的租约记录,则发送DHCP-NAK消息作为应答,告知DHCP客户端无法分配合适IP地址。
DHCP DECLINE
当客户端发现服务器分配给它的IP地址发生冲突时会通过发送此消息来通知服务器,并且会重新向服务器申请地址。
DHCP RELEASE
客户端可通过发送此消息主动释放服务器分配给它的IP地址,当服务器收到此消息后,可将这个IP地址分配给其它的客户端。
DHCP INFORM
DHCP客户端获取IP地址后,如果需要向DHCP服务器获取更为详细的配置信息(网关地址、DNS服务器地址),则向DHCP服务器发送DHCP-INFORM请求消息。
DHCP选项格式
DHCP报文中的Options字段可以用来存放控制信息和参数。如果用户在DHCP服务器端配置了Options字段,DHCP客户端在申请IP地址的时候,会通过服务器端回应的DHCP报文获得Options字段中的配置信息。Options字段的格式如图4-3所示。 Options字段由Type、Length和Value三部分组成。这三部分的表示含义如下所示:表4-3 Options各字段的含义字段
长度
含义
Type
1字节
Options号。
Length
1字节
该字段表示后面信息内容的长度。
Value
其长度为Length字段所指定
该字段表示信息内容。
DHCP Options选项的Type取值范围为1~255,如表4-4所示,介绍DHCP Options的部分知名选项。
表4-4 DHCP报文的Options字段说明Options号
Options作用
1
设置子网掩码选项。
3
设置网关地址选项。
6
设置DNS服务器地址选项。
15
设置域名选项。
33
设置静态路由选项。该选项中包含一组有分类静态路由(即目的地址的掩码固定为自然掩码,不能划分子网)。客户端收到该选项后,将在路由表中添加这些静态路由,如果存在Option121,则忽略该选项。
44
设置NetBios名字选项。
46
设置NetBios节点类型选项。
50
设置请求IP选项。
51
设置IP地址租约时间选项。
52
设置Option附加选项。
53
设置DHCP消息类型。
54
设置服务器标识。
55
设置请求参数列表选项。客户端利用该选项指明需要从服务器获取哪些网络配置参数。该选项内容为客户端请求的参数对应的选项值。
58
设置续约Time1时间,一般是租期时间的50%。
59
设置续约Time2时间。一般是租期时间的87.5%。
60
设置客户端报文携带的厂商信息。
61
设置客户端标识选项。
66
设置TFTP服务器名选项,用来指定为客户端分配的TFTP服务器的域名。
67
设置启动文件名选项,用来指定为客户端分配的启动文件名。
82
设置中继代理信息选项。
119
设置域名搜索列表选项,用于下发DNS后缀列表。
120
设置DHCP SIP服务器选项,用于下发SIP服务器地址信息。
121
设置无分类路由选项。该选项中包含一组无分类静态路由(即目的地址的掩码为任意值,可以通过掩码来划分子网),客户端收到该选项后,将在路由表中添加这些静态路由。
125
设置标识厂商的厂商选项。
根据Options选项功能的不同,此字段的作用对象也不同。
关于常用的DHCP Options Type的含义和用法,请参见标准协议。
自定义DHCP选项
除了标准协议中规定的字段选项外,还有部分选项内容没有统一规定,例如Option43。下面将介绍设备上定义的几种选项格式。厂商特定信息选项(Option43)
Option43称为厂商特定信息选项。Option43的报文格式如图4-4所示。DHCP服务器和DHCP客户端通过Option43交换厂商特定的信息。当DHCP服务器接收到请求Option43信息的DHCP请求报文(Option55中带有43参数)后,将在回复报文中携带Option43,为DHCP客户端分配厂商指定的信息。
为了提供可扩展性,通过Option43为客户端分配更多的信息,Option43采用子选项的形式,通过不同的子选项为用户分配不同的网络配置参数,如图4-4所示。子选项中各字段的含义为:Sub-option type:子选项类型。目前,子选项类型值可以为0x01表示ACS参数子选项,0x02表示服务提供商标识子选项,0x80表示PXE引导服务器地址子选项。
Sub-option length:子选项的长度。
Sub-option value:子选项的取值。
设备作为DHCP客户端时,可以通过Option43获取以下信息:自动配置服务器ACS(Auto-Configuration Server)的参数,包括URL地址、用户名和密码。
服务提供商标识CPE(Customer Premises Equipment)从DHCP服务器获取该信息后,将该信息通告给ACS,以便ACS选择服务提供商特有的配置和参数等。
预启动执行环境PXE(Preboot eXecution Environment)引导服务器地址,以便客户端从PXE引导服务器获取启动文件或其他控制信息。
中继代理信息选项(Option82)
Option82称为中继代理信息选项,该选项记录了DHCP客户端的位置信息。DHCP中继或DHCP Snooping设备接收到DHCP客户端发送给DHCP服务器的请求报文后,在该报文中添加Option82,并转发给DHCP服务器。
管理员可以从Option82中获得DHCP客户端的位置信息,以便定位DHCP客户端,实现对客户端的安全和计费等控制。支持Option82的服务器还可以根据该选项的信息制定IP地址和其他参数的分配策略,提供更加灵活的地址分配方案。
Option82最多可以包含255个子选项。若定义了Option82,则至少要定义一个子选项。目前设备支持如下子选项:sub-option 1(Circuit ID)、sub-option 2(Remote ID)和sub-option 6(Subscriber ID)。
由于Option82的内容没有统一规定,不同厂商通常根据需要进行填充。目前设备提供了几种系统预定义的Option82格式,分别是Type1、Type2、Cn-telecom,还支持自定义格式Self-define。Type1为电信格式Option82信息。
Type2为网管格式Option82信息。
Cn-telecom为标准电信格式Option82信息。
Self-define为用户自定义格式Option82信息。