DHCP协议
一、DHCP(动态主机配置协议)简介
1.1 DHCP协议的应用场景
DHCP(Dynamic Host Configuration Protocol,动态主机配置协议) 是 RFC2131定义的标准协议,采用C/S通信模式,由客户端(DHCP Client)向服务器(DHCP Server)提出配置申请,服务器返回为客户端分配的配置信息。允许网络设备(如计算机、智能手机、打印机等)自动从DHCP服务器获取IP地址和其他网络配置信息。
二、DHCP的结构
2.1 DHCP的报文结构
DHCP报文用TLV这种格式来携带通告扩展信息
| 字段名 | 长度 | 含义 |
|---|---|---|
| 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地址的有效租期等信息。 |
2.2 DHCP报文封装过程
DHCP使用UDP来进行封装,端口为67,68。在中继设备上略有不同,见后续。但是我可以在这归为 client使用port 68,server使用port 67。
2.3 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的交互机制
[!IMPORTANT]
为什么需要二次交互才能获得地址,因为C/S架构的DHCP协议,可能是1对多的情况,即一个客户端的请求被多个服务器回答。
3.1 无中继场景的报文交互
3.1.1 详细报文过程
DHCP Discover
DHCP Offer
DHCP Request
DHCP Ack
在此可以发现上述说明的端口问题。
在Client客户端收到Ack报文后,会多次发送免费ARP来检测这个地址是否有冲突,如果有客户端会向服务器发送DHCP DECLINE报文。
3.2 中继场景
DHCP报文的目的IP地址改为DHCP服务器或下一跳中继的IP地址,源地址改为中继连接客户端的接口地址,通过路由转发将DHCP报文单播发送到DHCP服务器或下一跳中继。
值得一提中继报文的端口均为port 67,应是双方都是server的缘故。
在中继场景下,DHCP Server通过中继发送的报文中的Relay agent IP address字段来分析client所需需要的地址池。
3.3 完整的DHCP租期流程
1.第一次获取地址筛选server
2.续租
1)租期50%,发送request(单播 server),进行续租申请,服务器回复ack续租,租期刷新。
2)如果request没有回复,租期87.5%,发送request(广播)寻找其他的Server,但一定会得到Nak 因为其他服务器根本没租的记录
3)在时间结束后发送DHCP release释放地址
四、配置案例
4.1 DHCP基于接口配置

AR2 DHCP enable #开启全局 interface GigabitEthernet0/0/0 [Huawei-GigabitEthernet0/0/0] ip address 10.1.12.2 255.255.255.0 [Huawei-GigabitEthernet0/0/0]dhcp select interface # 绑定为DHCP接口模式 创建DHCP Pool 默认这个网段 ### 一些额外信息配置 [Huawei-GigabitEthernet0/0/0] dhcp server lease day 2 hour 0 minute 0 # 设置租期 缺省day 1 [Huawei-GigabitEthernet0/0/0] dhcp server dns-list 8.8.8.8 8.8.4.4 # 设置DNS主 备 服务器 [Huawei-GigabitEthernet0/0/0] dhcp server static-bind ip-address 172.16.12.10 mac-address XXXX-XXXX-XXXX #静态绑定一些哑终端 AR1 DHCP enable #开启全局 interface GigabitEthernet0/0/0 [Huawei-GigabitEthernet0/0/0]ip address dhcp-alloc #开启DHCP客户端获取功能
4.2 中继案例

本图DHCP Server需要10.1.12.0/24的路由,因为中继包的source ip是10.1.12.2 即 AR2的G0/0/0
AR3 Sever配置 # dhcp enable # ip pool poo1 gateway-list 10.1.23.3 #dhcp获取的网关地址 network 10.1.23.0 mask 255.255.255.0 #dhcp地址池 lease day 2 hour 0 minute 0 dns-list 8.8.8.8 8.8.4.4 # ip pool poo2 gateway-list 10.1.12.2 network 10.1.12.0 mask 255.255.255.0 dns-list 114.114.114.114 [Huawei-GigabitEthernet0/0/1]dhcp select global 一定要开启全局服务AR2 中继配置 # interface GigabitEthernet0/0/0 ip address 10.1.12.2 255.255.255.0 dhcp select relay #开启中继功能 dhcp relay server-ip 10.1.23.3 #dhcp服务器地址

















浙公网安备 33010602011771号