溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

網(wǎng)絡(luò)之DHCP原理

發(fā)布時(shí)間:2020-08-11 02:15:46 來(lái)源:ITPUB博客 閱讀:187 作者:小范的學(xué)習(xí)小窩 欄目:建站服務(wù)器

一:DHCP工作原理

1.什么是DHCP協(xié)議

DHCP,動(dòng)態(tài)主機(jī)配置協(xié)議,前身是BOOTP協(xié)議,是一個(gè)局域網(wǎng)的網(wǎng)絡(luò)協(xié)議,使用UDP協(xié)議工作,常用的2個(gè)端口:67(DHCP server),68(DHCP client)。DHCP通常被用于局域網(wǎng)環(huán)境,主要作用是集中的管理、分配IP地址,使client動(dòng)態(tài)的獲得IP地址、Gateway地址、DNS服務(wù)器地址等信息,并能夠提升地址的使用率。簡(jiǎn)單來(lái)說(shuō),DHCP就是一個(gè)不需要賬號(hào)密碼登錄的、自動(dòng)給內(nèi)網(wǎng)機(jī)器分配IP地址等信息的協(xié)議。

2.DHCP協(xié)議中的報(bào)文

DHCP報(bào)文共有一下幾種:

DHCP DISCOVER :  客戶端開始DHCP過(guò)程發(fā)送的包,是DHCP協(xié)議的開始

DHCP OFFER :  服務(wù)器接收到DHCP DISCOVER之后做出的響應(yīng),它包括了給予客戶端的IP(yiaddr)、客戶端的MAC地址、租約過(guò)期時(shí)間、服務(wù)器的識(shí)別符以及其他信息

DHCP REQUEST :  客戶端對(duì)于服務(wù)器發(fā)出的DHCP OFFER所做出的響應(yīng)。在續(xù)約租期的時(shí)候同樣會(huì)使用。

DHCP ACK :  服務(wù)器在接收到客戶端發(fā)來(lái)的DHCP REQUEST之后發(fā)出的成功確認(rèn)的報(bào)文。在建立連接的時(shí)候,客戶端在接收到這個(gè)報(bào)文之后才會(huì)確認(rèn)分配給它的IP和其他信息可以被允許使用。

DHCP NAK :  DHCP ACK的相反的報(bào)文,表示服務(wù)器拒絕了客戶端的請(qǐng)求。

DHCP RELEASE :  一般出現(xiàn)在客戶端關(guān)機(jī)、下線等狀況。這個(gè)報(bào)文將會(huì)使DHCP服務(wù)器釋放發(fā)出此報(bào)文的客戶端的IP地址

DHCP INFORM :  客戶端發(fā)出的向服務(wù)器請(qǐng)求一些信息的報(bào)文

DHCP DECLINE :  當(dāng)客戶端發(fā)現(xiàn)服務(wù)器分配的IP地址無(wú)法使用(如IP地址沖突時(shí)),將發(fā)出此報(bào)文,通知服務(wù)器禁止

使用該IP地址。

DHCP 的 工作流程:

網(wǎng)絡(luò)之DHCP原理

3.DHCP協(xié)議包的組成

Xid :  隨機(jī)生成的一段字符串,兩個(gè)數(shù)據(jù)包擁有相同的xid說(shuō)明他們屬于同一次會(huì)話

Ciaddr :  客戶端會(huì)在發(fā)送請(qǐng)求時(shí)將自己的ip地址放在此處

Yiaddr :  服務(wù)器會(huì)將想要分配給客戶端的ip地址放在此處

Siaddr :  一般來(lái)說(shuō)是服務(wù)器的ip地址.但是注意!根據(jù)openwrt源碼給出的注釋,當(dāng)報(bào)文的源地址、siaddr、option->server_id字段不一致(有經(jīng)過(guò)跨子網(wǎng)轉(zhuǎn)發(fā))時(shí),通常認(rèn)為option->srever_id字段為真正的服務(wù)器ip,siaddr有可能是多次路由跳轉(zhuǎn)中的某一個(gè)路由的ip (下圖中wireshark抓包中也有標(biāo)明siaddr為nextserver ip address)

Chaddr :  客戶端的mac地址

