DHCP協議原理及其實現流程


DHCP(Dynamic Host Configuration Protocol):動態主機配置協議

在常見的小型網絡中(例如家庭網絡和學生宿舍網),網絡管理員都是采用手工分配IP地址的方法,而到了中、大型網絡,這種方法就不太適用了。在中、大型網絡,特別是大型網絡中,往往有超過100台的客戶機,手動分配IP地址的方法就不太合適了。因此,我們必須引入一種高效的IP地址分配方法,幸好,DHCP(Dynamic Host Configuration Protocol)為我們解決了這一難題。

DHCP的優缺點

DHCP服務優點不少:網絡管理員可以驗證IP地址和其它配置參數,而不用去檢查每個主機;DHCP不會同時租借相同的IP地址給兩台主機;DHCP管理員可以約束特定的計算機使用特定的IP地址;可以為每個DHCP作用域設置很多選項;客戶機在不同子網間移動時不需要重新設置IP地址。

但同時也存在不少缺點:DHCP不能發現網絡上非DHCP客戶機已經在使用的IP地址;當網絡上存在多個DHCP服務器時,一個DHCP服務器不能查出已被其它服務器租出去的IP地址;DHCP服務器不能跨路由器與客戶機通信,除非路由器允許BOOTP轉發。

 

工作流程

DHCP服務的工作過程是這樣的:

1. 發現階段,即DHCP客戶機尋找DHCP服務器的階段。DHCP客戶機以廣播方式(因為DHCP服務器的IP地址對於客戶機來說是未知的)發送DHCP discover發現信息來尋找DHCP服務器,即向地址255.255.255.255發送特定的廣播信息。網絡上每一台安裝了TCP/IP協議的主機都會接收到這種廣播信息,但只有DHCP服務器才會做出響應。

    

2. 提供階段,即DHCP服務器提供IP地址的階段。在網絡中接收到DHCP discover發現信息的DHCP服務器都會做出響應,它從尚未出租的IP地址中挑選一個分配給DHCP客戶機,向DHCP客戶機發送一個包含出租的IP地址和其他設置的DHCP offer提供信息。

   

 

3. 選擇階段,即DHCP客戶機選擇某台DHCP服務器提供的IP地址的階段。如果有多台DHCP服務器向DHCP客戶機發來的DHCP offer提供信息,則DHCP客戶機只接受第一個收到的DHCP offer提供信息,然后它就以廣播方式回答一個DHCP request請求信息,該信息中包含向它所選定的DHCP服務器請求IP地址的內容。之所以要以廣播方式回答,是為了通知所有的DHCP服務器,他將選擇某台DHCP服務器所提供的IP地址。

   

 

4. 確認階段,即DHCP服務器確認所提供的IP地址的階段。當DHCP服務器收到DHCP客戶機回答的DHCP request請求信息之后,它便向DHCP客戶機發送一個包含它所提供的IP地址和其他設置的DHCP ack確認信息,告訴DHCP客戶機可以使用它所提供的IP地址。然后DHCP客戶機便將其TCP/IP協議與網卡綁定,另外,除DHCP客戶機選中的服務器外,其他的DHCP服務器都將收回曾提供的IP地址。

   

 

5. 重新登錄。以后DHCP客戶機每次重新登錄網絡時,就不需要再發送DHCP discover發現信息了,而是直接發送包含前一次所分配的IP地址的DHCP request請求信息。當DHCP服務器收到這一信息后,它會嘗試讓DHCP客戶機繼續使用原來的IP地址,並回答一個DHCP ack確認信息。如果此IP地址已無法再分配給原來的DHCP客戶機使用時(比如此IP地址已分配給其它DHCP客戶機使用),則DHCP服務器給DHCP客戶機回答一個DHCP nack否認信息。當原來的DHCP客戶機收到此DHCP nack否認信息后,它就必須重新發送DHCP discover發現信息來請求新的IP地址。

6. 更新租約。DHCP服務器向DHCP客戶機出租的IP地址一般都有一個租借期限,期滿后DHCP服務器便會收回出租的IP地址。如果DHCP客戶機要延長其IP租約,則必須更新其IP租約。DHCP客戶機啟動時和IP租約期限過一半時,DHCP客戶機都會自動向DHCP服務器發送更新其IP租約的信息。

