DHCP,動態主機配置協議,前身是BOOTP協議,是一個局域網的網絡協議, 使用UDP協議工做,經常使用的2個端口:67(DHCP server),68(DHCP client)。DHCP一般被用於局域網環境, 主要做用是集中的管理、分配IP地址,使client動態的得到IP地址、Gateway地址、DNS服務器地址等信息,並可以提高地址的使用率 。 簡單來講,DHCP就是一個不須要帳號密碼登陸的、自動給內網機器分配IP地址等信息的協議。
DHCP報文共有一下幾種: DHCP DISCOVER :客戶端開始DHCP過程發送的包,是DHCP協議的開始 DHCP OFFER :服務器接收到DHCP DISCOVER以後作出的響應, 它包括了給予客戶端的IP(yiaddr)、客戶端的MAC地址、租約過時時間、服務器的識別符以及其餘信息 DHCP REQUEST :客戶端對於服務器發出的DHCP OFFER所作出的響應。在續約租期的 時候一樣會使用。 DHCP ACK :服務器在接收到客戶端發來的DHCP REQUEST以後發出的成功確認的報文 。在創建鏈接的時候,客戶端在接收到這個報文以後纔會確認分配給它的IP和其餘信息能夠被容許使用。 DHCP NAK :DHCP ACK的相反的報文,表示服務器拒絕了客戶端的請求。 DHCP RELEASE :通常出如今客戶端關機、下線等情況。這個報文將會使DHCP服務器釋放發出此報文的客戶端的IP地址 DHCP INFORM :客戶端發出的向服務器請求一些信息的報文 DHCP DECLINE :當客戶端發現服務器分配的IP地址沒法使用(如IP地址衝突時),將發出此報文,通知服務器禁止使用該IP地址。 DHCP請求IP地址的過程以下: 1)主機發送DHCPDISCOVER廣播包在網絡上尋找DHCP服務器; 2)DHCP服務器向主機發送DHCPOFFER單播數據包,包含IP地址、MAC地址、域名信息以及地址租期; 3)主機發送DHCPREQUEST廣播包,正式向服務器請求分配已提供的IP地址; 4)DHCP服務器向主機發送DHCPACK單播包,確認主機的請求 須要說明的是:DHCP客戶端能夠接收到多個DHCP服務器的DHCPOFFER數據包, 而後可能接受任何一個DHCPOFFER數據包,但客戶端一般只接受收到的第一個DHCPOFFER數據包。 另外,DHCP服務器DHCPOFFER中指定[1] 的地址不必定爲最終分配的地址, 一般狀況下,DHCP服務器會保留該地址直到客戶端發出正式請求。 正式請求DHCP服務器分配地址DHCPREQUEST採用廣播包 , 是爲了讓其它全部發送DHCPOFFER數據包的DHCP服務器也可以接收到該數據包, 而後釋放已經OFFER(預分配)給客戶端的IP地址。 若是發送給DHCP客戶端的地址已經被其餘DHCP客戶端使用,客戶端會向服務器發送DHCPDECLINE信息包拒絕接受已經分配的地址信息。 在協商過程當中,若是DHCP客戶端發送的REQUEST消息中的地址信息不正確, 如客戶端已經遷移到新的子網或者租約已通過期, DHCP服務器會發送DHCPNAK消息給DHCP客戶 端, 讓客戶端從新發起地址請求過程。 DHCP 的 工做流程圖:
三、DHCP 協議包的組成 Xid :隨機生成的一段字符串,兩個數據包擁有相同的xid說明他們屬於同一次會話 Ciaddr :客戶端會在發送請求時將本身的ip地址放在此處 Yiaddr :服務器會將想要分配給客戶端的ip地址放在此處 Siaddr :通常來講是服務器的ip地址.可是注意!根據openwrt源碼給出的註釋,當報文的源地址、siaddr、option>server_id字段不一致(有通過跨子網轉發)時,一般認爲option>srever_id字段爲真正的服務器ip,siaddr有多是屢次路由跳轉中的某一個路由器ip Chaddr :客戶端的mac地址 Giaddr :若是須要跨子網進行DHCP地址發放,則在此處填入通過的路由器的ip地址 Sname :服務器主域名 Options :能夠自由添加的部分,用於存放客戶端向服務器請求信息和服務器的應答信息
1、DHCP 原理 一、什麼是DHCP 客戶端 DHCP客戶端通常來講是局域網中獨立的PC主機。 DHCP客戶端發出的DHCP DISCOVER包是DHCP協議的開始。 延續租期、發現、釋放IP地址等大多數DHCP中的行爲都是由DHCP客戶端主動發起。 二、DHCP 自動狀態機 DHCP得到ip地址的4步驟:discover>offer>request>ack(nak) DHCP刷新租期的步驟:request>ack(nak) DHCP釋放ip的步驟:release 以下圖:
1、DHCPD 原理
一、簡述 數據庫
DHCP SERVER指的是服務器端,在路由器上體現的就是給LAN端動態分配IP的功能。 DHCP SERVER負責接收客戶端的DHCP請求,管理LAN端全部的IP網絡設定資料, 相比於BOOTP,DHCP經過「租約」來實現動態分配IP的功能,實現IP的時分複用, 從而解決IP資源短缺的問題。其地址分配方式有三種, 分別是人工配置(由管理員對每臺具體的計算機指定一個地址), 自動配置(服務器爲第一次鏈接網絡的計算機分配一個永久地址), 動態配置(在必定的期限內將地址租給計算機,租期結束後客戶必須續租或者停用該地址), 而對於路由器,常用的地址分配方式是動態配置。 二、兩個租約表 靜態租約表:對應一個靜態租約存儲文件,server運行時從文件中讀取靜態租約表。 動態租約表:對應一個週期存儲文件,server週期性將租約表存進該文件,在程序開始時將會讀取上次存放的租約表。(租約表記錄了當前全部分配的租約,包括靜態連接的)。 三、基本邏輯 原則上DHCP SERVER是一直處在被動接受請求的狀態, 當有客戶端請求時,服務器會讀取得到客戶端當前所在的狀態以及客戶端的信息, 並在靜態租約表和動態租約表中進行檢索找到相應的表項, 再根據客戶端的狀態執行不一樣的回覆。 當收到客戶端的首次請求時,DHCP服務器先查找靜態租約表; 若存在請求的表項,返回這個客戶的靜態IP地址; 不然,從IP地址池中選擇可用的IP分配給客戶,並添加信息到動態數據庫中。 此外,服務器將會週期性的刷新租約表寫入文件存檔, 在這個過程當中會順便對動態租約表進行租期檢查。 執行回覆動做: DHCPOFFER: 靜態租用:首先匹配MAC地址,看是否能在靜態租約表中找到對應的項, 若能找到就把IP分配給他。靜態表中的IP不能被其餘客戶使用。 動態租用: 1.server試圖分配給client上次分配過的IP,在這以前檢查這個IP是否正在使用。 2.discover中含有request ip 時,檢查該IP是否在地址池範圍,是否正在使用,是否到期,是不是靜態IP,網絡上是否已經存在。 3.discover不含request ip,從地址池上尋找一個最小的可用IP分配。 DHCPACK: 根據是否含有request ip和server ip識別客戶端如今init_reboot,selecting,renewing/rebinding中的哪一個狀態, 並根據如下規則執行DHCPACK回覆: 1.若client處於selecting狀態,驗證request ip和server ip是否同服務器中的匹配。 2.若client處於init_reboot狀態,驗證request ip是否符合租約記錄。 3.若client處於renewing/rebinding狀態,驗證client ip address是否符合租約記錄。 DHNAK: 1.請求的IP是靜態IP,可是MAC地址沒法與其對應。 2.上面DHCPACK中驗證失敗。 服務器還可能會收到其餘包: DHCPDECLINE:server會把租約表中相關client硬件地址置空,並保存這個地址一段時間。 DHCPRELEASE:清空租期回收IP。 DHCPINFORM:回覆DHCPACK,數據包含有關於server的信息。