DHCP與BOOTP有什麼區別

2022-04-01 12:24:40 字數 4197 閱讀 2533

文章出處:

什麼是dhcp?

dhcp是dynamic host configuration protocol(動態主機分配協議)縮寫,它的前身是bootp。bootp原本是用於無磁碟主機連線上的網路上面的:網路主機使用boot rom而不是磁碟啟動並連線上網路,bootp則可以自動地為那些主機設定tcp/ip環境。但bootp有乙個缺點」,若在有限的ip資源環境中,bootp的一對一對應會造成非常可觀的浪費。

dhcp可以說是bootp的增強版本,它分為兩個部分:乙個是伺服器端,而另乙個是客戶端。所有的ip網路設定資料都由dhcp伺服器集中管理,並負責處理客戶端的dhcp要求;而客戶端則會使用從伺服器分配下來的ip環境資料。比較bootp, dhcp透過「租約」的概念,有效且動態的分配客戶端的tcp/ip設定,而且,作為相容考慮,dhcp也完全照顧了bootp client的需求。

dhcp的分配形式

首先,必須至少有一台dhcp工作在網路上面,它會監聽網路的dhcp請求,並與客戶端磋商tcp/ip的設定環境。它提供兩種ip定位方式:

automatic allocation

dynamic allocation

動態分配,當dhcp第一次從dhcp伺服器租用到ip位址之後,並非永久的使用該位址,只要租約到期,客戶端就得釋放(release)這個ip位址,以給其他董作站使用。當然,客戶端可以比其它主機更優先的更新(renew)租約,或是租用其它的ip位址。

動態分配顯然比自動分配更加靈活,尤其是當您的實際ip位址不足的時候,例如:您是一家isp,只能提供200個ip位址用來給撥接客戶,但並不意味著您 的客戶最多只能有200個。因為要知道,您的客戶們不可能全部同一時間上網的,除了他們各自的行為習慣的不同,也有可能是**線路的限制。這樣,您就可以 將這200個位址,輪流的租用給撥接上來的客戶使用了。這也是為什麼當您檢視ip位址的時候,會因每次撥接而不同的原因了(除非您申請的是乙個固定ip, 通常isp都可以滿足這樣的要求,這或許要另外收費)。當然,isp不一定使用dhcp來分配位址,但這個概念和使用ip pool的原理是一樣的。

dhcp除了能動態的設定ip位址之外,還可以將一些ip保留下來給一些特殊用途的機器使用,它可以按照硬體位址來固定的分配ip位址,這樣可以給你更大的設計空間。同時,dhcp還可以幫客戶指定router、netmask、dns server、wins server等等專案,您在客戶端上面,除了將dhcp選項打勾之外,幾乎無需任何的ip環境設定。

dhcp的工作原理

根據客戶端是否第一次登入網路,dhcp的工作形式會有所不同。

第一次登入的時候:

尋找server。當dhcp客戶端第一次登入網路的時候,也就是客戶發現本機上沒有任何ip資料設定,它會向網路發出乙個dhcp discover封包。因為客戶端還不知道自己屬於哪乙個網路,所有封包的**位址會為0.0.0.0,而目的位址則為255.255.255.255,然後再附上dhcp

discover的資訊,向網路進行廣播。

在windows的預設情形下,dhcp discover 的等待時間預設為1秒,也就是當客戶端將第乙個dhcp discover封包送出去之後,在1秒之內沒有得到響應的話,就會進行第二次dhcp discover廣播。若一直得不到響應的情況下,客戶端一共會有四次dhcp discover廣播(包括第一次在內),除了第一次會等待1秒外,其餘三次的等待時間分別是9、13、16秒。如果都沒有得到dhcp伺服器的響應,客戶端則會顯示錯誤資訊,宣告dhcp discover的失敗。之後,基於使用者的選擇,系統會繼續在5分鐘之後再重複一次dhcp discover的過程。

提供ip租用位址。當dhcp伺服器監聽到客戶端發出的dhcp discover廣播後,它會從那些還沒有租出的位址範圍內,選擇最前面的空置ip,連同其它tcp/ip設定,響應給客戶端乙個dhcp offer封包。

由於客戶端在開始的時候沒有ip位址,所以在其dhcp

discover封包內會帶有其mac位址資訊,並且有乙個xid編號來辨別該封包,dhcp伺服器響應的dhcp

offer封包則會根據這些資料傳遞給要求租約的客戶。根據伺服器端的設定,dhcp offer封包會包含乙個租約期限的資訊。

接收ip租約。如果客戶端收到網路上多台dhcp伺服器的響應,只會挑選其中乙個dhcp offer而已(通常是最先抵達的那個),並且會向網路傳送乙個dhcp

request廣播封包,告訴所有dhcp伺服器它將指定接收哪一台伺服器提供的ip位址。

同時,客戶端還會向網路傳送乙個arp封包,查詢網路上面有沒有其它機器使用該ip位址;如果發現該ip已經被占用,客戶端則會送出乙個dhcp

decline封包給dhcp伺服器,拒絕接受其dhcp offer,並重新傳送dhcp discover資訊。

事實上,並不是所有dhcp客戶端都會無條件接受dhcp伺服器的offer,尤其這些主機安裝有其它tcp/ip相關的客戶軟體。客戶端也可以用dhcp request向伺服器提出dhcp選擇,而這些選擇會以不同的號碼填寫在dhcp option field裡面:

換一句話說,在dhcp伺服器上面的設定,未必是客戶端全都接受,客戶端可以保留自己的一些tcp/ip設定。而主動權永遠在客戶端這邊。

租約確認。當dhcp伺服器接收到客戶端的dhcp request之後,會向客戶端發出乙個dhcp ack響應,以確認ip租約的正式生效,也就結束了乙個完整的dhcp工作過程。

dhcp發放流程

第一次登入之後:

一旦dhcp客戶端成功地從伺服器那裡取得dhcp租約之後,除非其租約已經失效並且ip位址也重新設定回0.0.0.0,否則就無需再傳送dhcp discover資訊了,而會直接使用已經租用到的ip位址向之前的dhcp伺服器發出dhcp request資訊,dhcp伺服器會盡量讓客戶端使用原來的ip位址,如果沒問題的話,直接響應dhcp ack來確認則可。如果該位址已經失效或已經被其他機器使用了,伺服器則會響應乙個dhcp nack封包給客戶端,要求其重新執行dhcp discover。

至於ip的租約期限確實非常考究的,並非如我們租房子那樣簡單,以nt為例子:dhcp工作站除了在開機的時候發出dhcp request請求之外,在租約期限一半的時候也會發出dhcp request,如果此時得不到dhcp伺服器確認的話,工作站還可以繼續使用該ip;然後在剩下的租約期限的再一半的時候(即租約的75%),還得不到 確認的話,那麼工作站就不能擁有這個ip了。至於為什麼不是到租約期限完全結束才放棄ip呢?對不起,小弟也是不學無術之人,沒有去深究了,只知道要回答 mcse題目的時候,您一定要記得nt是這麼工作就是了。

要是您想退租,可以隨時送出dhcp release命令解約,就算您的租約在前一秒鐘才獲得的。

跨網路的dhcp運作

從前面描述的過程中,我們不難發現:dhcp discover是以廣播方式進行的,其請求只能在同一網路之內進行,因為router是不會將廣播傳送出去的。但如果dhcp伺服器安設在其它的網路上 面呢?由於dhcp客戶端還沒有ip環境設定,所以也不知道router位址,而且有些router也不會將dhcp廣播封包傳遞出去,因此這情形下 dhcp discover是永遠沒辦法抵達dhcp伺服器那端的,當然也不會發生 ,offer及其它動作了。要解決這個問題,我們可以用dhcp agent( 或 dhcp proxy )主機來接管客戶的dhcp請求,然後將此請求傳遞給真正的dhcp伺服器,然後將伺服器的回覆傳給客戶。這裡proxy主機必須自己具有路由能力,且能將雙方的封包互傳對方。

若不使用proxy,您也可以在每乙個網路之中安裝dhcp伺服器,但這樣的話,一來裝置成本會增加,而且管理上面也比較分散。當然嘍,如果在乙個十分大型的網路中,正陽的均衡式構架還是可取的。視您的實際情況而定了。

67和68 bootp和dhcp

udp上的bootp/dhcp: 通常dsl和cable-modem的防火牆常會看見大量傳送到廣播位址255.255.255.255的資料。這些機器在向dhcp伺服器請求乙個位址 分配。hacker常進入它們分配乙個位址把自己作為區域性路由器而發起大量的「中間人」(man-in-middle)攻擊。客戶端向68埠 (bootps)廣播請求配置,伺服器向67埠(bootpc)廣播回應請求。這種回應使用廣播是因為客戶端還不知道可以傳送的ip位址。

dhcp與bootp的不同點在於,bootp也可以完成給主機分配ip位址的任務,但它要求主機的硬體位址必須被手工輸入到bootp表中。可以講 dhcp看成乙個動態的bootp。但是,要記住的是,bootp還可以將用來引導主機的作業系統傳送給主機。而dhcp不可以。

與 有什麼區別

一 簡要說明 按位與 a b是把a 和b都轉換成二進位制數然後再進行與的運算 邏輯與 a b 就是當且僅當兩個運算元均為 true 時,其結果才為 true 只要有乙個為零,a b 就為零。例如 a b 9 8 1001 1000 結果是1000 a b 9 8 結果是1 對每乙個都判斷 只要前面是...

與 有什麼區別

按位與 a b是把a和b都轉換成二進位制數然後再進行與的運算 邏輯與 a b就是當且僅當兩個運算元均為 true時,其結果才為 true 只要有乙個為零,a b就為零。例如 a b 9 8 1001 1000 結果是1000 a b 9 8 結果是1 對每乙個都判斷 只要前面是false就輸出fal...

與 有什麼區別

一 簡要說明 按位與 a b是把a和b都轉換成二進位制數然後再進行與的運算 邏輯與 a b就是當且僅當兩個運算元均為 true時,其結果才為 true 只要有乙個為零,a b就為零。例如 a b 9 8 1001 1000 結果是1000 a b 9 8 結果是1 對每乙個都判斷 只要前面是fals...