加载中...

DHCP协议

一、DHCP(动态主机配置协议)简介

1.1 DHCP协议的应用场景

DHCP(Dynamic Host Configuration Protocol,动态主机配置协议) 是 RFC2131定义的标准协议,采用C/S通信模式,由客户端(DHCP Client)向服务器(DHCP Server)提出配置申请,服务器返回为客户端分配的配置信息。允许网络设备(如计算机、智能手机、打印机等)自动从DHCP服务器获取IP地址和其他网络配置信息。

二、DHCP的结构

2.1 DHCP的报文结构

img

image-20250218170700673

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报文封装过程

image-20250218171707412

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 无中继场景的报文交互

image-20250218011440648

image-20250218171624309

3.1.1 详细报文过程

DHCP Discover

image-20250218172006104

DHCP Offer

image-20250218172116281

DHCP Request

image-20250218172134880

DHCP Ack

image-20250218172149489

在此可以发现上述说明的端口问题。

在Client客户端收到Ack报文后,会多次发送免费ARP来检测这个地址是否有冲突,如果有客户端会向服务器发送DHCP DECLINE报文

image-20250218174551763

3.2 中继场景

image-20250218011710447

image-20250218011727531

image-20250218011734320

DHCP报文的目的IP地址改为DHCP服务器或下一跳中继的IP地址,源地址改为中继连接客户端的接口地址,通过路由转发将DHCP报文单播发送到DHCP服务器或下一跳中继。

image-20250218172234445

值得一提中继报文的端口均为port 67,应是双方都是server的缘故。

image-20250218011837625

在中继场景下,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 因为其他服务器根本没租的记录

image-20250218182806263

3)在时间结束后发送DHCP release释放地址

四、配置案例

4.1 DHCP基于接口配置

image-20250218183604352

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 中继案例

image-20250218183730399

本图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服务器地址
posted @ 2025-02-18 18:34  江寒雨  阅读(209)  评论(0)    收藏  举报