一是不少時候IP都是設置成經過dhcp動態獲取的,但一直不太清楚dhcp的具體交互過程;二是加上前幾天有同事問知不知道DHCP具體交互過程;三是這兩天正好在分析協議。因此就順道來看一下。html
若是對wireshark不太熟悉,可參考"wireshark捕獲/顯示過濾器表達式書寫規律說明 "。windows
【客戶端小C(RELEASE):S1老哥,你給個人x.x.x.x這個IP我不用了哦。】服務器
客戶端小C(DISCOVERY):誰給我個IP啊?網絡
服務器S1(OFFER):y.y.y.y,拿去用吧。spa
【服務器S2(OFFER):z.z.z.z,拿去用吧。】操作系統
客戶端小C(REQUEST):y.y.y.y,那我就用這個了哦。3d
服務器S1(ACKNOWLEDGE):用吧,不過x小時後我就自就回收了,若是你要繼續用在剩y小時的時候你要跟我說一聲。code
客戶端小C(INFORM):ok,那我就用了。你我只要注意你剛纔說的就好了對吧。htm
服務器S1(ACKNOWLEDGE):對滴。blog
dhcp使用udp進行通訊,通常來講客戶端經過68端口發出,服務端在67端口監聽。
整個dhcp獲取ip的過程包括如下六步:DISCOVERY、OFFER、REQUEST、ACKNOWLEDGE、INFORM、再次ACKNOWLEDGE。具體實現時可能沒有後兩步。
在數據包格式上各請求和響應都大同小異,主要是Option字段多些少些的區別。
以windows操做爲例。
第一步,打開控制面板--網絡和 Internet--網絡和共享中心-xx鏈接x--屬性--Internet 協議版本4(TCP/IP 4)--屬性,把本身網卡設置成自動得到IP地址。
第二步,打開wireshark對網卡進行抓包。
第三步,使用如下命令釋放已獲取到的IP地址,而後從新申請IP地址。
# 釋放當前已獲取IP地址。執行此命令主機會向以前分配IP的DHCP服務器發送RELEASE請求 ipconfig /release # 獲取IP地址。執行此命令會完成dhcp申請過程 ipconfig /renew
第四步,在wireshark過濾器中輸入bootp便可過濾出dhcp過程。以下圖所示可見整個過程與上兩小節描述的一致
不一樣操做系統對dhcp客戶端的實現可能有些差異,好比下邊是海思一塊板子的dhcp過程。請求會發三遍,而後沒有INFORM。
參考:
https://wenku.baidu.com/view/8fdeb5ddcf84b9d529ea7a59.html
https://en.wikipedia.org/wiki/Dynamic_Host_Configuration_Protocol