Giaddr :  如果需要跨子網(wǎng)進(jìn)行DHCP地址發(fā)放,則在此處填入經(jīng)過(guò)的路由器的ip地址

Sname :  服務(wù)器主域名

Options :  可以自由添加的部分,用于存放客戶端向服務(wù)器請(qǐng)求信息和服務(wù)器的應(yīng)答信息

網(wǎng)絡(luò)之DHCP原理

二:DHCP客戶端

1.什么是DHCP客戶端

 DHCP客戶端一般來(lái)說(shuō)是局域網(wǎng)中獨(dú)立的PC主機(jī)。

 DHCP客戶端發(fā)出的DHCP DISCOVER包是DHCP協(xié)議的開始。

 延續(xù)租期、發(fā)現(xiàn)、釋放IP地址等大多數(shù)DHCP中的行為都是由DHCP客戶端主動(dòng)發(fā)起。

2.DHCP自動(dòng)狀態(tài)機(jī)

DHCP獲得ip地址的4步驟:discover->offer->request->ack(nak)

DHCP刷新租期的步驟:request->ack(nak)

DHCP釋放ip的步驟:release

wnr2000v5 1.0.0.8的代碼中沒有發(fā)現(xiàn)rebooting、init-reboot狀態(tài)。所以DHCP client的狀態(tài)一般從init開始,完整的狀態(tài)機(jī)如下圖(紅色代表客戶端的狀態(tài)跳轉(zhuǎn)):

網(wǎng)絡(luò)之DHCP原理

三:DHCP服務(wù)端

1.什么是DHCP SERVER

DHCP SERVER指的是服務(wù)器端,在路由器上體現(xiàn)的就是給LAN端動(dòng)態(tài)分配IP的功能。DHCP SERVER負(fù)責(zé)接收客戶端的DHCP請(qǐng)求,管理LAN端所有的IP網(wǎng)絡(luò)設(shè)定資料,相比于BOOTP,DHCP通過(guò)“租約”來(lái)實(shí)現(xiàn)動(dòng)態(tài)分配IP的功能,實(shí)現(xiàn)IP的時(shí)分復(fù)用,從而解決IP資源短缺的問(wèn)題。其地址分配方式有三種,分別是人工配置(由管理員對(duì)每臺(tái)具體的計(jì)算機(jī)指定一個(gè)地址),自動(dòng)配置(服務(wù)器為第一次連接網(wǎng)絡(luò)的計(jì)算機(jī)分配一個(gè)永久地址),動(dòng)態(tài)配置(在一定的期限內(nèi)將地址租給計(jì)算機(jī),租期結(jié)束后客戶必須續(xù)租或者停用該地址),而對(duì)于路由器,經(jīng)常使用的地址分配方式是動(dòng)態(tài)配置。

2.兩個(gè)租約表

靜態(tài)租約表:  對(duì)應(yīng)一個(gè)靜態(tài)租約存儲(chǔ)文件,server運(yùn)行時(shí)從文件中讀取靜態(tài)租約表。

動(dòng)態(tài)租約表:  對(duì)應(yīng)一個(gè)周期存儲(chǔ)文件,server周期性將租約表存進(jìn)該文件,在程序開始時(shí)將會(huì)讀取上次存放的租約表。(租約表記錄了當(dāng)前所有分配的租約,包括靜態(tài)鏈接的)。

3.基本原理

原則上DHCP SERVER是一直處在被動(dòng)接受請(qǐng)求的狀態(tài),當(dāng)有客戶端請(qǐng)求時(shí),服務(wù)器會(huì)讀取獲得客戶端當(dāng)前所在的狀態(tài)以及客戶端的信息,并在靜態(tài)租約表和動(dòng)態(tài)租約表中進(jìn)行檢索找到相應(yīng)的表項(xiàng),再根據(jù)客戶端的狀態(tài)執(zhí)行不同的回復(fù)。當(dāng)收到客戶端的首次請(qǐng)求時(shí),DHCP服務(wù)器先查找靜態(tài)租約表;若存在請(qǐng)求的表項(xiàng),返回這個(gè)客戶的靜態(tài)IP地址;否則,從IP地址池中選擇可用的IP分配給客戶,并添加信息到動(dòng)態(tài)數(shù)據(jù)庫(kù)中。此外,服務(wù)器將會(huì)周期性的刷新租約表寫入文件存檔,在這個(gè)過(guò)程中會(huì)順便對(duì)動(dòng)態(tài)租約表進(jìn)行租期檢查。

