dhcp是dynamichostconfigurationprotocol之縮寫,它的前身是bootp。bootp原本是用於無磁碟主機連線的網路上面的:網路主機使用bootrom而不是磁碟起動並連線上網路,bootp則可以自動地為那些主機設定tcp/ip環境。但bootp有一個缺點:您在設定前須事先獲得客戶端的硬體位址,而且,與ip的對應是靜態的。換而言之,bootp非常缺乏"動態性",若在有限的ip資源環境中,bootp的一對一對應會造成非常可觀的浪費。
dhcp可以說是bootp的增強版本,它分為兩個部份:一個是伺服器端,而另一個是客戶端。所有的ip網路設定資料都由dhcp伺服器集中管理,並負責處理客戶端的dhcp要求;而客戶端則會使用從伺服器分配下來的ip環境資料。比較起bootp,dhcp透過"租約"的概念,有效且動態的分配客戶端的tcp/ip設定,而且,作為相容考量,dhcp也完全照顧了bootpclient的需求。
dhcp的分配形式
首先,必須至少有一臺dhcp工作在網路上面,它會監聽網路的dhcp請求,並與客戶端搓商tcp/ip的設定環境。它提供兩種ip定位方式:
automaticallocation
自動分配,其情形是:一旦dhcp客戶端第一次成功的從dhcp伺服器端租用到ip位址之後,就永遠使用這個位址。
dynamicallocation
動態分配,當dhcp第一次從hdcp伺服器端租用到ip位址之後,並非永久的使用該位址,只要租約到期,客戶端就得釋放(release)這個ip位址,以給其它工作站使用。當然,客戶端可以比其它主機更優先的延續(renew)租約,或是租用其它的ip位址。
動態分配顯然比自動分配更加靈活,尤其是當您的實際ip位址不足的時候,例如:您是一家isp,只能提供200個ip位址用來給撥接客戶,但並不意味著您的客戶最多隻能有200個。因為要知道,您的客戶們不可能全部同一時間上網的,除了他們各自的行為習慣的不同,也有可能是電話線路的限制。這樣,您就可以將這200個位址,輪流的租用給撥接上來的客戶使用了。這也是為什麼當您檢視ip位址的時候,會因每次撥接而不同的原因了(除非您申請的是一個固定ip,通常的isp都可以滿足這樣的要求,這或許要另外收費)。當然,isp不一定使用dhcp來分配位址,但這個概念和使用ippool的原理是一樣的。
dhcp除了能動態的設定ip位址之外,還可以將一些ip保留下來給一些特殊用途的機器使用,它可以按照硬體位址來固定的分配ip位址,這樣可以給您更大的設計空間。同時,dhcp還可以幫客戶端指定router、netmask、dnsserver、winsserver、等等專案,您在客戶端上面,除了將dhcp選項打勾之外,幾乎無需做任何的ip環境設定。
dhcp的工作原理
視乎客戶端是否第一次登入網路,dhcp的工作形式會有所不同。
第一次登入的時候:
1.尋找server。當dhcp客戶端第一次登入網路的時候,也就是客戶發現本機上沒有任何ip資料設定,它會向網路發出一個dhcpdiscover封包。因為客戶端還不知道自己屬於哪一個網路,所以封包的來源位址會為0.0.0.0,而目的位址則為255.255.255.255,然後再附上dhcpdiscover的資訊,向網路進行廣播。
在windows的預設情形下,dhcpdiscover的等待時間預設為1秒,也就是當客戶端將第一個dhcpdiscover封包送出去之後,在1秒之內沒有得到迴應的話,就會進行第二次dhcpdiscover廣播。若一直得不到迴應的情況下,客戶端一共會有四次dhcpdiscover廣播(包括第一次在內),除了第一次會等待1秒之外,其餘三次的等待時間分別是9、13、16秒。如果都沒有得到dhcp伺服器的迴應,客戶端則會顯示錯誤資訊,宣告dhcpdiscover的失敗。之後,基於使用者的選擇,系統會繼續在5分鐘之後再重複一次dhcpdiscover的過程。
2.提供ip租用位址。當dhcp伺服器監聽到客戶端發出的dhcpdiscover廣播後,它會從那些還沒有租出的位址範圍內,選擇最前面的的空置ip,連同其它tcp/ip設定,迴應給客戶端一個dhcpoffer封包。
由於客戶端在開始的時候還沒有ip位址,所以在其dhcpdiscover封包內會帶有其mac位址資訊,並且有一個xid編號來辨別該封包,dhcp伺服器迴應的dhcpoffer封包則會根據這些資料傳遞給要求租約的客戶。根據伺服器端的設定,dhcpoffer封包會包含一個租約期限的資訊。
3.接受ip租約。如果客戶端收到網路上多臺dhcp伺服器的迴應,只會挑選其中一個dhcpoffer而已(通常是最先抵達的那個),並且會向網路傳送一個dhcprequest廣播封包,告訴所有dhcp伺服器它將指定接受哪一臺伺服器提供的ip位址。
同時,客戶端還會向網路傳送一個arp封包,查詢網路上面有沒有其它機器使用該ip位址;如果發現該ip已經被佔用,客戶端則會送出一個dhcpdecline封包給dhcp伺服器,拒絕接受其dhcpoffer,並重新發送dhcpdiscover資訊。
dhcp是dynamichostconfigurationprotocol之縮寫,它的前身是bootp。bootp原本是用於無磁碟主機連線的網路上面的:網路主機使用bootrom而不是磁碟起動並連線上網路,bootp則可以自動地為那些主機設定tcp/ip環境。但bootp有一個缺點:您在設定前須事先獲得客戶端的硬體位址,而且,與ip的對應是靜態的。換而言之,bootp非常缺乏"動態性",若在有限的ip資源環境中,bootp的一對一對應會造成非常可觀的浪費。
dhcp可以說是bootp的增強版本,它分為兩個部份:一個是伺服器端,而另一個是客戶端。所有的ip網路設定資料都由dhcp伺服器集中管理,並負責處理客戶端的dhcp要求;而客戶端則會使用從伺服器分配下來的ip環境資料。比較起bootp,dhcp透過"租約"的概念,有效且動態的分配客戶端的tcp/ip設定,而且,作為相容考量,dhcp也完全照顧了bootpclient的需求。
dhcp的分配形式
首先,必須至少有一臺dhcp工作在網路上面,它會監聽網路的dhcp請求,並與客戶端搓商tcp/ip的設定環境。它提供兩種ip定位方式:
automaticallocation
自動分配,其情形是:一旦dhcp客戶端第一次成功的從dhcp伺服器端租用到ip位址之後,就永遠使用這個位址。
dynamicallocation
動態分配,當dhcp第一次從hdcp伺服器端租用到ip位址之後,並非永久的使用該位址,只要租約到期,客戶端就得釋放(release)這個ip位址,以給其它工作站使用。當然,客戶端可以比其它主機更優先的延續(renew)租約,或是租用其它的ip位址。
動態分配顯然比自動分配更加靈活,尤其是當您的實際ip位址不足的時候,例如:您是一家isp,只能提供200個ip位址用來給撥接客戶,但並不意味著您的客戶最多隻能有200個。因為要知道,您的客戶們不可能全部同一時間上網的,除了他們各自的行為習慣的不同,也有可能是電話線路的限制。這樣,您就可以將這200個位址,輪流的租用給撥接上來的客戶使用了。這也是為什麼當您檢視ip位址的時候,會因每次撥接而不同的原因了(除非您申請的是一個固定ip,通常的isp都可以滿足這樣的要求,這或許要另外收費)。當然,isp不一定使用dhcp來分配位址,但這個概念和使用ippool的原理是一樣的。
dhcp除了能動態的設定ip位址之外,還可以將一些ip保留下來給一些特殊用途的機器使用,它可以按照硬體位址來固定的分配ip位址,這樣可以給您更大的設計空間。同時,dhcp還可以幫客戶端指定router、netmask、dnsserver、winsserver、等等專案,您在客戶端上面,除了將dhcp選項打勾之外,幾乎無需做任何的ip環境設定。
dhcp的工作原理
視乎客戶端是否第一次登入網路,dhcp的工作形式會有所不同。
第一次登入的時候:
1.尋找server。當dhcp客戶端第一次登入網路的時候,也就是客戶發現本機上沒有任何ip資料設定,它會向網路發出一個dhcpdiscover封包。因為客戶端還不知道自己屬於哪一個網路,所以封包的來源位址會為0.0.0.0,而目的位址則為255.255.255.255,然後再附上dhcpdiscover的資訊,向網路進行廣播。
在windows的預設情形下,dhcpdiscover的等待時間預設為1秒,也就是當客戶端將第一個dhcpdiscover封包送出去之後,在1秒之內沒有得到迴應的話,就會進行第二次dhcpdiscover廣播。若一直得不到迴應的情況下,客戶端一共會有四次dhcpdiscover廣播(包括第一次在內),除了第一次會等待1秒之外,其餘三次的等待時間分別是9、13、16秒。如果都沒有得到dhcp伺服器的迴應,客戶端則會顯示錯誤資訊,宣告dhcpdiscover的失敗。之後,基於使用者的選擇,系統會繼續在5分鐘之後再重複一次dhcpdiscover的過程。
2.提供ip租用位址。當dhcp伺服器監聽到客戶端發出的dhcpdiscover廣播後,它會從那些還沒有租出的位址範圍內,選擇最前面的的空置ip,連同其它tcp/ip設定,迴應給客戶端一個dhcpoffer封包。
由於客戶端在開始的時候還沒有ip位址,所以在其dhcpdiscover封包內會帶有其mac位址資訊,並且有一個xid編號來辨別該封包,dhcp伺服器迴應的dhcpoffer封包則會根據這些資料傳遞給要求租約的客戶。根據伺服器端的設定,dhcpoffer封包會包含一個租約期限的資訊。
3.接受ip租約。如果客戶端收到網路上多臺dhcp伺服器的迴應,只會挑選其中一個dhcpoffer而已(通常是最先抵達的那個),並且會向網路傳送一個dhcprequest廣播封包,告訴所有dhcp伺服器它將指定接受哪一臺伺服器提供的ip位址。
同時,客戶端還會向網路傳送一個arp封包,查詢網路上面有沒有其它機器使用該ip位址;如果發現該ip已經被佔用,客戶端則會送出一個dhcpdecline封包給dhcp伺服器,拒絕接受其dhcpoffer,並重新發送dhcpdiscover資訊。