網路與 IP

DHCP 什麼意思?工作原理、DORA 四步與機房裡的用法

DHCP 是 Dynamic Host Configuration Protocol(動態主機配置協議)的縮寫,作用是讓裝置接入網路後自動拿到 IP 位址、子網掩碼、閘道器和 DNS,不用逐台手工填寫。客戶端和伺服器用 Discover、Offer、Request、ACK 四個報文完成分配,位址有租期、到期前要續租,跨網段時由閘道器上的 DHCP 中繼轉發請求。

作者 頂聯產品團隊發布於 6 分鐘閱讀

DHCP 什麼意思?DHCP 全稱 Dynamic Host Configuration Protocol,中文叫動態主機配置協議,是讓裝置接入網路後自動獲取 IP 位址的協議。一台電腦、手機或者伺服器的網路卡設成“自動獲取”,開機後就會在網路裡廣播請求,DHCP 伺服器從位址池裡挑一個空閒位址,連同子網掩碼、預設閘道器、DNS 一起發給它。整個分配過程是四個報文:Discover(發現)、Offer(提供)、Request(請求)、ACK(確認),取首字母簡稱 DORA。分出去的位址有租期,客戶端要在到期前續租;客戶端和伺服器不在同一網段時,靠閘道器上的 DHCP 中繼把請求轉過去。DHCP 定義在 RFC 2131,選項定義在 RFC 2132,伺服器監聽 UDP 67 連接埠,客戶端使用 UDP 68 連接埠。

DHCP 是什麼:自動分配網路引數的協議

DHCP 的作用

沒有 DHCP,每台裝置都要手工填寫四項引數:IP 位址、子網掩碼、閘道器、DNS。裝置一多,就會出現填錯、重複和改起來麻煩的問題。DHCP 解決的就是這幾件事:

  • 自動分配:裝置接入即可上網,不需要知道網路規劃;
  • 避免衝突:位址由伺服器統一分配,同一時刻一個位址只租給一台裝置;
  • 集中修改:要換 DNS 或閘道器,只改 DHCP 伺服器,客戶端續租時自動更新;
  • 回收複用:裝置離開後租期到期,位址自動回到池裡,適合人員、裝置流動大的網路;
  • 網路啟動:PXE 裝機時,還沒有作業系統的裸機由網路卡韌體透過 DHCP 拿到位址和引導檔案。

一個 DHCP 系統由哪幾部分組成

角色 是什麼 例子
DHCP 客戶端 要位址的一方,系統自帶 Windows 的 DHCP Client 服務,Linux 的 NetworkManager、systemd-networkd、dhclient
DHCP 伺服器 管理位址池、應答請求的一方 家用路由器內建的 DHCP、dnsmasq、Kea、isc-dhcp-server、Windows Server 的 DHCP 角色、三層交換器的 DHCP 服務
DHCP 中繼 把廣播請求轉發到其他網段的伺服器 三層交換器或路由器的 VLAN 介面

DHCP 下發的不只是位址,所有引數都以“選項”的形式放在報文裡。常見選項:

選項號 名稱 內容
1 Subnet Mask 子網掩碼
3 Router 預設閘道器
6 Domain Name Server DNS 伺服器
15 Domain Name 域名字尾
42 NTP Servers 時間伺服器
51 IP Address Lease Time 租期,單位秒
53 DHCP Message Type 報文型別:1 Discover、2 Offer、3 Request、4 Decline、5 ACK、6 NAK、7 Release、8 Inform
54 Server Identifier 伺服器標識,即伺服器的位址
66、67 TFTP Server Name、Bootfile Name 網路啟動用的 TFTP 伺服器和引導檔案
82 Relay Agent Information 中繼插入的接入位置資訊,例如交換器連接埠

DHCP 工作原理:DORA 四步

