DHCP

DHCP(Dynamic Host Configuration Protocol)動態主機配置協議,用於分配IP地址。先向Server設置一批可用的IP地址,當Client向Server請求IP地址時,Server能自動地將IP分配給Client。手工配置IP地址麻煩不說,還容易出錯,比如分配了重複的IP地址,當Client端不用IP地址時,該IP地址也不能被及時回收。DHCP解決了這些問題,能保證IP地址不重複分配,能及時回收IP地址以提高IP地址的利用率。管理方便,省時省力。

DHCP工作原理:(4步握手)

1.Client發送DHCP廣播(DHCPDISCOVER)來尋找DHCP Server。網段裏所有安裝了TCP/IP協議的主機都能收到,但只有DHCP Server會響應

2.接收到DHCPDISCOVER的所有DHCP Server都會做出響應,回覆DHCPOFFER(表示我可以爲你提供IP),裏面包含被分配的一個IP地址

3.Client會根據先來先到的原則(ARP是後來先到),選擇收到的第一條DHCPOFFER,並廣播DHCPREQUEST向該DHCP Server其請求IP地址。之所以用廣播而非單播,是因爲能順便通知其他DHCP Server,它已經決定使用某臺DHCP Server提供的IP地址了

4.DHCP Server收到Client的DHCPREQUEST後,回覆DHCPACK

補充以下兩點:

1.以後Client每次重新登錄網絡時,就不需要再發送DHCPDISCOVER重新尋找DHCP Server了,直接發送前一次DHCPREQUEST(內含IP地址)。DHCP Server收到後,如果該IP還能用,將讓Client繼續使用,回覆一個DHCPACK。如果該IP不能用了(以被回收並分配給了他人),將回復一個DHCPNACK。Client收到DHCPNACK後,就需要重新從第一步開始發送DHCPDISCOVER來重新尋找DHCP Server重新獲取新IP地址。

2.DHCP Server分配給Client的IP地址有一個租借期限(默認爲1天),期滿後DHCP Server會回收該IP地址。當Client啓動時間爲租約的50%時,Client會自動向DHCP Server發送更新租約的請求。如果DHCP Server應答,則延期租約。如果DHCP Server沒應答,在租約的87.5%時間點,Client應該與任何一個其它的DHCP Server通信,並請求更新它的配置信息。如果Client不能和所有的DHCP Server取得聯繫,租約到期後,它必須放棄當前的IP地址。並重新從第一步開始發送DHCPDISCOVER來重新尋找DHCP Server重新獲取新IP地址。當然,Client不想用該IP地址時,可以主動向DHCP Server發出DHCPRELEASE,將當前的IP地址釋放。

DHCP報文:

OP :0x01是Client的請求,0x02是Server的應答

HTYPE:硬件類型,1爲以太網,15爲幀中繼,20爲串行線路等

HLEN:硬件地址的長度,以太網爲6

HOPS:跳數,當前的DHCP數據包每經過一個路由器會加1,作用是限制DHCP數據包不要經過太多的路由器

TRANSACTION ID:由Client產生的32位標識符,用來將請求和從DHCP Server得到的回覆匹配

SECONDS:從Client開始嘗試獲取或更新租約用。當有多個Client請求未得到處理時,DHCP Server用該值來確定回覆的優先順序

FLAGS 標誌:只使用16位中的左邊的最高位,代表廣播標誌

ciaddr:當Client想繼續使用之前的IP地址就將其放到這裏,否則爲0

yiaddr:DHCP Server分配給Client的IP地址

siaddr:DHCP Server的IP地址

giaddr:網關的IP地址。跨網段發送DHCP時,需要設置。可以幫助位於不同子網或網絡的Client與DHCP Server間傳輸請求和回覆

chaddr:Client的硬件地址

sname:DHCP Server名,發送DHCPOFFER或DHCPACK時可以選擇性地將其名稱放在此處

file:啓動文件名,Client可以選擇性地在DHCPDISCOVER中使用它來請求特定類型的啓動文件。在DHCP中使用它來完整指定啓動文件目錄和文件名。

Options:包括基本DHCP運作所需的幾個參數(如Netmask / Gateway / DNS等)。該字段長度不定,最長312字節

DHCP配置:

將R1配置爲DHCP Server,其他路由器或終端都從R1中自動獲取IP地址:


配置命令:

先配置一下R1的基本配置:

R1(config)#inter f0/0
R1(config-if)#ip addr 10.1.1.1 255.255.255.0
R1(config-if)#no shutdown
R1(config-if)#inter f2/0
R1(config-if)#ip addr 12.1.1.1 255.255.255.0
R1(config-if)#no shutdown
現在將R1配置爲DHCP Server:

R1(config)#service dhcp		                //啓動DHCP服務,默認是開啓的
R1(config)#ip dhcp pool pool-1	                //新建一個dhcp池,起名pool-1
R1(dhcp-config)#network 10.1.1.0 255.255.255.0	//池中可分配的地址
R1(dhcp-config)#default-router 10.1.1.1	        //默認網關,即和左邊網絡連接的以太口f0/0的IP地址
R1(dhcp-config)#dns-server 8.8.8.8	        //DNS
現在R3可以從R1(DHCP Server)中自動獲取IP地址了:(Client不必非是路由器,如果R3是PC的話,就不必如下配置了,直接將IP地址設置爲自動獲取即可)

R3(config)#inter f0/0
R3(config-if)#ip addr dhcp		//client直接搜索DHCP Server並獲取IP
R3(config-if)#no shutdown
現在可以在DHCP Server上和Client上查看當前DHCP信息:

R1#show ip dhcp pool	  //DHCP Server端這兩條命令查看,IP地址池中信息,哪些已分配掉了
R1#show ip dhcp bingding  //分配給了哪些Client
R3#show dhcp server	  //Client端這兩條命令查看,Client從哪臺Server獲取IP
R3#show dhcp lease        //IP租約    
R3(Client)從R1(DHCP Server)自動獲取到IP地址,如果你不想IP地址經常變,想固定R3的IP地址(如固定爲10.1.1.13),可以:

R1#show ip dhcp bingding		   //找到R3的標識
R1(config)#ip dhcp pool pool-R3		   //新建一個dhcp池,起名pool-R3
R1(dhcp-config)#client-identifier XXX	        //把R3的標識貼進去
R1(dhcp-config)#host 10.1.1.133 255.255.255.0	//爲R3分配固定的IP地址,此處已經不是network是host
R1(dhcp-config)#default-router 10.1.1.1		//默認網關
R1(dhcp-config)#dns-server 8.8.8.8		//DNS
//這樣R3每次接入網絡,從R1哪裏能獲得固定的IP地址(10.1.1.13)
DHCP Server可以保留不想被分配出去的IP,比如1-100都不想分配出去,希望從101開始分配:

R1(config)#ip dhcp excluded-address 10.1.1.1 10.1.1.100
//這樣左邊網絡中10.1.1.1-10.1.1.100都將被保留,收到DHCPDISCOVER後,會從10.1.1.101開始分配。
從DHCP Server分配出去的IP地址,租期默認都是1天,可以修改:

R3(dhcp-config)#lease 2 //改成2天
DHCP Relay(中繼):

上例中R3(Client)從R1(DHCP Server)處於同一網段,用廣播沒問題。但現實中Client和DHCP Server幾乎肯定處於不同網段中。假設上圖中R1和R2間是處於12.1.1.0/24網段,但R2和R6處於30.1.1.0/24網段,這樣R6就無法直接從R1(DHCP Server)獲取到IP地址,因爲R6發出的廣播R1收不到。這就需要DHCP Relay,即將廣播轉爲單播:

先配置R2:

R2(config)#inter f0/0
R2(config-if)#ip addr 30.1.1.1 255.255.255.0
R2(config-if)#ip helper-address 12.1.1.1    //配helper地址,收到30.1.1.0的廣播,將轉發給12.1.1.1(即R1的f2/0口)
R2(config-if)#no shutdown
R2(config-if)#inter f1/0
R2(config-if)#ip addr 12.1.1.2 255.255.255.0
R2(config-if)#no shutdown
再配置

R1(config)#ip dhcp pool pool-2			        //新建一個dhcp池
R1(dhcp-config)#network 30.1.1.0 255.255.255.0	        //池中可分配的地址
R1(dhcp-config)#default-router 30.1.1.1			//默認網關
R1(dhcp-config)#dns-server 8.8.8.8			//DNS
R1(config)#ip router 30.1.1.1 255.255.255.0 12.1.1.2	//還需要配一條R1去往發送helper地址的靜態路由,這樣R6發廣播向R1請求IP後,R1才能響應回去
這樣R6就能經由R2將廣播轉爲單播,想R1(DHCP Server)請求IP地址了
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章