一、DHCP概述
作用:用来为终端分配IP地址,并且对IP地址进行集中化管理的协议。应用层协议; 传输层使用UDP 协议进行数据封装,端口号 67/68 ,其中 68 代表客户端; 67 代表服务端
报文类型
DHCP discover:发现报文,用来发现网络中的DHCP服务器,使用的是广播报文。
DHCP offer:由服务器进行回复,当收到discover报文后,并且服务器本地存在可用IP地址,则回复信息。
DHCP request:正向向服务器请求IP地址,客户端请求获取offer报文中的网络参数。
DHCP ack:服务器同意使用该IP地址,对request报文的确认。
DHCP nak:对request报文的拒绝,服务器拒绝客户端使用该IP地址--------一般看不到
DHCP release:客户端发送给服务端,要求释放IP地址
DHCP inform:当客户端获取到IP地址后,使用该报文获取其他网络参数(现在已经不使用了)
DHCP decline:当客户端检测到IP地址冲突时,发送给服务器,用以告知服务器,IP不可用。
二、DHCP原理及分配方式及分配方式
1.工作原理- 发现阶段
即DHCP客户端寻找DHCP服务器的阶段。客户端以广播方式发送DHCPDISCOVER包,只有DHCP服务器才会响应
- 提供阶段
即DHCP服务器提供IP地址的阶段。DHCP服务器接收到客户端的DHCPDISCOVER报文后,从IP地址池中选择一个尚未分配的IP地址分配给客户端,向该客户端发送包含租借的IP地址和其他配置信息的DHCPOFFER包。
- 选择阶段
即DHCP客户端选择IP地址的阶段。如果有多台DHCP服务器向该客户端发送DHCPOFFER包,客户端从中随机挑选,然后以广播形式向各DHCP服务器回应DHCPREQUEST包,宣告使用它挑中的DHCP服务器提供的地址,并正式请求该DHCP服务器分配地址。其它所有发送DHCPOFFER包的DHCP服务器接收到该数据包后,将释放已经OFFER(预分配)给客户端的IP地址。
如果发送给DHCP客户端的DHCPOFFER包中包含无效的配置参数,客户端会向服务器发送DHCPCLINE包拒绝接受已经分配的配置信息。
- 确认阶段
即DHCP服务器确认所提供IP地址的阶段。当DHCP服务器收到DHCP客户端回答的DHCPREQUEST包后,便向客户端发送包含它所提供的IP地址及其他配置信息的DHCPACK确认包。然后,DHCP客户端将接收并使用IP地址及其他TCP/IP配置参数。
2.分配方式
- 自动分配方式
DHCP服务器为主机指定一个永久性的IP地址,一旦DHCP客户端第一次成功从DHCP服务器租用到IP地址,就可以永久使用该地址。
- 动态分配方式
DHCP服务器给主机指定一个有时间限制的IP地址, 时间到期或主机明确表示放弃该地址时,该地址可以被其他主机使用。
- 手工分配方式
客户端的IP地址是由网络管理员指定的,DHCP服务器只是将指定的IP地址告诉客户端主机。
三种地址分配方式中,只有动态分配方式可以重复使用客户端不再需要的地址。
三、工作过程
首先,PC会广播发送DHCP discover报文,Server在接收到这个广播包以后,先会选择一个未分配 的IP地址,然后(单播或广播)发送一个DHCP offer报文,该报文携带了网络参数给PC。
华为体系中,所有的网络设备均使用单播,linux使用广播,windows两者均可。
若网络中存在多个DHCP服务器,又因为discover报文是广播发送,故所有的DHCP服务器均会回复 offer报文给PC端。此时,PC仅对接收到的第一个offer报文进行回复,其余均丢弃。
PC再一次使用广播发送request报文向server请求offer报文中携带的网络参数。
request报文有两重意义;1、向选择的服务端请求网络参数;2、告诉其余服务器,已经有了 选择。
服务器接收到request报文后,若目的为本地,则发送ACK报文回复;若目的不为本地,则丢弃报 文。
当存在两台PC同时请求地址,结果服务器给出的地址是同一个,这也就会导致后一个发送 request报文的PC无法获取地址。
PC接收到ack报文后,可以使用该IP地址,但是同时PC会发送三次免费ARP来检测网络中是否有其 他主机使用该IP地址。
如果网络中存在该IP地址,则PC向Server发送DHCP decline报文来通知服务器该IP冲突,并 重新发送一个DHCP discover重新申请IP地址。
如果网络中不存在该IP地址,则直接使用该IP内容。
如果PC需要释放IP地址,则发送DHCP release报文给服务端。
IP 地址租期 ---- 当 PC 申请下来 IP 地址后,会存在租期时间。能够合理使用该 IP 地址的时间 租期时间 ---24 小时 当租期时间到达 12 小时,客户端就需要向服务器发起续租申请。 当第一次续租得到回复后,则客户端将租期时间刷新为 24 小时;若没有回复,则等待租期时间仅剩下 3 小 时。 此时发送第二次续租申请,此时使用 discover 报文广播发送申请。