DHCP協議的租約確認和封包格式
對于DHCP協議我們總是有很多內容需要介紹。在之前我們已經對概念、結構和工作流程有了一定的了解了。這里,我們將要在流程中補充一部分知識,另外在對DHCP協議的封包格式進行重點講述。
租約確認
當 DHCP服務器接收到客戶端的 DHCPrequest 之后,會向客戶端發出一個 DHCPACK 響應,以確認IP租約的正式生效,也就結束了一個完整的 DHCP工作過程。
DHCP發放流程***次登錄之后: 一旦 DHCP客戶端成功地從服務器哪里取得 DHCP租約之后,除非其租約已經失效并且IP地址也重新設定回 0.0.0.0 ,否則就無需再發送 DHCPdiscover 信息了,而會直接使用已經租用到的IP地址向之前之 DHCP服務器發出 DHCPrequest 信息,DHCP服務器會盡量讓客戶端使用原來的IP地址,如果沒問題的話,直接響應 DHCPack 來確認則可。如果該地址已經失效或已經被其它機器使用了,服務器則會響應一個 DHCPNACK 封包給客戶端,要求其從新執行 DHCPdiscover。
至于IP的租約期限卻是非常考究的,并非如我們租房子那樣簡單, 以 NT 為例子:DHCP工作站除了在開機的時候發出 DHCPrequest 請求之外,在租約期限一半的時候也會發出 DHCPrequest ,如果此時得不到 DHCP服務器的確認的話,工作站還可以繼續使用該IP;當租約期過了87.5%時,如果客戶機仍然無法與當初的DHCP服務器聯系上,它將與其它DHCP服務器通信。如果網絡上再沒有任何DHCP協議服務器在運行時,該客戶機必須停止使用該IP地址,并從發送一個Dhcpdiscover數據包開始,再一次重復整個過程。要是您想退租,可以隨時送出 DHCPRELEASE 命令解約,就算您的租約在前一秒鐘才獲得的。
跨網絡的 DHCP運作 從前面描述的過程中,我們不難發現:DHCPDISCOVER 是以廣播方式進行的,其情形只能在同一網絡之內進行,因為 router 是不會將廣播傳送出去的。但如果 DHCP服務器安設在其它的網絡上面呢?由于 DHCP客戶端還沒有IP環境設定,所以也不知道 Router 地址,而且有些 Router 也不會將 DHCP廣播封包傳遞出去,因此這情形下 DHCPDISCOVER 是永遠沒辦法抵達 DHCP服務器那端的,當然也不會發生 OFFER 及其它動作了。要解決這個問題,我們可以用 DHCPAgent (或 DHCPProxy )主機來接管客戶的 DHCP請求,然后將此請求傳遞給真正的 DHCP服務器,然后將服務器的回復傳給客戶。這里,Proxy 主機必須自己具有路由能力,且能將雙方的封包互傳對方。
若不使用 Proxy,您也可以在每一個網絡之中安裝 DHCP服務器,但這樣的話,一來設備成本會增加,而且,管理上面也比較分散。當然嘍,如果在一個十分大型的網絡中,這樣的均衡式架構還是可取的。端視您的實際情況而定了。
DHCP協議封包格式
以下為各字段的簡要說明:
OP 若是 client 送給 server 的封包,設為 1 ,反向為 2 。
HTYPE 硬件類別,Ethernet 為 1 。
HLEN 硬件地址長度, Ethernet 為 6 。
HOPS 若封包需經過 router 傳送,每站加 1 ,若在同一網內,為 0 。
TRANSACTION ID DHCPREQUEST 時產生的數值,以作 DHCPREPLY 時的依據。
SECONDS Client 端啟動時間(秒)。
FLAGS 從 0 到 15 共 16 bits ,最左一 bit 為 1 時表示 server 將以廣播方式傳送封包給 client ,其余尚未使用。
ciaddr 要是 client 端想繼續使用之前取得之IP地址,則列于這里。
yiaddr 從 server 送回 client 之DHCPOFFER與 DHCPACK 封包中,此欄填寫分配給 client 的IP地址。
siaddr 若 client 需要透過網絡開機,從 server 送出之 DHCPOFFER、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 DHCPDISCOVER 2DHCPOFFER3 DHCPREQUEST 4 DHCPDECLIENT 5 DHCPACK 6 DHCPNACK 7 DHCPRELEASE DHCP協議的選項非常多,有空請查閱 RFC 或相關文獻,并好好理解,這里不再敘述了。