linux服務篇-DHCP服務原理分析

1. 概述

DHCP【Dynamic Host Configuration Protocol的簡稱】動態主機配置協議,是一個局域網的網絡協議,工作在UDP協議之上,屬於應用層協議。主要有兩個用途:

  1. 給內部網絡或網絡服務供應商自動分配IP地址,主機名,DNS服務器,域名
  2. 配合其它服務,實現集成化管理功能。如:無人執守安裝服務器

其特點是:

  1. 其工作模式爲C/S模式【服務器/客戶端模式】
  2. 自動分配IP地址,方便管理
  3. DHCP不會同時租借相同的IP地址給兩臺主機
  4. DHCP管理員可以約束特定的計算機使用特定的IP地址
  5. 可以爲每個DHCP作用域設置很多選項
  6. 客戶機在不同子網間移動時不需要重新設置IP地址。每次都自動獲取IP地址就可以了

主要缺陷表現在:

  1. 當網絡上存在多服務器時,一個DHCP服務器不能查出已被其它服務器租出去的IP地址
  2. 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地址是否已經分配給其它客戶端。這裏會有兩種情況,分別是:

  1. 如果已經分配給其它客戶端主機了那麼它響應一個DHCP nack否認信息說該IP地址已經被其它客戶端主機使用了你不能使用了,則客戶端會回到DHCP Client 發現階段繼續獲取IP地址。
  2. 如果未分配給其它客戶端主機,則它會相應一個DHCP ack確認信息,說,你可以使用這個IP地址,則客戶端就會繼續使用該IP地址登錄網絡

2.5 DHCP Client更新租約

DHCP獲取到的IP地址都有一個租約,租約過期後,DHCP Server將會回收該IP地址,所以如果DHCP Client如果想繼續使用該IP地址,則必須更新租約。更新的方式就是,當前租約期限過了一半後,DHCP Client都會發送DHCP Renew報文來續約租期。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章