动态主机设置协议(Dynamic Host Configuration Protocol,DHCP)是一个局域网的网络协议,是一个应用层协议,并使用UDP协议工作
,主要有两个用途:给内部网络或网络服务供应商自动分配IP信息(IP地址、网关地址、DNS服务器…..),帮助网络管理员管理所有计算机作,以减少工作量。
如果逐一为每一台主机分配IP地址是非常繁琐的事情,特别是使用笔记本,平板电脑等设备,每次移动到新地方都要重新设置新的IP地址。于是为了实现自动设置IP地址,同一管理IP地址的分配,DHCP协议就起到了至关重要的作用。
也就是说,只要你上网,就一定会用到HDCP协议的,因此,我们还是有必要学习一下HDCP协议。
DHCP协议通常使用CS模式,Server端使用UDP的67端口、Client端使用68端口进行通信。
首先我们要搞明白以下几个问题:
1. DHCP协议是用来帮助客户端设置IP地址信息的,但是现在客户端没有IP地址,那么如果客户端要使用DHCP协议获取IP地址的话,客户端需要发送DHCP数据包获取IP地址的,那么问题来了,因为前面我们说过,客户端发送的数据包必须封装源客户端的IP地址,所以当客户端没有IP地址的时候是怎么发送的DHCP数据报?
2. 另外,现在客户端没有IP地址,那么客户端想要获取IP地址的话,问题又来了:客户端发送的DHCP数据包该发送给谁?也就是该找谁要IP地址?
3. 还有,如果是在多服务器下,也就是说,现在客户端不知道自己是谁,同时也不知道该找谁要ip地址的情况下,是如何获取到ip地址的?
这四个DHCP数据报分别为:
1.Discover(DHCP发现):客户在物理子网上发送广播来寻找可用的服务器。网络管理员可以配置一个本地路由来转发DHCP包给另一个子网上的DHCP服务器。该客户实现生成一个目的地址为255.255.255.255或者一个子网广播地址的UDP包。
2.Offer(DHCP提供):当DHCP服务器收到一个来自客户的IP租约请求时,它会提供一个IP租约,DHCP为客户保留一个IP地址
3.Request(DHCP请求):当客户PC收到一个IP租约提供时,它必须以广播的形式告诉所有其他的DHCP服务器它已经接受了一个租约提供,当其他DHCP服务器收到了该消息后,它们会收回所有可能已提供给客户的租约。
4.ACK(DHCP确认):当DHCP服务器收到来自客户的REQUEST消息后,这时候TCP/IP配置过程就完成了。
DHCP协议工作原理如图1所示:
1. 因为客户端不知道自己的ip地址,也不知该找谁,所以会以广播的形式发送DHCP发现(Discover)数据包给同一局域网下的所有主机设备,用于请求客户端的IP地址,该数据包中会封装上客户端的mac地址。
2. 服务端同样也会以广播的形式发送DHCP提供(offer)数据包回应客户端,表示分配给客户端的IP地址。
3. 客户端收到服务端的回应后,会发送DHCP请求(request)数据包告诉服务端,表示客户端收到服务端分配的IP地址,客户端接受并使用服务端分配的IP地址,且该IP地址不能被其他主机使用,其他服务器收到该消息后会收回所有可能已经提供给客户端的ip地址,这样节省了ip地址资源。
4. 服务端收到客户端的DHCP请求(request)后,会发送一个DHCP确认(ACK)给客户端,表示服务器开始给客户端配置ip地址的过程,并确认该过程结束。
经过以上4个过程,客户端的IP地址信息分配完毕。
我们举个栗子来具体说明一下DHCP协议的原理过程:
假设,客户端就是张三,服务器就是李四,该局域网就是一个教室,座位是iP地址。
现在张三在这个教室中啥都不知道,不知道自己座位在哪里,也不知道自己该找谁要座位。
因为张三不知道坐在哪里?所以在教室中大喊了一下:“我是张三,我的座位在哪里?”。
教室中中的人都听见了,然后李四又大喊了一声:“张三,你坐在7号座位”。
然后张三又说:“那我坐7号座位了,其他人不要坐这个位置”。表示这个座位已经是张三的了
最后李四回答说:“7号座位归你了”。
从DHCP的原理过程来看,如果客户端向服务器请求分配ip地址的话,实际上2个数据包(一个请求,一个回答)就足以完成IP地质分配了,那么为什么还要使用4个数据包呢?
再假设这么一种情况,比如在一个大型的网络中,,比如:一个校园网中有几千个学生上网,但是只有一台服务器用于认证和分配IP地址,如果这台服务器一下子挂了的话,那么其他学生就不能通过服务器分配到IP地址了,也就不能上网了。
为了解决这种问题,一般服务器会进行主从备份多台服务器。也就是说如果学生A要上网,会发送一个DHCP广播请求服务器分配IP地址,当服务器收到请求后,多个服务器会发送多个IP地址给学生A。
如果DHCP只用2个数据包的话,这时候因为遵从先到先得的原则,学生A拿到其中一个服务器的IP地址后,没有发确认消息给服务器,这时候服务器就不知道这个IP地址有没有被使用,另外,由于学生A已经有了IP地址,那么其他服务器的IP地址发送过来会被丢弃,也就导致这些IP地址浪费了。
如果DHCP使用的是4个数据包,学生A在接受了一个IP地址后,对于其他服务器发送过来的IP地址,学生A会发送一个广播请求拒绝使用这些IP地址,然后其他服务器收到学生A的拒绝消息后,会发送一个ACK回答,客户端确认服务器收到拒绝消息后,然后服务器会把offer消息发出去的ip地址收回来。
数据包的作用
发现包用于广播发现局域网的DHCP服务器;提供包用于预回复客户端,告知其即将给的IP地址;请求包正式对感兴趣的服务器/IP地址发起请求;确认包对客户端进行最终的正式确认(这个时候服务器会将此分配出去的IP地址移开本地地址池)。
为什么需要4个包来获取地址,而不是2个包?
2个包无法解决多个服务器下,ip地址浪费的问题。
DHCP初始请求过程中,客户端本地是没有IP地址的,那么如何对外发送发现和请求包呢?
DHCP在初始化的时候,客户端是没有IP地址的,客户端再发送数据时IP地址是全部以0进行填充,然后再封装mac地址。
DHCP数据包全部采用广播的形式实现的,目标ip地址为255.255.255.255,主要是为了防止ip地址冲突。
DHCP协议中,客户端使用的是67端口,服务端使用的是68端口。
到这里,对于之前提出的几个DHCP的问题相信你已经有了答案了,在下一篇我们将通过实验来深入学习DHCP协议。