圖1
2.提供階段,即DHCP服務器提供IP地址的階段。在網絡中接收到DHCP discover發現信息的DHCP服務器都會做出響應,它從尚未出租的IP地址中挑選一個分配給DHCP客戶機,向DHCP客戶機發送一個包含出租的IP地址和其他設置的DHCP offer提供信息(如圖2)。
圖2
3.選擇階段,即DHCP客戶機選擇某臺DHCP服務器提供的IP地址的階段。如果有多臺DHCP服務器向DHCP客戶機發來的DHCP offer提供信息,則DHCP客戶機只接受第一個收到的DHCP offer提供信息,然后它就以廣播方式回答一個DHCP request請求信息,該信息中包含向它所選定的DHCP服務器請求IP地址的內容。之所以要以廣播方式回答,是為了通知所有的DHCP服務器,他將選擇某臺DHCP服務器所提供的IP地址(如圖3)。
圖3
4.確認階段,即DHCP服務器確認所提供的IP地址的階段。當DHCP服務器收到DHCP客戶機回答的DHCP request請求信息之后,它便向DHCP客戶機發送一個包含它所提供的IP地址和其他設置的DHCP ack確認信息,告訴DHCP客戶機可以使用它所提供的IP地址。然后DHCP客戶機便將其TCP/IP協議與網卡綁定,另外,除DHCP客戶機選中的服務器外,其他的DHCP服務器都將收回曾提供的IP地址(如圖4)。
圖4
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)??腿苏f:“好吧,我要一份漢堡”(DHCP request,這個客人比較死板,總是選擇第一次聽到的食物),端著漢堡的服務員回應了一聲:“來啦”(DHCP ack),并把食物端到客人面前,供其享用(將網卡和IP地址綁定)??腿讼麓蝸淼臅r候,就直接找上次那個服務員點自己喜歡的漢堡了(DHCP request),如果還有漢堡,服務員會再次確認并上菜(DHCP ack),而如果已經賣完了,服務員則會告訴客人:“不好意思,已經賣完了”(DHCP nack)。當然,服務員隔一段時間會來收拾一次桌子,除非客人特別說明這菜還要繼續吃的,服務員會將剩菜端走。
接下來,我們就向大家說明如何在服務器上配置DHCP服務,我們選取了兩種最為常見的服務器操作系統 Windows 2000 Server和Linux作為講解實例,另外我們還會介紹如何在常見的網絡設備上配置DHCP。
Windows 2000 Server
Windows 2000 Server在DHCP上下了很大的功夫,不僅解決了NT 4.0中的種種問題,而且還增加了許多新的特性。例如和DNS的集成,加強的DHCP監視和管理,DHCP集群服務器,DHCP目錄授權等等。
下面是在Windows2000中配置DHCP服務的實例
1.安裝DHCP服務。用管理員賬號登錄,在控制面板中雙擊“添加/刪除程序”,選擇“添加/刪除Windows組件”,啟動Windows組件向導,選中“網絡服務”,單擊“詳細信息”,選中“動態主機分配協議”,單擊“確定”,即可在該服務器上安裝DHCP服務。
2.要想使剛安裝的DHCP服務器能為客戶機分配IP地址,必須首先在域中為該服務器授權。使用管理員賬號登錄計算機,在“管理工具”菜單中打開DHCP控制臺;在控制樹中,右鍵單擊想要授權的服務器,在彈出菜單中,單擊“授權”,即可完成對該服務器的授權。
小知識:授權(Authorize),這個功能非常實用和必要,因為在舊版本的DHCP服務器中任何用戶都可以創建一臺DHCP服務器,該服務器也可以為用戶分配IP地址,這樣就可能造成地址沖突,在Windows 2000 Server中這個問題得到了有效的解決:任何DHCP服務器只有在目錄服務中被授權之后才能為客戶分配IP地址,否則即使該服務器收到租用請求,也不能為客戶機分配IP地址。
3. 創建并配置作用域。在控制樹中,右鍵單擊要用來分配地址的服務器,選中“新建作用域”,在接下來的向導中,依次設置作用域名、作用域的起始地址、輸入子網掩碼、排除的地址或地址范圍、DHCP租約期限信息。名稱項只是作提示用,可填任意內容。IP地址范圍中有起始地址、結束地址和子網掩碼的選項,我們可以分別填入10.0.0.1,10.255.255.254,255.0.0.0(如圖1)。如果有必要,可在后面的選項中輸入要保留的IP地址或IP地址范圍。租約期限選項可設定DHCP服務器所分配的IP地址的有效期,比如設8天。最后,分配好DNS、WINS服務器,并激活作用域。
設置IP地址范圍
RedHat Linux
在Linux上配置DHCP需要的文件有/etc/dhcpd.conf,/var/state/dhcp/
dhcpd.leases,相關工具有/etc/rc.d/init.d/dhcpd。下面是在RedHat Linux上配置DHCP的實例:
1.設置DHCP服務器的FQDN名
option domain-name "clinet.com"
2.設置DNS的服務器地址
option domain-name-servers 10.1.1.1;
3.設置子網掩碼
option subnet-mask 255.255.0.0;
4.設置租約時間
如果客戶端不能請求一個指定的租用期,就使用該參數來定義該地址租用的時間長度default-lease-time 1200;
如果客戶端可以請求一個制訂的租用期,就使用該命令來定義最長的租用時間 max-lease-time 87600
5.設置子網的網段及相關范圍配置
subnet 10.0.0.0 netmask 255.0.0.0;
{
range 10.0.0.2 10.10.10.10 ;//指定子網的IP范圍
option broadcast-address 10.0.0.255;//指定子網的廣播地址
option routers 10.0.0.1;//指定網關的IP
}
6.給客戶綁定靜態IP
host clinet{
hardware ethernet 00:50:BA:CA:2E:D2;
fixed-address 10.10.10.10;
}
網絡設備
有時候,在一些中高端的網絡設備(路由器、交換機)上已經集成了DHCP服務,我們便可以在網絡設備上實現DHCP服務,不使用專門的主機做DHCP服務器,以節省成本。
下面是在cisco路由器上配置DHCP的實例
1. 指定不自動分配的IP地址范圍
ip dhcp excluded-address 10.1.1.1 10.1.1.19 //指定從10.1.1.1到10.1.1.19的IP地址是手工分配的
2. 設置DHCP地址池
ip dhcp pool global //這條命令指定了DHCP地址池的名稱
network 10.1.0.0 255.255.0.0//動態分配的IP地址范圍,這里是10.1.0.0網段所有的IP地址(前面指定的非自動分配地址除外)
3. 設置DHCP附加信息
domain-name client.com//為客戶機配置域后綴
dns-server 10.1.1.1 10.1.1.2//為客戶機配置DNS服務器的地址,這里是10.1.1.1和10.1.1.2
netbios-name-server 10.1.1.5 10.1.1.6//為客戶機配置WINS服務器地址,這里是10.1.1.5和10.1.1.6
netbios-node-type h-node//為客戶機配置節點模式(影響名稱解釋的順利?如h-node是先通過wins服務器解釋)
default-router 10.1.0.100 10.1.0.101//為客戶機配置默認網關
4. 設置租約期限
lease 8//設置租約時間為8天
5.有時候我們需要為DHCP服務器設置子地址池,例如我們希望10.1.1.0/24這個網段的客戶機的網關為10.1.1.100,我們這樣設置:
ip dhcp pool subglobal
network 10.1.1.0 255.255.255.0// global的子地址池,將從global繼承域名等選項
default-router 10.1.1.100 10.1.1.101 //為客戶機配置默認網關
6. 相關的DHCP調試命令
no service dhcp //停止DHCP服務
show ip dhcp binding//顯示地址分配情況
show ip dhcp conflict //顯示地址沖突情況。