DHCP

DHCP

简介

定义动态主机配置协议DHCP(Dynamic Host Configuration Protocol)是一种用于集中对用户IP地址进行动态管理和配置的技术。即使规模较小的网络,通过DHCP也可以使后续增加网络设备变得简单快捷。

DHCP是在BOOTP(BOOTstrap Protocol)基础上发展而来,但BOOTP运行在相对静态(每台主机都有固定的网络连接)的环境中,管理员为每台主机配置专门的BOOTP参数文件,该文件会在相当长的时间内保持不变。DHCP从以下两方面对BOOTP进行了扩展:

DHCP允许计算机动态地获取IP地址,而不是静态为每台主机指定地址。
DHCP能够分配其他配置参数,例如客户端的启动配置文件,使客户端仅用一个消息就获取它所需要的所有配置信息。

DHCP协议由RFC 2131定义,采用客户端/服务器通信模式,由客户端(DHCP Client)向服务器(DHCP Server)提出配置申请,服务器返回为客户端分配的配置信息。
DHCP可以提供两种地址分配机制,网络管理员可以根据网络需求为不同的主机选择不同的分配策略。

动态分配机制:通过DHCP为主机分配一个有使用期限(这个使用期限通常叫做租期)的IP地址。这种分配机制适用于主机需要临时接入网络或者空闲地址数小于网络主机总数且主机不需要永久连接网络的场景。
静态分配机制:网络管理员通过DHCP为指定的主机分配固定的IP地址。相比手工静态配置IP地址,通过DHCP方式静态分配机制避免人工配置发生错误,方便管理员统一维护管理。

受益

DHCP受益主要有以下两点:

降低客户端的配置和维护成本
DHCP易配置部署,对于非技术用户,DHCP能够将客户端与配置相关的操作降至最低,并能够降低远程部署和维护成本。

集中管理
DHCP服务器可以管理多个网段的配置信息,当某个网段的配置发生变化时,管理员只需要更新DHCP服务器上的相关配置即可。

DHCP报文介绍

DHCP报文格式

DHCP继承了BOOTP的报文结构,采用UDP进行封装,具体报文格式如图1所示。
图1 DHCP的报文格式
DHCP
图1中括号里的数字表示字段的长度,单位是字节。DHCP报文中各个字段的含义如表1所示。
表1 DHCP报文中各个字段的含义

字段 长度 含义
op (Message op code) 1字节 表示报文的操作类型,取值为1或2,含义如下:1:Client请求报文2:Server响应报文
htype (Hardware Address Type) 1字节 表示网络硬件地址的类型。目前只支持以太网,该值为1。
hlen (Hardware Address Length) 1字节 表示网络硬件地址的长度,单位是字节。目前只支持以太网,该值为6。
hops 1字节 表示当前DHCP报文经过的DHCP Relay数目。该字段由Client设置为0,每经过一个DHCP Relay时,该字段加1。此字段的作用是限制DHCP报文所经过的DHCP Relay数目。 说明: DHCP Server和Client之间的DHCP Relay不能超过32个,也就是hops值不能大于32,否则DHCP报文将被丢弃。
xid (Transaction ID) 4字节 表示DHCP Client每次发送DHCP请求报文时选择的随机数,使DHCP Server的回复与Client的报文相关联。
secs (Seconds) 2字节 表示DHCP Client开始获取地址或地址续租更新过程后耗费的时间,单位是秒。flags2字节表示标志字段。目前只有最高位才有意义,其余的15位均被置为0。最高位为单播或者广播响应标志位,用来表示DHCP Server响应报文时采用单播还是广播方式发送,取值含义如下:0:DHCP Client请求DHCP Server以单播形式发送响应报文1:DHCP Client请求DHCP Server以广播形式发送响应报文
ciaddr (Client IP Address) 4字节 表示DHCP Client的IP地址。可以是DHCP Server分配给Client的IP地址或者Client已有的IP地址。DHCP Client在初始化状态时没有IP地址,此字段为0.0.0.0。 说明: IP地址0.0.0.0仅在采用DHCP方式的系统启动时允许本主机利用它进行临时的通信,并且永远不是有效目的地址。
yiaddr (Your (Client) IP Address) 4字节 表示DHCP Server分配给Client的IP地址。当DHCP Server进行DHCP响应时,将分配给Client的IP地址填入此字段。siaddr (Server IP Address)4字节表示DHCP Server的IP地址。
giaddr (Gateway IP Address) 4字节 表示第一个DHCP Relay的IP地址。当Client发出DHCP请求时,如果DHCP Server和Client不在同一个网络中,那么第一个DHCP Relay在转发DHCP请求报文时会把自己的IP地址填入此字段。Server会根据此字段来判断出网段地址,从而选择为用户分配地址的地址池。DHCP Server还会根据此地址将响应报文发送给此DHCP Relay,再由DHCP Relay将此报文转发给Client。 说明: 若在到达DHCP Server前经过了不止一个DHCP Relay,那么第一个DHCP Relay后的其他DHCP Relay不会改变此字段,只是把hops的数目加1。
chaddr (Client Hardware Address) 16字节 表示DHCP Client的MAC地址,此字段与前面的“Hardware Address Type”和“Hardware Address Length”保持一致。当Client发出DHCP请求时,将自己的硬件地址填入此字段。对于以太网,当“Hardware Address Type”和“Hardware Address Length”分别为“1”和“6”时,此字段必须填入6字节的以太网MAC地址。
sname (Server Host Name) 64字节 表示DHCP Client获取配置信息的Server名字。此字段由DHCP Server填写,是可选的。如果填写,必须是一个以0结尾的字符串。
file (Boot File Name) 128字节表示 DHCP Client的启动配置文件名。此字段由DHCP Server填写,随着DHCP地址分配的同时下发至Client。本字段是可选的,如果填写,必须是一个以0结尾的字符串。
options 可变 表示DHCP的选项字段,至少为312字节。此字段包含了DHCP报文类型,DHCP Server分配给Client的配置信息,如缺省网关IP地址、DNS Server的IP地址、NetBIOS Server的IP地址以及Client可以使用IP地址的有效租期等信息。对Options字段的详细解释请参见“Option字段格式与作用”。