為了便於理解,我們把DHCP客戶機比做餐館里的客人,DHCP服務器比做服務員(一個餐館里也可以有多個服務員),IP地址比做客戶需要的食物。那么可以這樣描述整個過程:客人走進餐館,問:“有沒有服務員啊?”(DHCP discover),多個服務員同時回答:“有,我這有雞翅”“有,我這有漢堡”(DHCP offer)。客人說:“好吧,我要一份漢堡”(DHCP request,這個客人比較死板,總是選擇第一次聽到的食物),端着漢堡的服務員回應了一聲:“來啦”(DHCP ack),並把食物端到客人面前,供其享用(將網卡和IP地址綁定)。客人下次來的時候,就直接找上次那個服務員點自己喜歡的漢堡了(DHCP request),如果還有漢堡,服務員會再次確認並上菜(DHCP ack),而如果已經賣完了,服務員則會告訴客人:“不好意思,已經賣完了”(DHCP nack)。當然,服務員隔一段時間會來收拾一次桌子,除非客人特別說明這菜還要繼續吃的,服務員會將剩菜端走。

DHCP CLIENT的行為

所有支持DHCP 協議並能夠發起DHCP過程的終端都稱之為DHCP CLIENT,包括普通PC機,各種特殊設備,如CABLE MODEM,IDT等。DHCP CLIENT自己必須能夠發出DHCPDISCOVER,DHCPREQUEST,DHCPDECLINE等報文(DHCPINFORM報文也是DHCP CLIENT發出但實際中很少見),並且必須能夠處理從服務器收到的以下幾種報文:DHCPOFFER,DHCPACK和DHCPNAK。

  

                                                                      圖 DHCP CLIENT 行為圖

 

DHCP交互過程

     標准的DHCP server 和client的交互過程如下圖所示,

 

                                   圖 DHCP交互過程時序圖

如果客戶通過別的手段獲得了網絡地址,它可以使用DHCPINFORM請求獲得其它配置參數,服務器接收到DHCPINFORM包,並建立一個DHCPACK消息,在其中包括一些合適客戶的配置參數,只是不包括分配網絡地址,檢查現有的綁定,在信息中不填充'yiaddr'字段或租用時間參數。服務器取得DHCPINFORM包內的'ciaddr'地址,而返回DHCPACK包。

DHCPDECLINE ——客戶機通知服務器,其分配的地址已經被其他設.

 

DHCP: 動態主機配置協議 
  TCP/IP協議想要運行正常的話,網絡中的主機和路由器不可避免地需要配置一些信息(如接口的IP地址等)。有了這些配置信息主機/路由器才能提供/使用特定的網絡服務。 
  主機信息的必要元素有:IP地址、子網掩碼、DNS服務器IP地址 
  TCP/IP協議配置主機信息主要有三種方法: 
1. 手動配置 
2. 動態獲取 
3. 根據特定算法計算。 
  在網絡中,我們把主機分為兩大類,服務器主機和客戶端主機, 
+ 服務器主機: 一般采用手動配置 
+ 客戶端主機: 一般采用動態獲取 
  服務器一般采用手動配置,而客戶端一般動態獲取。主要基於以下原因: 
1. 客戶主機比服務主機移動更頻繁 
2. 服務主機需要提供更可靠的服務,其配置信息應該減少對其他系統/主機的依賴 
3. 客戶主機比服務主機的數量要多得多。 
4. 客戶主機使用者的網絡配置知識比服務主機的使用者低

  DHCP有Bootp協議發展而來。Bootp協議提供了有限的主機信息配置,且主機信息已經配置就很難被修改。DHCP提供 幾乎所有的主機信息的配置,且引入了租約等概念,使得主機信息能夠動態發生變化。 DHCP向后兼容Bootp。 
  DHCP基於UDP/IP傳輸。DHCP服務器使用端口號67,DHCP 客戶端使用端口號68.

DHCP 協議內容

DHCP 主要分為兩部分: 地址的管理 和 配置信息的傳遞 
地址管理: 地址管理處理IP‘地址的動態分配、向客戶端提供地址租約 
配置信息的傳遞: 包含DHCP報文格式、狀態機

DHCP 地址管理

地址池 與 地址租約

  在IP地址的動態分配中,DHCP客戶端想DHCP服務器發送IP地址請求。DHCP服務器會維護一個 IP地址池,DHCP從地址池從取出一個IP回應給DHCP客戶端。在地址分配時,DHCP服務器也會指定回應給DHCP客戶端的IP地址的租約期,該地址只有在該租約期內可用,不過DHCP客戶端可用在租約期內請求延長租約(更新租約期)。

DHCP 報文

