本文最后更新于 2024-08-23,文章内容可能已经过时。

🤔什么是 DHCP?

动态主机配置协议 DHCP(Dynamic Host Configuration Protocol)是一种网络管理协议,用于集中对用户 IP 地址进行动态管理和配置,基于 C/S 架构,DHCP 中继由 DHCP 服务器(UDP 端口号为 67)、DHCP 客户端(UDP 端口号为 68)和 DHCP 中继(一般由路由器 / 三层交换机来承担)组成,可以给设备自动分配一些上网参数(IP 地址、子网掩码、网关地址、DNS 服务器),实现用户 / 设备的上网。有即插即用、统一管理、使用效率高、支持中继等特点。分为手工分配和动态分配两钟方式。

📰四大报文与工作方式

DISCOVER:

发送者(DHCP 客户端)寻找当前网络中的 DHCP 服务器,通过发送广播报文请求上网参数。

OFFER:

发送者(DHCP 服务端)回应客户端 Discover 报文,告知客户端自己可以提供上网参数,并且描述参数的相关信息,同时进行参数的预留,思科为广播,华为 /H3C 为单播。

REQUEST

发送者(DHCP 客户端)正式向 DHCP 服务器请求上网参数,如果收到多个 offer 的情况下,会选择最早发给客户端的,并且告知所有的服务器自己的选择,没有被选择到的上网参数会进行释放。

ACK:

发送者(DHCP 服务端)回应 DHCP 客户端的 request 报文,正式下发上网参数,思科为广播,华为 /H3C 为单播。

地址冲突检测

使用免费 ARP(无故 ARP)进行检测,以自身的 IP 地址作为请求对象,向现网环境中发三次免费 ARP 请求

  • 如果有回应 --- 地址冲突

  • 没有回应 -- 使用

其余四个报文

报文 作用
ACK 服务器对客户端的 REQUEST 报文的拒绝响应报文,比如服务器对客户端分配的 IP 地址已超过使用租借期限(服务器没有找到相应的租约记录)或者由于某些原因无法正常分配 IP 地址,则发送 NAK 报文作为应答(客户端移到了另一个新的网络)。通知 DHCP 客户端无法分配合适 IP 地址。DHCP 客户端需要重新发送 DISCOVERY 报文来申请新的 IP 地址。
NAK 当客户端发现服务器分配给它的 IP 地址发生冲突时会通过发送此报文来通知服务器,并且会重新向服务器申请地址。
DECLINE 客户端可通过发送此报文主动释放服务器分配给它的 IP 地址,当服务器收到此报文后,可将这个 IP 地址分配给其它的客户端。
RELEASE 客户端已经获得了 IP 地址,发送此报文的目的是为了从服务器获得其他的一些网络配置信息,比如网关地址、DNS 服务器地址等。以上 8 种类型报文的格式相同,只是某些字段的取值不同。DHCP 报文格式基于 BOOTP 的报文格式。

📜租期

IP 地址的使用期限默认是一天

续租和释放

  • 第一次提续约:单播发送 REQUEST 报文给服务器,请求续约,如果请求成功的话,会把当前的使用时间清 0,从头开始;如果没有回应的情况下,则会继续使用,时间为一整个租期的使用期限的百分之 50

  • 第二次提续约:广播发送 request 报文给服务器,请求续约,如果请求成功的话,会把当前的使用时间清 0,从头开始,如果没有回应的情况下,也会继续使用,时间为一整个租期的使用期限的百分之 87.5

当 IP 地址的使用期限到了之后,续约也没续上,把 IP 地址释放掉,并且重新申请

⚙️基本配置

思科:

//动态 DHCP
Route(config)#ip dhcp pool name                                       //设置静态DHCP
Route(dhcp-config)#network 192.168.10.0 /24                           //设置静态IP地址
Route(dhcp-config)#default-router 192.168.10.254                      //设置默认网关
Route(dhcp-config)#dns-server 8.8.8.8                                 //设置默认DNS
Route(config)#ip dhcp excluded-address 192.168.10.1 192.168.10.100    //地址排除
Route#show ip dhcp pool                                               //查看地址池
Route#show ip dhcp binding                                            //查看地址分配情况

//静态 DHCP
Route(config)#ip dhcp pool name                                     //设置静态DHCP
Route(dhcp-config)#host 192.168.10.200 /24                            //设置静态IP地址
Route(dhcp-config)#default-router 192.168.10.254                      //设置默认网关的
Route(dhcp-config)#client-identifier 01aabb.cc00.4000                 //绑定MAC地址
Route(dhcp-config)#lease ?                                            //指定租期<0-365>
Route#show ip dhcp pool                                               //查看地址池
Route#show ip dhcp binding                                            //查看地址分配情况

华为 /H3C:

//全局地址池
[Route] dhcp enable                                                                     //开启DHCP
[Route] ip pool PC                                                                      //
[Route] gateway-list 192.168.10.1                                                       //设置网关地址
[Route] network 192.168.10.0 mask 255.255.255.0                                         //设置地址池
[Route] static-bind ip-address 192.168.10.200 mac-address 5489-982b-6fa2                //静态绑定IP地址
[Route] excluded-ip-address 192.168.10.250 192.168.10.254                               //排除地址
[Route] lease day 0 hour 0 minute 10                                                    //租期
[Route] dns-list 8.8.8.8                                                                //设置DNS 列表

//接口地址池
[Route] interface GigabitEthernet0/0/1                                                  //进入接口
[Route] ip address 192.168.20.1 255.255.255.0                                           //配置接口地址池的IP地址
[Route] dhcp select interface                                                           //开启接口的DHCP服务器功能
[Route] dhcp server static-bind ip-address 192.168.20.200 mac-address 5489-9835-5703    //绑定MAC地址
[Route] dhcp server lease day 0 hour 0 minute 10                                        //指定租期
[Route] dhcp server dns-list 8.8.8.8                                                    //设置DNS列表

客户端

思科:

//动态 DHCP
PC(config)#int e0/0                                                   //进入接口
PC(config-if)#ip address dhcp                                         //客户端开启DHCP
//静态 DHCP
PC(config)#int e0/0                                                   //进入接口
PC(config-if)#ip address dhcp client-id e0/0                          //

华为 /H3C:

//全局地址池
[PC] interface GigabitEthernet0/0/0,
[PC] ip address 192.168.10.1 255.255.255.0,
[PC] dhcp select global

🧸参考文献

什么是 DHCP?为什么要用 DHCP? - 华为 (huawei.com)

DHCP 八种报文详解 _dhcp 报文 -CSDN 博客