大家好,又见面了,我是你们的朋友全栈君。
DHCP(Dynamic Host Configuration Protocol,动态主机配置协议),前身是BOOTP协议,是一个局域网的网络协议,使用UDP协议工作,统一使用两个IANA分配的端口:67(服务器端),68(客户端)。DHCP通常被用于局域网环境,主要作用是集中的管理、分配IP地址,使client动态的获得IP地址、Gateway地址、DNS服务器地址等信息,并能够提升地址的使用率。简单来说,DHCP就是一个不需要账号密码登录的、自动给内网机器分配IP地址等信息的协议。
DHCP一共有8中报文,各种类型报文的基本功能如下:
报文类型 | 说明 |
---|---|
Discover(0x01) | DHCP客户端在请求IP地址时并不知道DHCP服务器的位置,因此DHCP客户端会在本地网络内以广播方式发送Discover请求报文,以发现网络中的DHCP服务器。所有收到Discover报文的DHCP服务器都会发送应答报文,DHCP客户端据此可以知道网络中存在的DHCP服务器的位置。 |
Offer(0x02) | DHCP服务器收到Discover报文后,就会在所配置的地址池中查找一个合适的IP地址,加上相应的租约期限和其他配置信息(如网关、DNS服务器等),构造一个Offer报文,发送给DHCP客户端,告知用户本服务器可以为其提供IP地址。但这个报文只是告诉DHCP客户端可以提供IP地址,最终还需要客户端通过ARP来检测该IP地址是否重复。 |
Request(0x03) | DHCP客户端可能会收到很多Offer请求报文,所以必须在这些应答中选择一个。通常是选择第一个Offer应答报文的服务器作为自己的目标服务器,并向该服务器发送一个广播的Request请求报文,通告选择的服务器,希望获得所分配的IP地址。另外,DHCP客户端在成功获取IP地址后,在地址使用租期达到50%时,会向DHCP服务器发送单播Request请求报文请求续延租约,如果没有收到ACK报文,在租期达到87.5%时,会再次发送广播的Request请求报文以请求续延租约。 |
ACK(0x05) | DHCP服务器收到Request请求报文后,根据Request报文中携带的用户MAC来查找有没有相应的租约记录,如果有则发送ACK应答报文,通知用户可以使用分配的IP地址。 |
NAK(0x06) | 如果DHCP服务器收到Request请求报文后,没有发现有相应的租约记录或者由于某些原因无法正常分配IP地址,则向DHCP客户端发送NAK应答报文,通知用户无法分配合适的IP地址。 |
Release(0x07) | 当DHCP客户端不再需要使用分配IP地址时(一般出现在客户端关机、下线等状况)就会主动向DHCP服务器发送RELEASE请求报文,告知服务器用户不再需要分配IP地址,请求DHCP服务器释放对应的IP地址。 |
Decline(0x04) | DHCP客户端收到DHCP服务器ACK应答报文后,通过地址冲突检测发现服务器分配的地址冲突或者由于其他原因导致不能使用,则会向DHCP服务器发送Decline请求报文,通知服务器所分配的IP地址不可用,以期获得新的IP地址。 |
Inform(0x08) | DHCP客户端如果需要从DHCP服务器端获取更为详细的配置信息,则向DHCP服务器发送Inform请求报文;DHCP服务器在收到该报文后,将根据租约进行查找到相应的配置信息后,向DHCP客户端发送ACK应答报文。目前基本上不用了。 |
代码 | 长度(字节) | 说明 |
---|---|---|
1 | 4 | 子网掩码 |
3 | 长度可变,必须是4字节的倍数 | 默认网关(可以是一个路由器IP地址列表) |
6 | 长度可变,必须是4字节的倍数 | DNS服务器(可以是一个DNS服务器IP地址列表) |
15 | 长度可变 | 域名称(主DNS服务器名称) |
42 | 长度可变,必须是4字节的倍数 | NTP服务器(可以是一个NTP服务器IP地址列表) |
44 | 长度可变,必须是4字节的倍数 | WINS服务器(可以是一个WINS服务器IP地址列表) |
51 | 4 | 有效租约期(以秒为单位) |
53 | 1 | 报文类型(1 ~ 8)分别表示:Discover,Offer,Request,Decline,ACK,NAK,Release,Inform |
58 | 4 | 续约时间 |
60 | 长度可变 | Authentication for DHCP Message,用来完成基于标准DHCP协议,以在客户端输入用户名和密码的方式进行地址鉴权主要用在按用户认证收费场合,与之对应的是pppoe认证计费 |
255 | 0 | 标记options结束 |
DHCP SERVER负责接收客户端的DHCP请求,集中管理所有客户机的IP地址设定资料,并负责处理客户端的DHCP请求,相比于BOOTP,DHCP通过“租约”来实现动态分配IP的功能,实现IP的时分复用,从而解决IP资源短缺的问题。
其地址分配方式有如下三种
客户端登陆网络:
客户端重新登录:
客户端离线:
DHCP OFFER
DHCP ACK
DHCP NAK
服务器还可能会收到其他包
发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/142134.html原文链接:https://javaforall.cn