步驟 報文 源 → 目的 關鍵內容
1 DHCPDISCOVER 0.0.0.0:68 → 255.255.255.255:67,廣播 客戶端 MAC、事務號 xid、想要的引數列表(選項 55),可帶上次用過的位址(選項 50)
2 DHCPOFFER 伺服器:67 → 客戶端:68,廣播或單播 提供的位址(yiaddr 欄位)、伺服器標識(選項 54)、租期、掩碼、閘道器、DNS
3 DHCPREQUEST 0.0.0.0:68 → 255.255.255.255:67,廣播 選項 54 寫明選中了哪台伺服器,選項 50 寫明要哪個位址
4 DHCPACK 伺服器:67 → 客戶端:68 確認分配,租期從此刻開始計算

幾個容易想不通的地方:

  • 為什麼第一步用 0.0.0.0 和廣播:客戶端此時還沒有位址,也不知道伺服器在哪,只能以 0.0.0.0 為源位址、向全網段廣播。伺服器靠報文裡的客戶端 MAC 和事務號區分是誰在要位址。
  • 為什麼 Request 還要廣播:網段裡可能有多台伺服器都發了 Offer。客戶端廣播 Request 並在選項 54 裡寫明選中的伺服器,其餘伺服器看到後,就把自己預留的位址收回。
  • ACK 之後客戶端還會檢查一次:多數客戶端拿到位址後會先發 ARP 探測,發現這個位址已經有人在用,就發 DHCPDECLINE 拒絕,重新從 Discover 開始。
  • NAK 什麼時候出現:客戶端請求的位址不屬於當前網段時,伺服器回 DHCPNAK。最常見的場景是筆記本從一個網路換到另一個網路,想續用舊位址被拒絕,於是重新走完整的四步。

除了這四個,還有兩個常用報文:客戶端主動釋放位址時發 DHCPRELEASE(Windows 的 ipconfig /release),手工配了靜態位址、只想要 DNS 等其他引數時發 DHCPINFORM。

在 DHCP 伺服器上抓包,可以直接看到這四步:

tcpdump -ni eth1 -v 'udp port 67 or udp port 68'

-v 會把選項 53 解碼出來,依次能看到 Discover、Offer、Request、ACK 四個報文。只看到 Discover 沒有 Offer,問題在伺服器或中繼;有 Offer 沒有 Request,多半是 Offer 沒有回到客戶端。

租期、續租和中繼

租期到一半就開始續租

位址不是永久分配的。按 RFC 2131 的預設計時,以 8 小時租期為例:

時間點 客戶端做什麼
0 小時 收到 ACK,開始使用位址
4 小時(T1,租期的 50%) 單播 Request 給原來那台伺服器續租;成功則租期重新從 8 小時算起
7 小時(T2,租期的 87.5%) 原伺服器一直沒回應,改為廣播 Request,任何一台伺服器都可以續租
8 小時 租期屆滿仍未續上,停止使用這個位址,從 Discover 重新開始

所以只要伺服器正常,客戶端每隔半個租期續一次,位址一般不會變。租期定多長看網路:訪客 Wi-Fi、會議室這類裝置進進出出的網路用短租期,位址回收快;固定裝置為主的網路用長租期,減少續租流量,DHCP 伺服器短時故障也不至於讓裝置掉線。

跨網段:DHCP 中繼

Discover 是廣播,到閘道器就停了,過不了三層裝置。一個機房幾十個 VLAN,不可能每個 VLAN 放一台 DHCP 伺服器,做法是在每個 VLAN 的閘道器介面上開 DHCP 中繼:

  1. 閘道器收到客戶端的廣播 Discover;
  2. 把自己在這個 VLAN 的介面位址填進報文的 giaddr 欄位,改成單播發給 DHCP 伺服器;
  3. 伺服器根據 giaddr 判斷請求來自哪個網段,從對應的位址池裡分配;
  4. 應答單播回到閘道器,再由閘道器轉給客戶端。

三家裝置的中繼配置,以 VLAN 30、DHCP 伺服器 10.0.0.10 為例。華為:

dhcp enable
interface Vlanif30
 dhcp select relay
 dhcp relay server-ip 10.0.0.10

H3C:

dhcp enable
interface Vlan-interface30
 dhcp select relay
 dhcp relay server-address 10.0.0.10

思科:

interface Vlan30
 ip helper-address 10.0.0.10

中繼配好後,伺服器一側必須有這個網段的位址池,並且有到中繼位址(giaddr)的路由,否則請求能到、應答回不去。

