電腦或手機需要 IP 地址才能上網。大劉有兩台電腦和兩台手機,小美有一台筆記本電腦、一台平闆電腦和兩台手機,老王、阿麗、敏敏也有幾台終端設備。如果為每台設備手動配置 IP 地址,那會非常繁瑣,一點兒也不方便。特别是手機、筆記本電腦、平闆電腦等設備,每移動到一個新的地方,接入不同的網絡,都要重新設置 ip 地址,實在是太麻煩了。
于是就有了 DHCP 協議,會自動配置設備的網絡參數,包括 IP 地址、子網掩碼、網關地址、dns 服務器等,替代手動配置。還能統一 IP 地址分配,方便網絡管理。
DHCP 協議是從 BOOTP 協議發展而來。但 BOOTP 運行在相對靜态的環境中,每台設備配置專門的 BOOTP 參數文件,該文件會在相當長的時間内保持不變。DHCP 從以下兩方面對 BOOTP 進行了擴展:
大劉他們的設備使用 DHCP 功能後,隻要連接到網絡,就可以進行 TCP/IP 通信。對于路由器和交換機,通常是手動配置 IP 地址等參數。
DHCP 是一種 Client/Server 模式的網絡協議,由 DHCP Client 向 DHCP Server 提出配置申請,DHCP Server 返回為 DHCP Client 分配的配置信息。這裡的 Client 和 Server 是應用程序,可以運行在電腦、服務器、路由器等設備上。
舉個栗子:
大劉的電腦開機後,自動運行 DHCP Client ,DHCP Client 主動向其它設備上的 DHCP Server 提出請求,DHCP Server 根據預先配置的策略,返回相應 IP 配置信息,DHCP Client 使用獲得的 IP 配置信息與其它設備進行通信。
DHCP 提供了兩種地址分配機制,可以根據網絡需求為不同的 Client 選擇不同的分配策略。
在實際情況中,我們發現 DHCP Client 重啟後,也能獲得相同的 IP 地址。DHCP Server 為 DHCP Client 分配 IP 地址時,采用如下的順序:
如果沒找到可用的 IP 地址,就依次查詢超過租期、發生沖突的 IP 地址,如果找到就進行分配,否則報錯處理。
DHCP 系統由 DHCP Server( DHCP 服務器)、DHCP Client( DHCP 客戶端)、DHCP Relay( DHCP 中繼)等組成。
DHCP 協議報文采用 UDP 方式封裝,DHCP Server 偵聽的端口号是 67 ,DHCP Client 的端口号是 68 。DHCP 設備通過發送和接收 UDP 67 和 UPD 68 端口的報文進行協議交互。DHCP 的基本工作流程分為 4 個階段,即發現階段、提供階段、請求階段、确認階段。我們假設大劉的 PC 是一台新電腦,下面将描述 PC 第一次是如何通過 DHCP 獲取 IP 地址的。
為方便描述,DHCP Server 簡稱 小 S ,DHCP Client 簡稱 小 C 。
1、發現階段小 C 在本地網段中廣播一個 DHCP Discover 報文,目的尋找能夠分配 IP 地址的 小 S 。
本地網段的 小 S 收到 DHCP Discover 報文後,回應 DHCP Offer 報文。DHCP Offer 報文包含了可用 IP 地址和其它網絡參數。
小 C 通過對比 Discover 報文和 Offer 報文中的 xid 字段是否相同,來判斷 Offer 報文是不是發給自己的。
3、請求階段小 C 會收到 小 S 發送的 DHCP Offer 報文。如果有多個 小 S ,那麼每個 小 S 都會回應 DHCP Offer 報文。通常 小 C 會選擇最先收到的 Offer 報文,并廣播 DHCP Request 報文來表明哪個 小 S 被選擇,其餘 小 S 就涼涼了。
如果 小 C 在一定時間後一直沒收到 DHCP Offer 報文,那麼它就會重新發送 DHCP Discover 報文。
4、确認階段小 S 收到 DHCP Request 廣播報文後,發送 DHCP Ack 報文作為回應,其中包含 小 C 的網絡參數。DHCP Ack 報文和之前 DHCP Offer 報文的參數不能有沖突,否則 小 S 會回應一個 DHCP Nak 報文。
當 小 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 地址。
動态獲取 IP 地址的過程中,使用廣播方式發生報文,因此 DHCP 隻适用于 小 C 和 小 S 在同一個子網内的情況。如果為每個網段配置一個 小 S ,這顯然太浪費了。
實際上還有 DHCP Relay 這種角色。小 C 通過 DHCP Relay 實現跨網段與 小 S 通信,獲取 IP 地址。這樣,多個子網上的 小 C 可以使用同一個 小 S ,既節省成本,又方便集中管理。
DHCP Relay 的工作原理如下:
前面的内容有提到 DHCP 的一些報文類型,現在講講 DHCP 主要的 8 種報文類型。常見的 5 種報文類型有:DHCP Discover 、DHCP Offer 、DHCP Request 、DHCP Ack 和 DHCP Release ,用得少的 3 種報文類型有:DHCP Nak 、DHCP Decline 和 DHCP Inform 。
如果把功能各異的 8 種報文串起來,就是整個 DHCP 協議交互流程。前面講的 4 種階段(發現、提供、請求、确認)不能完全展現出來,這就需要使用 DHCP 協議的狀态機。狀态指出下一步使用的報文類型,狀态轉換是通過報文的接收、發送或超時。下面是 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 示例網絡拓撲
配置思路:
配置命令:
使用 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 地址分配狀态。
同時也在 PC 上查看動态獲取地址情況,進行雙向驗證。
抓包還可以看到 DHCP 報文交互的詳細過程,同時也是檢驗理論知識是否正确。
這裡我們發現抓包看到的是 DHCP Offer 單播報文,而前面介紹的時候,DHCP Offer 是廣播報文。其實 DHCP Offer 報文有可能是單播,也有可能是廣播。DHCP 在報文的标志字段有一個廣播位,如果 Client 支持接收 Offer 單播報文,那麼 Client 就會将發送報文中的廣播位設為 0 ,否則為 1 。
DHCP Relay 示例網絡拓撲
PC 端能獲取到 IP 配置,并且獲取的配置正确。
在 RT1 的 G0/0/1 抓包,查看 DHCP Client 和 DHCP Relay 的報文交互過程。
在 RT1 的 G0/0/0 抓包,查看 DHCP Server 和 DHCP Relay 的報文交互過程。
如果想要更深入的了解 DHCP 協議,那就要看它的報文格式。DHCP 設備通過識别報文内容,實現協議功能。
拿着 DHCP 報文格式,就可以看懂抓包獲取的報文内容。
DHCP Discover 報文
DHCP Offer 報文
DHCP Request 報文
DHCP Ack 報文
飲水思源:
HCNA網絡技術學習指南 - 華為技術有限公司
路由交換技術 - 杭州華三通信技術有限公司
TCP/IP詳解 卷1:協議 - Kevin R.Fall
高級網絡技術 - 田果
圖解TCP/IP - 竹下隆史
,更多精彩资讯请关注tft每日頭條,我们将持续为您更新最新资讯!