DHCP原理最全详解
一. DHCP是什么?动态主机配置协议DHCP(Dynamic Host Configuration Protocol)是一种网络管理协议,用于集中对用户IP地址进行动态管理和配置。DHCP于1993年10月成为标准协议,其前身是BOOTP协议。DHCP协议由RFC 2131定义,采用客户端/服务器通信模式,由客户端(DHCP Client)向服务器(DHCP Server)提出配置申请,DHCP Server为网络上的每个设备动态分配IP地址、子网掩码、默认网关地址,域名服务器(DNS))地址和其他相关配置参数,以便可以与其他IP网络通信。
二. DHCP的工作原理(1)基本原理:
协议报文基于UDP的方式进行交互DHCP采用C/S(Client/Server,客户端/服务器)通信模式,采用67(DHCP服务器)和68(DHCP客户端)两个端口号(2)DHCP客户端首次接入工作原理
阶段
工作内容
第一步:发现阶段-
首次接入网络的DHCP客户端以广播方式发送DHCP DISCOVER报文(目的IP地址为255.255.255.255)给同一网段内的所有设备(包括DHCP服务器或中继)。DHCP DISCOVER报文中携带了客户端的MAC地址(chaddr字段)、需要请求的参数列表选项(Option55)、广播标志位(flags字段)等信息。
第二步:提供阶段
与DHCP客户端位于同一网段的DHCP服务器都会接收到DHCP DISCOVER报文,DHCP服务器选择跟接收DHCP DISCOVER报文接口的IP地址处于同一网段的地址池,并且从中选择一个可用的IP地址,然后通过DHCP OFFER报文发送给DHCP客户端.通常,DHCP服务器的地址池中会指定IP地址的租期,如果DHCP客户端发送的DHCP DISCOVER报文中携带了期望租期,服务器会将客户端请求的期望租期与其指定的租期进行比较,选择其中时间较短的租期分配给客户端。通常为单播,某些情况下可以为广播
与DHCP客户端位于同一网段的DHCP服务器都会接收到DHCP DISCOVER报文,DHCP服务器选择跟接收DHCP DISCOVER报文接口的IP地址处于同一网段的地址池,并且从中选择一个可用的IP地址,然后通过DHCP OFFER报文发送给DHCP客户端.
通常,DHCP服务器的地址池中会指定IP地址的租期,如果DHCP客户端发送的DHCP DISCOVER报文中携带了期望租期,服务器会将客户端请求的期望租期与其指定的租期进行比较,选择其中时间较短的租期分配给客户端。
通常为单播,某些情况下可以为广播
与DHCP客户端位于同一网段的DHCP服务器都会接收到DHCP DISCOVER报文,DHCP服务器选择跟接收DHCP DISCOVER报文接口的IP地址处于同一网段的地址池,并且从中选择一个可用的IP地址,然后通过DHCP OFFER报文发送给DHCP客户端.
通常,DHCP服务器的地址池中会指定IP地址的租期,如果DHCP客户端发送的DHCP DISCOVER报文中携带了期望租期,服务器会将客户端请求的期望租期与其指定的租期进行比较,选择其中时间较短的租期分配给客户端。
通常为单播,某些情况下可以为广播
第三步:这 选择阶段
如果有多个DHCP服务器向DHCP客户端回应DHCP OFFER报文,则DHCP客户端一股只接收第一个收到的DHCP OFFER报文然后以广播方式发送DHCP REQUEST报文,该报文中包含客户端想选择的DHCP服务器标识符(即Option54)和客户端IP地址(即Option50,填充了接收的DHCP OFFER报文中yiaddr字段的IP地址)DHCP客户端广播发送DHCP REQUEST报文通知所有的DHCP服务器,它将选择某个DHCP服务器提供的IP地址,其他DHCP服务器可以重新将曾经分配给客户端的IP地址分配给其他客户端。当DHCP服务器收到DHCP客户端发送的DHCP REQUEST报文后,DHCP服务器回应DHCP ACK报文,表示DHCP REQUEST报文中请求的IP地址(Option50填充的)分配给客户端使用。
如果有多个DHCP服务器向DHCP客户端回应DHCP OFFER报文,则DHCP客户端一股只接收第一个收到的DHCP OFFER报文然后以广播方式发送DHCP REQUEST报文,该报文中包含客户端想选择的DHCP服务器标识符(即Option54)和客户端IP地址(即Option50,填充了接收的DHCP OFFER报文中yiaddr字段的IP地址)
DHCP客户端广播发送DHCP REQUEST报文通知所有的DHCP服务器,它将选择某个DHCP服务器提供的IP地址,其他DHCP服务器可以重新将曾经分配给客户端的IP地址分配给其他客户端。
当DHCP服务器收到DHCP客户端发送的DHCP REQUEST报文后,DHCP服务器回应DHCP ACK报文,表示DHCP REQUEST报文中请求的IP地址(Option50填充的)分配给客户端使用。
如果有多个DHCP服务器向DHCP客户端回应DHCP OFFER报文,则DHCP客户端一股只接收第一个收到的DHCP OFFER报文然后以广播方式发送DHCP REQUEST报文,该报文中包含客户端想选择的DHCP服务器标识符(即Option54)和客户端IP地址(即Option50,填充了接收的DHCP OFFER报文中yiaddr字段的IP地址)
DHCP客户端广播发送DHCP REQUEST报文通知所有的DHCP服务器,它将选择某个DHCP服务器提供的IP地址,其他DHCP服务器可以重新将曾经分配给客户端的IP地址分配给其他客户端。
当DHCP服务器收到DHCP客户端发送的DHCP REQUEST报文后,DHCP服务器回应DHCP ACK报文,表示DHCP REQUEST报文中请求的IP地址(Option50填充的)分配给客户端使用。
第四步:确认阶段
DHCP客户端收到DHCP ACK报文,会广播发送免费ARP报文,探测本网段是否有其他终端使用服务器分配的IP地址,如果在指定时间内没有收到回应,表示客户端可以使用此地址。如果收到了回应,说明有其他终端使用了此地址,客户端会向服务器发送DHCP DECLINE报文,并重新向服务器请求IP地址,同时,服务器会将此地址列为冲突地址。当服务器没有空闲地址可分配时,再选择冲突地址进行分配,尽量减少分配出去的地址冲突。当DHCP服务器收到DHCP客户端发送的DHCPREOUEST报文后,如果DHCP服务器由于某些原因(例如协商出错或者由于发送REQUEST过慢导致服务器已经把此地址分配给其他客户端)无法分配DHCP REQUEST报文中Option50填充的IP地址,则发送DHCP NAK报文作为应答,通知DHCP客户端无法分配此IP地址,DHCP客户端需要重新发送DHCP DISCOVER报文来申请新的IP地址。DHCP客户端收到DHCP ACK报文,会广播发送免费ARP报文,探测本网段是否有其他终端使用服务器分配的IP地址
DHCP客户端收到DHCP ACK报文,会广播发送免费ARP报文,探测本网段是否有其他终端使用服务器分配的IP地址,如果在指定时间内没有收到回应,表示客户端可以使用此地址。如果收到了回应,说明有其他终端使用了此地址,客户端会向服务器发送DHCP DECLINE报文,并重新向服务器请求IP地址,同时,服务器会将此地址列为冲突地址。当服务器没有空闲地址可分配时,再选择冲突地址进行分配,尽量减少分配出去的地址冲突。
当DHCP服务器收到DHCP客户端发送的DHCPREOUEST报文后,如果DHCP服务器由于某些原因(例如协商出错或者由于发送REQUEST过慢导致服务器已经把此地址分配给其他客户端)无法分配DHCP REQUEST报文中Option50填充的IP地址,则发送DHCP NAK报文作为应答,通知DHCP客户端无法分配此IP地址,DHCP客户端需要重新发送DHCP DISCOVER报文来申请新的IP地址。
DHCP客户端收到DHCP ACK报文,会广播发送免费ARP报文,探测本网段是否有其他终端使用服务器分配的IP地址
DHCP客户端收到DHCP ACK报文,会广播发送免费ARP报文,探测本网段是否有其他终端使用服务器分配的IP地址,如果在指定时间内没有收到回应,表示客户端可以使用此地址。如果收到了回应,说明有其他终端使用了此地址,客户端会向服务器发送DHCP DECLINE报文,并重新向服务器请求IP地址,同时,服务器会将此地址列为冲突地址。当服务器没有空闲地址可分配时,再选择冲突地址进行分配,尽量减少分配出去的地址冲突。
当DHCP服务器收到DHCP客户端发送的DHCPREOUEST报文后,如果DHCP服务器由于某些原因(例如协商出错或者由于发送REQUEST过慢导致服务器已经把此地址分配给其他客户端)无法分配DHCP REQUEST报文中Option50填充的IP地址,则发送DHCP NAK报文作为应答,通知DHCP客户端无法分配此IP地址,DHCP客户端需要重新发送DHCP DISCOVER报文来申请新的IP地址。
DHCP客户端收到DHCP ACK报文,会广播发送免费ARP报文,探测本网段是否有其他终端使用服务器分配的IP地址
看图片更为直观一些
DHCP工作图
三.DHCP报文格式报文名称
工作内容
Op(op code):
表示报文的类型,取值为1或2,含义如下: (1).客户端请求报。 (2).服务器响应报文。
Secs(seconds):
由客户端填充,表示从客户端开始获得IP地址或IP地址续后所使用了的秒数,缺省值为3600s
Flags:
客户端请求服务器发送响应报文的形式,只有最高位有意义,其余15位置0。最高位为0时请求发送单播响应,最高位为1时请求发送广播响应
Yiaddr (your client ip address):
表示服务器分配给客户端的IP地址。当服务器进行DHCP响应时,将分配给客户端的IP地址填入此字段
Siaddr(server ip address):
DHCP服务器的IP地址Chaddr(client hardware address):客户端的MAC地址
Options:
DHCP通过此字段包含了服务器分配给终端的配置信息Htype(hardware type):表示硬件地址的类型
Hlen(hardware length):
表示硬件地址的长度
Hops (hops):
表示当前DHCP报文经过的DHCP Relay数目。该字段由客户端设置为0,每经过一个DHCP Relay时,该字段加1。此字段的作用是限制DHCP报文所经过的DHCP Relay数目
Xid:
表示DHCP客户端选取的随机数,使DHCP服务器的回复与DHCP客户端的报文相关联
Sname(server host name):
表示客户端获取配置信息的服务器名字。此字段由DHCP服务器填写,是可选的。如果填写,必须是一个以0结尾的字符串
File(file name):
表示客户端启动DHCP相关配置的文件名。此字段由DHCP服务器填写,随着DHCP地址分配的同时下发至客户端。本字段是可选的,如果填写,必须是一个以0结尾的字符串
DHCP的报文结构图
四.DHCP Options预定义选项字段介绍Options类型
工作内容
DHCP报文中Options字段
为可变长度字段,最多为312Byte,此字段包含了DHCP报文类型,服务器分配给终端的配置信息,如网关IP地址,DNS服务器的IP地址,客户端可以使用!P地址的有效租期等信息
Options字段
由Type、Length和Value三部分组成。其中Type字段取值范围1~255.
Option 82称为中继代理信息选项
Option 82中可以包含最多255个Sub-0ption,若定义了Option82,至少要定义一个Sub-Option。DHCP中继或DHCP Snooping设备接收到DHCP客户端发送给DHCP服务器的请求报文后,在该报文中添加Option82,并转发-给DHCP服务器。管理员可以从Option82中获得DHCP客户端的信息,例如DHCP客户端所连接交换机端口的VLANID、二层端口号、中继设备的MAC地址等
Option 82中可以包含最多255个Sub-0ption,若定义了Option82,至少要定义一个Sub-Option。
DHCP中继或DHCP Snooping设备接收到DHCP客户端发送给DHCP服务器的请求报文后,在该报文中添加Option82,并转发-给DHCP服务器。管理员可以从Option82中获得DHCP客户端的信息,例如DHCP客户端所连接交换机端口的VLANID、二层端口号、中继设备的MAC地址等
Option 82中可以包含最多255个Sub-0ption,若定义了Option82,至少要定义一个Sub-Option。
DHCP中继或DHCP Snooping设备接收到DHCP客户端发送给DHCP服务器的请求报文后,在该报文中添加Option82,并转发-给DHCP服务器。管理员可以从Option82中获得DHCP客户端的信息,例如DHCP客户端所连接交换机端口的VLANID、二层端口号、中继设备的MAC地址等
Option 43称为厂商特定信息选项
DHCP服务器和DHCP客户端通过Option 43交换厂商特定的信息。当DHCP服务器接收到请求Option 43信息的DHCP请求报文(Option 55中带有Option43参数)后,将在回复报文中携带Option 43,为DHCP客户端分配厂商指定的信息。在WLAN组网中,AP作为DHCP客户端,DHCP服务器可以为AP指定AC的IP地址,以方便AP与AC建立连接
DHCP服务器和DHCP客户端通过Option 43交换厂商特定的信息。当DHCP服务器接收到请求Option 43信息的DHCP请求报文(Option 55中带有Option43参数)后,将在回复报文中携带Option 43,为DHCP客户端分配厂商指定的信息。
在WLAN组网中,AP作为DHCP客户端,DHCP服务器可以为AP指定AC的IP地址,以方便AP与AC建立连接
DHCP服务器和DHCP客户端通过Option 43交换厂商特定的信息。当DHCP服务器接收到请求Option 43信息的DHCP请求报文(Option 55中带有Option43参数)后,将在回复报文中携带Option 43,为DHCP客户端分配厂商指定的信息。
在WLAN组网中,AP作为DHCP客户端,DHCP服务器可以为AP指定AC的IP地址,以方便AP与AC建立连接
TLV对应值内容
五.DHCP消息类型DHCP报文通过Options选项中的Type=53来表示DHCP的报文类型。当Type=53,Length=1,Value取值从01到08分别表示不同的DHCP报文类型
消息类型
工作内容
DHCP DISCOVER:
DHCP客户端首次登录网络时进行DHCP交互过程发送的第一个消息,用来寻找DHCP服务器。
DHCP OFFER:DHCP
服务器用来响应DHCP DISCOVER消息,此消息携带了各种配置信息。
DHCP REQUEST:DHCP
客户端广播请求回应DHCP服务器OFFER消息;DHCP客户端重启广播确认之前的IP地址等配置信息;续租。
DHCP DECLINE:
当客户端发现服务器分配给它的IP地址发生冲突时会通过发送此消息来通知服务器
DHCP ACK:DHCP
服务器对客户端的DHCP REQUEST消息的确认响应消息
DHCP NAK:
服务器对客户端的DHCP REQUEST消息的拒绝响应消息。
DHCP RELEASE:
客户端可通过发送此消息主动释放服务器分配给它的IP地址。
DHCP INFORM:DHCP
客户端获取IP地址后,如果需要向DHCP服务器获取更为详细的配置信息(网关地址、DNS服务器地)则向DHCP服务器发送DHCPINFORM请求消息址
六:DHCP地址续租当租期达到50%(T1)时,DHCP客户端会自动以单播的方式向DHCP服务器发送DHCP REQUEST报文,请求更新IP地址租期。如果收到DHCP服务器回应的DHCP ACK报文,则租期更新成功。当租期达到87.5%(T2)时,如果仍未收到DHCP服务器的应答,DHCP客户端会自动以广播的方式向DHCP服务器发送DHCP REQUEST报文,请求更新IP地址租期。如果收到DHCP服务器回应的DHCPACK报文,则租期更新成功。如果租期时间到时都没有收到服务器的回应,客户端停止使用此IP地址,重新发送DHCP DISCOVER报文请求新的IP地址七:DHCP分配IP地址顺序DHCP服务器的数据库中与客户端MAC地址静态绑定的IP地址。客户端以前曾经使用过的IP地址,即客户端发送的请求报文中请求IP地址选项的地址(通过DHCP REQUEST报文,报文中的Option 50(请求的IP地址选项)字段填入曾经使用过的IP地址)。在DHCP地址池中,顺序查找可供分配的空闲IP地址,最先找到的IP地址。如果在DHCP地址池中未找到可供分配的空闲IP地址,则依次查询超过租期、发生冲突的IP地址,如果找到可用的IP地址,则进行分配,否则报告错误八:DHCP中继客户端首次接入工作原理第一和第二阶段第一步:发现阶段
DHCP中继接收到DHCP客户端
广播发送的DHCP DISCOVER报
文后,进行如下处理
:
检查DHCP报文中的hops字段,如果大于16,则丢弃DHCP报文;否则,将hops字段加1(表明经过一次DHCP中继),并继续下面的操作。
检查DHCP报文中的giaddr字段。如果是0,将giaddr字段设置为接收DHCP
DISCOVER报文的接口IP地址。如果不是0,则不修改该字段,继续下面的操作。
将DHCP报文的目的IP地址改为DHCP服务器或下一跳中继的IP地址,源地址改为中继连 接客户端的接口地址,通过路由转发将DHCP报文单播发送到DHCP服务器或下一跳中继。
如果DHCP客户端与DHCP服务器之间存在多个DHCP中继,后面的中继接收到DHCP DISCOVER报文的处理流程同前面所述。
检查DHCP报文中的hops字段,如果大于16,则丢弃DHCP报文;否则,将hops字段加1(表明经过一次DHCP中继),并继续下面的操作。
检查DHCP报文中的giaddr字段。如果是0,将giaddr字段设置为接收DHCP
DISCOVER报文的接口IP地址。如果不是0,则不修改该字段,继续下面的操作。
将DHCP报文的目的IP地址改为DHCP服务器或下一跳中继的IP地址,源地址改为中继连 接客户端的接口地址,通过路由转发将DHCP报文单播发送到DHCP服务器或下一跳中继。
如果DHCP客户端与DHCP服务器之间存在多个DHCP中继,后面的中继接收到DHCP DISCOVER报文的处理流程同前面所述。
检查DHCP报文中的hops字段,如果大于16,则丢弃DHCP报文;否则,将hops字段加1(表明经过一次DHCP中继),并继续下面的操作。
检查DHCP报文中的giaddr字段。如果是0,将giaddr字段设置为接收DHCP
DISCOVER报文的接口IP地址。如果不是0,则不修改该字段,继续下面的操作。
将DHCP报文的目的IP地址改为DHCP服务器或下一跳中继的IP地址,源地址改为中继连 接客户端的接口地址,通过路由转发将DHCP报文单播发送到DHCP服务器或下一跳中继。
如果DHCP客户端与DHCP服务器之间存在多个DHCP中继,后面的中继接收到DHCP DISCOVER报文的处理流程同前面所述。
第二步:提供阶段
DHCP服务器接收到DHCP DISCOVER报文后,选择与报文中giaddr字段为同一网段的地址池,并为客户端分配IP地址等
参数,然后向giaddr字段标识的DHCP中继单播发送DHCP OFFER报文。
DHCP中继收到DHCP OFFER
报文后,会进行如下处理:
DHCP服务器接收到DHCP DISCOVER报文后,选择与报文中giaddr字段为同一网段的地址池,并为客户端分配IP地址等
参数,然后向giaddr字段标识的DHCP中继单播发送DHCP OFFER报文。
DHCP中继收到DHCP OFFER
报文后,会进行如下处理:
检查报文中的giaddr字段,如果不是接口的地址,则丢弃该报文;否则,继续下面的操作
DHCP中继检查报文的广播标志位。如果广播标志位为1,则将DHCP OFFER报文广播发送给
DHCP客户端;否则将DHCP OFFER报文单播发送给DHCP客户端
检查报文中的giaddr字段,如果不是接口的地址,则丢弃该报文;否则,继续下面的操作
DHCP中继检查报文的广播标志位。如果广播标志位为1,则将DHCP OFFER报文广播发送给
DHCP客户端;否则将DHCP OFFER报文单播发送给DHCP客户端
DHCP服务器接收到DHCP DISCOVER报文后,选择与报文中giaddr字段为同一网段的地址池,并为客户端分配IP地址等
参数,然后向giaddr字段标识的DHCP中继单播发送DHCP OFFER报文。
DHCP中继收到DHCP OFFER
报文后,会进行如下处理:
检查报文中的giaddr字段,如果不是接口的地址,则丢弃该报文;否则,继续下面的操作
DHCP中继检查报文的广播标志位。如果广播标志位为1,则将DHCP OFFER报文广播发送给
DHCP客户端;否则将DHCP OFFER报文单播发送给DHCP客户端
第三和第四阶段第三步:选择阶段-
中继接收到来自客户端的DHCP REQUEST报文的处理过程同“第三步:选择阶段
第四步:确认阶段
中继接收到来自服务器的DHCP ACK报文的处理过程同“第四步:确认阶段”
最新发布
-
为什么烤箱要预热,你知道吗?
2025-07-14 03:56:04 -
仙剑奇侠传新的开始暝妖幻境通关攻略介绍
2025-07-26 23:14:06 -
【閒聊】推薦的一些模組 @Garry's Mod 哈啦板
2025-06-12 01:33:31 -
正在阅读:16款无线键鼠套装横评:键鼠套装也有很多玄机16款无线键鼠套装横评:键鼠套装也有很多玄机
2025-06-17 12:28:05 -
神灯小贷怎样,是真的吗
2025-05-06 11:24:43 -
结婚吉祥话祝福语大全精选(57句)
2025-05-23 13:10:35 -
如何在 iPhone(或 iPad)上查找和更改 MAC 地址
2025-07-18 04:54:30 -
探秘雏菊的花开时间(从播种到开花需要多久?)
2025-07-07 22:52:31 -
美食主播有哪些网红人
2025-06-12 16:54:18 -
如何彻底关闭QQ空间账号的详细步骤与注意事项
2025-05-18 03:39:22