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報文來續約租期。