DHCP以及客戶端是如何避免IP衝突

原文地址:http://www.xzbu.com/8/view-7133510.htm

1 DHCP簡單回顧
  1.1 什麼是DHCP
  DHCP (Dynamic Host Configuration Protocol)是一種動態的向終端提供IP地址、網關、DNS等配置參數的協議。DHCP協議由BOOTP(Bootstrap Protocol)協議發展而來,旨在降低大規模網絡中人爲配置工作量大、容易出現地址衝突等問題。達到簡化IP地址配置,實現IP地址集中管理的目的。DHCP基於UDP協議,Client端口號是68,DHCP Server端口號是67。
  1.2 IP地址的分配順序
DHCP Server向Client分配IP地址的先後順序如下:
1、分配管理員配置了與Client mac地址靜態綁定的IP地址;
2、分配Client曾經使用過的IP地址;
3、在地址池中順序查找可供分配的IP地址,找到之後分配給Client。
無論是管理員手工分配IP地址,還是通過DHCP自動分配,非常重要的一個原則就是不能出現地址分配衝突的情況。

2 IP地址分配衝突避免
  2.1 IP地址申請及分配案例
   下面通過一個實驗給出DHCP協議在動態分配IP地址時是如何保證不出現地址衝突的。
  2.1.1 試驗案例
   R1、R2、R3共處於一個廣播網絡中,其中R1作爲DHCP Server,R2配置靜態IP地址100.1.1.2,R3爲Client,通過DHCP動態獲取IP地址。
   下面通過詳細分析DHCP Server與Client之間是如何保證分配出去的地址不產生衝突的,試驗不考慮靜態IP地址綁定的場景。
  2.1.2 DHCP Server的實現
  按照協議規定,Client在申請IP地址時,會在它的本地物理子網上廣播一個DHCPDISCOVER報文,用以尋找一個可用的DHCP Server。DHCP Server會通過DHCPOFFER報文迴應Client,並攜帶一個可用的IP地址。在發送DHCPOFFER報文之前,DHCP Server有義務保證這個IP地址沒有被網絡上其他的設備佔用,從而出現IP地址衝突。DHCP Server會向該IP地址發送ICMP echo request報文來檢驗該IP是否被佔用(即發起一個ping的過程)。如果被佔用,按照前文提及的IP地址分配順序重新分配,並且再次重複IP地址衝突檢測。DHCP Server(R1:100.1.1.1)在發送DHCPOFFER報文之前,先向100.1.1.2發送了ICMP echo request報文,因爲這個地址已經被配置在R2上了,因此R2向DHCP Server回覆了ICMP Echo reply報文。之後DHCP Server繼續向100.1.1.3發送ICMP echo request,連續兩個ICMP echo request報文未收到對端回覆,其認爲這個地址沒有被佔用,於是通過DHCPOFFER向Client(R3)提供100.1.1.3供其選擇使用。
  2.1.3 Client的實現
  現實網絡往往比試驗環境複雜很多,在上一個過程中,如果R2配置了ACL,禁止ICMP echo request訪問,則不會響應DHCP Server的ping請求。
然而在這個過程中,因爲DHCP Server沒有檢查出100.1.1.2這個地址已經被網絡中的R2佔用,如果Client最終選擇使用100.1.1.2這個IP地址,就會同R2出現地址衝突,這顯然是無法滿足需求的。
  實際在最後的確認階段,當Client收到DHCP Server發送的DHCPACK報文之後,並不會馬上使用Server分配的這個地址,而是會發送目的地址爲Server分配地址的ARP請求報文作最後的確認(即免費ARP)。
如果沒有檢測到衝突,則將此地址與自己綁定。如果檢測到衝突,就向DHCP Server發送DHCPDECLINE報文,在Request IP Address(option 50)字段填入Server提供的發生衝突的IP地址。
發送完成後,等待一段時間再開始重新申請IP地址,直至申請到一個可用的IP地址。

3 小結
  由上述分析可知,在DHCP協議中,DHCP Server與Client分別通過不同的方式,在各自流程階段進行IP地址衝突檢測,以確保分配到真實可用的IP地址。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章