定义
DHCP(Dynamic Host Configuration Protocol,动态主机配置协议)是一个应用层
网络协议,使用UDP协议
工作, 通常被应用在大型的局域网络环境
中,主要作用是集中的管理、分配IP地址
(一般是动态地分配私有
IP地址),使网络环境中的主机动态的获得IP地址、Gateway地址、DNS服务器地址等信息,并能够提升地址的使用率
(因为可以动态分配IP)。
功能
DHCP协议采用客户端/服务器
模型,主机地址的动态分配任务由网络主机驱动
(客户机主动发出IP申请)。当DHCP服务器接收到来自网络主机申请地址的信息时,才会向网络主机发送相关的地址配置等信息,以实现网络主机地址信息的动态配置。
DHCP具有以下功能:
- 保证任何IP地址在同一时刻只能由一台DHCP客户机所使用。
- DHCP应当可以给用户分配永久固定的IP地址。
- DHCP应当可以同用其他方法获得IP地址的主机共存(如手工配置IP地址的主机)。
- DHCP服务器应当向现有的BOOTP(自举协议,是DHCP协议的前身)客户端提供服务。
DHCP有三种机制分配IP地址:
- 自动分配方式(Automatic Allocation),DHCP服务器为主机指定一个永久性的IP地址,一旦DHCP客户端第一次成功从DHCP服务器端租用到IP地址后,就可以永久性的使用该地址。
- 动态分配方式(Dynamic Allocation),DHCP服务器给主机指定一个具有时间限制的IP地址,时间到期或主机明确表示放弃该地址时,该地址可以被其他主机使用。
- 手工分配方式(Manual Allocation),客户端的IP地址是由网络管理员指定的,DHCP服务器只是将指定的IP地址告诉客户端主机。
三种地址分配方式中,只有动态分配可以重复使用客户端不再需要的地址
。DHCP消息的格式是基于BOOTP(Bootstrap Protocol)消息格式的,这就要求设备具有BOOTP中继代理的功能,并能够与BOOTP客户端和DHCP服务器实现交互。BOOTP中继代理的功能,使得没有必要在每个物理网络都部署一个DHCP服务器。
产生原因
如果没有DHCP
,TCP/IP协议在初始化过程中,需要用户提供
IP地址、网络掩码、默认网关、DNS服务器,以此来完成各个协议模块的初始化工作,对于广大用户来说,这绝对是一种很糟糕的体验。而有了DHCP
,TCP/IP协议在初始化时,会自动调用DHCP模块
,DHCP通过广播的方式去发现(Discover)DHCP服务器,如果本广播域没有服务器,通常会在网关上配置一个DHCP Relay + DHCP 服务器IP,一句话,肯定可以找到一个可以分配IP(Offer)的服务器。通过四次消息交互
,最后电脑获得了所有上网的的IP参数
:IP地址、网络掩码、默认网关、DNS服务器,TCP/IP所有模块完成初始化,比如IP模块、DNS模块。用户无需任何配置即可上网
,这是TCP/IP对用户友好的一面。
通信过程
UDP的整个数据包:
(1)最前面的"以太网标头",设置发出方(本机)的 MAC 地址和接收方(DHCP 服务器)的 MAC 地址。前者就是本机网卡的 MAC 地址,后者这时不知道,就填入一个广播地址:FF-FF-FF-FF-FF-FF。
(2)后面的"IP 标头",设置发出方的 IP 地址和接收方的 IP 地址。这时,对于这两者,本机都不知道。于是,发出方的 IP 地址就设为0.0.0.0,接收方的 IP 地址设为 255.255.255.255。
(3)最后的"UDP 标头",设置发出方的端口和接收方的端口。这一部分是 DHCP 协议规定好的,发出方是 68 端口,接收方是 67 端口。
DHCP的通信过程
- Discovery
数据包构造完成后,就可以发出了。以太网是广播发送,同一个子网络的每台计算机都收到了这个包。因为接收方的 MAC 地址是 FF-FF-FF-FF-FF-FF,看不出是发给谁的,所以每台收到这个包的计算机,还必须分析这个包的 IP 地址,才能确定是不是发过自己的。 - Offer
当看到发出方 IP 地址是0.0.0.0,接收方是 255.255.255.255,于是 DHCP 服务器知道"这个包是发过我的",而其他计算机就可以丢弃这个包。接下来,DHCP 服务器读出这个包的数据内容,分配好 IP 地址,发送回去一个"DHCP 响应"数据包。这个响应包的结构也是类似的,以太网标头的 MAC 地址是双方的网卡地址,IP 标头的 IP 地址是 DHCP 服务器的 IP 地址(发出方)和 255.255.255.255(接收方)
,UDP 标头的端口是 67(发出方)和 68(接收方),分配给请求端的 IP 地址和本网络的具体参数则包含在 Data 部分。 - Request
新加入的计算机收到这个响应包,于是就知道了自己的 IP 地址、子网掩码、网关地址、DNS 服务器等等参数。然后回应服务器 - ACK
服务器确认刚刚分配的这个IP还有效(因为IP分配使动态的,所以需要确认有效性,以有效利用IP资源
)
常见问题
为什么是四次握手
第一次:首先client一开始是什么都不知道,所以肯定得一个广播去问
第二次:收到广播的server就给client发offer
第三次:server不知道client要不要啊,不要还得给别人呢,所以client必须要确认offer
第四次:但是这个offer有可能在client确认之前就已经失效了,所以server要告诉client这个offer是否依然有效
,如果offer有效那么client就可以用这个ip了
和NAT的联系和区别
区别
- DHCP:通过动态
分配
地址提高IP地址利用率。此外,其主要功能还有简化主机上网配置的功能。 - NAT:通过私有IP向公网IP
转换
提高IP地址利用率。此外,其还可以有保障安全的功能。NAT的安全功能:一些因为历史关系获得一个或者多个整个A网段的公司,比如IBM或者HP,内网的机器会被直接分派一个A网的IP地址,这种情况下,NAT有时候还是会被用到,因为安全因素考虑,即便是公网IP,也会在访问外网时被转到某个特定IP段。
联系
由于一般企业网、家庭网络,DHCP服务器分配给电脑的都是私有IP
,诸如 10/8、172.16/12、192.168/16,这些私有IP在企业网内部还可以混混,但不能到Internet上去浪。所以必须在企业网与Internet的边界网关,做私有IP与公网IP的转换(NAT)
,即由于公网IP可能只有一个或几个,需要使用NAT网关的端口号来识别一个个用户session。也就是说,DHCP和NAT需要搭配使用。
DHCP是如何确定适合客户端网段的IP地址的
客户端此时还没有IP地址的时候,肯定是通过MAC地址与DHCP通讯的
。在一个复杂的网络环境中会有多个网段,DHCP是如何确定适合客户端网段的IP地址的呢?
跨广播域的dhcp,会有一个dhcp中继
。dhcp中继在收到dhcp请求广播后,将广播改为单播,单播封装的源ip就是其收到这个广播的接口地址。dhcp服务器根据这个接口地址选择dhcp池
。
参考文献
https://baike.baidu.com/item/DHCP DHCP的定义
https://www.zhihu.com/question/66893227 DHCP和NAT的区别,产生原因
https://www.zhihu.com/question/23337642 DHCP通信过程
https://www.zhihu.com/question/263584277 DHCP是如何确定适合客户端网段的IP地址的