DHCP (Dynamic Host Configuration Protocol,動態主機配置協議)是一個局域網的網絡協議,使用UDP協議工作, 主要有兩個用途:給內部網絡或網絡服務供應商自動分配IP地址,給用戶或者內部網絡管理員作為對所有計算機作中央管理的手段,在RFC 2131中有詳細的描述。DHCP有3個端口,其中UDP67和UDP68為正常的DHCP服務端口,分別作為DHCP Server和DHCP Client的服務端口;546號端口用于DHCPv6 Client,而不用于DHCPv4,是為DHCP failover服務,這是需要特別開啟的服務,DHCP failover是用來做“雙機熱備”的。
BOOTP 引導程序協議(BOOTP)是一個基于IP/UDP協議的協議,它可以讓無盤站從一個中心服務器上獲得IP地址,為局域網中的無盤工作站分配動態IP地址,并不需要每個用戶去設置靜態IP地址。使用BOOTP協議的時候,一般包括Bootstrap Protocol Server(自舉協議服務端)和Bootstrap Protocol Client(自舉協議客戶端)兩部分。
目前路由器進行IP指派主要有DHCP和BOOTP,DHCP也就是動態主機分配協議,它的前身是BOOTP,BOOTP原本是用于無磁盤主機連接的網絡上面的,以下分析這兩種方式的不同之處。
一、DHCP可以說是BOOTP的增強版本,它分為兩個部份:一個是服務器端,而另一個是客戶端 。所有的IP網絡設定數據都由DHCP服務器集中管理,并負責處理客戶端的DHCP要求;而客戶端則會使用從服務器分配下來的IP環境數據。比較起BOOTP,DHCP透過"租約"的概念,有效且動態的分配客戶端的TCP/IP設定,而且,作為兼容考慮,DHCP也完全照顧了BOOTP Client的需求。
二、必須至少有一臺DHCP工作在網絡上面,它會監聽網絡的DHCP請求,并與客戶端搓商TCP/IP的設定環境 。它提供兩種IP定位方式:
1、自動分配,其情形是:一旦DHCP客戶端第一次成功的從DHCP服務器端租用到IP地址之后,就永遠使用這個地址。
2、動態分配,當DHCP第一次從HDCP服務器端租用到IP地址之后,并非永久的使用該地址,只要租約到期,客戶端就得釋放(release)這個IP地址,以給其它工作站使用。當然,客戶端可以比其它主機更優先的更新(renew)租約,或是租用其它的IP地址。
三、DHCP除了能動態的設定IP地址之外,還可以將一些IP保留下來給一些特殊用途的機器使用 ,它可以按照硬件地址來固定的分配IP地址,這樣可以給您更大的設計空間。
同時,DHCP還可以幫客戶端指定router、netmask、DNS Server、WINS Server、等等項目,您在客戶端上面,除了將DHCP選項打勾之外,幾乎無需做任何的IP環境設定。
四、尋找Server, 當DHCP客戶端第一次登錄網絡的時候,也就是客戶發現本機上沒有任何IP數據設定,它會向網絡發出一個DHCP DISCOVER封包。
因為客戶端還不知道自己屬于哪一個網絡,所以封包的來源地址會為0.0.0.0,而目的地址則為255.255.255.255,然后再附上DHCP discover的信息,向網絡進行廣播。
五、提供IP租用地址。 當DHCP 服務器監聽到客戶端發出的 DHCP discover 廣播后,它會從那些還沒有租出的地址范圍內,選擇最前面的空置IP,連同其它TCP/IP設定,響應給客戶端一個DHCP OFFER封包,由于客戶端在開始的時候還沒有IP地址,所以在其DHCP discover封包內會帶有其MAC地址信息。
六、接受IP租約。如果客戶端收到網絡上多臺DHCP服務器的響應,只會挑選其中一個DHCP offer而已,并且會向網絡發送一個DHCP request廣播封包,告訴所有DHCP服務器它將指定接受哪一臺服務器提供的IP地址,客戶端還會向路由器發送一個ARP封包,查詢網絡上面有沒有其它機器使用該IP地址;如果發現該IP已經被占用,客戶端則會送出一個DHCPDECLINE封包給DHCP服務器,拒絕接受其DHCP offer,并重新發送DHCP discover信息。
七、當DHCP服務器接收到客戶端的DHCP request之后,會向客戶端發出一個DHCPACK響應 ,以確認IP租約的正式生效,也就結束了一個完整的DHCP工作過程,一旦DHCP客戶端成功地從服務器哪里取得DHCP租約之后,除非其租約已經失效并且IP地址也重新設定回0.0.0.0,否則就無需再發送DHCP discover信息了,而會直接使用已經租用到的IP地址向之前之DHCP服務器發出DHCP request信息,DHCP服務器會盡量讓客戶端使用原來的IP地址,如果沒問題的話,直接響應DHCPack來確認則可。
從前面描述的過程中,我們不難發現:DHCDISCOVER是以廣播方式進行的,其情形只能在同一網絡之內進行,因為router是不會將廣播傳送出去的。但如果DHCP服務器安設在其它的網絡上面呢?
由于DHCP客戶端還沒有IP環境設定,所以也不知道Router地址,而且有些Router也不會將DHCP廣播封包傳遞出去,因此這情形下DHCP DISCOVER是永遠沒辦法抵達DHCP服務器那端的,當然也不會發生OFFER及其它動作了。