一是不少时候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