DHCP报文类型

DHCP报文分为8种类型,DHCP Server和Client之间通过这8种类型的报文进行通信:

表2 DHCP报文中各个字段的含义

报文名称 说明
DHCP DISCOVER DHCP Client首次登录网络时进行DHCP交互过程发送的第一个报文,用来寻找DHCP Server。
DHCP REQUEST 此报文用于以下三种用途:DHCP Client初始化后,发送广播的DHCP REQUEST报文来回应Server的DHCP OFFER报文。DHCP Client重启后,发送广播的DHCP REQUEST报文来确认先前被分配的IP地址等配置信息。当DHCP Client已经和某个IP地址绑定后,发送DHCP REQUEST单播或广播报文来更新IP地址的租约。
DHCP ACK DHCP Server对Client发送的DHCP REQUEST报文的确认响应报文,只有当DHCP Client收到此报文后,才真正获得了IP地址和相关的配置信息。
DHCP DECLINE 当DHCP Client发现DHCP Server分配给它的IP地址发生冲突时会通过发送此报文来通知DHCP Server,并且会重新向DHCP Server申请地址。
DHCP RELEASE DHCP Client可通过发送此报文主动释放DHCP Server分配给它的IP地址,当DHCP Server收到此报文后,可将这个IP地址分配给其它的DHCP Client。
DHCP INFORM DHCP Client获取IP地址后,如果需要向DHCP Server获取更为详细的配置信息(网关地址、DNS Server地址),则向DHCP Server发送DHCP INFORM请求报文。

Option字段格式与作用

Options字段的格式
Options字段的格式如图2所示。图2 Options字段的格式
DHCP
Options字段由Code、Length和Value三部分组成。这三部分的表示含义如表3所示。
表3 Options各字段的含义

字段 长度 含义
Code 1字节 表示标识号,唯一标识后面的信息内容。
Length 1字节 表示后面信息内容的长度。
Value 其长度为Length字段所指定 表示信息内容。

DHCP Options选项的取值范围为1~255,如表4所示,介绍DHCP Options的部分知名选项。

表4 DHCP报文的Options字段说明

Options号 Options作用
1 设置子网掩码选项。
3 设置网关地址选项。
6 设置DNS Server地址选项。
12 设置DHCP客户端的主机名选项。
15 设置域名后缀选项。
33 设置静态路由选项。该选项中包含一组有分类静态路由(即目的地址的掩码固定为自然掩码,不能划分子网),Client收到该选项后,将在路由表中添加这些静态路由。如果存在Option121,则忽略该选项。
44 设置NetBios Server地址选项。
46 设置NetBios节点类型选项。
50 设置请求IP选项。
51 设置IP地址租约时间选项。
52 设置Option附加选项。
53 设置DHCP消息类型。
55 设置请求参数列表选项。客户端利用该选项指明需要从服务器获取哪些网络配置参数。该选项内容为客户端请求的参数对应的选项值。
56 设置消息选项,用于描述地址分配失败的原因。以下DHCP报文的Option选项字段会封装该选项:DHCP服务器发送的NAK报文DHCP客户端发送的DECLINE报文或RELEASE报文DHCP中继探测到地址冲突时,发送的DECLINE报文;或者主动释放地址时,发送的RELEASE报文DHCP Snooping设备主动释放地址时,发送的RELEASE报文
58 设置续约T1时间,一般是租期时间的50%。
59 设置续约T2时间。一般是租期时间的87.5%。60设置厂商分类信息选项,用于标识DHCP客户端的类型和配置。
61 设置客户端标识选项。
66 设置TFTP服务器名选项,用来指定为客户端分配的TFTP服务器的域名。67设置启动文件名选项,用来指定为客户端分配的启动文件名。
77 设置用户类型标识。
121 Option 121,无分类路由选项。该选项中包含一组无分类静态路由(即目的地址的掩码为任意值,可以通过掩码来划分子网),Client收到该选项后,将在路由表中添加这些静态路由。

Options字段的作用
DHCP报文中的Options字段可以用来存放某些普通协议中没有定义的控制信息和参数。如果用户在DHCP Server端配置了Options,DHCP Client在申请IP地址的时候,会通过DHCP Server端回应的DHCP报文获得Options字段中的配置信息。
根据Options选项功能的不同,此字段的作用对象也不同。比如Option 77用于DHCP Client,作用为识别用户或应用程序所属的类型,根据Option字段中所携带的用户类型(User Class),DHCP Server选择适当的地址池为Client分配IP地址并配置相关参数。Option 77一般在Client由用户进行配置,而不必用命令在Server端配置。
关于DHCP Option Code的含义和用法,请参见RFC 2132。