linux服務篇-DHCP服務原理分析
1. 概述
DHCP【Dynamic Host Configuration Protocol的簡稱】動態主機配置協議,是一個區域網的網路協議,工作在UDP協議之上,屬於應用層協議。主要有兩個用途:
- 給內部網路或網路服務供應商自動分配IP地址,主機名,DNS伺服器,域名
- 配合其它服務,實現整合化管理功能。如:無人執守安裝伺服器
其特點是:
- 其工作模式為C/S模式【伺服器/客戶端模式】
- 自動分配IP地址,方便管理
- DHCP不會同時租借相同的IP地址給兩臺主機
- DHCP管理員可以約束特定的計算機使用特定的IP地址
- 可以為每個DHCP作用域設定很多選項
- 客戶機在不同子網間移動時不需要重新設定IP地址。每次都自動獲取IP地址就可以了
主要缺陷表現在:
- 當網路上存在多伺服器時,一個DHCP伺服器不能查出已被其它伺服器租出去的IP地址
- DHCP伺服器不能跨路由器與客戶機通訊,除非路由器允許BOOTP協議轉發
DHCP服務使用67號【bootps服務端】埠和68埠【bootpc客戶端】,可用 vim /etc/services檢視:
DHCP協議由 bootp協議發展而來,是BOOTP的增強版本,bootps代表服務端埠, bootpc代表客戶端埠
擴充套件:
bootp協議:載入程式協議(BOOTP)。它可以讓無盤工作站從一箇中心伺服器上獲得IP地址,為區域網中的無盤工作站分配動態IP地址,並不需要每個使用者去設定靜態IP地址。
BOOTP有一個缺點:您在設定前須事先獲得客戶端的硬體地址,而且,MCA地址與IP的對應是靜態的。換而言之,BOOTP非常缺乏“動態性 ”,若在有限的IP資源環境中,BOOTP的一對一對應會造成非常可觀的浪費。
2. 執行原理
執行原理如下圖所示:
以下我將按執行流程進行一一講解。
2.1 DHCP Client 發現階段
即DHCP客戶端尋找DHCP服務端的過程,客戶端傳送DHCP Discovery,因為DHCP 服務端對於DHCP客戶端是未知的,所以DHCP 客戶端發出的DHCP Discovery報文是廣播包,源地址為0.0.0.0目的地址為255.255.255.255。網路上的所有支援TCP/IP的主機都會收到該DHCP Discovery報文,但是隻有DHCP Server會響應該報文。
注意:
客戶端執行DHCP DISCOVER 後,如果沒有DHCP 伺服器響應客戶端的請求,客戶端會隨機使用169.254.0.0/16 網段中的一個IP 地址配置本機地址。169.254.0.0/16是windows的自動專有IP定址範圍,也就是在無法通過DHCP獲取IP地址時,由系統自動分配的IP地址段。早先的Linux上並不會產生這條路由,現在有這條路由大概是為了和windows相容。
2.2 DHCP Server 提供階段
當所有的DHCP服務端在網路中接收到DHCP客戶端發出的discover時,所有的DHCP伺服器都會做出響應,它們會從尚未出租的IP地址中挑選一個分配給DHCP客戶端。
注:服務端響應給客戶端的資料包括IP地址和一些配置資訊 。
2.3 DHCP Client 確認階段
當客戶端收到DHCP服務端的offer時,它會選擇第一個DHCP服務端給它發出的offer,然後它就以廣播方式回答一個DHCPrequest請求資訊,該資訊中包含第一時間所選定的DHCP伺服器請求IP地址的內容。之所以要以廣播方式回答,是為了通知所有的DHCP伺服器,他將選擇某臺DHCP伺服器所提供的IP地址。
2.4 DHCP Client重新登入網路
DHCP客戶端會帶著前一次所分配的IP地址去請求這個給它發出的offer的DHCP伺服器,當這個DHCP伺服器收到這一訊息後,它會檢查改IP地址是否已經分配給其它客戶端。這裡會有兩種情況,分別是:
- 如果已經分配給其它客戶端主機了那麼它響應一個DHCP nack否認資訊說該IP地址已經被其它客戶端主機使用了你不能使用了,則客戶端會回到DHCP Client 發現階段繼續獲取IP地址。
- 如果未分配給其它客戶端主機,則它會相應一個DHCP ack確認資訊,說,你可以使用這個IP地址,則客戶端就會繼續使用該IP地址登入網路
2.5 DHCP Client更新租約
DHCP獲取到的IP地址都有一個租約,租約過期後,DHCP Server將會回收該IP地址,所以如果DHCP Client如果想繼續使用該IP地址,則必須更新租約。更新的方式就是,當前租約期限過了一半後,DHCP Client都會發送DHCP Renew報文來續約租期。