DHCP 伺服器怎麼配:dnsmasq、isc-dhcp 與 Windows

下面三個例子做同一件事:為 10.40.0.0/24 分配 .100 到 .199,閘道器 10.40.0.1,租期 8 小時,並給一台 MAC 為 3c:ec:ef:12:34:56 的裝置固定分配 10.40.0.20。

dnsmasq:輕量,適合單個網段和裝機網

# /etc/dnsmasq.d/dhcp.conf
port=0
interface=eth1
bind-interfaces
dhcp-authoritative
dhcp-range=10.40.0.100,10.40.0.199,255.255.255.0,8h
dhcp-option=option:router,10.40.0.1
dhcp-option=option:dns-server,223.5.5.5,223.6.6.6
dhcp-host=3c:ec:ef:12:34:56,10.40.0.20,bmc-a01
log-dhcp

port=0 關閉 dnsmasq 的 DNS 功能,只當 DHCP 伺服器用;log-dhcp 把每次分配的細節寫進日誌,排障時有用。用 dnsmasq --test 檢查語法,systemctl restart dnsmasq 生效,journalctl -u dnsmasq 看日誌。租約記錄在租約檔案裡,Debian 系通常是 /var/lib/misc/dnsmasq.leases。

isc-dhcp-server:老牌,存量系統多

ISC 已在 2022 年底停止維護 ISC DHCP,新部署建議用同一機構的 Kea;但大量現網系統仍在用它,配置也最常見:

# /etc/dhcp/dhcpd.conf
authoritative;
default-lease-time 28800;
max-lease-time 86400;

subnet 10.40.0.0 netmask 255.255.255.0 {
  range 10.40.0.100 10.40.0.199;
  option routers 10.40.0.1;
  option domain-name-servers 223.5.5.5, 223.6.6.6;
}

host bmc-a01 {
  hardware ethernet 3c:ec:ef:12:34:56;
  fixed-address 10.40.0.20;
}

Ubuntu、Debian 上還要在 /etc/default/isc-dhcp-server 裡寫 INTERFACESv4="eth1" 指定監聽的網路卡。改完先 dhcpd -t -cf /etc/dhcp/dhcpd.conf 檢查語法,再 systemctl restart isc-dhcp-server,租約在 /var/lib/dhcp/dhcpd.leases。伺服器給中繼過來的其他網段分位址時,除了那些網段的 subnet 宣告,還要有監聽網路卡自己所在網段的宣告,否則 dhcpd 會因為找不到對應的 subnet 而不在這塊網路卡上提供服務。

Windows Server:DHCP 伺服器角色

Install-WindowsFeature DHCP -IncludeManagementTools
netsh dhcp add securitygroups
Restart-Service dhcpserver
Add-DhcpServerv4Scope -Name "VLAN40" -StartRange 10.40.0.20 -EndRange 10.40.0.199 -SubnetMask 255.255.255.0 -LeaseDuration 0.08:00:00 -State Active
Add-DhcpServerv4ExclusionRange -ScopeId 10.40.0.0 -StartRange 10.40.0.21 -EndRange 10.40.0.99
Set-DhcpServerv4OptionValue -ScopeId 10.40.0.0 -Router 10.40.0.1 -DnsServer 223.5.5.5,223.6.6.6 -Force
Add-DhcpServerv4Reservation -ScopeId 10.40.0.0 -IPAddress 10.40.0.20 -ClientId "3c-ec-ef-12-34-56" -Name "bmc-a01"
Get-DhcpServerv4Lease -ScopeId 10.40.0.0

Windows 的保留位址要落在作用域的起止範圍內,所以作用域從 .20 開始,再用排除範圍去掉 .21–.99,動態分配的仍然只有 .100–.199。-LeaseDuration 0.08:00:00 的格式是“天.時:分:秒”,即 8 小時。Set-DhcpServerv4OptionValue 預設會校驗 DNS 位址是否可用,加 -Force 跳過校驗。加入了 Active Directory 域的 DHCP 伺服器還要在域中授權(Add-DhcpServerInDC)才會開始分配位址;不在域裡的獨立伺服器不需要。