這里寫圖片描述 
Op: 報文類型,分為 兩大類: Request(1) 和 Reply(2) 
HW Type: 硬件類型,一般是以太網:1 
HW Len: 硬件地址長度,單位字節。對應以太網:6(mac地址長度為6字節48bit) 
Transaction ID:事務ID,隨機數,有客戶端生成,服務器Reply時,會把Request中的Transaction拷貝到Reply報文中。 
Secs: 距離第一次發射IP請求或Renew請求過去的秒數 
Flags:標志位,目前僅第一個bit有使用,置1 標明廣播 
Client IP Address:當前客戶端的IP地址,如果當前客戶端沒有IP地址,則置0 
Your IP Address: 服務器想客戶端提供IP地址時,會把IP地址填入本字段 
(Next)Server IP Address:客戶端引導時需要的另一個服務器的IP地址 
Gateway (Relay) IP Address: 網關(中繼)IP地址,有DHCP 中繼器在轉發DHCP報文的時候填入 
Server Name: Server名字,有64bytes,一般不使用,填充為0 
Boot File name: boot file的路徑,128bytes, 一般不使用,填充為0 
Option: 選項,不定長度。 DHCP報文中比較重要的字段,后面會有比較詳細的介紹。

DHCP Option

  DHCP從Bootp拓展而來,DHCP報文也是有Bootp報文發展而來。但是DHCP在Bootp之上添加了許多功能,其報文也需要有一定的拓展。如果Bootp報文不能滿足的內容,就以Option的形式存在於DHCP報文中。 
  DHCP協議其實就是攜帶許多Option的Bootp 
  DHCP有許多類型的Option,長度不一(但都是整數字節)。Option遵循以下格式 
+ 如果Option沒有值,則只有標志位之類的內容,則以一個字節表示 
+ 如果Opiton有值,即Opiton是以下name-value對,則Opiton需要多個字節表示,其中第一個字節表示 option的名字,第二字節表示value的長度,第三個字節開始表示value。

  DHCP支持大量的Option(Bootp也支持其中的部分),下面列舉一些常用的

Option 名稱 描述
0 Pad 填充位
1 Subnet Mask 子網 掩碼
3 Router Address 路由器地址
6 DNS DNS server
15 DN 域名
50 Requested IP Address 請求的IP地址
51 Address Lease Time 地址租約時間
53 DHCP Message Type DHCP 消息類型,如Discover、Request、Offer、ACK等
54 Server Identifier 服務器標識
55 Parameter Request List 參數請求列表
56 DHCP Error Message DHCP 錯誤消息
58 Lease Renewal Time 租約續期時間
59 Lease Rebinding Time 租約重新設定的時間
61 Client Identifier 客戶標識
119 Domain Search List 域名查找列表
255 End 結束

上面是常用的Option,DHCP報文與Option 255標識報文的結束。 
在DHCP Option中,我們着重看下DHCP Message Type(53),DHCP Message Type標識DHCP消息類型,主要有一下類型

DHCP 消息類型 對應的Option值
DHCPDISCOVER 1
DHCPOFFER 2
DHCPREQUEST 3
DHCPDECLINE 4
DHCPACK 5
DHCPNAK 6
DHCPRELEASE 7
DHCPINFORM 8
DHCPFORCERENEW 9
DHCPLEASEQUERY 10
DHCPLEASEUNASSIGNED 11
DHCPLEASEUNKNOWN 12
DHCPLEASEACTIVE 13

DHCP 協議 操作流程

主機新加入網絡時,獲取IP的流程 
1. 新的client加入網絡時,會使用0.0.0.0作為源地址,發送discover廣播報文,查詢網絡上有哪些DHCP server,以及這些DHCP server 能Offer哪些IP地址 
2. DHCP服務器接收到DHCP Discover報文后,回應Offer報文,提供IP地址(可能包含DNS等其他信息)給client 
3. client 根據收到的Offer報文,選擇一個DHCP server,並選擇它提供的IP地址。然后廣播Request報文,想DHCP Server請求該IP地址,同時想本地網絡(尤其是其他DHCP Server)公告自己已經選擇了某個DHCP Server的某個IP地址。 
4. DHCP Server 回應ACK報文,將IP地址分配給Client端 (特殊情況:DHCP Server在發送Offer報文和接收到Request的短暫時間內把IP分配給了其他主機) 
5. DHCP Client 收到ACK報文后,會針對獲得的IP地址發送ARP Request,進行IP地址沖突檢測。 
6. 如果IP地址已經被其他主機使用,則Client放棄該IP地址,想Server發送DHCP DECLINE報文告訴Server該地址不能使用。然后一段時間后(一般10s)再此嘗試獲取該IP地址 
7. 如果Client仍然無法使用該IP地址,則發送DHCP RELEASE報文,放棄該地址。

主機已經有IP地址,只想更新租約 
1. 此時可以跳過DHCP Discover報文和DHCP Offer報文 
2. Client發送攜帶當前IP地址的Request報文 
3. 如果Server同意Client續約,則發送DHCP ACK報文。如果拒絕續約,則發送DHCPNAK報文。

* 主機只想更新IP地址以外的信息* 
用DHCPINFORM 取代 DHCP Request報文。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM