
DHCP 协议
本文最后更新于 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