深論DHCP服務(wù)器和客戶端的IP分配
在對(duì)DHCP協(xié)議學(xué)習(xí)的過程中,我們可能發(fā)現(xiàn)了不少值得注意的地方,尤其是DHCP服務(wù)器的使用,在很多方面都有所關(guān)注的重點(diǎn)問題。那么這里我們主要介紹DHCP服務(wù)器是如何為DHCP客戶端自動(dòng)分配IP地址,以及DHCP服務(wù)在跨子網(wǎng)中是如何實(shí)施DHCP中繼代理的。
一 DHCP服務(wù)的自動(dòng)IP地址分配原理
DHCP使用客戶端/服務(wù)器(Client/Server)模型。網(wǎng)絡(luò)管理員建立一個(gè)或多個(gè)維護(hù)TCP/IP配置信息,并將其提供給客戶端的DHCP服務(wù)器。服務(wù)器數(shù)據(jù)庫(kù)包含以下信息。
網(wǎng)絡(luò)上所有客戶端的有效配置參數(shù)。
在指派到客戶端的地址池中維護(hù)的有效IP地址,以及用于手動(dòng)指派的保留地址。
服務(wù)器提供的租約持續(xù)時(shí)間。
通過在網(wǎng)絡(luò)上安裝和配置DHCP服務(wù)器,啟用DHCP的客戶端可在每次啟動(dòng)并加入網(wǎng)絡(luò)時(shí)動(dòng)態(tài)地獲得其IP地址和相關(guān)配置參數(shù)。DHCP服務(wù)器以地址租約的形式將該配置提供給發(fā)出請(qǐng)求的客戶端。
在以下3種情況下,DHCP客戶機(jī)將申請(qǐng)一個(gè)新的IP地址。
計(jì)算機(jī)***次以DHCP客戶機(jī)的身份啟動(dòng)。
DHCP客戶機(jī)的IP地址因某種原因(如租約期到了,或斷開連接了)已經(jīng)被服務(wù)器收回,并提供給其他DHCP客戶機(jī)使用。
DHCP客戶機(jī)自行釋放已經(jīng)租用的IP地址,要求使用一個(gè)新的IP地址。 DHCP客戶機(jī)申請(qǐng)一個(gè)新的IP地址的總體過程如圖6所示。其具體的過程如下。
(1)DHCP客戶機(jī)設(shè)置為"自動(dòng)獲得IP地址"后,因?yàn)檫€沒有IP地址與其綁定,此時(shí)稱為處于"未綁定狀態(tài)"。這時(shí)的DHCP客戶機(jī)只能提供有限的通信能力,如可以發(fā)送和廣播消息,但因?yàn)闆]有自己的IP地址,所以自己無法發(fā)送單播的消息。
(2)DHCP客戶機(jī)試圖從DHCP服務(wù)器那里"租借"到一個(gè)IP地址,這時(shí)DHCP客戶機(jī)進(jìn)入"初始化狀態(tài)"。這個(gè)未綁定IP地址的DHCP客戶機(jī)會(huì)向網(wǎng)絡(luò)上發(fā)出一個(gè)源IP地址為廣播地址0.0.0.0的DHCP探索消息,尋找看哪個(gè)DHCP服務(wù)器可以為它分配一個(gè)IP地址。
(3)子網(wǎng)絡(luò)上的所有DHCP服務(wù)器收到這個(gè)探索消息。各DHCP服務(wù)器確定自己是否有權(quán)為該客戶機(jī)分配一個(gè)IP地址。
(4)確定有權(quán)為對(duì)應(yīng)客戶機(jī)提供DHCP服務(wù)后,DHCP服務(wù)器開始響應(yīng),并向網(wǎng)絡(luò)廣播一個(gè)DHCP提供消息,包含了未租借的IP地址信息以及相關(guān)的配置參數(shù)。
(5)DHCP客戶機(jī)會(huì)評(píng)價(jià)收到的DHCP服務(wù)器提供的消息并進(jìn)行兩種選擇。一是認(rèn)為該服務(wù)器提供的對(duì)IP地址的使用約定(稱為"租約")可以接受,就發(fā)送一個(gè)請(qǐng)求消息,該消息中指定了自己選定的IP地址并請(qǐng)求服務(wù)器提供該租約。還有一種選擇是拒絕服務(wù)器的條件,發(fā)送一個(gè)拒絕消息,然后繼續(xù)從第(1)步開始執(zhí)行。
(6)DHCP服務(wù)器在收到確認(rèn)消息后,根據(jù)當(dāng)前IP地址的使用情況以及相關(guān)配置選項(xiàng),對(duì)允許提供DHCP服務(wù)的客戶機(jī)發(fā)送一個(gè)確認(rèn)消息,其中包含了所分配的IP地址及相關(guān)DHCP配置選項(xiàng)。
(7)客戶機(jī)在收到DHCP服務(wù)器的消息后,綁定該IP地址,進(jìn)入"綁定狀態(tài)"。這樣客戶機(jī)就有了自己的IP地址,就可以在網(wǎng)絡(luò)上進(jìn)行通信了。
二 DHCP中繼代理原理
在大型的網(wǎng)絡(luò)中,可能會(huì)存在多個(gè)子網(wǎng)。DHCP客戶機(jī)通過網(wǎng)絡(luò)廣播消息獲得DHCP服務(wù)器的響應(yīng)后得到IP地址。但廣播消息是不能跨越子網(wǎng)的。因此,如果DHCP客戶機(jī)和服務(wù)器在不同的子網(wǎng)內(nèi),客戶機(jī)還能不能向服務(wù)器申請(qǐng)IP地址呢?這就要用到DHCP中繼代理。DHCP中繼代理實(shí)際上是一種軟件技術(shù),安裝了DHCP中繼代理的計(jì)算機(jī)稱為DHCP中繼代理服務(wù)器,它承擔(dān)不同子網(wǎng)間的DHCP客戶機(jī)和服務(wù)器的通信任務(wù)。
中繼代理是在不同子網(wǎng)上的客戶端和服務(wù)器之間中轉(zhuǎn)DHCP/BOOTP消息的小程序。根據(jù)征求意見文檔(RFC),DHCP/BOOTP中繼代理是DHCP和BOOTP標(biāo)準(zhǔn)和功能的一部分。 #p#
1.路由器的DHCP/BOOTP中繼代理支持
在TCP/IP網(wǎng)絡(luò)中,路由器用于連接稱做"子網(wǎng)"的不同物理網(wǎng)段上使用的硬件和軟件,并在每個(gè)子網(wǎng)之間轉(zhuǎn)發(fā)IP數(shù)據(jù)包。要在多個(gè)子網(wǎng)上支持和使用DHCP服務(wù),連接每個(gè)子網(wǎng)的路由器應(yīng)具有在RFC 1542中描述的DHCP/BOOTP中繼代理功能。
要符合RFC 1542并提供中繼代理支持,每個(gè)路由器必須能識(shí)別BOOTP和DHCP協(xié)議消息并相應(yīng)處理(中轉(zhuǎn))這些消息。由于路由器將DHCP消息解釋為BOOTP消息(例如,通過相同的UDP端口編號(hào)發(fā)送,并包含共享消息結(jié)構(gòu)的UDP消息),具有BOOTP中繼代理能力的路由器可中轉(zhuǎn)網(wǎng)絡(luò)上發(fā)送的DHCP數(shù)據(jù)包和任何BOOTP數(shù)據(jù)包。如果路由器不能作為DHCP/BOOTP中繼代理運(yùn)行,則每個(gè)子網(wǎng)都必須有在該子網(wǎng)上作為中繼代理運(yùn)行的DHCP服務(wù)器或另一臺(tái)計(jì)算機(jī)。如果配置路由器支持DHCP/BOOTP中繼不可行或不可能,您可以通過安裝DHCP中繼代理服務(wù)來配置運(yùn)行Windows NT Server 4.0或更高版本的計(jì)算機(jī)充當(dāng)中繼代理。
在大多數(shù)情況下,路由器支持DHCP/ BOOTP中繼。如果您的路由器不支持,則應(yīng)與路由器制造商或供應(yīng)商聯(lián)系以查明是否有軟件或固件升級(jí)提供對(duì)該功能的支持。
2.中繼代理的工作原理
中繼代理將它連接的其中一個(gè)物理接口(如網(wǎng)卡)上廣播的DHCP/BOOTP消息中轉(zhuǎn)到其他物理接口連至的其他遠(yuǎn)程子網(wǎng)。圖7顯示了子網(wǎng)2上的客戶端C是如何從子網(wǎng)1上的DHCP服務(wù)器1獲得DHCP地址租約的。具體過程如下。
(1)DHCP客戶端C使用眾所周知的UDP服務(wù)器67號(hào)端口在子網(wǎng)2上以"用戶數(shù)據(jù)報(bào)協(xié)議(UDP)"的數(shù)據(jù)報(bào)廣播DHCP/BOOTP查找消息(DHCP DISCOVER)。67號(hào)UDP端口是BOOTP和DHCP服務(wù)器通信所保留和共享的。
(2)中繼代理,在DHCP/BOOTP允許中繼的路由器的情況下,檢測(cè)DHCP/BOOTP消息頭中的網(wǎng)關(guān)IP地址字段。如果該字段有IP地址0.0.0.0,代理文件會(huì)在其中填入中繼代理或路由器的IP地址,然后將消息轉(zhuǎn)發(fā)到DHCP服務(wù)器1所在的遠(yuǎn)程子網(wǎng)1。
(3)遠(yuǎn)程子網(wǎng)1上的DHCP服務(wù)器1收到此消息時(shí),它會(huì)為該DHCP服務(wù)器可用于提供IP地址租約的DHCP作用域檢查其網(wǎng)關(guān)IP地址字段。
(4)如果DHCP服務(wù)器1有多個(gè)DHCP作用域,網(wǎng)關(guān)IP地址字段(GIADDR)中的地址會(huì)標(biāo)識(shí)將從哪個(gè)DHCP作用域提供IP地址租約。
例如,如果網(wǎng)關(guān)IP地址(GIADDR)字段有10.0.0.2的IP地址,DHCP服務(wù)器會(huì)檢查其可用的地址作用域集中是否有與包含作為主機(jī)的網(wǎng)關(guān)地址匹配的地址作用域范圍。在這種情況下,DHCP服務(wù)器將對(duì)10.0.0.1和10.0.0.254之間的地址作用域進(jìn)行檢查。如果存在匹配的作用域,則DHCP服務(wù)器從匹配的作用域中選擇可用地址以便在對(duì)客戶端的IP地址租約提供響應(yīng)時(shí)使用。
(5)當(dāng)DHCP服務(wù)器1收到DHCP DISCOVER消息時(shí),它會(huì)處理IP地址租約(DHCP OFFER)并將其直接發(fā)送給在網(wǎng)關(guān)IP地址(GIADDR)字段中標(biāo)識(shí)的中繼代理。
(6)路由器然后將地址租約(DHCP OFFER)轉(zhuǎn)發(fā)給DHCP客戶端。此時(shí)客戶端的IP地址仍舊無人知道,所以它必須在本地子網(wǎng)上廣播。同樣,根據(jù)RFC 1542,DHCPREQUEST消息從客戶端中轉(zhuǎn)發(fā)服務(wù)器,而DHCPACK消息從服務(wù)器轉(zhuǎn)發(fā)到客戶端。