National Central University
Uedu Main Site
Explore Uedu
Student Console
Register as Member/Login
Research Informed Consent Center
Survey Center
Educational Big Data Challenge
Claim or create a course
Try an AI Scenario Task
Support & Messages
Uptime Data

UeduGPTs

--

Jupyters

3

Local AI

--

Uedu Code

--

中央大學 AQI 80 24°C PM2.5 21
AI Reply Desktop Notifications

Show a desktop notification when the AI TA finishes replying

Chat Message Notifications

Notify me when classmates post messages in the forum

Sound notification

Play an alert sound whenever there is a new notification

Unit 11

DHCP

自動取得位址:Discover、Offer、Request、ACK,租約與中繼
Interaction 25 minute(s)

Learning Objectives

  • 說明手動設定 IP 位址的問題,以及 DHCP 自動設定了哪些項目(位址、遮罩、預設閘道、DNS)
  • 依序說出 Discover、Offer、Request、ACK 四個訊息,並說明用戶端一開始為什麼要用廣播
  • 說明租約的意義,以及用戶端什麼時候續約
  • 說明路由器不轉送廣播時,DHCP 中繼怎麼讓一台伺服器服務多個網段
  • 從設定結果判斷 DHCP 是否成功,認得 169.254 開頭的位址代表沒有拿到 DHCP 的回應

為什麼不手動設定位址

前幾課的電腦都是我們手動設定:位址、子網路遮罩、預設閘道,查名稱還要設定 DNS 伺服器。 一台還好;一間電腦教室五十台、整棟宿舍上千個手機與筆電,手動設定就做不到了:

問題 例子
太多台 每台都要有人一個一個輸入四項設定
容易重複 兩台設成同一個位址,兩台都時好時壞
設備會移動 筆電從教室帶到圖書館,原本的位址在新的網段不能用
設定要改 DNS 伺服器換了位址,每台都要重設

DHCP(Dynamic Host Configuration Protocol,RFC 2131)讓電腦一接上網路就自動向 DHCP 伺服器要設定。伺服器從管理者設好的位址池(pool)挑一個沒人用的位址租給它,連同遮罩、預設閘道、DNS 伺服器一起送過去。 家裡的無線路由器、學校的網路設備,幾乎都有內建 DHCP 伺服器。

計算機概論的 TCP/IP 一課提過「電腦會自動拿到位址」,這一課看它實際是怎麼拿到的。

四個訊息:Discover、Offer、Request、ACK

剛開機的電腦有一個困境:它還沒有 IP 位址,也不知道 DHCP 伺服器在哪裡。所以第一個訊息只能用廣播:

順序 訊息 誰送給誰 內容
1 Discover 用戶端 → 廣播 「有沒有 DHCP 伺服器?」來源 IP 是 0.0.0.0,目的是 255.255.255.255
2 Offer 伺服器 → 用戶端 「我可以給你 192.168.1.100,遮罩、閘道、DNS 是……」
3 Request 用戶端 → 廣播 「我要用 192.168.1.100(某某伺服器提供的那個)」
4 ACK 伺服器 → 用戶端 「確認,租給你,期限是……」用戶端這時才開始使用這個位址

四個訊息的英文字首合起來常被記成 DORA。DHCP 走 UDP:用戶端用連接埠 68、伺服器用 67。

  • Discover 為什麼是廣播:用戶端沒有位址可以當來源,也不知道伺服器的位址,只能對整個網段喊。
  • Offer 為什麼可以直接送到用戶端:Discover 裡有用戶端的 MAC 位址,伺服器知道要交給哪張網路卡。有些用戶端還不能接收單播,會在 Discover 裡要求伺服器也用廣播回覆;兩種做法 RFC 2131 都有定義。
  • Request 為什麼又是廣播:網段上可能有好幾台伺服器都送了 Offer;用廣播選定其中一台,其他伺服器聽到了,就知道自己提供的位址沒被選上,可以收回。

因為一開始只能廣播,而路由器不轉送廣播,所以 DHCP 伺服器原則上要和用戶端在同一個網段。後面會看到不在同一個網段時怎麼辦。

互動練習:讓電腦自動取得位址

PC1、PC2 還沒有任何設定。R1 是這個網段的路由器,也可以當 DHCP 伺服器。 執行之後看下方的封包紀錄:紫色的是 DHCP 訊息,點一列可以看來源與目的位址。

租約:位址是借的,不是送的

DHCP 給的位址有期限,叫租約(lease)。期限可能是幾小時到幾天,由管理者設定。為什麼要有期限? 因為用戶端可能直接關機、拔線、離開,不會通知伺服器;有期限,位址才能在租約到期後收回給別人用。

時間點 用戶端做什麼
拿到位址 開始使用,記下租約長度
租約過一半(T1) 直接(單播)向原本的伺服器要求續約;伺服器回 ACK,租約重新計算
租約過 87.5%(T2) 原本的伺服器一直沒回應:改成廣播,問任何一台伺服器能不能續約
到期 停止使用這個位址,從 Discover 重新開始
關機或離開時 可以送 Release,主動把位址還給伺服器

