0%

《计算机网络》DHCP协议

简介

DHCP(Dynamic Host Configuration Protcol)协议直译过来就是动态主机配置协议。用来为局域网中的主机自动配置IP

两台电脑通过网线连接起来,肯定是不能直接通信的。根据TCP/IP协议规定,两台主机必须具有自己的ip地址,两者才可以通过端口进行数据传输通信。

日常生活中,我们拿一台电脑,插上网线,过一会儿就可以上网了,那时因为当你插上网线时,你电脑上的DHCP客户端自动根据DHCP协议向局域网广播特定消息,边缘设备(路由器)中的DHCP服务端监听了本机的67端口(DHCP协议使用的默认端口)

会在接收到DHCP协议数据包后会与你的电脑进行交互,经过一番对话后,你的电脑就会收到路由器分配给你的一个ip,到这里你的电脑就具有了ip,就可以上网了。

DHCP协议属于应用层协议,使用的是UDP传输层协议

报文格式

DHCP报文中各字段的含义:

DHCP Options:

工作原理

DHCP协议通信过程分成了几个阶段

discover阶段

机器刚接入局域网时,自己没有ip,也不知道DHCP服务端的ip,所以只能向整个局域网广播消息。

ip src为0.0.0.0,ip dst为广播地址255.255.255.255

mac src为自己的mac地址,mac dst为广播地址FF:FF:FF:FF:FF:FF

port src是68,port dst是67

首先明确一个知识点:

有些网卡可以接收任何 id dst = Any 的IP报文,也就是说即使ip dst不等于自己的IP,甚至网卡还没有ip,只要mac dst是自己的网卡MAC地址,网卡就会接收处理

但有些网卡只能接收处理 id dst = 255.255.255.255 的广播报文或者 id dst = 自身IP地址 的单播报文

基于上面的知识点,DHCP协议的discover阶段可以根据自己网卡的特性指定DHCP服务端应当广播还是单播(位于bootp flags中),而且需要告诉DHCP服务端自己的MAC地址

本例中是指定DHCP服务端单播回复

offer阶段

DHCP服务端在收到局域网中的DHCP discover包后,就会向其分配ip地址

DHCP服务端检查bootp flags,发现自己应该单播

request阶段

DHCP服务端在为局域网中其他主机分配了IP地址之后,需要知道自己分配的IP是否真的被接纳了,这样DHCP服务端才能维护好IP池

因为客户端此时并没有真正接纳IP地址,虽然已经知道了DHCP服务端的IP地址,但是request阶段并不是单单通知IP被接纳,还要通知局域网中其他DHCP服务端分配的IP没有被接纳,所以还是跟discover阶段一样广播,这样所有DHCP服务端都能收到并处理

(局域网中有多个DHCP服务端发送offer包的情况下,客户端只处理第一个接收到的offer包)

ack阶段

在发现自己分配的IP被接纳之后,需要回复IP生效。这样客户端收到这个ack包后,IP就可以正式使用了

DHCP更新租约

DHCP服务端可以设置分配的IP的租约时长,超过时长一半了,客户端就会发送request包更新租约,DHCP服务端会优先使用原来客户端的IP续租回复ack包

客户端重启后也会发送request包更新租约,DHCP服务端会优先使用原来客户端的IP续租回复ack包

如果该IP不能再使用,返回nack数据包,客户端就要重新开始discover阶段了




微信关注我,及时接收最新技术文章