DHCP信息交互過程詳解

轉載自:http://blog.csdn.net/a9254778/article/details/8059674


1. DHCP回覆包是單播還是廣播

1):網絡設備上的DHCP回覆包都是單播.
2):微軟官方解釋:
默認情況下, Microsoft Windows NT 4.0 DHCP 服務器發送所有的 DHCP 響應作爲 IP 廣播到受限廣播地址 
(255.255.255.255)。 但是,DHCP 服務器可以將配置爲單播響應如果客戶端請求指定廣播的響應不需要。
DHCP 服務器與 Windows NT 4.0 之前的版本忽略客戶端的 DHCP 數據包中的該廣播的標誌,並且廣播所有答覆。 DHCP 服務器 4.0 
版支持 unicasting 通過下列註冊表參數:
HKEY_LOCAL_MACHINE \CurrentControlSet \Services \DHCPServer \Parameters 
\IgnoreBroadcastFlag
參數類型: REG _ DWORD
默認值: 1
說明: 如果設置爲 1,時將在客戶端請求該廣播的標誌被忽略,並且所有的 DHCP 數據包從服務器廣播。如果設置爲 0,行爲 (是否廣播或不) 
由廣播標誌在響應的客戶端請求中。
Networks.wri 文件也包含此參數的說明。
總結:微軟操作系統上的DHCP服務器的回覆包即可以是單播,也可以是廣播.(給出的答案很鬱悶)
3):總結:Linux下的DHCP回覆包是廣播.



2. 詳解linux下DHCP信息交互過程

DHCP 協議是基於UDP層之上的應用,本文結合抓報所得數據分析DHCP協議實現原理

一、先了解一下需要抓取的DHCP報文

客戶發出的IP租用請求報文

DHCP客戶機初始化TCP/IP,通過UDP端口67向網絡中發送一個DHCPDISCOVER廣播包,請求租用IP地址。該 
廣播包中的源IP地址爲0.0.0.0,目標IP地址爲255.255.255.255;包中還包含客戶機的MAC地址和計算機名。

DHCP迴應的IP租用提供報文

任何接收到DHCPDISCOVER廣播包並且能夠提供IP地址的DHCP服務器,都會通過UDP端口68給客戶機迴應一個DHCPOFFER廣播包,提供一個IP地址。該廣播包的源IP地址爲DCHP服務器IP,目標IP地址爲255.255.255.255;包中還包含提供的IP地址、子網掩碼及租期等信息。

客戶選擇IP租用報文

客戶機從不止一臺DHCP服務器接收到提供之後,會選擇第一個收到的DHCPOFFER包,並向網絡中廣播一個 
DHCPREQUEST消息包,表明自己已經接受了一個DHCP服務器提供的IP地址。該廣播包中包含所接受的IP地址和服務器的IP地址。所有其他的DHCP服務器撤消它們的提供以便將IP地址提供給下一次IP租用請求。

DHCP服務器發出IP租用確認報文

被客戶機選擇的DHCP服務器在收到DHCPREQUEST廣播後,會廣播返回給客戶機一個DHCPACK消息包,表明已經接受客戶機的選擇,並將這一IP地址的合法租用以及其他的配置信息都放入該廣播包發給客戶機。

客戶配置成功後發出的公告報文

客戶機在收到DHCPACK包,會使用該廣播包中的信息來配置自己的TCP/IP,則租用過程完成,客戶機可以在網絡中通信。

至此一個客戶獲取IP的DHCP服務過程基本結束,不過客戶獲取的IP一般是用租期,到期前需要更新租期,這個過程是通過租用更新數據包來完成的。

客戶IP租用更新報文

(1)在當前租期已過去50%時,DHCP客戶機直接向爲其提供IP地址的DHCP服務器發送DHCPREQUEST消息包。如果客戶機接收到該服務器迴應的DHCPACK消息包,客戶機就根據包中所提供的新的租期以及其它已經更新的TCP/IP參數,更新自己的配置,IP租用更新完成。如果沒收到該服務器的回覆,則客戶機繼續使用現有的

IP地址,因爲當前租期還有50%。

(2)如果在租期過去50%時未能成功更新,則客戶機將在當前租期過去87.5%時再次向爲其提供IP地址的DHCP聯繫。如果聯繫不成功,則重新開始IP租用過程。

(3)如果DHCP客戶機重新啓動時,它將嘗試更新上次關機時擁有的IP租用。如果更新未能成功,客戶機將嘗試聯繫現有IP租用中列出的缺省網關。如果聯繫成功且租用尚未到期,客戶機則認爲自己仍然位於與它獲得現有IP租用時相同的子網上(沒有被移走)繼續使用現有IP地址。如果未能與缺省網關聯繫成功,客戶機則認爲自己已經被移到不同的子網上,將會開始新一輪的IP租用過程。

DHCP客戶機在發出IP租用請求的DHCPDISCOVER廣播包後,將花費1秒鐘的時間等待DHCP服務器的迴應,如果1秒鐘沒有服務器的迴應,它會將這一廣播包重新廣播四次(以2,4,8和16秒爲間隔,加上1~1000毫秒之間隨機長度的時間)。四次之後,如果仍未能收到服務器的迴應,則運行 
Windows 2000的DHCP客戶機將從169.254.0.0/16這個自動保留的私有IP地址(APIPA)中選用一個IP地址,而運行其他操作系統的DHCP 
客戶機將無法獲得IP地址。DHCP客戶機仍然每隔5分鐘重新廣播一次,如果收到某個服務器的迴應,則繼續IP租用過程。



3.由於DHCP協議是初始化協議,更簡單的說,就是讓終端獲取IP 地址的協議,既然終端連IP地址都沒有,何以能夠發出IP報文呢?

爲了解決這個問題,DHCP報文的封裝採取瞭如下措施:

1、首先鏈路層的封裝必須是廣播形式,即讓在同一物理子網中的所有主機都能夠收到這個報文。在Ethernet_II格式的網絡中,就是目標MAC爲全1。

2、由於終端沒有IP地址,IP頭中的原IP規定填爲全0

3、當終端發出DHCP請求報文,它並不知道DHCP SERVER的IP地址,因此IP頭中的目標IP填爲子網廣播IP——全1,以保證DHCP 
SERVER的IP協議棧不丟棄這個報文。

4、上面的措施保證了DHCP SERVER能夠收到終端的請求報文,但僅憑鏈路層和IP層信息,DHCP 
SERVER無法區分出DHCP報文,因此
終端發出的DHCP請求報文的UDP層中的原端口爲68,目標端口DstPort爲67。即DHCP 
SERVER通過知名端口號67來判斷一個報文是否是DHCP報文。


4. DHCP協議的報文中主要數據格式詳解

Boot record type爲1時表示是Client的請求,爲2時表示是Server的應答。

Hardware address typeClient 的網絡硬件地址類型,1表示Client 的網絡硬件是10MB的以太網類型

/Hardware address lengthClient 的網絡硬件地址長度,6表示Client 
的網絡硬件地址長度是6bytes(即以太網類型的6bytes的MAC地址)。

HOPS跳數,表示當前的DHCP報文經過的DHCP 
RELAY(中級)的數目,每經過一個DHCP中繼,此字段就會加1,此字段的作用是限制DHCP報文不要經過太多的DHCP 
RELAY,協議規定,當“hops”大於4(現在也有規定爲16)時,這個DHCP報文就不能再進行處理,而是丟棄。

Transaction 
id事務ID,Client每次發送DHCP請求報文時選擇的隨機數,用來匹配server的響應報文是對哪個請求報文的響應。Client會丟棄“ID”不匹配的響應報文。

Elapsed boot time秒數,用來表示client開始DHCP請求後的時間流逝秒數

flags標誌,在 BOOTP中此字段是保留不用的,在DHCP協議中也只使用了其左邊的最高位。

Client self-assigned IPaddress客戶機IP地址

Client IP address server分配給client的IP地址

Next Server to use in bootstrap服務器IP地址

Relay AgentDHCP中繼代理IP地址

Client hardware address客戶機硬件地址MAC

Host name 服務器的主機名

Boot file nameClient 的啓動配置文件名

Vendor Information 
tag選項字段,此字段中包含了大量可選的終端初始配置信息和網絡配置信息,對於BOOTP協議,此字段爲64bytes,對於DHCP協議,此字段爲64---312 
bytes。其中最常用的選項列表如下:

Dhcp message typecode = 53, length = 1, value= 1-8,此字段表示DHCP報文類型

Router Ipcode = 3, length = IP地址長度, value=client的默認網關的 IP地址;

DNS Ipcode = 6, length = IP地址長度的倍數, value= client的DNS服務器的IP地址序列;

Wins Ipcode = 44, length = IP地址長度的倍數, value= client的WINS服務器的 IP地址序列;

Client idcode = 61, length = client的網絡硬件地址的長度+2, value=“htype”+“hlen”+ 
client的網絡硬件地址;

server idcode = 54, length = IP地址長度, value= DHCP SERVER的IP地址;

其中我們要注意Transaction ID=CF04CD61和DHCP Message 
Type一項中type=Discover,前一項表示會話ID,即DHCP Server發回的響應報文中該結構的數值要與發出去的DHCP 
Discover中的該結構數值一樣,後一項說明DHCP報文類型爲Discover類型報文。

2 DHCP SERVER回送DHCPOFFER報文

DHCPOFFER報文是單播而不是廣播,報文明確給出了目標MAC和IP,這一點不同與一般的技術文章介紹。其實,DHCP 
SERVER給終端的響應報文是根據DHCP報文中的內容決定是廣播還是單播,一般都是廣播形式。通訊源端口是67,目標端口爲68,客戶端通過端口號 
68來判斷一個報文是否是DHCP SERVER的響應報文,Transaction 
ID=CF04CD61,表示這個報文是與圖DHCP7中的DHCPDiscover報文相關的報文,因爲二者標示一致。

從DHCP Server迴應的DHCPOffer報文中我們還可以得到DHCP擬分配給客戶端的初始配置信息和網絡配置信息,其中

Client self-assigned IP address =0.0.0.0表示客戶機還沒有使用該地址

Client server-assigned IP address =10.177.124.73表示DHCP Server分配給該客戶機的IP地址

Server IP ID=218.290.240它標示了客戶機下一次發出DHCPRequest報文時,哪個DHCP Server會發出迴應

DHCP Message Typee=DHCP Offer表示這是一個對DHCPDiscover的迴應報文

Request IP address lease time =6000 表示租期是100分鐘

Domain Name Server=218.29.0.251域名服務器地址

Gateway address=10.177.124.254網關地址

Subnet mask=255.255.255.0 表示這個地址的網段是一個標準的C類地址網段

所有發送DHCP Offer信息包的服務器將保留它們提供的一個IP地址。在該地址不再保留之前,該地址不能分配給其他的客戶。

用戶發出DHCPREQUEST報文

客戶以廣播的方式發送DHCP Request信息包作爲響應。注意其中的DHCP Message 
Type一項中type=Request表示這是一個請求報文。

客戶利用DHCP Request詢問服務器其它的配置選項;

該信息包是以單播的方式發送的。當服務器接收到DHCP Request信息包時,它以一個DHCP 
Acknowledge信息作爲響應,其內容同DHCPOFFER類似,並在“選項”字段中增加了IP地址使用租期選項。

宣告確認

CLIENT收到DHCPACK報文後(經過上面的處理後,有且只有一個DHCPACK報文),會檢查DHCP 
SERVER分配給自己的IP地址是否能夠使用,如在以太網類型的網絡中,CLIENT會發出一個ARP請求來確定DHCP 
SERVER分配的IP地址是否已經被別人使用,如果可以使用,則CLIENT成功獲得IP地址,並根據IP地址使用租期自動啓動續延過程。

DHCP協議報文的種類

前面反覆提到DHCP Message 
Type項,這裏列出所有DHCP協議報文的種類。DHCP協議採用CLIENT-SERVER方式進行交互,其報文格式共有8種,具體含義如下:

1:DHCPDISCOVER(0x01),此爲Client開始DHCP過程的第一個報文

2:DHCPOFFER(0x02),此爲Server對DHCPDISCOVER報文的響應

3:DHCPREQUEST(0x03),此報文是Slient開始DHCP過程中對server的DHCPOFFER報文的迴應,或者是client續延IP地址租期時發出的報文

4:DHCPDECLINE(0x04),當Client發現Server分配給它的IP地址無法使用,如IP地址衝突時,將發出此報文,通知Server禁止使用IP地址

5:DHCPACK(0x05),Server對Client的DHCPREQUEST報文的確認響應報文,Client收到此報文後,才真正獲得了IP地址和相關的配置信息。

6:DHCPNAK(0x06),Server對Client的DHCPREQUEST報文的拒絕響應報文,Client收到此報文後,一般會重新開始新的DHCP過程。

7:DHCPRELEASE(0x07),Client主動釋放server分配給它的IP地址的報文,當Server收到此報文後,就可以回收這個IP地址,能夠分配給其他的Client。

8:DHCPINFORM(0x08),Client已經獲得了IP地址,發送此報文,只是爲了從DHCP 
SERVER處獲取其他的一些網絡配置信息,如route ip,DNS Ip等,這種報文的應用非常少見。

圖DHCP14是一個運行IPCONFIG/RELEASE後釋放IP的報文,從圖中可以看出DHCP Message 
Type是7,他的作用是主動釋放server分配給它的IP地址的報文,Server收到此報文後,就可以回收這個IP地址,能夠分配給其他的 Client。

上面提到的都是在已經開機的情況下獲得的報文,如果計算機重新啓動,是不是完全按照文章提到的四步得到IP參數。

其中包含關機前獲得的IP=192.168.0.22,這是不同與前面提到的10.177.124.X段的IP。原來客戶機保留了上一次獲得的地址,客戶機在重新啓動時,如果租用期未超過50%,它就會認爲它已經知道該與哪臺DHCP服務器進行聯繫,於是就跳過前兩步,併發送另一個DhcpRequest 
報文給同一個服務器。如果該IP地址仍然可用的話,該DHCP服務器將給這臺客戶機返回另一個確認消息。同樣,DHCP服務器上也會保留(在租用期內的)客戶機的地址。如果你的DHCP服務器中的租用期設的足夠長,你就會發現,重啓一臺客戶機後,客戶機總是得到同一個地址。這正是由於客戶機、服務器能保存已分配地址所造成的。

如果一臺客戶機未從該DHCP服務器獲取過地址,或者它獲得的地址已過期,那麼它將需要經過全部四個步驟才能得到一個IP地址



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