執(zhí)行回復(fù)動(dòng)作:

DHCPOFFER:

靜態(tài)租用:  首先匹配MAC地址,看是否能在靜態(tài)租約表中找到對(duì)應(yīng)的項(xiàng),若能找到就把IP分配給他。靜態(tài)表中的IP不能被其他客戶使用。   

動(dòng)態(tài)租用:

a.server試圖分配給client上次分配過(guò)的IP,在這之前檢查這個(gè)IP是否正在使用。

b.discover中含有request ip 時(shí),檢查該IP是否在地址池范圍,是否正在使用,是否到期,是否是靜態(tài)IP,網(wǎng)絡(luò)上是否已經(jīng)存在。

c.discover不含request ip,從地址池上尋找一個(gè)最小的可用IP分配。

DHCPACK:  根據(jù)是否含有request ip和server ip識(shí)別客戶端現(xiàn)在init_reboot,selecting,renewing/rebinding中的哪個(gè)狀態(tài),并根據(jù)以下規(guī)則執(zhí)行DHCPACK回復(fù):

a.若client處于selecting狀態(tài),驗(yàn)證request ip和server ip是否同服務(wù)器中的匹配。

b.若client處于init_reboot狀態(tài),驗(yàn)證request ip是否符合租約記錄。

c.若client處于renewing/rebinding狀態(tài),驗(yàn)證client ip address是否符合租約記錄。

DHNAK  :

a.請(qǐng)求的IP是靜態(tài)IP,但是MAC地址無(wú)法與其對(duì)應(yīng)。

b.上面DHCPACK中驗(yàn)證失敗。  

服務(wù)器還可能會(huì)收到其他包:

DHCPDECLINE:  server會(huì)把租約表中相關(guān)client硬件地址置空,并保存這個(gè)地址一段時(shí)間。

DHCPRELEASE:  清空租期回收IP。

DHCPINFORM:  回復(fù)DHCPACK,數(shù)據(jù)包含有關(guān)于server的信息。

四:解析DHCP的工作方式

1.當(dāng)一臺(tái)機(jī)器新加入一個(gè)網(wǎng)絡(luò)的時(shí)候,它只知道自己的MAC地址,如何獲取IP呢? 這一步我們稱為DHCP Discover. 新機(jī)器使用IP地址0.0.0.0發(fā)送一個(gè)廣播包,目的IP為255.255.255.255. 廣播包封裝了UDP,UDP封裝了BOOTP。 廣播報(bào)的內(nèi)容像這樣:  

網(wǎng)絡(luò)之DHCP原理

2.如果一個(gè)網(wǎng)絡(luò)管理員在網(wǎng)絡(luò)里面配置了DHCP Server的話,他就相當(dāng)于這些IP的管理員,他立刻知道來(lái)了一個(gè)“新人”,會(huì)租給它一個(gè)IP地址,這個(gè)過(guò)程我們稱為DHCP Offer. DHCP Offer的格式如下:

網(wǎng)絡(luò)之DHCP原理

3.如果有多個(gè)DHCP Server,這臺(tái)新機(jī)器會(huì)收到多個(gè)IP地址,它會(huì)選擇其中一個(gè)DHCP Offer,一般是最先到達(dá)的那個(gè),并且會(huì)向網(wǎng)絡(luò)發(fā)送一個(gè)DHCP Request廣播數(shù)據(jù)包,包中包含客戶端的MAC地址,接受的租約中的IP地址,提供此租約的DHCP服務(wù)地址等。

網(wǎng)絡(luò)之DHCP原理

4.DHCP Server接收到客戶機(jī)的DHCP request之后,會(huì)廣播返回給客戶機(jī)一個(gè)DHCPACK 消息包,表明已接收客戶機(jī)的選擇。

網(wǎng)絡(luò)之DHCP原理


向AI問(wèn)一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI