# 简介
DHCP 位于 OSI 模型的应用层,基于 UDP 协议实现,主要用途为:
- 用于内部网络或网络服务供应商自动分配 IP 地址给用户;
- 用于内部网管理员对所有电脑作中央管理;
DHCP:动态主机设置协议,Dynamic Host Configuration Protocol。
通过 DHCP 用户不需要再手动配置 IP 地址等信息,该协议配置的内容包括了 IP 地址、子网掩码、网关 IP 地址。
# 工作流程
在 DHCP 中,server 使用的 UDP 端口为 67,client 使用的 UDP 端口为 68。
* 1 DHCP Discover
客户端发送 Discover 报文,该报文的目的地址为 255.255.255.255:67,源地址为 0.0.0.0:68,被放入 UDP 中,该报文被广播到同一个子网的所有主机上。如果客户端和 DHCP 服务器不在同一个子网,就需要使用中继代理。
* 2 DHCP Offer
服务器收到 Discover 报文会发送 Offer 报文给客户端,该报文包含了客户端所需要 IP 地址、掩码等信息。
* 3 DHCP Request
客户端可能收到多个 DHCP 服务器提供的信息,如果客户端选择了某个 DHCP 服务器提供的信息,就需要发送 broadcast request 给告知客户端接受了哪一个 DHCP 服务器。
客户端也可能直接发 request 去要原来用过的 IP。如果还在原来的网络,服务器可能回复成功。如果不在原来的网络,那么 Authoritative DHCP server 会直接拒绝请求,Non-authoritative DHCP server 会忽略这个请求,客户端在超时后会继续发送 Discovery 报文。
* 4 DHCP Acknowledge
DHCP 服务器会发送 Ack 报文,表示客户端此时可以使用它提供的信息。客户端将会按照协商的参数配置网卡,得到 IP 后就可以发送一个 ARP 请求来避免由 DHCP 服务器地址池重叠而导致的 IP 冲突。
