1 前言
最近部門內部成立一個網絡興趣小組,初衷是通過網絡知識學習,在遇到網絡問題時能夠承擔起一個與網絡側同學有效溝通的 “連接人” 的角色,求學這么多年其實也陸續學了不少的網絡相關課程,本科的計算機網絡、碩士的高等計網等,不過當時大多都停留在理論層面,趁此機會對之前學習到的相關理論知識進行實驗。本次的文章主要記錄了利用 GNS3 網絡模擬器搭建一個 DHCP 服務器,在兩個 DHCP 服務器之前又采用 RIP 來連接,并在文章中記錄了實驗結果及使用 wireshark 工具抓取的數據包分析....
2 DHCP 知識回顧
2.1 什么是 DHCP?
DHCP (Dynamic HostConfigurationProtocol), 動態主機配置協議,是一個應用層協議。當我們將客戶主機 ip 地址設置為動態獲取方式時,DHCP 服務器就會根據 DHCP 協議給客戶端分配 IP,使得客戶機能夠利用這個 IP 上網。
DHCP 前身是 BOOTP,在 linux 的網卡配置中也能看到顯示的是 BOOTP,DHCP 引進一個 bootp 沒有的概念:租約。bootp 分配的地址是永久的,而 dhcp 分配的地址是可以有期限的。DHCP 分為兩個部分:一個是服務器端,另一個是客戶端。
2.2 DHCP 作用及特點
- DHCP 可以自動分配 IP、子網掩碼、網關、DNS。
- DHCP 客戶端使用的端口 68,服務端使用端口 67,使用的 UDP 應用層的協議。
- DHCP 一般不為服務器分配 IP,因為他們要使用固定 IP,所以 DHCP 一般只為辦公環境的主機分配 IP。
- DHCP 服務器和客戶端需要在一個局域網內,在為客戶端分配 IP 的時候需要進行多次廣播。但 DHCP 也可以為其他網段內主機分配 IP,只要連接兩個網段中間的路由器能轉發 DHCP 配置請求即可,但這要求路由器配置中繼功能。
2.3 DHCP 分配 IP 方式?
- 自動分配(Automatic Allocation)(mac 地址與 IP 綁定)
自動分配是當 DHCP 客戶端第一次成功地從 DHCP 服務器端分配到一個 IP 地址之后,就永遠使用這個地址。這種方式適用于需要確保每個設備始終分配到相同 IP 地址的場景,例如服務器、打印機或網絡設備。
- 動態分配(Dynamic Allocation)常用方式
動態分配是當 DHCP 客戶端第一次從 DHCP 服務器分配到 IP 地址后,并非永久地使用該地址,每次使用完后,DHCP 客戶端就得釋放這個 IP 地址,以給其他客戶端使用。這種方式適用于大量移動設備連接到網絡的場景,如公司辦公室或公共無線網絡。
- 手動分配
手動分配是由 DHCP 服務器管理員專門為客戶端指定 IP 地址。
2.4 DHCP 服務工作流程細節?
- 第一步:搜索階段
當 DHCP 客戶端第一次登錄網絡的時候,計算機發現本機上沒有任何 IP 地址設定,將以廣播方式發送 DHCP discover 發現信息來尋找 DHCP 服務器,即向 255.255.255.255 發送特定的廣播信息。網絡上每一臺安裝了 TCP/IP 協議的主機都會接收這個廣播信息,但只有 DHCP 服務器才會做出響應。(DHCP DISCOVER)
- 第二步:提供階段
在網絡中接收到 DHCP discover 發現信息的 DHCP 服務器就會做出響應,它從尚未分配的 IP 地址池中挑選一個分配給 DHCP 客戶機,向 DHCP 客戶機發送一個包含分配的 IP 地址和其他設置的 DHCP offer 提供信息。因為此時客戶端還沒有 IP,所以返回信息也是以廣播的方式返回的。(DHCP OFFER)
- 第三步:選擇階段
DHCP 客戶端接受到 DHCP offer 提供信息之后,選擇第一個接收到的提供信息,然后以廣播的方式回答一個 DHCP request 請求信息,該信息包含向它所選定的 DHCP 服務器請求 IP 地址的內容。(DHCP REQUEST)
- 第四步:確認階段
當 DHCP 服務器收到 DHCP 客戶端回答的 DHCP request 請求信息之后,便向 DHCP 客戶端發送一個包含它所提供的 IP 地址和其他設置的 DHCP ack 確認信息,確認租約,并指定租約時長。告訴 DHCP 客戶端可以使用它提供的 IP 地址。然后,DHCP 客戶機便將其 TCP/IP 協議與網卡綁定,另外,除了 DHCP 客戶機選中的 DHCP 服務器外,其他的 DHCP 服務器將收回曾經提供的 IP 地址。(DHCP ACK)
- 重新登錄
以后 DHCP 客戶端每次重新登錄網絡時,就不需要再發送 DHCP discover 發現信息了,而是直接發送包含前一次所分配的 IP 地址的 DHCP request 請求信息。當 DHCP 服務器收到這一信息后,它會嘗試讓 DHCP 客戶機繼續使用原來的 IP 地址,并回答一個 DHCP ack 確認信息。如果此 IP 地址已無法再分配給原來的 DHCP 客戶機使用時,則 DHCP 服務器給 DHCP 客戶機回答一個 DHCP nack 否認信息。當原來的 DHCP 客戶機收到此 DHCP nack 否認信息后,它就必須重新發送 DHCP discover 發現信息來請求新的 IP 地址。
- 續租(未嘗試)
DHCP 服務器向 DHCP 客戶機出租的 IP 地址一般都有一個租借期限,期滿后 DHCP 服務器便會收回出租的 IP 地址。如果 DHCP 客戶機要延長其 IP 租約,則必須更新其 IP 租約。DHCP 客戶機啟動時和 IP 租約期限到達租約的 50% 時,DHCP 客戶機都會自動向 DHCP 服務器發送更新其 IP 租約的信息。
2.5 DHCP 協議中的報文?
?DHCP DISCOVER :客戶端開始 DHCP 過程發送的包,是 DHCP 協議的開始
?DHCP OFFER :服務器接收到 DHCP DISCOVER 之后做出的響應,它包括了給予客戶端的 IP(yiaddr)、客戶端的 MAC 地址、租約過期時間、服務器的識別符以及其他信息
?DHCP REQUEST :客戶端對于服務器發出的 DHCP OFFER 所做出的響應。在續約租期的時候同樣會使用。
?DHCP ACK :服務器在接收到客戶端發來的 DHCP REQUEST 之后發出的成功確認的報文。在建立連接的時候,客戶端在接收到這個報文之后才會確認分配給它的 IP 和其他信息可以被允許使用。
?DHCP NAK :DHCP ACK 的相反的報文,表示服務器拒絕了客戶端的請求。
?DHCP RELEASE :一般出現在客戶端關機、下線等狀況。這個報文將會使 DHCP 服務器釋放發出此報文的客戶端的 IP 地址
?DHCP INFORM :客戶端發出的向服務器請求一些信息的報文
?DHCP DECLINE : 當客戶端發現服務器分配的 IP 地址無法使用(如 IP 地址沖突時),將發出此報文,通知服務器禁止使用該 IP 地址。
3 DHCP 實驗
3.1 簡單 DHCP 服務搭建
該實驗分配的網段是 192.168.1.0/24,將該網段用于分配 PC 的 ip 地址,該實驗主要分為兩個部分,DHCP 服務器和單臂路由的配置
- 實驗步驟
?第一步,配置單臂路由。(注意:文中的命令時 Cicso 路由器,不同的網絡設備命令存在區別)
"encapsulation dot1Q 2" 是一個網絡命令,用于在以太網中配置 IEEE 802.1Q VLAN 封裝。
int f1/0.1
encapsulation dot1Q 2
ip add 192.168.1.1 255.255.255.0
ex
int f1/0
no sh
ex
?第二步,在交換機配置 vlan。
conf t
int f1/0
sw t e d
sw m t
ex
?第三步,將交換機和 PC 相連接的接口設置為 acess 模式,并制定允許 vlan2 的網絡通過。
int f1/1
sw m a
sw a v 2
ex
int f1/2
sw m a
sw a v 2
ex
int f1/3
sw m a
sw a v 2
ex
int f1/4
sw m a
sw a v 2
ex
?第四步,在路由器中配置 DHCP 地址池。
ip dhcp pool mypool
default-router 192.168.1.1
ex
?第五步,測試 PC 自動獲取 ip 的情況。
dhcp
3.2 結合 wireshark 分析 DHCP 服務器協議包
?第一步,在箭頭處抓包。
?第二步,使用 PC 獲取 ip 分配。
?第三步,觀測 wireshark 抓包情況
3.3 太平洋大學課程實驗 6-DHCP 實驗
實驗地址鏈接:https://cyberlab.pacific.edu/courses/comp177/labs/lab-6-dhcp
- 實驗步驟
?按照上面的簡單 dhcp 服務器命令配置完成兩個不同的 dhcp 服務器
?在 R1 和 R2 之間開啟 RIP,操作命令如下:
conf t
int f0/1
ip add 192.168.0.1 255.255.255.252
no sh
ex
router rip
version 2
network 192.168.0.0
network 10.0.1.0
conf t
int f0/1
ip add 192.168.0.2 255.255.255.252
no sh
ex
router rip
version 2
network 192.168.0.0
network 10.0.1.0
- 實驗結果
?兩個網段的 PC 都能夠正常的通過 dhcp 服務器獲取 ip 地址。
?不同網段的 PC 可以相互 ping 通
3.4 接下來待完成實驗?
- DHCP 服務器跨網段提供服務?
如果 DHCP 服務器要跨網段提供服務,一樣是四步請求,只不過是每一步中間都多了一個路由器和 DHCP 服務器之間的單播通信。
1)客戶端廣播方式發送報文,搜索 DHCP 服務器。所有機器包括路由器都收到報文,路由器配置了中繼,知道搜索消息后單播給 DHCP 服務器;
2)DHCP 服務器單播返回信息給路由器,路由器再廣播給客戶端;
3)客戶端選擇 DHCP 服務器提供的 IP,并廣播信息告訴它我選好了,路由器單播給 DHCP 服務器;
4)DHCP 服務器收到信息將確認信息單播給路由器,路由器單播給客戶端。
- 實現租約?
DHCP 服務器向 DHCP 客戶機出租的 IP 地址一般都有一個租借期限,期滿后 DHCP 服務器便會收回出租的 IP 地址。如果 DHCP 客戶機要延長其 IP 租約,則必須更新其 IP 租約。DHCP 客戶機啟動時和 IP 租約期限到達租約的 50% 時,DHCP 客戶機都會自動向 DHCP 服務器發送更新其 IP 租約的信息。
4 總結
也算是利用這次調研的機會把 DHCP 理論知識和實踐進行了下結合,期間還是遇到很多問題,不過最后通過一步步的搭建,看到最終 PC 能夠正常的通過 DHCP 服務器獲得 ip 地址確實還是很有成就感的。搭建簡單的 DHCP 服務器場景因為不涉及到路由器交互,這塊還是比較順利的,在進行太平洋大學的實驗課程時,在路由交互這塊一直無法正常交互,導致兩個網段的 PC 無法 ping 通,最終排查發現除了需要在 R1 上啟用 rip 后配置 168.1.0.0/24 網段外,還需要添加 10.0.1.0/24,R2 上面同理。ok,后面會對這次遺留的兩個待辦問題進行探究,以上......
作者:京東科技 宋慧超
來源:京東云開發者社區 轉載請注明來源