T1 與 T2 的預設值(租約長度的 0.5 與 0.875)寫在 RFC 2131。這個模擬器沒有時間的流逝,所以不會看到續約;show dhcp 只會列出租給了誰。

DHCP 一次給的不只位址。常見的設定項目(DHCP 稱為選項,option):

設定 用途 沒有它會怎樣
位址與子網路遮罩 自己是誰、哪些位址在同一個網段 不能上網
預設閘道 不同網段的封包交給誰 同網段通,跨網段不通
DNS 伺服器 名稱查位址 用 IP 位址連得到,用網址連不到
租約長度 什麼時候要續約 由伺服器決定,用戶端照辦

如果電腦一直等不到任何 DHCP 回應,許多作業系統會自己挑一個 169.254.x.x 的位址(IPv4 鏈路本地位址,RFC 3927):只能和同一個網段裡同樣情況的設備溝通,不能透過路由器上網。 看到 169.254 開頭的位址,通常表示 DHCP 伺服器沒有回應:線沒接好、交換器的 VLAN 設錯,或伺服器本身停了。

另外,網段上如果有人私自架了一台 DHCP 伺服器,可能把錯誤的閘道發給大家。所以企業與學校的交換器常開啟 DHCP 防護功能(常見名稱是 DHCP snooping),只允許從接著正式伺服器的那個埠送出 Offer 與 ACK。

小測驗:DHCP 的流程

1.

DHCP 的四個訊息,正確的順序是?

2.

電腦的位址是 169.254.37.12,最可能的原因是?

3.

一台筆電透過 DHCP 拿到位址後,用 IP 位址可以連到伺服器,但用網址(例如 www.club.tw)連不到。最該檢查 DHCP 給的哪一項?

4.

租約是 8 小時。正常情況下,用戶端在拿到位址後多久開始要求續約?

第 1 次作答

中繼:一台伺服器服務很多個網段

學校有幾百個網段,不可能每個網段都放一台 DHCP 伺服器。可是 Discover 是廣播,路由器不會轉送廣播,機房裡的伺服器聽不到。

解法是在路由器上開啟 DHCP 中繼(relay agent):

  1. 路由器在使用者那一側的介面收到 Discover 廣播
  2. 把它改成單播,直接送給機房的 DHCP 伺服器;同時在訊息的 giaddr 欄位(relay agent IP address)填上收到廣播的那個介面的位址,例如 192.168.10.1
  3. 伺服器看 giaddr 就知道用戶端在 192.168.10.0/24,從那個網段的位址池挑位址,把 Offer 送回 giaddr
  4. 路由器再把 Offer 轉給那個網段的用戶端;Request 與 ACK 也一樣走一遍

所以一台中央的 DHCP 伺服器可以同時管理很多個網段,每個網段各自一個位址池;路由器只要知道伺服器在哪裡。 伺服器要回覆 giaddr,所以伺服器也需要回到各個使用者網段的路由。

互動練習:設定 DHCP 中繼

DHCP 伺服器在機房的 10.0.9.0/24,已經為 192.168.10.0/24 與 192.168.20.0/24 各設好一個位址池(到 SRV 執行 show dhcp 可以看)。 PC1、PC2 分別在另外兩個網段。

小測驗:中繼與排錯

1.

DHCP 伺服器和用戶端在不同網段,中間隔著一台路由器。沒有設定中繼時,用戶端拿不到位址的原因是?

2.

中繼路由器在 giaddr 欄位填的是什麼?

3.

同一個網段上被人私自接了一台會發 DHCP 的路由器,最可能出現的症狀是?

第 1 次作答

重點整理

  • DHCP 讓電腦自動取得位址、遮罩、預設閘道與 DNS 伺服器;伺服器從位址池挑沒人用的位址。
  • 四個訊息 Discover → Offer → Request → ACK;用戶端一開始沒有位址也不知道伺服器在哪,所以 Discover 用廣播,Request 也用廣播讓其他伺服器知道選了誰。
  • 位址是租的:租約過一半時向原伺服器續約,過 87.5% 改成廣播找任何伺服器,到期就停止使用。
  • 路由器不轉送廣播;DHCP 中繼把廣播改成單播送給伺服器,並用 giaddr 告訴伺服器用戶端在哪個網段。
  • 拿到 169.254 開頭的位址,通常表示沒有收到 DHCP 的回應。

DHCP 發出去的大多是 192.168.x.x、10.x.x.x 這種私有位址。這種位址在網際網路上不能使用,那家裡的電腦怎麼上網?下一課講 NAT。

這一課完成了!
Next lesson:NAT 與私有網路
你目前沒有登入,學習進度只存在這個瀏覽器。 Login 後,進度會跟著帳號,換電腦也看得到。