DHCPhtml
DHCP(Dynamic Host Configuration Protocol,動態主機配置協議)是一個局域網的網絡協議,使用UDP協議工做, 主要有兩個用途:給內部網絡或網絡服務供應商自動分配IP地址,給用戶或者內部網絡管理員做爲對全部計算機做中央管理的手段,在RFC 2131中有詳細的描述。DHCP有3個端口,其中UDP67和UDP68爲正常的DHCP服務端口,分別做爲DHCP Server和DHCP Client的服務端口;546號端口用於DHCPv6 Client,而不用於DHCPv4,是爲DHCP failover服務,這是須要特別開啓的服務,DHCP failover是用來作「雙機熱備」的。api
DHCP功能概述服務器
DHCP(Dynamic Host Configuration Protocol,動態主機配置協議)爲互聯網上主機提供地址和配置參數。DHCP是基於Client/Server工做模式,DHCP服務器爲須要爲主機分配IP地址和提供主機配置參數。DHCP具備如下功能:網絡
1.保證任何IP地址在同一時刻只能由一臺DHCP客戶機所使用。ide
2.DHCP應當能夠給用戶分配永久固定的IP地址。編碼
3.DHCP應當能夠同用其餘方法得到IP地址的主機共存(如手工配置IP地址的主機)spa
4.DHCP服務器應當向現有的BOOTP客戶端提供服務。代理
DHCP有三種機制分配IP地址:router
1) 自動分配(Automatic Allocation),DHCP給客戶端分配永久性的IP地址;server
2) 動態分配(Dynamic Allocation), DHCP給客戶端分配過一段時間會過時的IP地址(或者客戶端能夠主動釋放該地址);
3) 手工配置(Manual Allocation),由網絡管理員給客戶端指定IP地址。管理員能夠經過DHCP將指定的IP地址發給客戶端。
三種地址分配方式中,只有動態分配能夠重複使用客戶端再也不須要的地址。
DHCP消息的格式是基於BOOTP(Bootstrap Protocol)消息格式的,這就要求設備具備BOOTP中繼代理的功能,並可以與BOOTP客戶端和DHCP服務器實現交互。BOOTP中繼代理的功能,使得沒有必要在每一個物理網絡都部署一個DHCP服務器。RFC 951和RFC 1542對BOOTP協議進行了詳細描述。
DHCP封包格式
DHCP的封包格式如http://baike.baidu.com/picture/7992/7992/0/fcbbb1511e6f3bef8d543037?fr=lemma&ct=single#aid=0&pic=fcbbb1511e6f3bef8d543037所示,各字段定義以下:
FIELD OCTETS DESCRIPTION
----- ------ -----------
OP:
如果 client 送給 server 的封包,設爲 1 ,反向爲 2。HTYPE
硬件類別,Ethernet 爲 1。
HLEN:
硬件地址長度, Ethernet 爲 6。
HOPS:
若封包需通過 router 傳送,每站加 1 ,若在同一網內,爲 0。
TRANSACTION ID:
DHCP REQUEST 時產生的數值,以做 DHCPREPLY 時的依據。
SECONDS:
Client 端啓動時間(秒)。
FLAGS:
從 0 到 15 共 16 bits ,最左一 bit 爲 1 時表示 server 將以廣播方式傳送封包給 client ,其他還沒有使用。
ciaddr:
要是 client 端想繼續使用以前取得之 IP 地址,則列於這裏。
yiaddr:
從 server 送回 client 之 DHCP OFFER 與 DHCPACK封包中,此欄填寫分配給 client 的 IP 地址。
siaddr:
若 client 須要透過網絡開機,從 server 送出之 DHCP OFFER、DHCPACK、DHCPNACK封包中,此欄填寫開機程序代碼所在 server 之地址。
giaddr:
若需跨網域進行 DHCP 發放,此欄爲 relay agent 的地址,不然爲 0。
chaddr:
Client 之硬件地址。
sname:
Server 之名稱字符串,以 0x00 結尾。
file:
若 client 須要透過網絡開機,此欄將指出開機程序名稱,稍後以 TFTP 傳送。
options:
容許廠商定議選項(Vendor-Specific Area),以提供更多的設定信息(如:Netmask、Gateway、DNS、等等)。其長度可變,同時可攜帶多個選項,每一選項之第一個 byte 爲信息代碼,其後一個 byte 爲該項數據長度,最後爲項目內容。CODE LEN VALUE 此字段徹底兼容 BOOTP ,同時擴充了更多選項。其中,DHCP封包可利用編碼爲 0x53 之選項來設定封包類別:
項值類別:
1 DHCP DISCOVER
2 DHCP OFFER
3 DHCP REQUEST
4 DHCPDECLINE
5 DHCPACK
6 DHCPNACK
7 DHCPRELEASE
DHCP 的選項很是多,有空請查閱 RFC 或相關文獻,並好好理解,這裏再也不敘述了。
DHCP客戶端可讓設備自動地從DHCP服務器得到IP地址以及其餘配置參數。DHCP客戶端能夠帶來以下好處:
下降了配置和部署設備時間。
下降了發生配置錯誤的可能性。
能夠集中化管理設備的IP地址分配。
DHCP服務器指的是由服務器控制一段IP地址範圍,客戶端登陸服務器時就能夠自動得到服務器分配的IP地址和子網掩碼。
DHCPRelay(DHCPR)DHCP中繼 也叫作DHCP中繼代理。DHCP中繼代理,就是在DHCP服務器和客戶端
之間轉發DHCP數據包。當DHCP客戶端與服務器不在同一個子網上,就必須有DHCP中繼代理來轉發DHCP請求和應答消息。DHCP中繼代理的數據轉發,與一般路由轉發是不一樣的,一般的路由轉發相對來講是透明傳輸的,設備通常不會修改IP包內容。而DHCP中繼代理接收到DHCP消息後,從新生成一個DHCP消息,而後轉發出去。
在DHCP客戶端看來,DHCP中繼代理就像DHCP服務器;在DHCP服務器看來,DHCP中繼代理就像DHCP客戶端。
DHCP工做的基本流程
DHCP請求IP地址的過程以下:
1) 主機發送DHCPDISCOVER廣播包在網絡上尋找DHCP服務器;
2) DHCP服務器向主機發送DHCPOFFER廣播數據包,包含IP地址、MAC地址、域名信息以及地址租期;
3) 主機發送DHCPREQUEST廣播包,正式向服務器請求分配已提供的IP地址;
4) DHCP服務器向主機發送DHCPACK單播包,確認主機的請求
須要說明的是:DHCP客戶端能夠接收到多個DHCP服務器的DHCPOFFER數據包,而後可能接受任何一個DHCPOFFER數據包,但客戶端一般只接受收到的第一個DHCPOFFER數據包。另外,DHCP服務器DHCPOFFER中指定的地址不必定爲最終分配的地址,一般狀況下,DHCP服務器會保留該地址直到客戶端發出正式請求。
正式請求DHCP服務器分配地址DHCPREQUEST採用廣播包,是爲了讓其它全部發送DHCPOFFER數據包的DHCP服務器也可以接收到該數據包,而後釋放已經OFFER(預分配)給客戶端的IP地址。
若是發送給DHCP客戶端的地址已經被其餘DHCP客戶端使用,客戶端會向服務器發送DHCPDECLINE信息包拒絕接受已經分配的地址信息。
在協商過程當中,若是DHCP客戶端發送的REQUEST消息中的地址信息不正確,如客戶端已經遷移到新的子網或者租約已通過期,DHCP服務器會發送DHCPNAK消息給DHCP客戶 端,讓客戶端從新發起地址請求過程。