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