機房裡怎麼用 DHCP

機房的網路按用途分成幾塊,DHCP 在每一塊裡的角色不一樣:

網路 位址怎麼來 原因
裝機網 DHCP,只服務登記過的 MAC,短租期 裸機沒有系統,網路卡只能靠 DHCP 拿位址和引導檔案
BMC 管理網 DHCP 保留(按 MAC 固定位址)或靜態 新機器上架通電就拿到預定位址
客戶業務網 靜態 IP,在 IP 管理系統裡登記 不依賴 DHCP 服務,位址可追溯到客戶
維運辦公網 普通 DHCP 終端多、流動性大

PXE 裝機離不開 DHCP。伺服器從網路卡啟動時,DHCP 應答裡除了位址,還要帶上 TFTP 伺服器位址(報文的 next-server 欄位或選項 66)和引導檔名(file 欄位或選項 67),網路卡韌體據此下載載入程式。裝機網通常是一個單獨的 VLAN,DHCP 伺服器只放在這裡,裝完的系統寫入靜態業務位址,連接埠再切回業務 VLAN。

業務網不跑 DHCP,但要防別人跑。只要有一台客戶伺服器誤裝或誤開了 DHCP 服務,同 VLAN 裡剛開機或正在續租的機器就可能拿到它分的位址和閘道器,隨即斷網。在接入交換器上開啟 DHCP Snooping,只把通往合法伺服器的上聯口設為信任連接埠,其他連接埠發出的 DHCP 應答一律丟棄。

BMC 用 DHCP 保留,要管好 MAC 清單。保留是按 MAC 繫結的,換了主機板或 BMC 模組,MAC 跟著變,原來的保留就失效了,新 MAC 會從動態池裡拿一個隨機位址。所以更換硬體後要同步更新保留記錄。

在管理系統裡怎麼落地

DHCP 伺服器只負責“發位址”,哪個段給裝機用、哪個段給 BMC、哪個段給客戶,需要另有一處統一登記。Toplink DCIM 的 IP 位址管理按 CIDR 錄入位址段,並把段標記為公網 IP、IPMI、客戶內網、內網 IP、臨時 IP 等型別,BMC 網的位址段標成 IPMI 型別,與公網、客戶內網分開統計用量;開通伺服器時,從開啟了自動分配的段裡取業務位址,鎖定的段不會被佔用。裝機這一步,IPMI 遠端管理可以把伺服器的下一次啟動設為 PXE,後面的 DHCP 應答、引導和安裝就交給裝機網完成。

常見問題

一個網段裡能放兩台 DHCP 伺服器嗎?

能。客戶端會收到兩份 Offer,通常接受先到的那一份。前提是兩台的位址池不能重疊,否則可能把同一個位址分給兩台裝置。傳統做法是把位址池按 80/20 拆給兩台;需要兩台同步租約時,用 Kea 的高可用功能或 Windows DHCP 的故障轉移。

DHCPv6 和 DHCP 是一回事嗎?

原理相似,但是獨立的協議:DHCPv6 用 UDP 546(客戶端)和 547(伺服器),報文是 Solicit、Advertise、Request、Reply。IPv6 主機還可以不用 DHCPv6,靠路由器通告自己生成位址;預設閘道器也來自路由器通告,DHCPv6 不下發閘道器。

怎麼知道網路裡是哪台 DHCP 伺服器給我分的位址?

Windows 執行 ipconfig /all,看“DHCP 伺服器”一行;Linux 上可以抓包看 Offer、ACK 報文裡的選項 54(伺服器標識)。如果這個位址不是你們的 DHCP 伺服器,說明網路裡有人私設了 DHCP 服務。

想看看在你的機房裡怎麼用?

從一次產品示範開始,梳理你的業務鏈路。

查看價格
服務熱線 400-112-2951

讓我們聊聊你的 IDC 業務

掃碼新增企業微信,預約產品示範或申請試用。

Toplink 企業微信二維碼

長按儲存或使用企業微信 / 微信掃描

也可致電
400-112-2951
Telegram
@TopLink88