當前位置:編程學習大全網 - 源碼下載 - [協議]DHCP 協議原理與分析(壹)

[協議]DHCP 協議原理與分析(壹)

Chapter 01 :

DHCP(Dynamic Host Configuration Protocol)協議的作用在TCP/IP網絡中向Internet主機提供配置信息。它以Bootstrap Protocol(BOOTP)協議為基礎發展起來的,並增加了重新使用的網絡地址的自動分配能力和附加配置選項(Configuration Options),同時DHCP保留了BOOTP的Relay代理功能。

Chapter 02: 協議簡介

DHCP(Dynamic Host Configuration Protocol)協議是在Bootstrap Protocol (BOOTP)

基礎上提出的,其作用是在TCP/IP網絡中向Internet主機提供配置信息。

DHCP采用Client / Server模式,由客戶端向服務器提出配置申請(包括分配的IP地址、

子網掩碼、缺省網關等參數),服務器根據策略返回相應配置信息。

DHCP報文采用UDP作為傳輸層協議進行封裝。

DHCP 2個部分:

1、 DHCP Relay功能,把DHCP Server指定的配置信息傳輸給Host;

2、 Server功能,分配網絡地址和其他配置參數給主機。

DHCP 分配IP 方式:

1、 Automatic Allocation,為首次連接到網絡的某些主機分配固定IP地址,該地址

將長期由該主機使用。

2、 Dynamic Allocation,DHCP Server為Host指定壹個IP地址,同時為此地址規

定了壹個租用期限,如果租用時間到期,Client必須重新申請地址,這是Client

申請地址最常用的方法;

3、 Manual Allocation,網絡管理員為某些少數特定的Host指定固定IP地址。

DHCP指定地址的優先級分類:

1、 DHCP Server地址池中與Client的MAC地址靜態綁定的IP地址。

2、 Client曾經使用過的地址。當Client端再次申請地址時,Client發送DHCP Discover

報文,其地址選項中會包含上次使用的IP地址,除非此IP地址被分配出去或此地址

進行了其他不可用操作(例如:此IP地址被Forbidden等),否則Client端將再次使

用此地址。

3、 “requested IP address”選項中Client自己指定的IP地址,如果這個地址是地址池裏

的有效地址,而且沒有被分配出去,那麽將此地址分配給Client使用。

4、 順序查找DHCP地址池中可供分配的IP地址,最先找到的可用IP地址,優先級高。

Chapter 03: DHCP 報文格式

報文每個字段的含義

“options”域是個可變長度域,DHCP Client必須能夠接收包含有312bytes長度的

“options”域的DHCP報文,也就是說DHCP Client必須能夠接受至少576bytes長度的IP報文。

DHCP Client可以通過“Maximum DHCP Message Size”Option來協商DHCP報文的最大

長度。

flag 格式:

B : 最左邊的bit,Broadcast flag;

MBZ : 剩余的bits為保留位,留作將來使用

Chapter 04 : DHCP 報文構造與發送

DHCP 使用 UDP 協議的端口號

DHCP報文采用UDP作為傳輸層協議進行封裝。Client到Server的DHCP報文發送到

DHCP Server的端口號是67,Server到Client的報文發送到DHCP Client的端口號是68

DHCP 的選項

DHCP報文中需要包含壹系列的選項,即,選項列表(Options Lists)。選項列表是以

4個字節的魔術字開始,後面跟隨壹系列的選項,最後以“end”選項結束。

Client ID

DHCP定義了壹個用來標識Client的選項,即,“Client Identifier”Option。Client必須

選擇壹個能夠在自己所在的物理網絡中唯壹標識自己的值來填充Client ID選項的值,壹旦該

值被初始化,在隨後的報文交互中,該值不能改變。推薦使用Client的MAC地址作為Client ID

值。

Server ID

DHCP定義了壹個用來標識Server的選項,即,“Server Identifier”Option。Server

選擇自己的IP地址作為Server ID。如果壹個DHCP Server有多個IP地址,它可以任意選擇

壹個作為Server ID,但是,推薦使用Client可達的IP地址。例如,當Server與Client位於同

壹網段時,最好選擇該網段的地址作為Server ID。如果Client向Server發送單播報文,目的地址就使用Server ID值。

Client 端發送報文的源 IP 地址

在Client端沒有獲取到IP地址之前,其發送報文的源IP(指IP首部中的源IP字段)必須

填0。

廣播標誌

Flags,第1bit用作廣播標誌,後面15bits保留,必須置0。

在軟件沒有對自己IP協議的IP地址進行有效配置時,Client可能無法處理收到的單播報

文,這時,Client在發送Discover和Request報文時,必須將廣播標誌位置1, Server或Relay

Agent收到這樣的報文,必須回復廣播報文給Client。

如果Client可以處理廣播報文,它就將廣播標誌位置0,Server或Relay Agent收到這樣

的Discover和Request報文,可以使用單播報文進行回復,其目的IP地址為Server分配給

Client的IP地址,即,報文中yiaddr (You IP Address)字段的值。當然,Server或Relay Agent

也可以以廣播的方式回復。

Server 端對 ciaddr 和 giaddr 字段的處理

ciaddr,Client IP Address,只有Client是BOUND、RENEW、REBINDING狀態,並且

能響應ARP requests時,才能被填充;

giaddr,Relay Agent IP Adress;

1、 如果Server收到的報文giaddr字段不為0(即,說明該報文是經過Relay Agent進行

轉發的報文),那麽它將以單播的方式進行回復,其目的地址為giaddr字段的值;

2、 如果Server收到的報文giaddr字段為0,ciaddr字段不為0(即,說明Client已經有效

配置了自己的IP地址),那麽它將以單播的方式進行回復,其目的地址為ciaddr字

段的值;

3、 如果Server收到的報文giaddr字段為0,ciaddr字段為0,廣播標誌位不為0(即,說

明Client沒有配置自己的IP地址,並且,此時無法處理單播報文),那麽它將以廣

播的方式進行回復;

4、 如果Server收到的報文giaddr字段為0,ciaddr字段為0,廣播標誌位為0(即,說明

Client雖然沒有配置自己的IP地址,但是,此時可以處理單播報文),那麽它將以

單播的方式進行回復(推薦以單播方式回復,當然,也可以以廣播方式回復)。

Transaction ID

Xid(Transaction ID),由Client選擇的壹個隨機數,用於Server和Client之間交互報文

的匹配。

Client必須采用相應的算法來保證其選取的xid值與其他Client選取的xid值盡量不同,

即,將相同的概率降到最低。

選項過載

在DHCP報文頭中,sname和file字段都占用較多的字節,如果壹個報文中的這兩個字段

有壹個或兩個不含信息,空間就浪費了。為此,DHCP可以將選項內容擴充到sname和file字

段中。DHCP定義了壹個Overload Option(過載選項),如果出現Overload Option,就告訴

接收者sname和file字段失去了原來的含義,而表示Option

報文類型

DHCP在Message Type Option中,定義了報文類型,

Message Type Option的格式如下:

Option Code:長度為1個字節,其值為53,表示Message Type Option;

Option Length:長度為1字節,其值為1,表示Option Value字段長度為1個字節;

Option Value:長度為1個字節,其值標識了DHCP的報文類型(Message Type)。

在RFC2131中定義了如下8種DHCP報文:

Type 描述

1 DHCPDISCOVER

2 DHCPOFFER

3 DHCPREQUEST

4 DHCPDECLINE

5 DHCPACK

6 DHCPNAK

7 DHCPRELEASE

8 DHCPINFORM

DHCP Server可以收到Client的報文為:DHCPDISCOVER、DHCPREQUEST、

DHCPDECLINE、DHCPRELEASE和DHCPINFORM;

DHCP Client可以收到Server的報文為:DHCPOFFER、DHCPACK和DHCPNAK。

DHCPDISCOVER

當Server收到來自Client的DHCPDISCOVER報文後,Server會為此Client選擇壹個網

絡地址,如果沒有可用地址,那麽Server會向系統管理員報告;如果有可用地址,那麽Server

會選擇壹個可用地址給Client,選擇機制為:

1、 Server地址池中與Client的MAC地址靜態綁定的IP地址;

2、 Client先前使用的已經過期或釋放掉的地址,如果此地址在地址池裏是可用地

址,並且沒有被分配出去,那麽將此地址分配給Client使用;

3、 “requested IP address”選項中Client自己指定的IP地址,如果這個地址是地址

池裏的有效地址,而且沒有被分配出去,那麽將此地址分配給Client使用;

4、 地址池裏的有效的未分配出去的新地址,根據壹定的選擇方法分配給Client使

用。

租期選擇機制:

1、 如果Client在DHCPDISCOVER中請求了指定租期,這時不管Client是否已經被

指定了網絡地址,Server都會指定為請求租期;

2、 如果Client沒有請求指定租約期限,而Client已經被指定了網絡地址,那麽

Server將把先前此地址使用的租期指定給該地址;

3、 如果Client沒有請求指定租約期限,而Client也沒有被指定網絡地址,那麽

Server將指定本地默認租期。

DHCPREQUEST

DHCPREQUEST是Client響應來自Server的DHCPOFFER報文、檢驗先前分配的網絡

地址或擴展已存在的租約的。如果DHCPREQUEST報文中包含“server identifier”選項,那

麽這個報文是用來響應DHCPOFFER的,否則,這個報文是用來請求檢驗和擴展已存在的

租約的。

如果在DHCPREQUEST中Client使用了“client identifier”選項,那麽在以後的所有後續

報文中都要使用相同的“client identifier”;如果在DHCPDISCOVER報文中包含需求參數列

表,那麽在後續的報文中都要包含這個參數列表。

DHCPACK中的配置參數不應該和DHCPOFFER報文產生沖突,而Client使用的配置參

數就是DHCPACK報文中的配置參數。

DHCPDECLINE

如果Client發現Server建議使用的網絡地址已被使用,那麽Client將向Server發送

DHCPDECLINE報文,Server必須把這個網絡地址標記為不可用,並且應該通報本地系統

管理員可能的配置問題。

Client檢查Server分配的地址是否已經被使用的方法:Client收到Server的ACK報文,

在配置自己的IP地址和其他參數之前,發送免費ARP進行檢查該IP地址是否在網絡中被使

用。

DHCPRELEASE

如果Client不再需要使用它的指定地址,那麽Client將向Server發送DHCPRELEASE報

文,當收到DHCPRELEASE後,Server會標記此網絡地址不再被分配,但Server應該保留

Client的初始化參數記錄,以備以後響應Client對此地址可能的重使用。

DHCPINFORM

當Client已經配置了自己的IP地址,但又要配置其他參數時,它將向Server發送

DHCPINFORM報文,請求其他參數配置。

當收到DHCPINFORM報文,Server直接對報文“ciaddr”域中給出的地址發送DHCPACK

報文。Server不必發送租期超出時間,也不應該填充“yiaddr”域。

DHCPOFFER

Server收到DHCPDISCOVER報文,使用DHCPOFFER報文進行回應。DHCPOFFER

報文應該包括“yiaddr”域的可用網絡地址和其它DHCP options的配置參數。當分配新的地址

時,Server應該確認提供的網絡地址沒有被其他Client使用(Server可以通過發送指向被分

配地址的ICMP echo request來確認被分配地址沒有被使用)。

DHCPACK&DHCPNAK

如果某個Server提供的配置參數是可以接受的,那麽Client記錄下Server的地址,並且

把此地址寫入DHCPREQUEST的“server identifier”域,並以廣播形式向外發送,如果收到

DHCPREQUEST報文裏面的配置參數是有效的,Server會響應壹個DHCPACK報文。壹旦

DHCPACK被收到,Client將會被初始化並且進入BOUND狀態。

如果DHCPREQUEST報文裏面的配置參數是無效的,那麽Server會響應壹個

DHCPNAK報文。

  • 上一篇:KEG STORM註冊過商標嗎?還有哪些分類可以註冊?
  • 下一篇:如何用ftp上傳網頁如何用ftp上傳網頁文件
  • copyright 2024編程學習大全網