37 張圖詳解 DHCP :給你 IP 地址的隱形人

上帝視角

DHCP 出現

電腦或手機需要 IP 地址才能上網。大劉有兩臺電腦和兩臺手機,小美有一臺筆記本電腦、一臺平板電腦和兩臺手機,老王、阿麗、敏敏也有幾臺終端設備。如果爲每臺設備手動配置 IP 地址,那會非常繁瑣,一點兒也不方便。特別是手機、筆記本電腦、平板電腦等設備,每移動到一個新的地方,接入不同的網絡,都要重新設置 IP 地址,實在是太麻煩了。

手動配置

於是就有了 DHCP 協議,會自動配置設備的網絡參數,包括 IP 地址、子網掩碼、網關地址、DNS 服務器等,替代手動配置。還能統一 IP 地址分配,方便網絡管理。

DHCP 動態獲取

DHCP 簡介

DHCP 協議是從 BOOTP 協議發展而來。但 BOOTP 運行在相對靜態的環境中,每臺設備配置專門的 BOOTP 參數文件,該文件會在相當長的時間內保持不變。DHCP 從以下兩方面對 BOOTP 進行了擴展:

動態分配

大劉他們的設備使用 DHCP 功能後,只要連接到網絡,就可以進行 TCP/IP 通信。對於路由器交換機,通常是手動配置 IP 地址等參數。

DHCP 是一種 Client/Server 模式的網絡協議,由 DHCP Client 向 DHCP Server 提出配置申請,DHCP Server 返回爲 DHCP Client 分配的配置信息。這裏的 Client 和 Server 是應用程序,可以運行在電腦、服務器、路由器等設備上。

DHCP 應用程序

舉個栗子

大劉的電腦開機後,自動運行 DHCP Client ,DHCP Client 主動向其它設備上的 DHCP Server 提出請求,DHCP Server 根據預先配置的策略,返回相應 IP 配置信息,DHCP Client 使用獲得的 IP 配置信息與其它設備進行通信。

舉個栗子

DHCP 分配機制

DHCP 提供了兩種地址分配機制,可以根據網絡需求爲不同的 Client 選擇不同的分配策略。

動態和靜態分配

在實際情況中,我們發現 DHCP Client 重啓後,也能獲得相同的 IP 地址。DHCP Server 爲 DHCP Client 分配 IP 地址時,採用如下的順序

  1. DHCP Server 中與 DHCP Client 的 MAC 地址靜態綁定的 IP 地址;

  2. DHCP Client 曾經使用過的 IP 地址;

  3. 最先找到的可用 IP 地址。

如果沒找到可用的 IP 地址,就依次查詢超過租期發生衝突的 IP 地址,如果找到就進行分配,否則報錯處理。

IP 地址分配順序

DHCP 系統組成

DHCP 系統由 DHCP Server( DHCP 服務器)、DHCP Client( DHCP 客戶端)、DHCP Relay( DHCP 中繼)等組成。

DHCP 系統組成

DHCP Server

DHCP Client

DHCP Relay

DHCP 基本流程

DHCP 協議報文采用 UDP 方式封裝,DHCP Server 偵聽的端口號是 67 ,DHCP Client 的端口號是 68 。DHCP 設備通過發送和接收 UDP 67 和 UPD 68 端口的報文進行協議交互。DHCP 的基本工作流程分爲 4 個階段,即發現階段提供階段請求階段確認階段。我們假設大劉的 PC 是一臺新電腦,下面將描述 PC 第一次是如何通過 DHCP 獲取 IP 地址的。

PC 首次獲取地址的流程

爲方便描述,DHCP Server 簡稱 小 SDHCP Client 簡稱 小 C

1、發現階段

小 C 在本地網段中廣播一個 DHCP Discover 報文,目的尋找能夠分配 IP 地址的 小 S

Discover 報文

2、提供階段

本地網段的 小 S 收到 DHCP Discover 報文後,迴應 DHCP Offer 報文。DHCP Offer 報文包含了可用 IP 地址和其它網絡參數

Offer 報文

小 C 通過對比 Discover 報文和 Offer 報文中的 xid 字段是否相同,來判斷 Offer 報文是不是發給自己的。

3、請求階段

小 C 會收到 小 S 發送的 DHCP Offer 報文。如果有多個 小 S ,那麼每個 小 S 都會迴應 DHCP Offer 報文。通常 小 C 會選擇最先收到的 Offer 報文,並廣播 DHCP Request 報文來表明哪個 小 S 被選擇,其餘 小 S 就涼涼了。

Request 報文

如果 小 C 在一定時間後一直沒收到 DHCP Offer 報文,那麼它就會重新發送 DHCP Discover 報文。

4、確認階段

小 S 收到 DHCP Request 廣播報文後,發送 DHCP Ack 報文作爲迴應,其中包含 小 C 的網絡參數。DHCP Ack 報文和之前 DHCP Offer 報文的參數不能有衝突,否則 小 S 會迴應一個 DHCP Nak 報文。

Ack 報文

當 小 C 收到 DHCP Ack 報文後,會發送免費 ARP 報文進行探測,目的地址爲獲得的 IP 地址,如果探測此地址沒有被使用,那麼 小 C 就會使用這個地址,並完成配置。

DHCP 租期

從 DHCP 協議上看,小 S 纔有 IP 地址的所有權,而 小 C 只有 IP 地址的使用權。小 S 每次給 小 C 分配一個 IP 地址時,會約定一個 IP 地址的租期,通常是 24 小時。在租期內,小 C 才能使用相應的 IP 地址。當租期到期後,小 C 將不能繼續使用這個 IP 地址。當然了,在租期還沒到期的時候,小 C 是可以申請續租這個 IP 地址的。

T1 時刻是租期到一半的時候,T2 時刻是租期到 87.5% 的時候。在 T1 時刻 小 C 會單播一個 DHCP Request 報文給 小 S ,請求續租 IP 地址。如果 小 C 收到了 DHCP Ack 迴應報文,則說明續租成功

如果直到 T2 時刻,小 C 都未收到 DHCP Ack 迴應報文,那麼會廣播發送一個 DHCP Request 報文,繼續請求續租 IP 地址。如果 小 C 收到了 DHCP Ack 迴應報文,則說明續租成功。

如果直到租期到期, 小 C 都未收到 DHCP Ack 迴應報文,那麼必須停止使用原來的 IP 地址。小 C 將從發現階段開始,重新來申請一個 IP 地址。

續租流程

DHCP Relay

動態獲取 IP 地址的過程中,使用廣播方式發生報文,因此 DHCP 只適用於 小 C 和 小 S 在同一個子網內的情況。如果爲每個網段配置一個 小 S ,這顯然太浪費了。

實際上還有 DHCP Relay 這種角色。小 C 通過 DHCP Relay 實現跨網段與 小 S 通信,獲取 IP 地址。這樣,多個子網上的 小 C 可以使用同一個 小 S ,既節省成本,又方便集中管理。

DHCP Relay

DHCP Relay 的工作原理如下:

  1. 小 C 發送 DHCP Discover 或 DHCP Request 廣播報文,具有 DHCP Relay 功能的網絡設備收到後,根據配置將報文單播給指定的 小 S ;

  2. 小 S 進行 IP 地址的分配,單播發送給 DHCP Relay ,DHCP Relay 再將配置信息廣播給 小 C ,完成對 小 C 的動態配置。

Relay 工作原理

DHCP 協議報文

前面的內容有提到 DHCP 的一些報文類型,現在講講 DHCP 主要的 8 種報文類型。常見的 5 種報文類型有:DHCP DiscoverDHCP OfferDHCP RequestDHCP AckDHCP Release ,用得少的 3 種報文類型有:DHCP NakDHCP DeclineDHCP Inform

DHCP 狀態機

如果把功能各異的 8 種報文串起來,就是整個 DHCP 協議交互流程。前面講的 4 種階段(發現、提供、請求、確認)不能完全展現出來,這就需要使用 DHCP 協議的狀態機。狀態指出下一步使用的報文類型,狀態轉換是通過報文的接收、發送或超時。下面是 Client 的狀態機。

Client 狀態機

Client 從 INIT 狀態開始,廣播 DHCP Discover 報文。在選擇狀態時,它收到 DHCP Offer 報文,並決定使用哪個地址和 Server 。做出選擇後,通過 DHCP Request 報文進入請求狀態。如果分配的地址和曾使用過的地址不一致,那麼迴應 DHCP Nak 報文進行拒絕,並返回 INIT 狀態;如果分配的地址已經被佔用,那麼迴應 DHCP Decline 報文進行拒絕,也返回到 INIT 狀態。通常是收到一個需要的地址,迴應 DHCP Ack 報文,獲得租期超時值 T1 和 T2 ,並進入綁定狀態,這個時候就可以使用這個地址直到租期到期。當 T1 到期時,進入更新狀態並進行續租申請。如果續租成功,那麼可以收到 DHCP Ack 報文,並返回到綁定狀態;如果續租不成功,那麼在 T2 到期時,再次進行續租申請。如果租期最終到期,那麼 Client 將禁止使用所租用的地址,並返回到 INIT 狀態。

DHCP 網絡實戰

DHCP 協議是爲解決網絡問題而生,現在我們就來模擬實際環境,動手操作,驗證下 DHCP 的功能。

DHCP Server 示例

網絡拓撲

網絡拓撲圖

實驗要求
操作步驟

配置思路:

  1. 在 RT 上開啓 DHCP 功能,

  2. 創建一個地址池,

  3. 配置地址池的相關參數,

  4. 在 RT 的接口下引用地址池,實現 DHCP Server 功能。

配置命令:

使用 DHCP 功能之前,先要開啓 DHCP 功能。系統視圖下,使用命令 dhcp enable 啓動 DHCP 功能。

動態分配 IP 地址,就需要有多個可分配的 IP 地址,使用 ip pool ip-pool-name 命令來創建全局地址池,ip-pool-name 表示地址池的名稱。

在全局地址池視圖下,通過命令 network ip-address [ mask { mask | mask-length } ] 配置可分配的 IP 地址段。mask { mask | mask-length } 表示子網掩碼,通常根據設備數量來確定掩碼長度。

有了 IP 地址和子網掩碼,再加上默認網關,終端設備就能網絡互通了。在全局地址池視圖下,使用命令 gateway-list ip-address 配置網關 IP 地址。

網絡互通,還不能正常訪問網站,需要配置 DNS 服務器,用於域名解析。在全局地址池視圖下,使用 dns-list ip-address 配置 DNS 服務器的 IP 地址。

地址池配置中,常用的可選命令如下,可根據需求進行選擇性設置。

lease { day day [ hour hour [ minute minute ] ]  | unlimited } :配置 IP 地址的租期,默認租期是 1 天。

excluded-ip-address start-ip-address [ end-ip-address ] :在可分配的地址池中,設置不分配的 IP 地址。比如:地址池是 192.168.100.0/24 ,可設置 192.168.100.1 - 192.168.100.10 不參與地址分配。

static-bind ip-address ip-address mac-address mac-address :爲 Client 固定分配一個 IP 地址。

配置完地址池,還需要進行引用,DHCP Server 功能就能正常使用了。在 RT 的接口下配置引用,命令爲 dhcp select global

配置

功能驗證

配置完成後,理論上是 DHCP 功能正常工作了,實際情況的話,可通過命令 display ip pool name pool-name used,查看地址池的配置情況,和地址分配情況。

RT 上查看 DHCP Server 地址分配狀態。

查看 RT 的 DHCP Server 狀態

同時也在 PC 上查看動態獲取地址情況,進行雙向驗證。

查看 PC 的 IP 配置

抓包還可以看到 DHCP 報文交互的詳細過程,同時也是檢驗理論知識是否正確。

抓包驗證

這裏我們發現抓包看到的是 DHCP Offer 單播報文,而前面介紹的時候,DHCP Offer 是廣播報文。其實 DHCP Offer 報文有可能是單播,也有可能是廣播。DHCP 在報文的標誌字段有一個廣播位,如果 Client 支持接收 Offer 單播報文,那麼 Client 就會將發送報文中的廣播位設爲 0 ,否則爲 1 。

DHCP Relay 示例

網絡拓撲

網絡拓撲圖

實驗要求
操作步驟
  1. PC( DHCP Client )開啓 DHCP 功能;

PC 配置

  1. RT1( DHCP Relay )使用 dhcp select relay 命令開啓 DHCP Relay 功能,在 G0/0/1 口下使用 dhcp relay server-ip ip-address 命令,配置 DHCP Server 的 IP 地址;

RT1 配置

  1. RT2(DHCP Server)開啓 DHCP 功能,創建地址池並配置相關參數,在接口下引用地址池,實現 DHCP Server 功能。

RT2 配置

功能驗證

PC 端能獲取到 IP 配置,並且獲取的配置正確。

PC 端驗證

在 RT1 的 G0/0/1 抓包,查看 DHCP Client 和 DHCP Relay 的報文交互過程。

RT1 的 G0/0/1 抓包

在 RT1 的 G0/0/0 抓包,查看 DHCP Server 和 DHCP Relay 的報文交互過程。

RT1 的 G0/0/0 抓包

DHCP 報文格式

如果想要更深入的瞭解 DHCP 協議,那就要看它的報文格式。DHCP 設備通過識別報文內容,實現協議功能。

DHCP 報文格式

拿着 DHCP 報文格式,就可以看懂抓包獲取的報文內容

DHCP Discover 報文

Discover 報文明細

DHCP Offer 報文

Offer 報文明細

DHCP Request 報文

Request 報文明細

DHCP Ack 報文

Ack 報文明細


飲水思源:

HCNA 網絡技術學習指南 - 華爲技術有限公司

路由交換技術 - 杭州華三通信技術有限公司

TCP/IP 詳解 卷 1:協議 - Kevin R.Fall

高級網絡技術 - 田果

圖解 TCP/IP - 竹下隆史

本文由 Readfog 進行 AMP 轉碼,版權歸原作者所有。
來源https://mp.weixin.qq.com/s/Y23YhK1DvvYBoHiPw9ilOQ