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服务器负责从地址池中选择IP地址分配至DHCP客户端,还可以为DHCP客户端提供其他网络参数,如默认网关地址、DNS服务器地址和WINS服务器地址。DHCP服务器可以接收处理来自本网段或跨网段由DHCP中继转发的DHCP请求报文。
• DHCP客户端
DHCP客户端发送DHCP请求报文、通过BOOTP或DHCP协议请求获取IP地址等网络参数的设备。例如,IP电话、PC、手机、无盘工作站等。
• DHCP中继
DHCP中继负责转发DHCP服务器和DHCP客户端之间的DHCP报文,协助DHCP服务器向DHCP客户端动态分配网络参数的设备。
DHCP客户端广播发送请求报文(即目的IP地址为255.255.255.255),位于同一网段内的DHCP服务器能够接收请求报文。如果DHCP客户端和DHCP服务器不在同一个网段,DHCP服务器无法接收来自客户端的请求报文,此时,需要通过DHCP中继来转发DHCP报文。不同于传统的IP报文转发,DHCP中继接收到DHCP请求或应答报文后,会重新修改报文格式并生成一个新的DHCP报文再进行转发。
DHCP租期和地址池
租期
DHCP服务器给每个分配给客户端的IP地址定义一个使用期限,该使用期限被称为租期。在租期到期前,DHCP客户端如果仍需要使用该IP地址,可以请求延长租期;如果不需要,可以主动释放该IP地址。在没有其他空闲地址可用的情况下,DHCP服务器会把客户端主动释放的IP地址分配给其他客户端。
DHCP服务器动态分配的所有IP地址都受租期时长的限制,不同的DHCP服务器配置的租期时长可以不同。静态分配的IP地址不受租期时长的限制,使用期限为无限长。
DHCP客户端不会等到租期到期后再申请IP地址,这样会导致IP地址被服务器回收,然后分配给其他客户端。为保证能够使用原来的IP地址,客户端会在租期到期前的某个时间点就开始申请延长租期。
地址池
地址池指的是DHCP服务器可以为客户端分配的所有IP地址的集合。除IP地址外,地址池内还可以配置租期、子网掩码、默认网关等网络参数。在DHCP服务器为客户端分配IP地址时,这些网络参数也一并分配给客户端。
根据创建方式的不同,地址池可以分为基于接口方式的地址池和基于全局方式的地址池。
• 基于接口方式的地址池:在DHCP服务器与客户端相连的接口上配置IP地址,地址池是跟此接口地址所属同一网段的IP地址,且地址池中地址只能分配给此接口下的客户端。这种配置方式简单,仅适用于DHCP服务器与客户端在同一个网段的场景。
• 基于全局方式的地址池:在系统视图下创建指定网段的地址池,且地址池中地址可以分配给设备所有接口下的客户端。当DHCP服务器与客户端不在同一个网段时,需要部署DHCP中继。
DHCP服务器依据是否部署DHCP中继来选择地址池。无DHCP中继场景下,DHCP服务器选择与接收DHCP请求报文的接口IP地址处于同一网段的地址池。有DHCP中继场景下,DHCP服务器选择与DHCP请求报文中giaddr字段(标识客户端所在网段)位于同一网段的地址池。
根据客户端的数量和接入断开的时间、频率来确定地址池内需要部署的IP地址数量。
根据IP地址的使用情况,地址池中的IP地址可以分为多种状态,包括:
• Used:表示此IP地址已使用。
• Idle:表示此IP地址处于空闲状态。
• Static-bind:表示此IP地址已绑定MAC地址且未使用。
• Static-bind used:表示此IP地址与MAC地址绑定且已使用。
• Disable:表示此IP地址无法使用。
通过命令dhcp server excluded-ip-address(接口地址池)或excluded-ip-address(全局地址池)排除的IP地址是Disable状态。
• Expired:表示此IP地址租期已过,处于空闲状态。
地址池中IP地址到期后是Expired状态。地址池内保留Expired状态IP地址的分配记录,目的是当用户重新关联请求IP地址时,分配原来使用过的IP地址给用户,保持用户IP地址的稳定性。
当地址池中Idle状态的IP地址耗尽时,地址池会自动回收Expired状态的IP地址,然后分配给新用户,无需手动清理。
• Conflict:表示此IP地址与网络上其他地址冲突。
地址池中出现Conflict状态的IP地址,说明提前避免了网络中出现IP地址冲突。以下两种情形会出现Conflict状态IP地址:
• DHCP服务器收到DHCP Discover报文时,给客户端分配IP地址前会发送Ping探测,如果能Ping通则设置IP地址为Conflict状态,并选择其他IP地址分配给客户端。
• DHCP客户端获取IP地址成功后,会立即发送免费ARP报文,如果收到响应,则发送DHCP Decline报文通知DHCP服务器该IP地址冲突,DHCP服务器设置该IP地址为Conflict状态,客户端发送DHCP Discover报文重新申请IP地址。
当地址池中Idle状态和Expired状态的IP地址耗尽时,地址池会自动回收Conflict状态的IP地址,然后分配给新用户,无需手动清理。
某些无线终端在发送DHCP Discover报文申请IP地址阶段,会响应Ping探测,造成地址池误报IP地址冲突,这种情况可以通过关闭地址池Ping探测功能解决:dhcp server ping packet 0(默认为2,设置为0则不再Ping探测)。
DHCP报文介绍
DHCP报文类型
DHCP服务器与DHCP客户端之间通过DHCP报文进行通信。DHCP报文是基于UDP协议传输的。DHCP客户端向DHCP服务器发送报文时采用68端口号,DHCP服务器向DHCP客户端发送报文时采用67端口号。
目前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报文格式是在BOOTP报文格式的基础上发展而来,因此,DHCP服务器支持与BOOTP客户端之间进行交互。
括号里的数字表示字段的长度,单位是字节。
DHCP报文中各个字段的含义
字段 | 长度 | 含义 |
---|---|---|
op (op code) | 1字节 | 表示报文的类型,取值为1或2,含义:• 1:客户端请求报文• 2:服务器响应报文 |
htype (hardware type) | 1字节 | 表示硬件类型。不同的硬件类型取值不同,最常见的值是1,表示以太网(10Mb)。 |
hlen (hardware length) | 1字节 | 表示硬件地址长度,以太网的值为6。 |
hops | 1字节 | 表示当前的DHCP报文经过的DHCP中继的数目。该字段由客户端或服务器设置为0,每经过一个DHCP中继时,该字段加1。此字段的作用是限制DHCP报文所经过的DHCP中继数目。服务器和客户端之间的DHCP中继数目不能超过16个,也就是Hops值不能大于16,否则DHCP报文将被丢弃。 |
xid | 4字节 | 表示DHCP客户端选取的随机数,使DHCP服务器的回复与DHCP客户端的报文相关联。 |
secs (seconds) | 2字节 | 表示客户端从开始获取地址或地址续租更新后所用的时间,单位是秒。 |
flags | 2字节 | 表示标志字段。只有标志字段的最高位才有意义,其余的15位均被置为0。最高位被解释为单播或者广播响应标志位,内容:• 0:客户端请求服务器以单播形式发送响应报文• 1:客户端请求服务器以广播形式发送响应报文 |
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中继的IP地址。当客户端发出DHCP请求时,如果服务器和客户端不在同一个网段,那么第一个DHCP中继在将DHCP请求报文转发给DHCP服务器时,会把自己的IP地址填入此字段,DHCP服务器会根据此字段来判断出客户端所在的网段地址,从而选择合适的地址池,为客户端分配该网段的IP地址。 服务器还会根据此地址将响应报文发送给此DHCP中继,再由DHCP中继将此报文转发给客户端。 若在到达DHCP服务器前经过了多个DHCP中继,该字段作为客户端所在的网段的标记,填充了第一个DHCP中继的IP地址后不会再变更,只是每经过一个DHCP中继,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地址分配的同时下发至客户端。本字段是可选的,如果填写,必须是一个以0结尾的字符串。 |
options | 可变 | 表示DHCP的选项字段,最多为1200字节。DHCP通过此字段包含了DHCP报文类型,服务器分配给终端的配置信息,如网关IP地址,DNS服务器的IP地址,客户端可以使用IP地址的有效租期等信息。 |
DHCP报文中的Options字段
DHCP报文中的Options字段用来存放分配给DHCP客户端的控制信息和参数,位于DHCP报文末尾的options字段。
Options字段由Type、Length和Value三部分组成:
Options字段的格式
Options各字段的含义
字段 | 长度 | 含义 |
---|---|---|
Type | 1字节 | 该字段表示信息类型。 |
Length | 1字节 | 该字段表示后面信息内容的长度。 |
Value | 其长度为Length字段所指定 | 该字段表示信息内容。 |
DHCP Options选项的取值范围为1~255。DHCP Options选项包括预定义选项和用户自定义选项。
DHCP报文的Options字段说明:
Options号 | Options作用 |
---|---|
1 | 设置子网掩码选项。 |
3 | 设置网关地址选项。 |
4 | 设置时间服务器地址选项。 |
6 | 设置DNS服务器地址选项。 |
7 | 设置日志服务器地址选项。 |
12 | 设置DHCP客户端的主机名选项。 |
15 | 设置域名后缀选项。 |
17 | 设置根路径选项。 |
28 | 设置组播地址选项。 |
33 | 设置静态路由选项。该选项中包含一组有分类静态路由(即目的地址的掩码固定为自然掩码,不能划分子网),客户端收到该选项后,将在路由表中添加这些静态路由。如果存在Option121,则忽略该选项。 |
42 | 设置NTP服务器地址选项。 |
43 | 设置厂商自定义选项。 |
44 | 设置NetBios服务器选项。 |
46 | 设置NetBios节点类型选项。 |
50 | 设置请求IP地址选项。 |
51 | 设置IP地址租约时间选项。 |
52 | 设置Option附加选项。 |
53 | 设置DHCP消息类型。 |
54 | 设置服务器标识。 |
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 | 设置用户类型标识。 |
120 | 设置SIP服务器IP地址选项。说明:当前仅支持解析IP地址,不支持解析域名。 |
121 | 设置无分类路由选项。该选项中包含一组无分类静态路由(即目的地址的掩码为任意值,可以通过掩码来划分子网),客户端收到该选项后,将在路由表中添加这些静态路由。说明:设备作为DHCP客户端支持DHCP服务器通过Option121下发的静态路由。 |
129 | 设置呼叫服务器地址选项。 |
184 | 保留选项,用户可以自定义该选项中携带的信息。 |
除了预定义选项,设备还支持配置用户自定义选项,以实现与不同终端的对接,如IP话机。
• 厂商特定信息选项(Option43),Option43称为厂商特定信息选项。
Option43格式
DHCP服务器和DHCP客户端通过Option43交换厂商特定的信息。当DHCP服务器接收到请求Option43信息的DHCP请求报文(Option55中带有43参数)后,将在回复报文中携带Option43,为DHCP客户端分配厂商指定的信息。
设备作为DHCP服务器时,其下挂的AP(华为设备)作为DHCP客户端时,可以为下挂的AP设备指定AC的IP地址,以方便AP与AC建立连接。
Option43支持主选项和子选项的形式。
• Sub-option type:子选项类型。设备作为DHCP服务器为AP提供AC的IP地址时,支持0x01(hex类型的子选项)、0x02(IP地址类型的子选项)和0x03(ASCII码类型的子选项)。
• Sub-option length:子选项的长度。
• Sub-option value:子选项的取值。
• 中继代理信息选项(Option82)
Option82称为中继代理信息选项,该选项记录了DHCP客户端的位置信息。DHCP中继或DHCP Snooping设备接收到DHCP客户端发送给DHCP服务器的请求报文后,在该报文中添加Option82,并转发给DHCP服务器。
管理员可以从Option82中获得DHCP客户端的位置信息,以便定位DHCP客户端,实现对客户端的安全和计费等控制。支持Option82的服务器还可以根据该选项的信息制定IP地址和其他参数的分配策略,提供更加灵活的地址分配方案。
Option82最多可以包含254个子选项。若定义了Option82,则至少要定义一个子选项。目前设备支持的子选项:
• sub-option1(Agent Circuit ID Sub-option)
• sub-option2(Agent Remote ID Sub-option)
• sub-option5(Link-selection Suboption)
• sub-option6(Subscriber-ID Suboption)
DHCP获取地址过程
一、客户机请求IP
客户机启动DHCP时,主动将自己的IP地址配置成0.0.0.0,已0.0.0.0作为源地址,使用UDP 68 port 作为源port;使用255.255.255.255作为目的地址,使用UDP 67 作为目的port来广播请求IP地址信息。
二、server响应
server响应也称为DHCP Offer。
当DHCP server接收到客户机请求IP地址的信息时,它就在自己的IP地址池中查找是否有合法的IP地址提供给客户机;
由于DHCP客户机还没有IP地址,所以DHCP server使用自己的IP地址作为源地址,使用UDP 67 port作为源port;使用255.255.255.255作为目标地址,使用UDP 68 port作为目的port来广播DHCP Offer信息。
三、客户机选择IP
客户机选择IP,也成为DHCP Request。
DHCP客户机从接收到的第一个DHCP Offer消息中选择IP地址,发出IP地址的DHCPserver将该地址保留,这样该地址就不能提供给还有一个DHCP客户机;
当客户机从第一个DHCP server接收DHCP Offer并选择IP地址后,DHCP租约的第三过程发生;
客户机将DHCP Request消息广播到全部的DHCP server,表明它接受提供的内容;
DHCP Request消息包含为该客户机提供IP配置的server的服务标识符(IP地址);
DHCP server查看server标识符字段,以确定它自己是否被选择为指定的客户机提供IP地址;
假设那些DHCP Offer被拒绝,则DHCP server会取消提供并保留其IP地址以用于下一个IP租约请求。
在客户机选择IP的过程中,管客户机选择了IP地址,可是还没有配置IP地址,而在一个网络中可能有几个DHCP server,
所以客户机仍然使用0.0.0.0的地址作为源地址,使用UDP 68 port作为源port;使用255.255.255.255作为目标地址,使用UDP 67 port作为目的port来广播DHCP Request信息。
四、server确认租约
server确认租约,也称为DHCP ACK/DHCP NAK。
DHCPserver接收到DHCP Request消息后,以DHCP ACK消息的形式向客户机广播成功的确认,该消息包括有IP地址的有效租约和其它可能配置的信息。
尽管server确认了客户机的租约请求,可是客户机还没有收到server的DHCP ACK消息;所以server仍然使用自己的IP地址作为源地址,使用UDP 67 port作为源port;使用255.255.255.255作为目标地址,使用UDP 68 port作为目的port来广播DHCP ACK信息。
当客户机收到DHCP ACK消息时,它就配置了IP地址。完毕了TCP/IP的初始化。
假设DHCP Request不成功:
比如客户机试图租约先前的IP地址,但该IP地址不再可用或者由于客户机移到其它子网;
该IP无效时,DHCP server将广播否定确认消息DHCP NAK;
当客户机接收到不成功的确认时,它将又一次開始DHCP租约过程。
假设DHCP客户机无法找到DHCP server:
它将从TCP/IP的B类网段169.254.0.0中挑选一个IP地址作为自己的IP地址,继续每隔5分钟尝试与DHCPserver进行通讯;
一旦与DHCP server取得联系,则客户机放弃自己主动配置的IP地址,而使用DHCPserver分配的IP地址。
假设一台DHCP客户机有两个或者多个网卡,则DHCPserver会为每一个网卡分配一个唯一而有效的IP地址。