DHCP詳細工作過程
DHCP詳細工作過程
DHCP客戶端通過和DHCP伺服器的互動通訊以獲得IP地址租約。為了從DHCP伺服器獲得一個IP地址,在標準情況下DHCP客戶端和DHCP伺服器之間會進行四次通訊。DHCP協議通訊使用埠UDP 67(伺服器端)和UDP 68(客戶端)進行通訊,UDP68埠用於客戶端請求,UDP67用於伺服器響應,並且大部分DHCP協議通訊使用廣播進行。
DHCP客戶端和DHCP伺服器的這四次通訊過程
1、DHCP DISCOVER
當DHCP客戶端計算機處於以下三種情況之一時,觸發DHCPDISCOVER廣播訊息:
當TCP/IP協議作為DHCP客戶端(自動獲取IP地址)進行初始化(DHCP客戶端啟動計算機、啟用網路介面卡或者連線到網路時);
DHCP客戶端請求某個IP地址被DHCP伺服器拒絕,通常發生在已獲得租約的DHCP客戶端連線到不同的網路中;
DHCP客戶端釋放已有租約並請求新的租約。
此時,DHCP客戶端發起DHCPDISCOVER廣播訊息,向所有DHCP伺服器獲取IP地址租約。此時由於DHCP客戶端沒有IP地址,因此在資料包中,使用0.0.0.0作為源IP地址,然後廣播地址255.255.255.255作為目的地址。在此請求資料包中同樣會包含客戶端的MAC地址和計算機名,以便DHCP伺服器進行區分。
如果沒有DHCP伺服器答覆DHCP客戶端的請求,DHCP客戶端在等待1秒後會再次傳送DHCPDISCOVER廣播訊息。除了第一個DHCPDISCOVER廣播訊息外,DHCP客戶端還會發出三個DHCPDISCOVER廣播訊息,等待時延分別為9秒、13秒和16秒加上一個長度為0~1000毫秒之間的隨機時延。如果仍然無法聯絡DHCP伺服器,則認為自動獲取IP地址失敗,預設情況下將隨機使用APIPA(自動專有IP地址,169.254.0.0/16)中定義的未被其他客戶使用的IP地址,子網掩碼為255.255.0.0,但是不會配置預設閘道器和其他TCP/IP選項,因此只能和同子網的使用APIPA地址的客戶端計算機進行通訊。你可以通過登錄檔中的DWORD鍵值IPAutoconfigurationEnabled來禁止客戶端計算機使用APIPA地址進行自動配置,此鍵值位於
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters
當其值設定為0時,則不使用APIPA地址進行自動配置。
在Windows XP和Windows Server 2003中,針對客戶端計算機的TCP/IP選項中有一個備用配置選項,只有當客戶端計算機配置為DHCP客戶端(自動獲取IP地址)時才有此備用配置。你可以通過備用配置來為DHCP客戶端在無法聯絡DHCP伺服器時為DHCP客戶端指定靜態IP地址,如下圖所示:
如果沒有配置APIPA地址和備用IP地址,則DHCP客戶端會每隔5分鐘再發送DHCPDISCOVER廣播訊息,直到從DHCP伺服器獲取IP地址為止。
2、DHCP OFFER
所有接收到DHCP客戶端傳送的DHCPDISCOVER廣播訊息的DHCP伺服器會檢查自己的配置,如果具有有效的DHCP作用域和富餘的IP地址,則DHCP伺服器發起DHCPOFFER廣播訊息來應答發起DHCPDISCOVER廣播的DHCP客戶端,此訊息包含以下內容:
客戶端MAC地址;
DHCP伺服器提供的客戶端IP地址;
DHCP伺服器的IP地址;
DHCP伺服器提供的客戶端子網掩碼;
其他作用域選項,例如DNS伺服器、閘道器、WINS伺服器等;
租約期限等。
因此DHCP客戶端沒有IP地址,所以DHCP伺服器同樣使用廣播進行通訊:源IP地址為DHCP伺服器的IP地址,而目的IP地址為255.255.255.255。同時,DHCP伺服器為此客戶保留它提供的IP地址,從而不會為其他DHCP客戶分配此IP地址。如果有多個DHCP伺服器給予此DHCP客戶端回覆DHCPOFFER訊息,則DHCP客戶端接受它接收到的第一個DHCPOFFER訊息中的IP地址。
3、DHCP REQUEST
當DHCP客戶端接受DHCP伺服器的租約時,它將發起DHCPREQUEST廣播訊息,告訴所有DHCP伺服器自己已經做出選擇,接受了某個DHCP伺服器的租約。
在此DHCPREQUEST廣播訊息中包含了DHCP客戶端的MAC地址、接受的租約中的IP地址、提供此租約的DHCP伺服器地址等,所有其他的DHCP伺服器將收回它們為此DHCP客戶端所保留的IP地址租約,以給其他DHCP客戶端使用。
此時由於沒有得到DHCP伺服器最後確認,DHCP客戶端仍然不能使用租約中提供的IP地址,所以在資料包中仍然使用0.0.0.0作為源IP地址,廣播地址255.255.255.255作為目的地址。
4、DHCP ACK
提供的租約被接受的DHCP伺服器在接收到DHCP客戶端發起的DHCPREQUEST廣播訊息後,會發送DHCPACK廣播訊息進行最後的確認,在這個訊息中同樣包含了租約期限及其他TCP/IP選項資訊。
如果DHCP客戶端的作業系統為Windows 2000及其後版本,當DHCP客戶端接收到DHCPACK廣播訊息後,會向網路發出三個針對此IP地址的ARP解析請求以執行衝突檢測,確認網路上沒有其他主機使用DHCP伺服器提供的IP地址,從而避免IP地址衝突。如果發現該IP已經被其他主機所使用(有其他主機應答此ARP解析請求),則DHCP客戶端則會廣播發送(因為它仍然沒有有效的IP地址)DHCPDECLINE訊息給DHCP伺服器拒絕此IP地址租約,然後重新發起DHCP DISCOVER程序。此時,在DHCP伺服器管理控制檯中,會顯示此IP地址為BAD_ADDRESS。
如果沒有其他主機使用此IP地址,則DHCP客戶端的TCP/IP使用租約中提供的IP地址完成初始化,從而可以和其他網路中的主機進行通訊。至於其他TCP/IP選項,如DNS伺服器和WINS伺服器等,本地手動配置將覆蓋從DHCP伺服器獲得的值。
租約續約
DHCP伺服器將IP地址提供給DHCP客戶端時,會包含租約的有效期,預設租約期限為8天(691200秒)。除了租約期限外,還具有兩個時間值T1和T2,其中T1定義為租約期限的一半,預設情況下是四天(345600秒),而T2定義為租約期限的的7/8,預設情況下為7天(604800秒)。當到達T1定義的時間期限時,DHCP客戶端會向提供租約的原始DHCP伺服器發起DHCP REQUEST請求對租約進行更新,如果DHCP伺服器接受此請求則回覆DHCP ACK訊息,包含更新後的租約期限;如果DHCP伺服器不接受DCHP客戶端的租約更新請求(例如此IP已經從作用域中去除),則向DHCP客戶端位於回覆DHCP NACK訊息,此時DHCP客戶端立即發起DHCP DISCOVER程序以尋求IP地址。如果DHCP客戶端沒有從DHCP伺服器得到任何回覆,則繼續使用此IP地址直到到達T2定義的時間限制。此時,DHCP客戶端再次向提供租約的原始DHCP伺服器發起DHCP REQUEST請求對租約進行更新,如果仍然沒有得到DHCP伺服器的回覆則發起DHCP DISCOVER程序以尋求IP地址。