DHCP协议

words: 584    views:    time: 2min

DHCP(Dynamic Host Configuration Protocol) 动态主机配置协议是一个应用层协议,主要作用是在网络中自动给设备(如电脑、手机、打印机)分配必要的网络参数,这样就不用手动去设置IP地址了

DHCP原理

DHCP原理比较简单,其实就是一个向DHCP服务申请IP的过程

  1. 刚加入网络时,由于本机没有IP,也不知道DHCP服务的IP地址,所以在子网内进行广播,询问谁能分配一个IP地址;
  2. 非DHCP服务的主机会忽略这个广播消息,只有DHCP服务器收到消息后,会从地址池中选出一个空闲IP,通过广播形式进行回复;
  3. 申请的主机在拿到IP后,再次发起广播,表示就要这个IP了;
  4. 最后DHCP服务再回复确认一下,客户端就正式获得这个IP在一段时间内的使用权了,后续只要续租不过期就行了;

从过程可以看出来,DHCP消息只能基于UDP进行发送,因为TCP是面向连接的,而建立连接就需要互相知道对方IP地址,但是客户端的IP还没有设置,而且它也不知道DHCP是谁。如果使用UDP,就只需要将消息发给255.255.255.255,它是一个特殊地址,并不表示一个具体的主机


在收到服务的DHCP确认后,客户端并不是立刻使用这个IP,而是会连续发三条无偿ARP消息,并将自己的IP和MAC填好,这样做的目的:

  • 告诉子网中其它主机,从现在开始,某个IP属于某个MAC地址,让其它主机更新ARP缓存;
  • 确认子网中有没有其它设备使用这个IP,如果有冲突,再重新走一遍DHCP流程;

DHCP抓包

可以强行让主机的网卡走一遍DHCP流程:sudo ipconfig set en0 DHCP,可以看到目标都是广播地址 255.255.255.255.255

另外,设备也并不是每次入网都需要完整经历DHCP的四个步骤,如果之前使用过某个IP,那么在断网后进行重连,只会经历后面两个步骤,就是确认一下自己的IP仍然可用


参考: