轉自:https://blog.csdn.net/wangdk789/article/details/27052505
當DHCP客戶端獲取到一個IP地址后,並不代表可以永久使用這個地址,而是有一個使用期限,在DHCP中我們稱之為租約期限,默認是自客戶端成功獲取之時算起,往后再推8天。其實除了這個8天的時間外,在有效的租約期限內,其實還包含着兩個時間點,第四天和第七天,也就是租約的一半和租約的7/8。這三個時間點在DHCP 的Offer數據包中就有體現。如下圖:
上圖中標記紅框處即為三個時間點。
我們再來打個比方。如果客戶端在1月1日0時成功獲取到一個IP地址,那么在DHCP管理器上就可以看到這條租約信息,對應的租約截止日期就是1月9日0時。當日期到默認租期的一半時,也就是第四天的時候。客戶端會向DHCP服務器發送一個DHCP Request 的數據包,目的是請求更新自己的租約。如果DHCP服務器正常且響應了此請求,那么就會返回一個DHCP ACK的數據包,這表示續約成功。比如1月5日時,客戶端提出續約申請,當DHCP服務器正常相應后,這台客戶端的IP過期時間將延至1月13日,因為他是在5號提出的申請,判斷是否續期和過期是以DHCP服務器上時間為准。將租期計算用畫圖的形式展現出來,如下圖:
如果第一次沒有續約成功,到了租期的7/8時,還會重復一次申請續約的過程。如果成功,新的租期自然是在申請日期的基礎上加8天,以此類推。DHCP客戶端獲取到一個IP,只要是續約的時候順利,那么它會一直使用這個IP地址,除非這個IP被排除或者被保留等。
如果在1/2租期申請更新,但沒有得到DHCP的響應,怎么辦? 比如這個IP被從作用域中移除,那么DHCP服務器會返回給客戶端一個DHCP NACK的數據包。客戶端收到這個數據包后會發送Discover的包查詢,如果還是沒得到回復,它就會繼續使用原有的IP地址,當到7/8租期時間時就會再次申請租約更新。如果依然沒有得到正確的回應,那只能得到租期截至后重新申請IP地址了。以上是有關租約的內容。
這里再談一下和DHCP相關的兩個常用的命令:ipconfig /release和ipconfig /renew
我相信,這兩個命令大家都曾用過。當由於某些網絡原因導致IP地址沒能及時同步時,我們可以先用ipconfig /release命令將當前的IP地址和其他配置信息釋放掉。此時客戶端會利用單播的方式向DHCP發送DHCP Release數據包,目的是告訴DHCP服務器客戶端要釋放這個IP。如下圖:
上圖是運行這個命令后協議層上的表現,實話講,DHCP協議里用單播通訊的情況可不多見。如果有多網卡,但只想釋放某一張網卡,只需要在命令后面加上網卡的名稱即可,比如ipconfig /release "本地連接1" 。命令運行完后,客戶端的IP地址等信息會被重置為0.0.0.0 。如下圖:
再利用ipconfig /renew 命令向DHCP服務器重新獲取一個IP。多半情況下,都會獲得和原來相同的IP,主要是因為在申請新IP時,發送的DHCP Discover數據包中包含了上一次獲取到的IP,如果這個IP沒有被指派出去,那么依然會重新分配給這台客戶端。再者就要看DHCP客戶端數量了,數量多意味着DHCP請求多。如下圖:
過程和客戶端第一次獲取IP時差不多,只是需要留意數據包中的Request IP 項。
4次交互過程后,客戶端獲取到了IP地址。如下圖: